日期:2014-05-18  浏览次数:20408 次

数据库建表合理问题(减少冗余)
我这里有这么四个表
库存表:
ID
产品ID
仓库ID
库存量

进货单表:
ID
单据号
供货商ID
经办人
日期
备注
进货价
产品数量
仓库ID
产品ID
是否审核

库存调拔表:
单据号
经办人
日期
备注
调拔数量
调拔价
调出仓库ID
调入仓库ID
产品ID
是否审核

库存退货表
ID
单据号
供货商ID
经办人
日期
备注
退货数量
退货价
仓库ID
产品ID
是否审核


问题:这样的建表是否很不合理?是不是该把三个表中的单据号,经办人,日期,备注,产品ID,是否审核拿出来当一个表???那怎么关联呢?
哪位高手可不可以把表重新排列的建过?
在线等待。。。。跪求

------解决方案--------------------
沒必要再把三個表中的字段拿出來。這種子已經比較合理。拿出來就更不好處理了,因為如果你一個單號要是有幾個產品。每個產品又有數量、價格等。拿出來只會變得更不合理
------解决方案--------------------
各表用仓库ID,产品ID关联就够了,不用再拿出某些字段来建新表
------解决方案--------------------
把单据表分为表头、表身两部分;另外,最好加一个余额表(年或月),这样有利于最后出报表!
------解决方案--------------------
我觉得现在不是讨论出报表的问题,而是数据冗余的问题。

我粗糙的分析了楼主的表,觉得是符合第二范式的数据库设计,冗余是有的,但是是否要进一步设计,关键看需求,就是性能需求还有空间需求,数据库设计不强求一定要到nf范式的。

有时候需求到第二范式就好了,所以如果是学术问题,给老师们看得,到nf范式,如果是商用,最高到第三范式。
------解决方案--------------------
我觉得数据库设计的原则要求是这样的:以空间换时间(要求响应时间短时),以时间换空间(相应时间长时).所以这个要看相应时间和存储空间的要求,所以要看楼主如何取舍.
------解决方案--------------------
进货表分开有明细
--------------------------
这样好一点,因为一次可能进很多货,即使是同一种商品进的价格也有可能不同
分成主表和明细很有必要


另外不用担心太多的冗余,好的数据库设计本来就需要有冗余,
没有冗余的数据库设计绝对是华而不实的

范式?见鬼去吧!
------解决方案--------------------
如果需要冗余,就考虑看这个冗余有何意义?

进货单表\库存调拔表\库存退货表,这些表应该把表头,表明细分开.

按楼主原来的设计,表头信息是冗余了,这个冗余几乎没有任何意义,还可能导致数据表的新增\删除\更新异常.

我在设计数据库的时候,首先考虑的是遵循范式,在范式的基础上再考虑哪些字段需要冗余而使得程序更具有效率
------解决方案--------------------
我觉得可以啊
不过主表和明细最好还是分开
都用单号或ID关联就可以~