Есть ли в пустой таблице SQL суперключ? Есть ли в каждой таблице SQL?

Я знаю, что означает термин "SuperKey" в SQL, но я не могу понять конкретную вещь, и мне нужна помощь.

В таблице без данных есть суперключ?

В любой таблице всегда будет ли она существовать?

3 ответа

TL; DR "Superkey"- это термин RM (реляционная модель данных). Там нет стандартного использования в SQL. Можно сказать, что в качестве суперключей таблицы SQL неформально можно назвать наборы столбцов, которые можно объявить primary key или же unique not null, плюс может быть {}, когда таблица содержит не более одной строки (хотя вы не можете ее объявить). "Разумно неформально", потому что таблицы SQL не являются отношениями RM. Но если таблица не содержит повторяющихся строк и нулей, мы можем разумно сказать, что это отношение и что, как и любое отношение, оно имеет один или несколько суперключей. Определение суперключа базового отношения или выражения отношения учитывает все возможные значения, которые оно может содержать, поэтому его текущее значение не влияет на то, чем являются его суперключи. Согласно определению суперключа, в пустом значении отношения каждое подмножество атрибутов является суперключем.

Реляционный "суперключ"

В математике одно значение "отношения"- это табличный набор строк, как "кортежи", которые представляют собой списки значений. Он представляет отношение (корабль)/ ассоциацию. Вот откуда происходит "R" в "RM", отсюда и термин "реляционная база данных". (Кодд 1970) (Дата 2015) Точно так же "ERM" (модель сущности-отношения) происходит от "отношения" как отношения / ассоциации. (Chen 1976) В контексте RM "отношение" также является табличным, но обычно содержит набор "кортежей", которые представляют собой наборы пар "атрибутных" имен и значений. (Или это может быть математическое отношение или смесь.) Существует два значения RM "суперключа"- значения отношения и переменной отношения или выражения. Суперключ значения отношения - это набор атрибутов, в которых отношение не содержит двух строк с этим поднабором. Суперключ переменной отношения или выражения - это набор атрибутов, где в каждой ситуации / состоянии он не содержит двух строк с этим поднабором. Таким образом, переменная имеет определенный суперключ, когда все значения, которые она может содержать, имеют этот суперключ.

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

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

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

SQL против реляционного

Таблица SQL не является отношением. Это напоминает беспорядок математических и атрибутивных отношений с допустимыми дубликатами и нулями. Таким образом, базы данных SQL называются "реляционными", но они плохо воплощают RM.

Из-за сходства таблиц SQL с отношениями термины, включающие отношения, применяются к таблицам небрежно. Но хотя вы можете заимствовать термины и давать им значения SQL (значение, таблица, суперключ, CK, PK, FK, объединение и предикат, NF, нормализация и т. Д.), Вы не можете просто заменить эти значения SQL на эти слова в Определения RM, теоремы или алгоритмы и получить что-то разумное или правдивое. Более того, SQL-представления понятий RM практически никогда не говорят вам, как правильно применять понятия RM к базе данных SQL. Они просто повторяют презентации RM, не замечая, делает ли их использование значений SQL для терминов бессмысленными или недействительными. ("Почти", потому что я надеюсь, что они есть.)

Если вы замените "отношение" на "таблица" (допускаются дубликаты и / или пустые значения) в определенных определениях суперключей RM, то вы получите определение для суперключей SQL в виде набора столбцов, который удовлетворяет primary key или же unique not null ограничение. Для некоторых других определений суперключей RM вы получаете эти наборы плюс {}, когда таблица содержит не более одной строки. (Поскольку он "идентифицирует" любую строку.) (Вероятно, вы найдете только людей, которые используют фразы второго стиля, но думают, что они определяют, что делает фраза первого стиля. И они не узнают, что они неправильно используют определения, неправильно истолковав термины.) Некоторые могут просто использовать определение ограничения. Вы можете найти "UK" (уникальный ключ), используемый в любом из трех вариантов.

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

PS: "CK" Не путайте суперключи с CK (ключами-кандидатами). CK - это суперключ, который не содержит меньшего суперключа. (Следовательно, CK - это "минимальный" или "неприводимый" суперключ.) Отношение может иметь несколько суперключей и CK. PK (первичный ключ) - это некоторый CK, выбранный в качестве PK. SQL primary key & unique not null объявите то, что мы могли бы назвать суперключем SQL, но не обязательно минимальным, что мы могли бы назвать SQL CK. Поэтому, когда вы слышите "PK" в контексте SQL, вы должны выяснить, означает ли это "(суперключевой) список столбцов, объявленный через primary key "и / или" отличительный суперключ SQL (может быть, а может и не быть объявлен через primary key)"и / или" различимый SQL CK (минимальный суперключ SQL)". И вы всегда должны спрашивать, что означает" ключ ". (Обычно, суперключ SQL, что бы это ни значило.)

PS: "Отношение (корабль)". Выясните, что вы подразумеваете под каждым из "отношения" и "отношения"- ассоциации? Таблица? FK (внешний ключ)? В базе данных RM каждое значение отношения (переменной или выражения) представляет отношение (корабль)/ ассоциацию. Но "отношение" (иногда "отношение") также (неправильно) используется (укоренившимся образом) для FK- не в RM или ERM, а в псевдо-RM & -ERM методах, которые неправильно истолковывают / неправильно понимают / искажают их чьи корни предшествуют им. (К сожалению, в индустрии баз данных очень плохое образование в области РМ.) Для запроса и обновления не нужны FK, PK, CK, superkeys и другие ограничения. (Они для целостности.)

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

  1. Когда эта таблица пуста (т. Е. Еще не было введено ни одного сотрудника), ключом таблицы остается номер сотрудника. Ключ - это свойство таблицы независимо от записей внутри.
  2. Бывают ситуации, когда у таблицы нет суперключа. Эти ситуации редки. Чаще всего это списки, например, "в какой час сотрудник звонил на какой номер". Вы бы сохранили номер сотрудника, час и номер телефона. И если сотрудник звонит по одному и тому же номеру в течение одного и того же часа дважды, то есть две одинаковые записи, поэтому уникальный ключ отсутствует. Однако чаще всего таких ситуаций можно избежать (в приведенном примере мы можем сохранить полное время до нескольких секунд или даже миллисекунд вместо часов и, таким образом, получить уникальный ключ, состоящий из номера сотрудника плюс время вызова).

Вот несколько точных определений из книги Рональда Фейджина 1981 года «Нормальная форма для реляционных баз данных, основанных на доменах и ключах» (статья, в которой определена нормальная форма домен-ключ, DKNF):

  • Атрибуты : множество X. Например, {город, страна}.
  • X- кортеж : функция предметной области набор атрибутов X. Например, {(город, Париж), (страна, Франция)}.
  • X-отношение : набор X-кортежей. Например, {{(город, Париж), (страна, Франция)}, {(город, Берлин), (страна, Германия)}}.
  • X-ограничение : функция домена, множества X- отношений и кодомена {0, 1}. Для X-ограничения σ , которое отображает X-отношение R в 1, говорят, что R подчиняется σ и что σ выполняется в R .
  • Схема отношения : кортеж из 1-й записи — набора атрибутов X и 2-й записи — набора X-ограничений.
  • Схема базы данных : набор схем отношений.
  • Экземпляр схемы отношения : X-отношение, которое имеет атрибуты и подчиняется ограничениям схемы отношения.
  • Ограничение функциональной зависимости (FD) : AB , где A, BX выполняются в X-отношениях R , таких что для всех t1 , t2 в R (t1[A] = t2[A] ⇒ t1[B] = t2[ Б ]).
  • Ограничение ключевой зависимости (KD) : KEY(A), где AX выполняется в X-отношениях R так, что AX выполняется в R. Говорят, что A является суперключом (также называемым ключом , если он неприводим) схемы отношений (и их экземпляров), которые имеют ключевое ограничение зависимости KEY(A).
  1. Всегда ли пустая таблица SQL имеет суперключ?
  2. Всегда ли каждая таблица SQL имеет суперключ?
  1. Да, потому что пустое X- отношение подчиняется любым ключевым ограничениям зависимости KEY(A), где AX.

    Доказательство. Для всех t1 , t2 в {}, ( t1 [ A ] = t2 [ A ] ⇒ t1 [ X ] = t2 [ X ]), что эквивалентно для всех t1 , t2 , ( t1 , t2 в {} ⇒ ( t1 [ A ] = t2 [ A ] ⇒ t1 [ X ] = t2 [ X ])), что является пустой истиной как антецедент t1 ,t2 в {} первого условного выражения ложно.

  2. Да, потому что каждое отношение X подчиняется ограничению ключевой зависимости KEY(X).

    Доказательство. Пусть RX- отношение. Для всех t1 , t2 в R (t1[X] = t2[X] ⇒ t1[X] = t2[X]).

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