[难]如何实现以下数据表关联和维护...

3tzjq 2008-12-13 09:33:44
这是我目前的表结构:
物料基础数据表(MaterialBase):
MType --物料类型(FK)
MaterialID --物料编码(PK)
SuppilerID --供应商编号(FK)
SuppilerOrder --供应商单号(FK)
VirtualQty --帐面库存量
Unit --计量单位(FK)
WasteRate --报废率
RoHS --环保
...


物料库存管理数据表(MaterialStock):
AutoID --自动编号(PK)
MaterialID --物料编码(FK) 跟MaterialBase.MaterialID 相关联
Depot --存放仓库(FK)
Position --货架位号(FK)
StockQty --库存量
BalanceQty --结存量


就目前的数据表结构只能实现:
一个物料只能对应一个供应商和供应商单号;
一个物料可以存放在多个仓库,但每个仓库只能存放在一个位置.

如何实现:
允许一个物料有:多个供应商,多个供货单号,多个仓库,多个货架位号.如:
Resistor | RES08054K705 | 5.5 | K | 0.5% | 1 --MaterialBase的基础表数据
|-- Supplier001 | SOrder001 | Depot001 | Position001 | 1.5 | .. --MaterialStock的库存表数据
|-- Supplier001 | SOrder002 | Depot001 | Position001 | 0.5 | ..
|-- Supplier002 | SOrder010 | Depot002 | Position010 | 1.5 | ..
|-- Supplier002 | SOrder010 | Depot002 | Position015 | 0.8 | ..
|-- Supplier003 | SOrder100 | Depot001 | Position002 | 1.2 | ..
...
Capacitor | CAP352810310 | 15 | K | 0.25% | 1
|-- Supplier008 | SOrder080 | Depot001 | Position080 | 15 | ..
...


并不允许重复创建:相同的供应商 & 相同的供货单号 & 相同的仓库 & 相同的货架位号 的数据记录.

请问:
数据表该做哪些更改?
UI该怎么设计?
数据完整性该怎么维护(MaterialStock表除了MaterialID,其它字段都是允许空的)?



谢谢!!
...全文
138 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fstao 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 3tzjq 的回复:]
我先按下面结构下调整一下,再把涉及物料库存业务的明细表增加一字段:SuppilerOrder. 需要更改的地方很多.
MType --物料类型(FK)
MaterialID --物料编码(PK)
VirtualQty --帐面库存量
Unit --计量单位(FK)
WasteRate --报废率
RoHS --环保
...

物料库存管理数据表(MaterialStock):
AutoID --自动编号(PK)
MaterialID --物料编码(FK) 跟MaterialBase.MaterialI…
[/Quote]

其实你在(MaterialStock)里增加SuppilerOrder是可以实现你的要求,但是有一个这样的库存表(MaterialStock)不太好,我认为你还是直接取消这个表,用原单据来查询统计,这样就会降低库存的出错率,而且也大大减低开发的压力,当然这样做查询的速度会慢,这就看你如何优化存储过程了。
3tzjq 2008-12-15
  • 打赏
  • 举报
回复
我先按下面结构下调整一下,再把涉及物料库存业务的明细表增加一字段:SuppilerOrder. 需要更改的地方很多.
MType --物料类型(FK)
MaterialID --物料编码(PK)
VirtualQty --帐面库存量
Unit --计量单位(FK)
WasteRate --报废率
RoHS --环保
...

物料库存管理数据表(MaterialStock):
AutoID --自动编号(PK)
MaterialID --物料编码(FK) 跟MaterialBase.MaterialID 相关联
SuppilerID --供应商编号(FK,Not Null)
SuppilerOrder --供应商单号(FK,Null)
Depot --存放仓库(FK,Not Null)
Position --货架位号(FK,Null)
StockQty --库存量
BalanceQty --结存量
等不到来世 2008-12-13
  • 打赏
  • 举报
回复
--方法1:
给MaterialBase表加一个AutoID,并作为自增型主键。
--方法2:(推荐)
将那些非物料本身属性的字段(供应商、供应商单号)从表中剥离出来,
用一个单独的关系表,来建立它们之间的联系。
可建立恰当的视图来简化查询。

--UI应根据你具体的业务要求来设计。无非是用各种数据显示控件去绑定想要的字段。


3tzjq 2008-12-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dawugui 的回复:]
貌似把你的需求能看懂都已经很困难了,只好帮顶了.
[/Quote]

不会吧! 我可描述了大半天啊!
dawugui 2008-12-13
  • 打赏
  • 举报
回复
貌似把你的需求能看懂都已经很困难了,只好帮顶了.
3tzjq 2008-12-13
  • 打赏
  • 举报
回复
我现在想这样更改表结构,大家认为是否可行?
MType --物料类型(FK)
MaterialID --物料编码(PK)
VirtualQty --帐面库存量
Unit --计量单位(FK)
WasteRate --报废率
RoHS --环保
...

物料库存管理数据表(MaterialStock):
AutoID --自动编号(PK)
MaterialID --物料编码(FK) 跟MaterialBase.MaterialID 相关联
SuppilerID --供应商编号(FK,Not Null)
SuppilerOrder --供应商单号(FK,Null)
Depot --存放仓库(FK,Not Null)
Position --货架位号(FK,Null)
StockQty --库存量
BalanceQty --结存量

但我该怎么做数据迁移呢?
最主要的是:库存量该如何正确维护?
难道: Update MaterialStock Set StockQty = ... Where MaterialID = @MID And SuppilerID = @SID And SuppilerOrder = @SOID And Depot = @DID And Position = @DPID
这样的话,库存准确性恐怕有点悬,效益也不高.
claro 2008-12-13
  • 打赏
  • 举报
回复
帮顶
jiangshun 2008-12-13
  • 打赏
  • 举报
回复
关注
3tzjq 2008-12-13
  • 打赏
  • 举报
回复
唉,颜色没设好.挺费眼神的.不好意思!
---------------------------------
MType --物料类型(FK)
MaterialID --物料编码(PK)
SuppilerID --供应商编号(FK)
SuppilerOrder --供应商单号(FK)
VirtualQty --帐面库存量
Unit --计量单位(FK)
WasteRate --报废率
RoHS --环保
...

物料库存管理数据表(MaterialStock):
AutoID --自动编号(PK)
MaterialID --物料编码(FK) 跟MaterialBase.MaterialID 相关联
Depot --存放仓库(FK)
Position --货架位号(FK)
StockQty --库存量
BalanceQty --结存量
...
claro 2008-12-13
  • 打赏
  • 举报
回复
[Quote=]
物料基础数据表(MaterialBase):
MType --物料类型(FK)
MaterialID --物料编码(PK)
SuppilerID --供应商编号(FK)
SuppilerOrder --供应商单号(FK)
VirtualQty --帐面库存量
Unit --计量单位(FK)
WasteRate --报废率
RoHS --环保
...

物料库存管理数据表(MaterialStock):
AutoID --自动编号(PK)
MaterialID --物料编码(FK) 跟MaterialBase.MaterialID 相关联
Depot --存放仓库(FK)
Position --货架位号(FK)
StockQty --库存量
BalanceQty --结存量
...

允许一个物料有:多个供应商,多个供货单号,多个仓库,多个货架位号
[/Quote]
楼主原先的数据库结构就挺不容易理解,业务关系也不明确。
1.一般讲,物料基础数据表会划到基础信息表或者业务单据表,这层关系就不明确。
2.对于物料库存管理数据表则可以理解为库存表,一般多仓是通过另外的机构号(仓号)做外码。即分别通过仓号和库位号表关联,则多仓和多货位容易实现。
3.至于多供应商,又回到1,MaterialBase是基础信息表则做为主码不会重复录入,做为业务单据表就无须做为主码,可以程序录入,单据号一样。
  • 打赏
  • 举报
回复
我觉得楼主把问题想复杂了。如果你要实现的话:
1、一个物料只能对应一个供应商和供应商单号;
(MaterialBase表:
MaterialID --物料编码(PK)
SuppilerID --供应商编号(FK) 使用这两个做为主键
2、(MaterialStock)表:
物料库存管理数据表(MaterialStock):
MaterialID --物料编码(FK) 跟MaterialBase.MaterialID 相关联
Depot --存放仓库(FK)
Position --货架位号(FK)
这三个作为主键

不能解决吗?还是我把问题想简单了。
等不到来世 2008-12-13
  • 打赏
  • 举报
回复
LZ没有理解我的意思。

不是把"供应商"、"供应商单号"这两列作为一个新表,
而是把这两列以及它们与物料之间的关系(用MaterialID作为关联字段即可)作为一个新表。

要查询不同的供应商或单号对应的库存量,则通过相关的几个表进行联表查询就能得到结果。
3tzjq 2008-12-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 szx1999 的回复:]
SQL code--方法1:
给MaterialBase表加一个AutoID,并作为自增型主键。
--方法2:(推荐)
将那些非物料本身属性的字段(供应商、供应商单号)从表中剥离出来,
用一个单独的关系表,来建立它们之间的联系。
可建立恰当的视图来简化查询。

--UI应根据你具体的业务要求来设计。无非是用各种数据显示控件去绑定想要的字段。
[/Quote]

1,肯定不能在MaterialBase表加自动编号型字段的.
2,如果把"供应商"、"供应商单号"剥离出来做为一个新数据表也是不行的.因为不同的供应商或单号有不同的库存量.那样做就体现不出来了.
Resistor | RES08054K705 | 5.5 | K | 0.5% | 1 --MaterialBase的基础表数据
|-- Supplier001 | SOrder001 | Depot001 | Position001 | 1.5 | .. --MaterialStock的库存表数据
|-- Supplier001 | SOrder002 | Depot001 | Position001 | 0.5 | ..
|-- Supplier002 | SOrder010 | Depot002 | Position010 | 1.5 | ..
|-- Supplier002 | SOrder010 | Depot002 | Position015 | 0.8 | ..
|-- Supplier003 | SOrder100 | Depot001 | Position002 | 1.2 | ..
...
Capacitor | CAP352810310 | 15 | K | 0.25% | 1
|-- Supplier008 | SOrder080 | Depot001 | Position080 | 15 | ..

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧