Может ли кто-нибудь предоставить некоторые примеры того, когда в базе данных SQL лучше выбирать отношения «один к одному» в одной таблице, и вместо этого имеет смысл иметь их в отдельных таблицах?В базе данных SQL, когда должно быть отношение «один к одному» в одной таблице и в отдельных таблицах?
ответ
Если у вас есть несколько объектов, которые все должны иметь возможность действовать как внешний ключ для другого объекта, а «несколько объектов» имеют как общие свойства, так и уникальные свойства, и вы хотите ограничить NOT NULL уникальными свойствами (или менее важны, не нужно связывать значения NULL для уникальных свойств, не применимых к другому объекту). Даже если у вас не было уникальных/общих свойств и не было необходимости в значениях NULL, вы все равно можете сделать это, если хотите отдельные внешние ограничения для каждой таблицы подтипов, а также таблицу супертипов. Эта стратегия называется супертипом/подтипом моделирования.
Позвольте привести пример.
народы
- ID (PK)
- имя
- возраст
учителей
- идентификатор (PK и FK для people.id)
- years_teaching NOT NULL
- независимо NOT NULL
студентов
- идентификатор (PK и FK для people.id)
- класса NOT NULL
- независимо NOT NULL
Как вы видите, преподаватели и студенты могут иметь одну общую таблицу для некоторых свойств, и каждый может иметь свои собственные NOT NULL уникальные свойства. Кроме того, вы можете ПРИСОЕДИНИТЬ людей, учителей и студентов к другим столам и поддерживать ссылочную целостность.
Другое приложение «может быть», если бы у вас были отдельные базы данных для каждой записи с некоторыми свойствами в одном, а некоторые в другом, однако я никогда этого не делал.
Пока вы не испытываете отвращения ко всем нулевым столбцам из вашей таблицы, являющимся ВНЕШНИМ СОЕДИНЕНИЕМ отдельных таблиц. – philipxy
Реального общего правила нет. Это вопрос личного чувства. Как правило, используемое мной правило (также не точное) - это то, как часто нужны вторичные столбцы. Единицы, которые есть только один раз в то время, должны быть в отдельной таблице. Единицы, которые всегда существуют, должны быть в одной таблице. Где рисовать линию между «раз в то время» и «достаточно часто» - это просто личный вкус, и, как сообщают @philipxy, также зависит от того, насколько вы готовы поддерживать нули. – theblitz