Для чего нужен составной ключ в mysql?

Для чего нужен составной ключ в mysql? Можете пожалуйста объяснить и привести понятный пример, в котором можно увидеть необходимость использования составного ключа.
  • Вопрос задан
  • 20157 просмотров
Решения вопроса 1
flapflapjack
@flapflapjack
на треть я прав
У меня например есть таблица "права доступа".

access (id,user_id,access_mode)
У одного пользователя не может быть два раза одно и тоже значение access_mode ( зачем допускать пользователя 2 раза к одному и тому же разделу сайта?)

Потому я использую двойной ключ (user_id,access_mode)
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@luna3956
Составные ключи могут служить заменой специально вводимым идентификаторам.
Например есть таблица Пользователи вида Users(id, name) и таблица Фотки вида Photos(id, name).

Таблица содержащая фотки пользователей будет таблица UsersPhotos(user_id, photo_id). В данном случае эти два поля образуют составной ключ, эта связка будет уникальна и нет смысла вводить избыточный идентификатор, если этого не требует логика приложения.
Ответ написан
Если ключ primary, то, как уже ответили, чтобы использовать уникальную комбинацию полей вместо auto_increment.
А если речь идёт об индексе, то mysql не умеет их комбинировать. Соответственно, если вам нужна фильтрация, например, по тэгу статьи и дате публикации, и это частый запрос, то вам придётся добавить составной индекс. Причём, порядок имеет значение - key(tag_id, tm) не будет использоваться в запросах с tm, но без tag_id в where.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
Составной ключ (индекс) нужен как и все индексы для ускорения выборки. Его можно не использовать и для каждого поля создать свой, но работать они будут медленее, чем составной и будет больше оверхеда на их поддержку.
Т.е. составной ключ нужен если у вас много выборок вида Поле1->Поле2->Поле3... При этом как уже отметил kilgur порядок полей имеет значение и работать будет быстро только префиксный вариант.
Ответ написан
Комментировать
@evocatus
разработчик на FPGA, программист, учитель
Очень хороши составные ключи для таблиц с соотношениями типа многие-ко-многим. Например: есть таблица с авторами и таблица с книгами, но т.к. у одной книги может быть несколько авторов и у одного автора несколько книг, то сопоставление автор/книга мы можем хранить с таблице типа many-to-many. Вводить для неё суррогатный ключ (все эти id INT INSUGNED PRIMARY KEY AUTO_INCREMENT) совершенно не нужно - в качестве ключа можно взять комбинацию первичных ключей из таблиц авторов и книг.

А если мы имеет таблицу many-to-many, которая сопоставляет две других таблицы с естественными ключами, и выбрали для many-to-many составной ключ, являющийся, таким образом, комбинацией двух естественных ключей, то иногда получается вообще избавиться от лишнего JOIN при запросе, что очень неплохо, потому что самая важная информация уже есть в самом ключе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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