SQL多个外键指向同一主键

时间:2013-12-14 15:43:21

标签: mysql sql

以下设计是否会出现问题?基本上,我希望跟踪客户的总付款(例如,50美元),该付款分为两个项目(例如,20美元和30美元)。但我希望能够查看任何项目 - ITEM(ITEM_ID),并了解客户在总计帐单上花费了多少 - 付款(PAYMENT_AMOUNT)。为了简单起见,我包含了最少的列:

CREATE TABLE ITEM (
  ITEM_ID           NUMBER(7,0)         NOT NULL,
  ITEM_SALE_AMT     NUMBER(7,2)         NOT NULL,
  PAYMENT_ID        NUMBER(7,0)         NOT NULL,
  PRIMARY KEY (ITEM_ID),
  FOREIGN KEY (PAYMENT_ID) REFERENCES PAYMENT(PAYMENT_ID)
);

CREATE TABLE PAYMENT (
  PAYMENT_ID        NUMBER(7,0)         NOT NULL,
  PAYMENT_AMOUNT    NUMBER(7,2)         NOT NULL,
  ITEM_1            NUMBER(7,0)         ,
  ITEM_2            NUMBER(7,0)         ,
  PRIMARY KEY (PAYMENT_ID),
  FOREIGN KEY (ITEM_1) REFERENCES ITEM(ITEM_ID),
  FOREIGN KEY (ITEM_2) REFERENCES ITEM(ITEM_ID)
);

首先,每个项目都是唯一的(因此您不能为同一项目支付两笔款项)。 显然,如果客户在一次交易中支付了很多项目,我的PAYMENT表格会有很多列(但这在30年内从未发生过,通常是1年,偶尔会有2或3年)。

是否存在我未看到的重大缺陷或是否可以改进?

1 个答案:

答案 0 :(得分:2)

这是一个简单的一对多关系。您应该从PAYMENT表中取出ITEM_1和ITEM_2列以及相关的外键。这些项目都通过ITEM表中的外键与其付款相关联。这就是你所需要的一切。