Являются ли детерминанты и ключи-кандидаты одним и тем же или разными вещами?

Здесь я нашел это:

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

Примеры. Рассмотрим таблицу с атрибутами employee_id, first_name, last_name и date_of_birth. В этом случае поле employee_id определяет оставшиеся три поля. Поля имени не определяют employee_id, поскольку в фирме может быть более одного сотрудника с одинаковым именем и/или фамилией. Точно так же поле DOB не определяет поля employee_id или name, поскольку несколько сотрудников могут иметь один и тот же день рождения.

Разве это определение не применимо и для ключей-кандидатов?


person Aparan    schedule 23.05.2013    source источник


Ответы (3)


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

Рассмотрим эту (очевидно, ненормальную) таблицу:

CREATE TABLE US_Address (
  AddressID int,
  Streetline varchar(80),
  City varchar(80),
  State char(2),
  ZIP char(5),
  StateName varchar(80),
  StateTax DECIMAL(5,2)
)

Состояние является определяющим фактором для StateName и StateTax, но не является ключом-кандидатом для строки. Таким образом, правильная нормализация переместит StateName и StateTax из таблицы US_Address в таблицу States.

Подробнее см. здесь.

person Ross Presser    schedule 23.05.2013
comment
Даже если таблица находится в НФБК, каждое подмножество атрибутов является определяющим. Что правильно, так это то, что детерминант [нетривиального FD] не может быть [надмножеством] ключа-кандидата, если таблица не [в BCNF] [но в противном случае находится]. - person philipxy; 10.12.2015
comment
Кроме того, эта ссылка необычно определяет определитель (в таблице) как определитель полной функциональной зависимости. И его отношение A находится в НФБК тогда и только тогда, когда каждый детерминант [sic] является потенциальным ключом и должен быть любым нетривиальным детерминантом [sic]. - person philipxy; 10.12.2015

TL;DR Нет, "детерминант" и "ключ-кандидат" — это не одно и то же. Определитель от FD. CK принадлежит таблице. Мы также можем небрежно сказать, что CK является определителем (FD) своей таблицы, поскольку он определяет каждый столбец и набор столбцов в ней.


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

Для наборов столбцов X и Y мы можем написать X -> Y. Мы говорим, что X – это определяющий/определяющий набор, а Y – определенный набор в/в функциональной зависимости (FD ) X -> Y.

Мы говорим, что X функционально определяет Y, а Y функционально определяется X. Мы говорим, что X является детерминантом X -> Y. В {C } -> Y мы говорим, что C функционально определяет Y. В X -> {C} мы говорим, что X функционально определяет C. Когда X является надмножеством Y, мы говорим X - > Y тривиально.

Мы говорим, что X -> Y содержится в таблице T, когда каждое значение подстроки для X появляется только с одним конкретным значением подстроки для Y. Или мы говорим, что X -> Y является FD of/in T. Когда X является определителем некоторого FD в таблице T, мы говорим, что X является определителем/in T. Каждый в нем выполняется тривиальная ФД таблицы.

Суперключ таблицы T – это набор столбцов, который функционально определяет каждый столбец. Ключ-кандидат (CK) — это суперключ, который не содержит меньшего суперключа. Мы можем выбрать один CK в качестве первичного ключа (< em>PK), а затем вызвать другие CK альтернативные ключи (AK). Столбец является простым, когда он находится в некотором CK.

Обратите внимание, что определитель может быть FD или, небрежно, (FD, который содержит) таблицы. Каждый CK является определителем своей таблицы. (Но тогда в таблице каждый набор столбцов является определителем: сам по себе, тривиально. И аналогично каждый< /em> столбец.)

(Эти определения не зависят от нормализации. FD и CK таблицы используются для ее нормализации. Таблица находится в НФБК, когда каждый детерминант нетривиального FD, содержащийся в ней, является суперключ.)

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

person philipxy    schedule 10.12.2015
comment
Определения не зависят от нормализации, но готов поспорить, что они были изобретены явно для того, чтобы сделать возможным определение нормализации. Ваши определения очень точны и математически. Но хотя они несут очень ценную информацию, читать их гораздо сложнее, чем мой ответ, каким бы неверным он ни был. Мой ответ быстро заставил ОП понять, что это разные концепции и где разные концепции будут полезны. Ваш ответ больше касается формального доказательства. - person Ross Presser; 10.12.2015
comment
Термины появляются в вопросе и вашем ответе, но значения не приходят в голову спрашивающему. Я попытался решить эту проблему. Отсюда определения. Они просты и правильны, но не расплывчаты. Четырех предложений, выделенных жирным шрифтом для FD, holds, superkey и CK, было бы достаточно. Я добавил некоторые связанные термины/понятия. Мой выбор отражает мое сомнение в том, что различия между вещами можно оценить без четкого понимания того, что они из себя представляют. - person philipxy; 11.12.2015

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

Взяв пример из здесь, пусть будет таблица со следующими столбцами:

№ клиента, имя, адрес, кредит, торговый представитель №, имя торгового представителя

и допустим, что Sales Rep # может однозначно определить Sales Rep Name. Таким образом, Sales Rep # является определителем для Sales Rep Name, но не ключом-кандидатом для этой таблицы.

person displayName    schedule 03.12.2015