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

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

20
задан OMG Ponies 20 July 2010 в 19:52
поделиться

3 ответа

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

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

26
ответ дан 30 November 2019 в 00:04
поделиться

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

В отношениях «один ко многим» ФК выступает на стороне «многих». Это не может идти на стороне «одного», потому что это то место, где находится PK, а определение первичного ключа включает запрет на дублирование.

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

3
ответ дан 30 November 2019 в 00:04
поделиться

«Каков же систематический способ принятия этого решения?»

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

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

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

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

Работает только одна техника: сторона "Многие" имеет FK на стороне "Один".

Есть только один реальный вариант реализации. Нет никакого «решения».

8
ответ дан 30 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: