Суперключ, кандидатный ключ и первичный ключ - PullRequest
33 голосов
/ 01 декабря 2011

Может ли любезная душа прояснить мои сомнения простым примером ниже и определить суперключ, ключ-кандидат и первичный ключ?

Я знаю, что есть много постов и сайтов, объясняющих различия между ними. Но похоже, что все это общие определения.

Пример:

Student (StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber)

Итак, из приведенного выше примера я могу знать, StudentNumber - это первичный ключ.

Но что касается суперключа, я немного запутался, какая комбинация атрибутов может быть сгруппирована в суперключ?

Что касается ключа-кандидата, меня смущает определение, данное, поскольку любой ключ-кандидат может квалифицироваться как первичный ключ.

Означает ли это, что такие атрибуты, как PhoneNumber, являются ключом-кандидатом и могут быть первичным ключом? (Предполагая, что PhoneNumber принадлежит только одному студенту)

Спасибо за любые разъяснения!

Ответы [ 3 ]

52 голосов
/ 01 декабря 2011

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

Этот набор может содержать один или несколько элементов, и их может быть больше, чемодин супер ключ для стола.Обычно вы делаете это через функциональные зависимости.

В вашем примере я предполагаю:

StudentNumber    unique
FamilyName     not unique
Degree     not unique
Major      not unique
Grade      not unique
PhoneNumber    not unique

В этом случае суперключ - это любая комбинация, которая содержит номер студента.

Таким образом, следующие суперключи

StudentNumber
StudentNumber, FamilyName
StudentNumber, FamilyName, Degree
StudentNumber, FamilyName, Degree, Major
StudentNumber, FamilyName, Degree, Major, Grade
StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber
StudentNumber, Degree
StudentNumber, Degree, Major
StudentNumber, Degree, Major, Grade
StudentNumber, Degree, Major, Grade, PhoneNumber
StudentNumber, Major
StudentNumber, Major, Grade
StudentNumber, Major, Grade, PhoneNumber
StudentNumber, Grade
StudentNumber, Grade, PhoneNumber
StudentNumber, PhoneNumber

Теперь предположим, что если PhoneNumber уникален (кто использует телефоны в эти дни), то следующие также являются суперключами (в дополнение к тому, что я перечислил выше).

PhoneNumber
PhoneNumber, Grade, 
PhoneNumber, Major, Grade
PhoneNumber, Degree, Major, Grade
PhoneNumber, FamilyName, Degree, Major, Grade
PhoneNumber, Major
PhoneNumber, Degree, Major
PhoneNumber, FamilyName, Degree, Major
PhoneNumber, StudentNumber, FamilyName, Degree, Major
PhoneNumber, Degree
PhoneNumber, FamilyName, Degree
PhoneNumber, StudentNumber, FamilyName, Degree
PhoneNumber, FamilyName
PhoneNumber, StudentNumber, FamilyName

Ключ-кандидат - это просто «самый короткий» суперключ.Возвращаясь к первому списку суперключей (т. Е. Номер телефона не является уникальным), самый короткий суперключ - это StudentNumber.

Первичным ключом обычно является только ключ-кандидат.

13 голосов
/ 01 декабря 2011

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

Ключ-кандидат - это «минимальный» суперключ, то естьнаименьшее подмножество атрибутов суперключей, которые являются уникальными.Следовательно, удаление любого атрибута из ключа-кандидата сделает его неуникальным.

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

Не очень полезно делать предположения о ключах, основываясь только на списке имен атрибутов.Вы должны знать, какие зависимости должны храниться между атрибутами.Сказав это, я предполагаю, что вы правы - StudentNumber, вероятно, является ключом кандидата в вашем примере.

1 голос
/ 30 января 2015

Растягивание ответа Камбиума, если PhoneNumber также уникален вместе с StudentNumber, тогда candidate keys будет: - {StudentNumber}, {PhoneNumber}.
Здесь мы не можем принять {StudentNumber,PhoneNumber} какsingle candidate key, потому что если мы пропустим один атрибут, скажем, StudentNumber, мы все равно получим уникальный атрибут {PhoneNumber}, что нарушит определение candidate key.

Primary key: Выберите один candidate key из всехcandidate keys.Имеется 2 candidate keys, поэтому мы можем выбрать {StudentNumber} как primary key.
Alternate keys: Остаток candidate keys, после выбора primary key из candidate keys, являются альтернативными ключами, т.е. {PhoneNumber}.

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

composite key: Составной ключ содержит по меньшей мере один составной ключ и еще один атрибут.Составные ключи также могут включать простые ключи и неключевые атрибуты.

...