Будет ли проблема с моим следующим дизайном? В принципе, я хочу отслеживать общий платеж клиента (например, $ 50), который делится между двумя пунктами (например, $ 20 и $ 30). Но я хочу посмотреть на любой предмет - ITEM (ITEM_ID) и узнать, сколько клиент потратил на свой всего счет - PAYMENT (PAYMENT_AMOUNT). Для простоты я включал минимальные столбцы:SQL Несколько внешних ключей, указывающих на тот же первичный ключ
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).
Есть ли главный недостаток, который я не вижу или это можно улучшить?
Большое спасибо! Просто пытаюсь создать простую программу. Проголосовал бы за вас, если бы мог, но просто присоединился :) – Viet
Вы все равно сможете [принять ответ] (http://meta.stackoverflow.com/help/someone-answers) –
yup просто сделал. пришлось google, чтобы узнать, как это сделать (должен ждать 15 минут после post hehe) – Viet