我不擅长规范化数据库,而且我的情况让我感到困惑。
我们需要一个具有常规功能的存储软件数据库,如:
我脑子里有两个选择:
1。第一个解决方案
我们有4个这样的表:
的商品:
ID: PK; ->unique id for each of wares
Name ; ->this is clear enough ;)
客户:
ID: PK;
Name;
发票:
ID: PK;
ID_Customer: FK;
Date;
invoices_items:
ID_Invoice: FK;
ID_Ware: FK;
Qty: quantity of ware that was bought or sold. for buying number is positive and selling number is negative
2。第二个解决方案
我们有3个这样的表:
商品和客户就像第一个
发票:
ID: its not PK;
ID_Customer: FK;
ID_goods: FK;
Date;
Qty
实际上,第一个和第二个之间的区别在于发票。
所以我的问题很明确:
最后抱歉我的英语不好;)
答案 0 :(得分:1)
你绝对应该选择第一个......同时发票和发票_items。它更加规范化。您可能希望在将来添加的发票日期和其他发票数据(数字,状态,日期或其他此类内容)应位于其自己的表中。
如果您选择第二种解决方案,则会出现复杂的维护问题。如果要更改发票日期,则必须对所有invoices_items行执行此操作。而且你永远不会确定你在所有行上只有一个日期。如果数据可能出错......它会。为避免这种情况,请尝试将所有数据放在正确的逻辑表中。不要在多行上重复它,只是为了节省自己创建一个表。
答案 1 :(得分:0)
您的第一个解决方案更好。在您的第二个解决方案中,您有效地复制了发票中每个项目的日期和客户,这更容易出错(如果日期在具有相同ID
的项目上有所不同怎么办?)和存储效率较低。