Подтвердить что ты не робот

MySQL - использование внешнего ключа в качестве первичного ключа тоже

У меня есть таблица 1 с первичным ключом user_id и таблицей 2, где user_id является внешним ключом.

В таблице 2 может существовать только 1 запись за user_id, и без нее не может быть записи.

ВОПРОС: Может ли user_id в таблице 2 одновременно быть как иностранным, так и первичным ключом, и если да, то это хорошая идея, какие плюсы и минусы?

4b9b3361

Ответ 1

Да, вы можете сделать это (и вы должны, с точки зрения дизайна базы данных).

Однако рассмотрим, что это означает, если user_id является первичным ключом в таблице 2. Вы фактически говорите, что каждая строка в таблице 2 соответствует пользователю, но у вас уже есть таблица, где каждая строка соответствует пользователю: таблица 1. Возникает вопрос: "Почему бы вам не поместить все данные таблицы 2 в столбцы с нулевым значением в таблице 1?". В конце концов, наличие двух таблиц означает, что вам нужно будет сделать два запроса, чтобы получить эти данные вместо одного.

Теперь есть несколько сценариев, где эта практика может быть хорошей идеей:

  • если у вас много пользователей, но только несколько строк в таблице 2, возможно, запрос на таблицу 2 будет выполняться редко; в то же время вы получаете скорость хранения и скорость изменения в таблице 1
  • в будущем возможно, что первичный ключ таблицы 2 изменится, а внешний ключ останется; если вы поместите все данные в таблицу 1, эта модификация, скорее всего, нарушит вашу модель базы данных.

Это может быть хорошей идеей, но это зависит от особенностей вашего приложения.