2014-09-28 3 views
1

, поэтому я работал над этим заданием, которое я получил в последнее время, и он меня озадачил, как мне нужно ссылаться на определенную таблицу. Итак, скажем, у меня есть таблица работ из музея, и она содержит два основных ключа, в сочетании делает их буквенно-цифровыми.Postgres - Как ссылаться на первичный ключ на неповторимое значение

CREATE TABLE Works (
wrk_charid pdkeyone, 
wrk_numid pdkeytwo, 
wrk_name workname, 
wrk_type worktype, 
wrk_subtype worktype, 
wrk_donate donator, 
wrk_creation workDate, 
wrk_acquistion workdate, 
wrk_insurance insurance, 
wrk_desc description, 
wrk_curloc locationname DEFAULT 'Storage' 
REFERENCES LocationAreas 
    ON UPDATE CASCADE , 
PRIMARY KEY (wrk_charid, wrk_numid), 
UNIQUE (wrk_charid, wrk_numid) 

); 

Так что это мой стол для работ, и у нас есть отдельный стол для материалов. Тем не менее, многие работы имеют более чем одно значение для их материалов, вызывая ошибку, что она не уникальна. До сих пор у меня есть стол для моих материалов следующим образом:

CREATE TABLE Materials (
mt_charid pdkeyone, 
mt_numid pdkeytwo, 
mt_material materialdesc, 
PRIMARY KEY (mt_charid, mt_numid) 

); 

Я не знаю точно, как я могу ссылаться на мои работы мои материалы, не прибегая к уникальности ошибки. Может кто-нибудь, пожалуйста, помогите мне подтолкнуть меня в правильном направлении к тому, что я должен делать?

+1

Параметр 'UNIQUE (wrk_charid, wrk_numid)' могут быть опущены; это подразумевается предложением «ПЕРВИЧНЫЙ КЛЮЧ». –

+0

О, спасибо за совет! Мне дали какой-то нехороший попойный ответ в классе и подумал, что было бы лучше сохранить его, но спасибо! – Phlex

ответ

3

Поскольку отношения много для многих (одна работа может иметь много материалов, один материал может присутствовать во многих произведениях) Вы должны создать новую таблицу, чтобы добавить отношения между ними. (В основном, какая работа имеет какой материал). Нечто подобное:

CREATE TABLE Works_Materials (
    wrk_charid work_pdkeyone, 
    wrk_numid work_pdkeytwo, 
    mt_charid material_pdkeyone, 
    mt_numid material_pdkeytwo, 
    PRIMARY KEY (work_pdkeyone, work_pdkeytwo, material_pdkeyone, material_pdkeytwo) 
    FOREIGN KEY (work_pdkeyone, work_pdkeytwo) REFERENCES Work(pdkeyone, pdkeytwo) 
    FOREIGN KEY (material_pdkeyone, material_pdkeytwo) REFERENCES Material(pdkeyone, pdkeytwo) 
); 
+0

Хорошо ... И добавить в материалы я бы добавил его в эту таблицу вместо того, чтобы просто добавить их в таблицу материалов? Не могли бы вы представить пример того, как я буду вводить эти данные? Я как бы потерял насчет того, как будет добавляться в таблицу, даже если это из файла ... – Phlex

+0

Нет, вы все еще добавляете материалы в таблицу материалов, это всего лишь таблица ссылок, которая связывает материалы с работами. – Doon

+0

О, ладно! Большое вам спасибо за помощь! – Phlex

Смежные вопросы