Представление нескольких ключей-кандидатов в RM

У меня проблемы с пониманием того, почему следующее сопоставление ER-диаграммы с ERM является правильным, или, если быть более точным, полным. В данном примере у нас есть тернарная связь 1:1:N между проектом, местом и людьми.

Пример ER-диаграммы троичной связи

У каждой сущности есть первичный ключ (ProjectID, PlaceID, PersonID). Если я правильно понимаю эту диаграмму, комбинация человека и проекта не может быть связана более чем с одним местом. Кроме того, сочетание человека и места может быть связано только с одним проектом. Кроме того, проект в определенном месте может иметь несколько человек.

Это понимание того, как читать троичные отношения, приводит к моей проблеме. Я сопоставляю ERM со следующим RM:

Project(ProjectID)
Place(PlaceID)
Person(PersonID)
Works(ProjectID, PersonID, PlaceID)

Теперь у меня есть два ключа-кандидата в таблице Works: (Place, PersonID) и (ProjectID, PersonID). Давайте выберем первый в качестве первичного ключа. Тогда у меня должен быть правильный RM (литература сказала мне), но чего я не понимаю, так это того, как гарантировать, что одна и та же комбинация человека и проекта не будет связана с разными местами? Разве я не должен где-то говорить, что (ProjectID, PersonID) также является ключом-кандидатом или это не часть нотации RM?

ProjectID   PersonID   PlaceID
1           Marvin     New York
1           Tom        Paris
1           Marvin     Tokyo

person Marvin    schedule 12.08.2015    source источник


Ответы (1)


сочетание человека и проекта не может быть связано более чем с одним местом. Кроме того, сочетание человека и места может быть связано только с одним проектом.

Внимательно прочитав это, вы можете уточнить, что каждый человек должен быть связан ровно с одним Проектом и ровно с одним Местом. Поскольку это единственные другие объекты в отношении, вы можете безопасно использовать Person (и, более конкретно, PersonID) в качестве первичного ключа для этого отношения.

Оба (Place, PersonID) и (ProjectID, PersonID) являются допустимыми (не первичными) ключами для отношения. Вы ошибочно предполагаете, что примеры записей, которые вы приводите, верны. При просмотре вашего отношения каждый идентификатор человека и, соответственно, каждая пара (Place, PersonID) или (ProjectID, PersonID) должны появляться в таблице только один раз. Итак, примерная таблица не соответствует правилам данной ER-диаграммы.

person Ghijs Kilani    schedule 12.08.2015
comment
Спасибо за ваш ответ, но я не понимаю, почему каждый человек должен быть связан ровно с одним проектом и одним местом. В моем примере таблицы нельзя ли изменить третью строку на (2, Марвин, Токио), чтобы она соответствовала правилам данной ER-диаграммы? - person Marvin; 13.08.2015
comment
Давайте пройдемся по членам отношения один за другим. Возьмем произвольный проект. Если мы посмотрим на отношение работы, то оно может быть связано только с 1 другим местом и N людьми. Это означает, что если над данным проектом работают 3 человека, этот проект появится в таблице 3 раза, отличаясь только идентификатором PersonID. Ситуация аналогична для места. Однако человек может быть подключен только к 1 проекту и 1 месту. На диаграмме сказано, что проект не может находиться в двух местах одновременно. Таким образом, каждый идентификатор человека может появиться в таблице только один раз, а не дважды, и поэтому он является первичным ключом. - person Ghijs Kilani; 14.08.2015
comment
Вы не можете изменить третью строку на (2, Марвин, Токио), потому что для того, чтобы это было возможно, ваша ER-диаграмма должна иметь все N, а не 1 в Project и Place. - person Ghijs Kilani; 14.08.2015
comment
Мое понимание того, как читать диаграмму, заключалось в том, чтобы всегда брать два члена отношения как кортеж, а затем смотреть, как они могут быть связаны с третьим. Так что я пришел к выводу, что могу совместить один и тот же проект с двумя разными кортежами места-человека. Но то, как вы это объясняете (сначала смотрите на третьего участника и говорите, что это может быть связано только с 1 другим местом и N людьми), звучит совершенно правильно. Еще раз спасибо! - person Marvin; 14.08.2015