gpt4 book ai didi

mysql - 数据库 ERD - 联结表(一对多)

转载 作者:行者123 更新时间:2023-11-30 22:09:11 25 4
gpt4 key购买 nike

目标

为应收帐款创建一个表以输入每个客户的发票/付款数据。数据将用于确定应收账款账龄指标。

方法

  1. 创建一个包含相关信息的customer
  2. 创建一个包含相关信息(包括customerID)的invoice
  3. 创建一个 payments 表,将 customerinvoices 联系在一起

ERD 图

enter image description here

注意事项

  • 一张发票可以有多次付款(例如客户支付部分款项直到发票完成)
  • 每笔付款都与单个客户相关(多个客户不会代表另一个客户付款)

问题

  1. 我的一对一客户 > 付款方式是否正确?客户只会支付他们自己的发票,所以我相信这是一对一的关系。但是,单个客户可以有很多付款(针对不同的发票)。
  2. 如果一位客户在一张发票上进行多次付款,我打算通过“付款日期”(付款表)区分付款。是否有更可靠的方法来区分一位客户在一张发票上进行多次付款?

最佳答案

  1. 看起来不对劲。我们喜欢进行多次付款的客户。一笔付款与一位客户相关。但是客户可以有零笔、一笔或多笔付款。

该外键关系看起来是多余的,因为付款仅与一个发票相关联(FK 关系),而 Invoice 仅与一个 Customer 相关(FK 关系.)

我们真的不需要在Payment 表中存储Cust_ID。如果我们这样做,我们会引起可能的异常。没有什么可以阻止发票与客户 11 相关,并且该发票的付款与不同的客户 222 相关。


  1. 我不会使用 Date_Paid 来区分。我们不想禁止客户在同一日期进行两次(或多次)付款。 (客户想要支付 100 美元,但错误地支付了 10 美元。我们希望允许他们再次支付 90 美元。

在我看来,Payment 是一个实际的实体,而不仅仅是 CustomerInvoice 实体之间的关系。因此,我会添加一个实体标识符。查看现有的命名约定,即 Payment_ID。我会将其设为表的主键。

关于mysql - 数据库 ERD - 联结表(一对多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com