Может ли суперключ включать в себя вещи, которые не являются частью первичного ключа? - PullRequest
2 голосов
/ 02 февраля 2010

Может ли суперключ включать вещи, которые не являются частью первичного ключа?

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

По логике, да. Если таблица X имеет столбцы {A, B, C} и A является первичным ключом, тогда {A}, {A, B}, {A, C} и {A, B, C} - все суперключи, потому что если у вас есть какой-либо из этих наборов, вы знаете все значения в строке (если она существует.)

Однако для некоторых целей он не рассматривается как ключ в SQL, например, если таблица Y имеет A и B, вы можете , а не обычно определять внешний ключ Y(A, B) REFERENCES X(A, B), поскольку {A, B} не является первичным ключом. Если вы хотите иметь возможность объявить этот внешний ключ, вы должны добавить еще одно UNIQUE ограничение на X(A, B), которое неэффективно, поскольку дублирует часть первичного ключа.

На мой взгляд, это один из многих недостатков SQL.

0 голосов
/ 02 февраля 2010

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

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

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

ОК, два кандидата - номер работника и SSN.

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

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

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

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

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

"Количество элементов" просто говорит, когда я запрашиваю таблицу по одному значению ключа, каково среднее число возвращаемых записей. Для правильного простого ключа это всегда и только 1 для всех значений, которые существуют в таблице вообще. (Очевидно, он равен нулю для чисел, которых нет в таблице.) Количество элементов будет больше единицы для неуникальных ключей. Обычный пример для другого конца спектра для таблицы размера N, использование «Пола» в качестве ключа даст вам количество элементов N / 2. Помните, поскольку это возвращаемый размер AVERAGE, распределение таблицы не обязательно должно быть идеальным.

Надеюсь, это поможет.

...