规范化表格,以便在交付单月发票时付款,余额到期

时间:2016-05-31 20:48:57

标签: mysql sql database-design mysql-workbench normalization

我试图围绕正确的方式来设计用于结算政策的表格,其中客户可以在完成每笔交付时付款,或者他们可以收到每月发票,其中包含全部余额到期。这是我已经拥有的一小部分......

Delivery Request Tables

我不确定该去哪里...我应该为完整和月结单创建一张表并将它们与发票表联系起来......或者我应该将它们与付款表相关联......或者我到处都是......

1 个答案:

答案 0 :(得分:0)

这比你想象的要复杂得多。您还必须考虑部分付款,多付款,帐户付款,退款和其他现实世界的复杂情况。

实现这个实际上反映现实世界丑陋的唯一方法是将个人收费视为一件事(您的交货),简要文件(月度发票/报表)作为另一件事,以及付款/退款作为另一件事的事情。

从那里你需要将这三个独立的事物与关系结合在一起。诱惑是将月度发票直接加入付款,但那将是一个错误。至少,它会使你的生活变得更加复杂。

费用和发票之间的关系相对容易。如果您的客户获得月度发票,那么该月的所有包裹都会指向该发票。这使得从包裹到发票的多对一关系。

更复杂的部分是付款和收费之间的关系。为此,您需要一个新表Payment_Application,这是费用(包)和付款之间的多对多交集。这个交叉点实体也将拥有为每个包裹支付的金额。这很重要,因为您可以在此记录支付金额是太多,太少还是正确金额。

如果您想要更复杂,可以规范化付款信息,以便获得付款标题和详细信息。这使您可以将有关您收到的付款的信息与您选择应用该付款的方式分开保存。

请考虑以下事项:

ERD

这里有一个(可选的)发票标题和发票明细(包)以及付款标题和(可选)付款明细,这些明细可能与发票明细有关,也可能没有。这样的安排将涵盖当你需要追踪交换资金时发生的各种丑陋事情。