Суперключ - это любая комбинация столбцов, которая однозначно определяет строку в таблице. Ключ-кандидат - это супер-ключ, из которого нельзя удалить столбцы без потери уникального свойства идентификации. Это свойство иногда называют минимальностью или (лучше) неприводимостью.
Супер ключ primary первичный ключ в целом. Первичный ключ - это просто ключ-кандидат, выбранный в качестве основного ключа. Однако в теории зависимостей ключи-кандидаты важны, и первичный ключ не более важен, чем любой из других ключей-кандидатов. Неосновные ключи-кандидаты также известны как альтернативные ключи.
Рассмотрим эту таблицу элементов:
CREATE TABLE elements
(
atomic_number INTEGER NOT NULL PRIMARY KEY
CHECK (atomic_number > 0 AND atomic_number < 120),
symbol CHAR(3) NOT NULL UNIQUE,
name CHAR(20) NOT NULL UNIQUE,
atomic_weight DECIMAL(8,4) NOT NULL,
period SMALLINT NOT NULL
CHECK (period BETWEEN 1 AND 7),
group CHAR(2) NOT NULL
-- 'L' for Lanthanoids, 'A' for Actinoids
CHECK (group IN ('1', '2', 'L', 'A', '3', '4', '5', '6',
'7', '8', '9', '10', '11', '12', '13',
'14', '15', '16', '17', '18')),
stable CHAR(1) DEFAULT 'Y' NOT NULL
CHECK (stable IN ('Y', 'N'))
);
У него есть три уникальных идентификатора - атомный номер, имя элемента и символ. Следовательно, каждый из них является ключом-кандидатом. Кроме того, если вы не имеете дело с таблицей, которая может содержать только одну строку данных (в этом случае пустой набор (из столбцов) является ключом-кандидатом), вы не можете иметь ключ-кандидат меньше, чем один столбец, ключи-кандидаты являются несводимыми.
Рассмотрим ключ, состоящий из {атомного номера, имени элемента, символа}. Если вы предоставляете согласованный набор значений для этих трех полей (скажем, {6, Carbon, C}), то вы однозначно идентифицируете запись для элемента - Carbon. Однако это очень супер-ключ, который не является ключом-кандидатом, потому что он не является неснижаемым; Вы можете исключить любые два из трех полей, не теряя уникальное свойство идентификации.
В качестве другого примера рассмотрим ключ, состоящий из {атомного номера, периода, группы}. Опять же, это уникальный идентификатор строки; {6, 2, 14} идентифицирует углерод (снова). Если бы не лантаноиды и актиноиды, тогда комбинация {period, group} была бы уникальной, но из-за них это не так. Однако, как и прежде, атомный номер сам по себе достаточен для уникальной идентификации элемента, так что это супер ключ, а не ключ-кандидат.