PRIMARY KEY (CourseN, `Quarter`, DayTime),
FOREIGN KEY (CourseN) REFERENCES Course(CourseN)
В этой конструкции вы создаете составной первичный ключ со столбцами (CourseN, Quarter DayTime)
. Это подразумевает, что любая комбинация значений этих трех столбцов должна быть уникальной в таблице. Кроме того, вы указываете, что CourseN
является внешним ключом, который ссылается на столбец синонимов в таблице Course
, поэтому каждое значение столбца CourseN
в ссылочной таблице LocationNTime
должно присутствовать в указанной таблице Course
.
Это похоже на действительный набор, где LocationNTime
подобен зависимой таблице Course
(как дочерняя таблица или тому подобное).
PRIMARY KEY (CourseN),
UNIQUE KEY(`Quarter`, DayTime),
FOREIGN KEY (CourseN) REFERENCES Course(CourseN)
Здесь CourseN
является первичным ключом таблицы, поэтому каждое значение в этом столбце должно быть уникальным. Но это также внешний ключ для Course
. На самом деле это не имеет смысла с точки зрения нормализации: если каждая запись в LocationNTime
относится к уникальной записи в Course
, тогда зачем создавать две таблицы вместо хранения всех данных в одной записи в Course
?
Кроме того, вы создаете уникальное ограничение для (
Quarter , DayTime)
, что означает, что комбинация значений в этих столбцах уникальна.
Этот дизайн выглядит некорректно.
Рассмотрим следующий набор данных:
CourseN Quarter DayTime
1 1 14:00:00
1 2 14:10:00
1 3 14:00:00
1 4 14:10:00
Первый дизайн разрешит этот набор данных, а второй - нет, поскольку дубликаты в CourseN
. Следующий набор данных также не будет разрешен, так как в (Quarter, DayTime)
есть дубликаты:
CourseN Quarter DayTime
1 1 14:00:00
2 2 14:10:00
3 1 14:00:00
4 2 14:10:00
Я считаю, что первый дизайн, вероятно, вам нужен.
Наконец:Вы, кажется, думаете, что столбец с ограничением внешнего ключа (здесь LocationNTime(CourseN)
) должен быть UNIQUE
: это не так. Единственное, что ему нужно, - это индекс (и MySQL создает его для вас, когда вы все равно его объявляете). Это столбец, на который ссылается внешний ключ (здесь Course(CourseN)
), который должен быть уникальным.