按照你的描述,仓库与仓位的关系必须单独定义表格:create table T (仓库 id,仓位 id,primary key(仓库,仓位))否则,如果在你说的那个表中有两条记录:仓库 仓位 其它
---------------------------
1 3 ....
2 3 ....这时候信息系统就变成灾难了。
---------------------------
1 3 ....
2 3 ....这时候信息系统就变成灾难了。
而另外一种设计把库存表作修改:库存表C(库存id,仓位id,库存amount),去掉了仓库id(从而没有冗余)。那么哪一种设计更好呢?假设现在我要分仓库汇总库存数(amount),如果采用后面一种设计,可能查询如下:
SELECT Sum(goods.amount) , store.storeid FROM (select store.storeid,goods.amount from goods inner join ([store] inner join position on store.storeid=position.storeid) on goods.positionid=position.positionid) GROUP BY store.storeid;而如果采用前面一种设计,那么查询语句可能如下:
SELECT Sum(goods2.amount), goods2.storeid FROM goods2 GROUP BY goods2.storeid;简洁而且更快,那么,大家认为采取哪一种设计比较好?如果是在你们自己的项目里面涉及到了这个问题?谢谢!
假设有 表A 和 表B
1.A 与 B是一对一的 则将A的关键字加入B作为外键或者将B的关键字加入A中作为外键
2.A 与 B是一对多的 则将A的关键字加入B中作为外键
3.A 与 B是多对一的 则将B的关键字加入A中作为外键
4.A 与 B是多对多的 则必须增加一个关系表,关键字是A的主键和B的主键
所以
由于仓库表和仓位表是一对多的关系,所以在仓位表中要加入仓库Id作为外键,而库存表如果只是指仓位的库存则,仓位与库存是一对一 或者 一对多的关系,这时把仓位的Id放入库存的表中是对的,而放入仓库Id到库存中是冗余的。因为仓库Id可以从仓位ID中得到
所以我觉得是这样的:
仓库表A(仓库id,仓库name,仓库addr),仓位表B(仓库id,仓位id,仓位position),
库存表C(库存id,仓位id,库存amount),