@Drovosek01

В какой таблице лучше ставить внешний ключ при связи 1 к 1?

Здравствуйте.
Допустим есть таблица "Команды" и таблица "Тренеры". В одной команде может быть 1 тренер и у 1 тренера может быть 1 команда.
В какой из этих таблиц лучше создавать внешний ключ? Т.е. в таблице "Команды" лучше сделать поле "instructor_id" и FOREIGN KEY или лучше в таблице "Тренеры" сделать поле "team_id" и FOREIGN KEY.
Я догадываюсь, что это зависит от реализации/структуры данных и от того, в какую таблицу будут первыми попадать данные (чтобы потом на них делать внешний ключ), но может есть какое-то правило в этом плане?
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
Decadal
@Decadal
Вам нужно определить, какая сущность главная, а какая второстепенная для вашей программы. Как это будет выглядеть? Сначала заводится список тренеров а потом к ним крепятся команды? Или, наоборот, есть список команд и нужно создать им тренера? А может, это равнозначные сущности, и вы хотите иметь возможность завести список команд и список тренеров независимо друг от друга, а уже потом проставить связи?
Ставьте внешний ключ той сущности, которая не будет иметь множественной связи с большей вероятностью.
К примеру, если это соц сеть для тренеров, то вероятнее всего, тренер сможет добавлять список команд которых он тренировал. И тогда trainer_id пригодится в teams.
Но если ваша соцсеть вырастет и там будет база команд, которые тренер сможет выбрать из выпадающего списка (т.е. у команд тоже может быть много тренеров), то придется делать M:N. Ваш случай связи 1:1 возник только потому что ваше приложение еще недостаточно развилось.

Также не забудьте что 1 к 1 реализуется назначением UNIQ ограничения на внешний ключ. Иначе это 1 ко многим.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@qoso
Речь не об одном внешнем ключе, это два РАЗНЫХ внешних ключа, и Вам необходимо создавать оба.

P.S. это при условии, что у вас обязательно должен быть тренер привязан к команде, а команда к тренеру
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
Будет ситуация, которая не уложится в вашу модель.
Таблицы "Персона", "Роль", "Команда" и "Состав" (команда, персона и её роль) позволят избежать ситуации "играющий тренер" или "тренер по совместительству".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы