@immelnikoff
Изучаю БД

В чем принципиальная разница между идентифицирующей и неидентифицирующей связью?

В идентифицирующей связи первичный ключ родительской таблицы становится частью первичного ключа в дочерней таблице. Это делается того, чтобы запись в дочерней таблице не могла существовать сама по себе, без ссылки на существующую запись в родительской таблице. Но что мешает нам не делать внешний ключ в дочерней таблице частью первичного ключа, а просто сделать его NOT NULL? Тогда запись в дочерней таблице тоже не сможет существовать без ссылки на существующую запись в родительской таблице.
На ER-диаграмме ниже таблицы Phone_1 и Phone_2 должны быть на мой взгляд полностью равносильны. Или я чего-то не понимаю?
6183b47a9f6f6086571860.png
  • Вопрос задан
  • 515 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Ну, положим, они не полностью равносильны.
В Phone_1 id должен быть уникален для каждой записи. Поэтому если ты захочишь переключить запись в Phone_1 с одного Employee на другого, ты точно всегда сможешь это сделать. Это можно интерпретировать как "записи в Phone_1 существуют сами по себе, несмотря на обязательную связь с Employee".
В Phone_2 id должен быть уникален среди записей с одинаковым Employee_id. Т.е. уникальной должна быть их комбинация. При попытке переключения записи в Phone_2 с одного Employee на другого Employee есть риск коллизии по id. Это можно интерпретировать как "записи в Phone_1 существуют строго в контексте Employee, и их собственные id имеют смысл только в контексте, заданном Employee_id". Т.е. Employee_id становится своего рода "пространством имён".
Ответ написан
@ComodoHacker
Идентифицирующая/неидентифицирующая связь это понятия логической модели.
А в физической модели они могут быть реализованы по-разному. Сейчас составные PK уже почти не применяются.

Так что ничто не мешает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы