Какой смысл в ключе-кандидате? - PullRequest
16 голосов
/ 18 октября 2010

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

Ключ-кандидат должен указывать уникальность записи в БД, верно? А первичный ключ - это ключ-кандидат. Если первичный ключ уже указывает уникальность, какой смысл добавлять дополнительные ключи-кандидаты?

Я видел примеры записей вроде следующего:

Сотрудник (ID, имя, номер телефона)

где ID - это первичный ключ, а PhoneNumber - это ключ-кандидат. Из того, что я вижу, идентификатора достаточно, чтобы указать уникальность записи сотрудника. Хотя PhoneNumbers (вероятно) уникальны, указание их в качестве ключа-кандидата не кажется мне «минимальным».

Ответы [ 9 ]

12 голосов
/ 18 октября 2010

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

В Википедии есть более формальное определение , на которое многие хотят взглянуть.

7 голосов
/ 18 октября 2010

Ключ называется ключом-кандидатом, поскольку, хотя он может использоваться в качестве PK, он не обязательно является PK.

Может быть несколько ключей-кандидатов для данной строки , например, EmployeeID и SSN.

Часто вместо использования ключа-кандидата в качестве PK вместо него создается суррогатный ключ . Это происходит потому, что можно найти решения относительно того, какой ключ-кандидат использовать.быть позже ошибочным, что может вызвать огромную головную боль (буквально).

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

Третья причина в том, что много ORM работают только с одним столбцом PK , поэтому исключаются ключи-кандидаты, состоящие из более чем одного столбца (составные ключи).в этом случае

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

4 голосов
/ 19 октября 2010

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

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

3 голосов
/ 18 октября 2010

Ключ-кандидат - это концепция, которая появляется при проектировании системы базы данных.

Предположим, в вашей системе будет таблица с именем User, определенная следующим образом:

User (fullName, socialSecurityNumber, creditCardNumber, age).

Ну, вы должны выбрать, какое подмножество этих столбцов будет вашим первичным ключом. Цель при проектировании базы данных, конечно же, сохранить этот набор минимальным. Вы не будет использовать пару (SSN, creditCardNumber), если только один SSN уже гарантирует уникальность.

Теперь предположим, что fullName, SSN и creditCardNumber - это все поля, которые вы как-то знаете, которые уникальны для всех пользователей. Вы можете использовать любой из них в качестве ПК, чтобы они все ключи-кандидаты (тогда как возраст, с другой стороны, нет).
Какой вы выберете? Это будет зависеть от таких факторов, как тип данных поля (предпочтительно например, установить индекс для целочисленного столбца, а не для столбца varchar.

1 голос
/ 21 мая 2019

В RM (реляционная модель): суперключ - это уникальный набор столбцов. CK (ключ-кандидат) - это суперключ, не содержащий суперключ. Это кандидат на роль PK (первичный ключ). ПК - это просто какой-то CK, который вы решили назвать PK. Другие CK - это AK (альтернативные ключи).

SQL PK - УНИКАЛЬНЫЙ, НЕ НУЛЬ, не обязательно CK / PK. Таким образом, мы можем сказать, что SQL CK является UNIQUE NOT NULL, кандидатом на объявление SQL PK, и мы можем вызвать другие SQL AK. В контексте SQL вы должны спросить людей, что они имеют в виду, когда они используют эти термины с различными значениями в RM & SQL.

0 голосов
/ 20 мая 2019

В двух словах: CANDIDATE KEY - это минимальный SUPER KEY.

Где Super key - это комбинация столбцов (или атрибутов), которые однозначно идентифицируют любую запись (или кортеж) в отношении (таблице) в РСУБД.


Например, рассмотрим следующие зависимости в таблице, имеющей столбцы A, B, C и D (приведем эту таблицу только для быстрого примера, чтобы не охватить все зависимости, которые может иметь R).

Набор атрибутов (определитель) --- Может идентифицировать ---> (Зависит)

A -----> AD

B -----> ABCD

C -----> CD

AC -----> ACD

AB -----> ABCD

ABC -----> ABCD

BCD -----> ABCD


Теперь B, AB, ABC, BCD идентифицируетвсе столбцы, поэтому эти четыре имеют право на супер ключ.

Но, B⊂AB;B⊂ABC;Следовательно, BCDBCD AB, ABC и BCD дисквалифицированы для CANDIDATE KEY, поскольку их подмножества могут идентифицировать отношение, поэтому они не являются минимальными, и, следовательно, только B является ключом-кандидатом, а не остальные.

Спасибо за вопрос.

0 голосов
/ 01 апреля 2013

Мы используем ключ-кандидат, потому что иногда необходимо позаботиться о записи и других проблемах, например, о базе данных для банковской системы, где Account_No - первичный ключ, а SocialSecurity_NO - ключ-кандидат. Мы сохраняем SocialSecurity_NO какУНИКАЛЬНЫЙ ключ, потому что если правительство допустило ошибку в предоставлении SocialSecurity_NO, то это будет большой проблемой, поэтому мы уже объявили его как УНИКАЛЬНЫЙ ключ, поэтому нет никакой возможности, что два пользователя с одинаковым SocialSecurity_NO смогут иметь учетную запись ...

первичный ключ ----------- кандидатный ключ --------- атрибут3 ------- атрибут4

Account_No SocialSecurity_NO

0 голосов
/ 18 октября 2010

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

Вы добавляете другие индексы, чтобы указать уникальность, чтобы сохранить целостность данных.Например, в вашем примере вы используете суррогатный ключ для обеспечения уникальности записи.Но это не гарантирует, что комбинация человек / телефон вводится только один раз.Таким образом, вы захотите создать уникальный индекс для любого возможного ключа-кандидата (и он может состоять из одного или нескольких полей) в данных, если вы используете суррогатный ключ.Это гарантирует, что элементы, которые должны быть уникальными, и позволяет вам получить преимущества производительности суррогатного ключа.

Далее иногда встречаются несколько полей или комбинаций полей, которые должны быть уникальными.Например, предположим, что у вас есть таблица с организационной структурой.Каждая организационная единица должна быть уникальной, как и каждая комбинация организации / человека (при условии, что нет разделения работы).Размещая уникальные индексы в этих полях, вы можете предотвратить вставку неверных данных в таблицу.

0 голосов
/ 18 октября 2010

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

...