2016-05-14 2 views
-1

У меня есть таблица CUSTOMERS и таблица CONTACTS, соотношение между ними очевидно от одного до многих. тоже есть PROJECTS таблица и PROJECT_CUSTOMERS таблица с отношением один ко многим и с отношением один к одному между CUSTOMERS и PROJECT_CUSTOMERS. моя проблема в том, что у меня есть пятая таблица PROJECT_CONTACTS .... Я не могу понять, какие таблицы я должен использовать в этих таблицах, в настоящее время я имею в виду таблицы PROJECT_CUSTOMERS и CONTACTS, это правильно или есть что-то лучше?Невозможно вычислить, как управлять внешними ключами для отношения «отношения между проектами-клиентами-контактами»

+0

«Очевидно, один из многих»? У двух клиентов не может быть один и тот же контакт? То же самое для проектов. (С последствиями для «один к одному»). – philipxy

+0

У двух клиентов не может быть один и тот же контакт –

+1

Не могли бы вы далее объяснить проблему/контекст/ситуацию здесь? Как сказал @philipxy, для нас это не очевидно, что-то из вашей проблемы, мы не знаем здесь реального контекста. Чтобы просто сказать, не могли бы вы объяснить причину существования этих отношений между этими таблицами? С этим я могу вам помочь. – Loa

ответ

0

Ваше название относится к «иностранным ключам», но ваш вопрос, похоже, касается того, какие столбцы должны идти в каких таблицах.

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

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

CUSTOMERS(id, ...) -- ID identifies a customer and ... 
CONTACTS(id, ...) -- ID identifies a contact and ... 
PROJECTS(id, ...) -- ID identifies a project and ... 
PROJECT_CUSTOMERS(pid, cust_id, ...) -- project PID has customer CUST_ID and ... 
PROJECT_CONTACTS(pid, cont_id, cust_id)...) 
    -- project PID has contact CONT_ID and project pid has customer CUST_ID and ... 

Внешний ключ имеет список таблицы & столбцов, ссылающийся на таблицу и столбец списка, который формирует ключ кандидата. В нем говорится, что списки значений в первой таблице отображаются в виде списков значений во второй таблице. Если это так, объявите внешний ключ.

+1

Я немного изменил свой ответ. 1. Я * догадался * вышеприведенные комментарии (которые определяют таблицы и столбцы) о том, что вы хотите сказать о ситуациях. * Ты * должен сказать * нам, что они на самом деле. 2. Что первое, что вы не понимаете? – philipxy

+0

nice, теперь мой вопрос: должен PROJECT_CONTACTS.cust_id ссылаться на PROJECT_CUSTOMERS.cust_id или на CUSTOMERS.id? ..... также должен PROJECT_CONTACTS.pid ссылаться на PROJECT_CUSTOMERS.pid или на PROJECTS.id ...... отметить, что КОНТАКТЫ на самом деле являются КОНТАКТЫ (id, cust_id, .....), где cust_id ссылается на CUSTOMER.id –

+0

«[FK] говорит, что списки значений в первой таблице отображаются в виде списков значений во второй таблице. Если это так, объявите внешний ключ». Таким образом, PROJECT_CONTACTS: Если «Project PID имеет контакт CONT_ID, а у проекта PID есть клиент CUST_ID и ...», будет ли также верно, что 'CUST_ID идентифицирует клиента и ...' для некоторых параметров '...'? Т.е. что, если 'CONT_ID' появляется в одной таблице, оно появляется в другом? И будет ли также верно, что «PID проекта имеет контакт CONT_ID, а у проекта PID есть клиент CUST_ID и ...' для некоторых параметров 'CONT_ID' и' ... '? PS Снова: пожалуйста, дайте * правильные * комментарии. – philipxy

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