2017-02-12 13 views
0

Может ли кто-нибудь предоставить некоторые примеры того, когда в базе данных SQL лучше выбирать отношения «один к одному» в одной таблице, и вместо этого имеет смысл иметь их в отдельных таблицах?В базе данных SQL, когда должно быть отношение «один к одному» в одной таблице и в отдельных таблицах?

+0

Пока вы не испытываете отвращения ко всем нулевым столбцам из вашей таблицы, являющимся ВНЕШНИМ СОЕДИНЕНИЕМ отдельных таблиц. – philipxy

+0

Реального общего правила нет. Это вопрос личного чувства. Как правило, используемое мной правило (также не точное) - это то, как часто нужны вторичные столбцы. Единицы, которые есть только один раз в то время, должны быть в отдельной таблице. Единицы, которые всегда существуют, должны быть в одной таблице. Где рисовать линию между «раз в то время» и «достаточно часто» - это просто личный вкус, и, как сообщают @philipxy, также зависит от того, насколько вы готовы поддерживать нули. – theblitz

ответ

1

Если у вас есть несколько объектов, которые все должны иметь возможность действовать как внешний ключ для другого объекта, а «несколько объектов» имеют как общие свойства, так и уникальные свойства, и вы хотите ограничить 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 уникальные свойства. Кроме того, вы можете ПРИСОЕДИНИТЬ людей, учителей и студентов к другим столам и поддерживать ссылочную целостность.

Другое приложение «может быть», если бы у вас были отдельные базы данных для каждой записи с некоторыми свойствами в одном, а некоторые в другом, однако я никогда этого не делал.

 Смежные вопросы

  • Нет связанных вопросов^_^