【问题标题】:SQL Multiple foreign keys pointing to same primary keySQL 多个外键指向同一个主键
【发布时间】:2013-12-14 23:48:06
【问题描述】:

我的以下设计会有问题吗?基本上,我想跟踪客户的总付款(例如 50 美元),它分为两个项目(例如 20 美元和 30 美元)。但我希望能够查看任何项目 - ITEM(ITEM_ID) 并了解客户在其total 账单上花费了多少 - PAYMENT(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 列)。

是否有我没有发现的重大缺陷或可以改进?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!只是想创建一个简单的程序。如果可以的话,我会投票给你,但刚刚加入:)
    • 你应该仍然可以accept the answer
    • 是的。必须谷歌才能找到方法(必须在发布后等待 15 分钟呵呵)
    猜你喜欢
    • 2017-01-09
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多