Идентифицирующая связь или неидентификация с NOT NULL? - PullRequest
0 голосов
/ 27 мая 2018

У меня есть простая модель базы данных с двумя сущностями: Пользователь и Сообщение.

Модель:
model

И я не понимаю, какое отношениеэто должно быть.Как я понимаю, если сообщение не может существовать без пользователя, оно должно иметь идентифицирующую связь.Но если я создам неидентифицирующие отношения с NOT NULL FK.Есть ли такое же поведение в этом случае?

1 Ответ

0 голосов
/ 27 мая 2018

Наличие обязательного отношения не совпадает с наличием идентифицирующего отношения .

Идентифицирующее отношение имеет первичный ключ, который включает внешний ключ для родительского элементатип сущности, а также один или несколько других предикатов (столбцов).Исключением является 1: 1, идентифицирующая отношения, и в этом случае внешнего ключа достаточно, чтобы однозначно идентифицировать тип дочернего объекта.

Если ваша таблица message будет иметь свой собственный уникальный идентификатор, независимый от внешнегоключ к user, тогда отношения между ними не являются идентифицирующими отношениями.

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

В вашем случае я бы спросил о том, как вы относитесь к сообщениям.Является ли конкретное сообщение, скажем, 2437-м, отправленным пользователем A , или просто сообщением 835092nd в вашей системе?Вы можете взглянуть на это в любом случае, но что для вас имеет больше смысла, исходя из того, как ваша система будет использовать эти данные?

Я бы также спросил, ваш проект записывает, кто отправляет сообщение, но где он записывает, ктополучает сообщение?Это известно вашей системе или все сообщения публикуются в «общедоступных» (что это значит для вашей системы)?Влияет ли этот факт на ваше представление об идентификаторе message?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...