SQL: Сущность принадлежит (много к одному) одной из двух разных сущностей

#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. Это распространенный вопрос. Ответы несколько запутанны и обычно указывают на необходимость переосмысления схемы.