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). Существует ли известный способ/шаблон для решения этой проблемы?
Спасибо.
1 answers
Я делал это раньше, создавая уникальное ограничение для album_id, artist_id.
Это позволит создавать альбомы для разных исполнителей. Как будет отличаться идентификатор артистов. В вашей миграции поставьте.
$table->unique(['album_id', 'artist_id']);
В традиционном дизайне базы данных это называется composite key
, которое состоит из двух или более столбцов, что делает таблицу уникальной, в большинстве pivot table
это будут два foreign keys
.