MySQL - Уникальный ключ, основанный на значениях сводной таблицы "многие ко многим"


Мне нужно управлять таблицами исполнителей и альбомов.

| artists      |  | albums       |  | album_artist |
+--------------+  +--------------+  +--------------+
| id           |  | id           |  | id           |
| artist       |  | album        |  | album_id     |
| created_at   |  | created_at   |  | artist_id    |
| updated_at   |  | updated_at   |  +--------------+
+--------------+  +--------------+

Имея в виду, что это отношение "многие ко многим", мне действительно нужно найти способ сделать пару "альбом-исполнитель" уникальной, поскольку альбомы могут иметь одно и то же имя, но принадлежать разным исполнителям (например, альбом "Величайшие хиты" 2Pac и "Величайшие хиты" Notorious BIG). Существует ли известный способ/шаблон для решения этой проблемы?

Спасибо.

Author: Alberto Dallaporta, 2016-04-26

1 answers

Я делал это раньше, создавая уникальное ограничение для album_id, artist_id.

Это позволит создавать альбомы для разных исполнителей. Как будет отличаться идентификатор артистов. В вашей миграции поставьте.

$table->unique(['album_id', 'artist_id']);

В традиционном дизайне базы данных это называется composite key, которое состоит из двух или более столбцов, что делает таблицу уникальной, в большинстве pivot table это будут два foreign keys.

 3
Author: Martin Henriksen, 2016-04-25 23:11:33