#mysql #database-design #database-schema
Вопрос:
Допустим, у меня есть organization
person
и у них есть one-to-many
отношения post
.
post
может принадлежать только организации или пользователю (лицу).
То, что я делаю прямо сейчас, — это делаю внешний ключ недействительным и добавляю a check constraint
, чтобы гарантировать, что только один из organization_id
них имеет значение и person_id
имеет значение, а другой-есть null
.
Считается ли это допустимым SQL
дизайном (лучшая практика)? Что, если бы у меня было более двух лиц, которые могли бы быть владельцем определенного поста?
Комментарии:
1. Вы можете объединить таблицы Организации и сотрудников в одну таблицу. У вас также может быть один внешний ключ в таблице записей и индикатор, позволяющий узнать, какая таблица, Организация или Лицо, является родительской. Индикатором может быть число или код. Вам нужно будет ВЫБРАТЬ строки записи и использовать индикатор, чтобы определить, из какой родительской таблицы ВЫБРАТЬ.
2. Я предлагаю первый вариант, предложенный @GilbertLeBlanc, настроить
post_owner
таблицу, к которой имеет отношение «один ко многимpost
«. Это сделает объединение простым и эффективным. Затем у вас может бытьpost_owner_type
поле, указывающее, является ли владелец организацией или человеком, или чем-то еще, поместите на него индекс для быстрых запросов.3. Это распространенный вопрос. Ответы несколько запутанны и обычно указывают на необходимость переосмысления схемы.