Где я должен хранить внешний ключ?

Если у меня есть связь между двумя таблицами (обе таблицы имеют собственные первичные ключи), что должно определять мое решение о том, какая таблица должна хранить внешний ключ? Я понимаю, что характер отношений, вероятно, имеет значение (один-к-одному, один-ко-многим, много-ко-многим, однонаправленный, двунаправленный) и, вероятно, имеет отношение к шаблону доступа. Что такое систематический способ принятия этого решения?

Ответ 1

Какая таблица является дочерним элементом в отношениях?
Ответьте, что, и вы знаете, какой таблице нужен столбец внешнего ключа, ссылаясь на первичный первичный ключ [обычно]. Это для отношений "один ко многим"...

Многим-многим потребуется добавить третью таблицу, используя ключи из обеих таблиц в качестве первичного ключа.

Ответ 2

"Что такое систематический способ принятия этого решения?"

Кажется, что есть два варианта: сторона "Один" как FK для "много сторон" или "много" стороны имеет FK для "одной" стороны.

Давайте посмотрим на выбор.

  • Все строки "Много" могут легко ссылаться на одну строку на стороне "Один" .

  • Одна строка на стороне "Один" не может ссылаться на ВСЕ строки на стороне "Много".

Используется только один метод: "Многие" имеют FK для "одной" стороны.

Существует только один фактический выбор реализации. Там нет "решения".

Ответ 3

Внешний ключ - это просто поле в одной таблице, которое относится к ключевому полю другой таблицы. Не совсем важно идентифицировать поле внешнего ключа как таковое. То есть вам не нужно явно добавлять FOREIGN KEY... ССЫЛКИ ограничивают таблицу тем, что она является внешним ключом. Когда вы объединяете две таблицы вместе, первичный ключ родительской таблицы будет установлен равным внешнему ключу дочерней таблицы. Независимо от того, какой из них не является первичным ключом, это внешний ключ.

В отношениях "один ко многим" FK переходит на "многие" стороны. Он не может идти на "одну" сторону, потому что там, где идет ПК, и определение первичного ключа включает запрет дубликатов.

Если у вас есть отношение "многие ко многим", вам нужно будет переработать таблицы, чтобы в итоге вы получили два отношения "один ко многим" и таблицу промежуточного разрешения.

Ответ 4

Как и primary key, a foreign key также является типом constraint, помещенным в один или несколько столбцов в таблице.

foreign key устанавливает связь между столбцами ключа и соответствующими столбцами в другой таблице. (Вы также можете связать столбцы внешнего ключа с столбцами внутри той же таблицы.)

Таблица, содержащая внешний ключ, считается дочерней таблицей, а таблица, к которой относится внешний ключ, является родительской таблицей.

Ключевые моменты

  • foreign key должен ссылаться на первичный ключ или уникальное ограничение, хотя эта ссылка может быть в одной и той же таблице или в другой таблице
  • A foreign key должно также иметь такое же количество столбцов, сколько количество столбцов в ссылочном ограничении, а типы данных должны совпадать между соответствующими столбцами.
  • В отличие от primary key, столбцы foreign key могут содержать значения NULL.