【发布时间】: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 列)。
是否有我没有发现的重大缺陷或可以改进?
【问题讨论】: