数据库ERD - 连接表(一对多)

时间:2016-11-18 16:11:57

标签: mysql database erd

目的

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

APPROACH

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

    enter image description here

    备注

    • 1发票可以有多笔付款(例如,客户在发票完成前进行部分付款)
    • 每笔付款都与单个客户相关(多个客户不会代表其他客户付款)

    问题

    1. 是我的一对一客户>支付适当的连接?客户只会支付自己的发票,所以我认为这是一对一的关系。但是,单个客户可以支付很多款项(针对不同的发票)。
    2. 如果单个客户在一张发票上进行多次付款,我打算通过“date_paid”'来区分付款。 (付款表)。是否有更强大的方法来区分1个客户在1张发票上进行多笔付款?

1 个答案:

答案 0 :(得分:0)

  1. 看起来不对。我们喜欢不止一次付款的客户。付款与一位客户有关。但是,客户可以支付零,一笔或多笔款项。
  2. 外键关系看起来多余,因为付款只与一个发票(FK关系)相关联,而500x2000x5只与一个Invoice(FK关系)相关。

    我们确实不需要在Customer表上存储Cust_ID。如果我们这样做,我们就会产生一种可能的异常现象。没有什么可以阻止发票与客户11相关联,并且该发票上的付款与不同的客户相关,222。

    1. 我不会使用Date_Paid来区分。我们不希望禁止客户在同一天支付两笔(或更多)款项。 (客户希望支付100美元,并错误支付10美元。我们希望允许他们再支付90美元。
    2. 在我看来,Payment是一个真实的实体,而不仅仅是PaymentCustomer实体之间的关系。因此,我会添加一个实体标识符。查看现有的命名约定,即Invoice。我把它作为表格的主键。