Как правильно использовать ключи MySQL?

Решив впервые подойти с головой к проектированию БД для проекта, по неопытности столкнулся с проблемой.
Есть таблица подписчиков subscribers, в которой есть колонки userid INT UNSIGNED и subsriberid INT UNSIGNED. В колонках лежат id юзеров из таблицы users(один пользователь может подписаться на многих и наоборот, многие на одного). Эта таблица subscribers будет чаще использоваться на выборку, чем на изменение.
Проблема в том, что я понимаю, что для точного определения записи в таблицы мне достаточно этих двух колонок, но как primary key ни одна из них не подойдёт. Выборки будут по userid и subsсriberid. Имеет ли смысл добавлять ещё 1 колонку типа id только для ключа, который скорее всего понадобится только для удаления записи? Или просто навесить индексы на эти колонки и не загоняться?
Спасибо!
  • Вопрос задан
  • 3270 просмотров
Решения вопроса 1
Kerman
@Kerman
Primary key нужно повесить на ОБЕ колонки. Заодно это не даст возможности одному юзеру дважды подписаться на другого. Отдельный id для этой таблицы не нужен. Два индекса тоже не нужны.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
svd71
@svd71
Вы правильно начали рассуждать, но не правильно закончили. Первичный ключ может состоять из нескольких полей. Только все поля должны быть NOT NULL.

Но тут всплывает вопрос другой вопрос: удобно ли использовать для внешних таблиц такие составные ключи, ведь дублирование значений полей больше одного накладывает некоторые расходы и на скорость обработки и на занимаемое мест. В таких случаях обходятся суррогатным ключем с автогенератором с огромным запасом комбинаций (например тип BIGINT). Второй причиной, когда его нужно использовать: одно из полей (входяще в первичный ключ) может принимать значение NULL.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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