Вариант 2 верен, за исключением того, что он должен называться student_class
, отражая его функцию n :: n или Enrollment как объект.(student_id, class_id)
- это PK.
Grade (как вы это показали) - это зависимость 1 :: 1 от этого составного ключа (не от одного или другого элемента) и ни от чего другого, поэтому онявляется атрибутом student_class
.
И, следовательно, student_class
в 3NF.
Если люди не начали с того, что вслепую вставляли Id
столбцы на все, что двигалось, когда выс вариантом 1, они смогут лучше понимать данные и, следовательно, лучше нормализовать.Тот (Id
столбец в Варианте 1 как отправная точка) мешал вашей интуиции, что (student_id, class_id)
был Идентификатором;дополнительный столбец Id
с дополнительным индексом не требуется.Затем, когда вы приступили к оценке grade
, его зависимость от этого PK очевидна.
Id
iot столбцы повреждают реляционные возможности базы данных.Если у вас есть, скажем, три таблицы в иерархии, и вам нужно взять несколько столбцов из верхней и нижней таблиц, вы вынуждены пройти среднюю таблицу.Если у вас были реляционные идентификаторы, а не столбцы идиотов, вы переходите из нижней таблицы в верхнюю таблицу с необходимостью читать среднюю таблицу.
Это только наполовину правда, что в "нормализованном" столько объединений" база данных.Вся правда в том, что, поскольку база данных неправильно нормализована, да, вы вынуждены вступать в гораздо больше соединений, чем необходимо.В действительно нормализованной базе данных с теми же таблицами код требует гораздо меньше соединений.
Вот > Модель данных для колледжа <</strong> из недавнего задания, упрощенная версия.
> Обозначение IDEF1X<</strong> для тех, кому необходимо пояснение символов.
Обратите внимание, что требуется только один суррогатный ключ.
- Это потому, что вальтернативой (LastName + FirstName + Initials_BirthDate + BithDate) будет Person PK, и он будет переноситься как FK в 5 дочерних / внучатых таблицах, что составляет 81 байт, и это не имеет смысла.
.
Посмотрите, сможете ли вы оценить, что Идентификаторы (сплошные линии) доведены до детей и внуков;они имеют и передают значение
Было бы глупо добавлять суррогатные ключи для TeacherId, StudentId, StaffId, когда у нас есть совершенно хороший PersonId, который является внешним ключом и уже уникальным.(Столбцы названы таковыми для обозначения их ролей.)
Все бизнес-правила были реализованы в DDL: ограничения FK;Проверьте ограничения;Правила.
В комнате есть составной ключ из 4 колонок;Предложение имеет 3-х столбный составной ключ;оба вместе исключают двойное бронирование.
PK предложения и PK ученика вместе образуют PK для зачисления (идентичны этому Вопросу; PK состоят из разных столбцов, вот и все).