Обычно, когда у вас есть таблица с первичным ключом, состоящим из нескольких столбцов, это результат соединения таблицы (многие-ко-многим), которая была повышена до своей собственной сущности (и, следовательно, заслуживает своего собственного первичного ключа). Многие утверждают, что любая таблица соединений ДОЛЖНА быть сущностью по умолчанию, но это обсуждение другого дня.
Давайте посмотрим на гипотетические отношения многих ко многим:
Студент * --- * Класс
(Студент может быть в нескольких классах, класс может иметь несколько студентов).
Между этими двумя таблицами будет таблица соединений с именем StudentClass (или ClassStudent в зависимости от того, как вы ее напишите). Иногда вы хотите отслеживать такие вещи, как когда ученик был в классе. Таким образом, вы добавите его в таблицу StudentClass. На этом этапе StudentClass стал уникальным объектом ... и ему должно быть присвоено имя для распознавания, например, Enrollment.
Студент 1 --- * Зачисление * --- 1 класс
(у студента может быть много Зачислений, каждая Зачисление предназначена для одного класса (или наоборот, класс может иметь много Записей, каждая Зачисление предназначена для одного Студента).
Теперь вы можете задавать вопросы о том, сколько студентов было зачислено в класс химии 101 в прошлом году? Или в какие классы был зачислен студент Джон Доу, когда учился в университете Акме? Это было возможно без отдельного первичного ключа, но если у вас есть первичный ключ для зачисления, то будет проще запросить эти зачисления (по идентификатору), сколько учеников получили проходной балл?
Определение того, заслуживает ли объект ПК, сводится к тому, сколько запросов (или манипуляций) вы сделаете для этого объекта. Скажем, например, вы хотели прикрепить выполненные задания для ученика в классе. Логическое место для прикрепления этого объекта (Назначение) - объект регистрации. Предоставление регистрации своим собственным первичным ключом упростит запросы назначения.