У меня есть 3 таблицы: книги, авторы и 3 промежуточная для обеспечения связи многие ко многим. Она сделана таким образом:
CREATE TABLE `m2m_books_authors` (
`b_id` int(10) unsigned NOT NULL,
`a_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`b_id`,`a_id`),
KEY `FK_m2m_books_authors_authors` (`a_id`),
CONSTRAINT `FK_m2m_books_authors_authors` FOREIGN KEY (`a_id`) REFERENCES `authors` (`a_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_m2m_books_authors_books` FOREIGN KEY (`b_id`) REFERENCES `books` (`b_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Т.е поля a_id и b_id одновременно являются и первичными и внешними. В связи с этим есть пара вопросов:
1) Обязательно ли делать их первичными в такой таблице ? Может достаточно того что они внешние?
2) В них происходит дублирование полей т.е в записи в поле a_id может встречаться несколько раз одинаковое число( как и в b_id). Почему не возникает ошибка дублирования первичного ключа?