MySQL проблема отношения многих ко многим - PullRequest
0 голосов
/ 17 августа 2011

У меня есть 3 таблицы в mysql artists tracks и artist_tracks, и я сделал то, что было написано в этом статье.

это таблицы artist: artist_id, имя_художника tracks: идентификатор_трека, имя_трека artist_tracks: artist_id, track_id

как я могу предотвратить дублирование строк в таблице artist_tracks ??

Ответы [ 4 ]

5 голосов
/ 17 августа 2011

Создайте составной первичный ключ вокруг столбцов artist_id и track_id.Это стандартная практика для таблиц-мостов.

ALTER TABLE artist_tracks DROP PRIMARY KEY;
ALTER TABLE artist_tracks ADD PRIMARY KEY (artist_id, track_id);

Если вы правильно следовали этой статье, у вас уже должен быть такой ключ, и дублирование будет невозможно.

0 голосов
/ 21 февраля 2013

Вам нужно group_concat и "извилистое" объединение для 3 таблиц, смотрите эту скрипку: http://www.sqlfiddle.com/#!2/54c6f/3/0

0 голосов
/ 17 августа 2011

Если вы сделали то, что было в ссылке, вы уже предотвращаете дубликаты.

CREATE TABLE `x` (
  `a_id` varchar(6) NOT NULL default '',
  `b_id` varchar(6) NOT NULL default '',
  PRIMARY KEY  (`a_id`,`b_id`)
)

Этот код делает это для вас путем создания составного первичного ключа из идентификаторов исполнителя и трека.

0 голосов
/ 17 августа 2011

Создать уникальный индекс .

CREATE UNIQUE INDEX artist_id_track_id ON artist_tracks (artist_id, track_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...