Какая точка ключа кандидата?
Я новичок в управлении базами данных, и на этот вопрос никогда не ответят более чем на одно предложение. Все остальные ответы SO говорят: "Ключ-кандидат - это минимальный супер-ключ". Для меня это ничего не значит.
Ключ-кандидат должен указывать уникальность записи db, правильно? Первичный ключ - это ключ-кандидат. Если первичный ключ уже указывает уникальность, то какая точка добавления дополнительных ключей-кандидатов?
Я видел примеры, подобные следующим:
Сотрудник (идентификатор, имя, номер телефона)
где ID - первичный ключ, а PhoneNumber - это ключ-кандидат. Из того, что я вижу, идентификатора достаточно, чтобы указать уникальность записи сотрудника. Хотя PhoneNumbers (возможно) уникальны, указание их в качестве ключа-кандидата не кажется мне "минимальным".
Ответы
Ответ 1
Это означает, что если PhoneNumber действительно был ключом-кандидатом, вы могли бы удалить столбец идентификатора и вместо этого использовать PhoneNumber. Другими словами, это кандидат на то, чтобы быть уникальным ключом.
В Википедии есть более формальное определение, которое вы хотите посмотреть.
Ответ 2
Ключ называется ключ-кандидат, потому что, хотя он может использоваться как ПК, это не обязательно ПК.
Для данной строки может быть более одного ключа-кандидата, например EmployeeID
и SSN
.
Часто вместо того, чтобы использовать ключ-кандидат в качестве PK, вместо него создается суррогатный ключ.. Это потому что решения о том, какой ключ-кандидат использовать, могут быть признаны ошибочными позже, что может вызвать огромную головную боль (буквально).
Другая причина заключается в том, что суррогатный ключ может быть создан с использованием эффективного типа данных для целей индексирования, которые могут не иметь ключи-кандидаты (например, a UserImage
).
Третья причина заключается в том, что многие может быть компромиссом с точки зрения данных целостность. Вы можете потерять некоторые ограничения на свои данные, выбрав ключ суррогата, и часто требуется триггер для имитации ограничения, если выбран суррогатный ключ.
Ответ 3
Ключ-кандидат означает то же самое, что и первичный ключ. Все ключи-кандидаты выполняют одну и ту же цель: обеспечить целостность данных путем предотвращения дублирования данных. Совершенно разумно, чтобы в таблице было задействовано более одного ключа кандидата, если это необходимо для обеспечения того, чтобы некоторые данные не дублировались.
Обратите внимание, что минимальный в этом контексте НЕ означает наименьший. Это означает неприводимость. то есть никакой атрибут не может быть удален из ключа, сохраняя при этом его уникальность.
Ответ 4
Ключ кандидата - это концепция, которая появляется при разработке системы баз данных.
Предположим, что в вашей системе будет таблица с именем User, как указано ниже:
User (fullName, socialSecurityNumber, creditCardNumber, age).
Ну, вам нужно выбрать, какой поднабор этих столбцов будет вашим основным ключом.
Цель создания базы данных, конечно же, должна быть минимальной. Вы
не будет использовать пару (SSN, creditCardNumber), если только SSN уже гарантирует уникальность.
Теперь предположим, что fullName, SSN и creditCardNumber - все поля, которые вы знаете, так или иначе,
которые уникальны для всех пользователей. Вы можете использовать любой из них в качестве своего ПК, поэтому они
все ключи кандидата (тогда как возраст, с другой стороны, не является).
Что выберете?
Это будет зависеть от таких факторов, как тип данных поля (предпочтительнее
установите индекс в столбце целых чисел, а не в столбце varchar, например).
Ответ 5
"Ключ кандидата" - это кандидат в том же смысле, что кандидаты в президенты являются кандидатами: это избранные вами варианты, из которых вы должны выбрать один. Они являются кандидатами на первичный ключ. Выбери один. На практике не все варианты обязательно одинаково хороши.
Ответ 6
Ключи-кандидаты обычно относятся к тем столбцам, которые потенциально могут быть выбраны в качестве первичного первичного ключа. Однако естественные первичные ключи также часто представляют собой плохую идею, потому что они уникальны, но не неизменны (подумайте о хаосе изменения миллионов дочерних строк, потому что название компании изменилось) или потому, что они менее эффективны в объединениях, чем суррогатные ключи. Кроме того, в реальной жизни многие потенциальные ключи-кандидаты не достаточно стабильны для истинного ПК и не так уникальны, как мы думаем. Например, электронные письма могут быть повторно использованы после закрытия учетной записи.
Вы добавляете другие индексы, чтобы указать уникальность, чтобы сохранить целостность данных. Например, в вашем примере вы используете суррогатный ключ для обеспечения уникальности записи. Но это не гарантирует, что комбинация человек/телефон вводится только один раз. Таким образом, вы хотите создать уникальный индекс для любого возможного ключа кандидата (и это может состоять из одного или нескольких полей) в данных, если вы используете суррогатный ключ. Это гарантирует, что элементы, которые должны быть уникальными, позволят вам получить преимущества от суррогатного ключа.
Кроме того, иногда существуют многолистные поля или комбинации полей, которые должны быть уникальными. Например, предположим, что у вас есть таблица хранения организационной структуры. Каждый организационный объект должен быть уникальным, поэтому каждая комбинация организация/человек (при условии, что нет совместного использования). Поместив уникальные индексы в эти поля, вы можете предотвратить вхождение плохих данных в таблицу.
Ответ 7
Мы используем ключ-кандидат, потому что иногда необходимо следить за записью и другой проблемой, например, для базы данных для банковской системы, где Account_No является первичным ключом, а SocialSecurity_NO - это ключ-кандидат, мы сохраняем SocialSecurity_NO как UNIQUE, потому что, если правительство получило ошибку при предоставлении SocialSecurity_NO, тогда это будет большая проблема, поэтому мы уже объявили его как UNIQUE-ключ, поэтому нет возможности, чтобы два пользователя с одним и тем же SocialSecurity_NO могли иметь возможность использовать учетную запись...
первичный ключ ----------- ключ кандидата --------- attribute3 ------- attribute4
Account_No SocialSecurity_NO
Ответ 8
В двух словах: КАНДИДАТНЫЙ КЛЮЧ - минимальный СУПЕР КЛЮЧ.
Где Super key - это комбинация столбцов (или атрибутов), которые однозначно идентифицируют любую запись (или кортеж) в отношении (таблице) в RDBMS.
Например, рассмотрим следующие зависимости в таблице, имеющей столбцы A, B, C и D (приведем эту таблицу только для быстрого примера, чтобы не охватывать все зависимости, которые может иметь R).
Набор атрибутов (определитель) ---Can Identify---> ( зависит )
A-→ AD
B-→ ABCD
C-→ CD
А C-→ ДСА
А B-→ ABCD
AB C-→ ABCD
BCD-→ ABCD
Теперь B, AB, ABC, BCD идентифицируют все столбцы, поэтому эти четыре имеют право на супер ключ.
Но, B⊂AB; B⊂ABC; Следовательно, B⊂BCD AB, ABC и BCD дисквалифицированы для CANDIDATE KEY, поскольку их подмножества могут идентифицировать отношение, поэтому они не минимальны, и, следовательно, только B является ключом-кандидатом, а не другие.
Спасибо за вопрос.
Ответ 9
В RM (реляционная модель): суперключ - это уникальный набор столбцов. CK (ключ-кандидат) - это суперключ, не содержащий суперключ. Это кандидат на роль PK (первичный ключ). ПК - это просто какой-то CK, который вы решили назвать PK. Другие CK - это AK (альтернативные ключи).
SQL PK - это UNIQUE NOT NULL, не обязательно CK/PK. Таким образом, мы можем сказать, что SQL CK является UNIQUE NOT NULL, кандидатом на объявление SQL PK, и мы можем вызывать другие SQL AK. В контексте SQL вы должны спросить людей, что они имеют в виду, когда они используют эти термины с различными значениями в RM & SQL.