В чем разница между ключом-кандидатом и первичным ключом?

Является ли первичный ключ выбранным ключом-кандидатом, выбранным для данной таблицы?

11 ответов

Решение

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

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

Подробнее по этой ссылке с примером

Ответ Джона Ву верен, насколько это возможно. Вот несколько дополнительных моментов.

Первичный ключ всегда является одним из ключей-кандидатов. Довольно часто это единственный кандидат.

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

Реляционная модель будет полной без концепции первичного ключа. Этого не было в оригинальном представлении реляционной модели. На практике использование ссылок на внешние ключи без объявленного первичного ключа приводит к путанице. Это может быть логически правильный беспорядок, но, тем не менее, это беспорядок. Объявление первичного ключа позволяет СУБД помочь вам обеспечить соблюдение правил данных. Большую часть времени наличие СУБД поможет вам обеспечить соблюдение правил данных - это хорошая вещь, и она того стоит.

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

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

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

Ключ-кандидат -> Любой столбец или набор столбцов, которые могут стать первичными ключами, являются ключом-кандидатом. (В таблице может быть один или несколько ключей-кандидатов, если есть только один ключ-кандидат, его можно выбрать в качестве Первичного ключа)

Нет никакой разницы. Первичный ключ является ключом-кандидатом. По соглашению один ключ-кандидат в отношении связи обычно выбирается как "первичный", но выбор, по сути, произвольный и удобный для пользователей базы данных / дизайнеров / разработчиков. Он не делает "первичный" ключ принципиально отличным от любого другого ключа-кандидата.

Первичный ключ - это особый вид индекса:

there can be only one;
it cannot be nullable
it must be unique.

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

Пример таблицы Employee: Employee (идентификатор сотрудника, полное имя, SSN, DeptID)

  1. Ключ-кандидат: отдельные столбцы в таблице, которые соответствуют уникальности всех строк. Здесь в таблице Employee ID Employee ID и SSN находятся ключи-кандидаты.

  2. Первичный ключ: это столбцы, которые вы выбираете для сохранения уникальности в таблице. Здесь в таблице Employee вы можете выбрать столбцы Employee ID или SSN, Employee ID является предпочтительным выбором, поскольку SSN является безопасным значением.

  3. Альтернативный ключ: столбец-кандидат, отличный от основного столбца, например, если Employee ID равен PK, тогда SSN будет альтернативным ключом.

  4. Супер ключ: если вы добавляете любой другой столбец / атрибут к первичному ключу, он становится супер ключом, как EmployeeID + FullName - это супер ключ.

  5. Составной ключ: если в таблице нет ни одного столбца, который подходит для ключа-кандидата, необходимо выбрать 2 или более столбцов, чтобы сделать строку уникальной. Например, если нет столбцов Employee ID или SSN, вы можете сделать FullName + DateOfBirth в качестве составного первичного ключа. Но все же может быть узкая вероятность дублирования строк.

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

Подумайте о таблице автомобилей с целочисленным первичным ключом.

Регистрационный номер будет ключом-кандидатом.

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

Основной ключ

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

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

введите описание изображения здесь


Ключ-кандидат

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

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


Альтернативный ключ

Ключ-кандидат, который не является первичным ключом таблицы, называется альтернативным ключом. Ноль или более альтернативных ключей могут быть определены для конкретной таблицы. Термин "кандидатный ключ" является общим термином для всех первичных и альтернативных ключей.


Иностранный ключ

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

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

Первичный ключ - это столбец (или столбцы) в таблице, который однозначно определяет строки в этой таблице.

CUSTOMERS


CustomerNo  FirstName   LastName
1   Sally   Thompson
2   Sally   Henderson
3   Harry   Henderson
4   Sandra  Wellington

Например, в приведенной выше таблице CustomerNo является первичным ключом.

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

Итак, сказав, что можно использовать один или несколько столбцов в качестве первичного ключа, как вы решаете, какие столбцы (и сколько) выбрать?

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

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

Очевидно, что в таблице сотрудников любой столбец, например FirstName, является плохим выбором, поскольку вы не можете контролировать имена сотрудников. Часто существует только один выбор для первичного ключа, как в случае выше. Однако, если их несколько, их можно описать как "ключи-кандидаты" - название отражает то, что они являются кандидатами на ответственную работу первичного ключа.

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

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

Другие вопросы по тегам