Задать вопрос
@UNy

Связь многие ко многим?

У меня есть 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). Почему не возникает ошибка дублирования первичного ключа?
  • Вопрос задан
  • 415 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Не обязательно, можно добавить искусственный первичный ключ. Но тогда во избежание дубликатов придётся делать уникальный ключ из этой же пары полей.
2. Ошибки нет, поскольку ключ составной. Проверяется уникальность не отдельных полей, а именно пары.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы