таблица «многие ко многим» - первичный ключ с 1 отдельным полем или первичный ключ с 2 существующими полями (пример внутри) - PullRequest
0 голосов
/ 17 августа 2010

У меня есть 2 таблицы с отношением ко многим ко многим:

student 
(
id int(11) NOT NULL, 
name varchar(255), 
primary key(id)
);

teacher
(
id int(11) NOT NULL, 
name varchar(255), 
primary key(id)
);

, и я должен сделать 3 таблицы - student_has_teacher

  1. опция добавить идентификатор отдельное полепервичный ключ

    student_has_teacher (id int (11) NOT NULL, teacher_id int (11), student_id int (11) первичный ключ (id));

  2. опция сделать 2 поля первичным ключом

    student_has_teacher (teacher_id int (11), student_id int (11), первичный ключ (teacher_id, student_id), внешний ключ (teacher_id) ссылается на учителя (id)), внешний ключ (student_id) указывает на студента (id));

Какой вариант лучше и почему?

Спасибо

Ответы [ 3 ]

3 голосов
/ 17 августа 2010

сделать 2 поля первичным ключом

Поскольку они соответствуют определению первичного ключа.Они позволяют однозначно указать строку.

1 голос
/ 17 августа 2010

Два варианта не эквивалентны.В варианте 1 может быть несколько пар каждого учителя и ученика.В варианте 2 для каждой комбинации учителя и ученика разрешена только 1 строка.

Существует и другое отличие.В 1 ученик и учитель обнуляются.В 2 они не.

На предоставленной информации я не понимаю, почему учителя должны быть в паре с одним и тем же учеником более одного раза.Поэтому я бы сказал, что 2 более уместно, но все зависит от бизнес-требований, и вы не дали много информации, чтобы сказать в любом случае.

1 голос
/ 17 августа 2010

Это зависит.Если вам нужно связать что-то со строкой в ​​student_has_teacher (странное имя таблицы imo, я бы предложил student_teacher), поле id было бы неплохо.Если нет, то с этими двумя полями все будет в порядке.

...