Путаница с ключами РСУБД

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

По определению:

Первичный ключ: только 1 атрибут, поэтому он должен быть минимальным суперключом, а также ключом-кандидатом (поскольку его минимальный суперключ)

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

Следующий пункт я думаю, что это правда, но я не уверен. Может ли кто-нибудь подтвердить со мной вместе?

  1. Если это минимальный суперключ, это не значит, что это первичный ключ. Но это означает, что это ключ-кандидат.

  2. Если это ключ-кандидат, он не обязательно должен быть минимальным ключом, а также не обязательно должен быть первичным ключом.

Вывод:

  1. первичный ключ: только 1 значение, может идентифицировать всю строку. Это также ключ-кандидат и минимальный

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

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


person runcode    schedule 23.09.2012    source источник


Ответы (3)


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

Более длинное объяснение:

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

Однако важно понимать, что «первичный» ключ принципиально ничем не отличается от любого другого ключа, если только вы не решите сделать его таковым (или не будете вынуждены сделать это из-за ограничений программного обеспечения вашей СУБД). Поэтому в принципе нет абсолютной причины, по которой вы всегда должны назначать один «первичный» ключ. Предполагая, что у каждого отношения есть по крайней мере один ключ-кандидат (который по определению должен быть), тогда вы можете точно так же назвать ноль, один или несколько из этих ключей «первичными». Однако очень строгим соглашением является назначение ровно одного и только одного первичного ключа, и это соглашение поддерживается синтаксисом СУБД на основе SQL.

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

Вот Хью Дарвен на тему ключей:

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

http://www.dcs.warwick.ac.uk/~hugh/M359/What-Is-a-Key.html

person nvogel    schedule 24.09.2012
comment
Как в каждом наборе сущностей первичный ключ может быть образован комбинацией полей? Я не могу это визуализировать. Пример: у нас есть объект ЧЕЛОВЕК, Атрибуты: SSN, AGE, BIRTH_DATE и т. д.... так что в основном первичный ключ - это только SSN. Таким образом, должны быть уникальные атрибуты singlegel, которые могут идентифицировать целые кортежи. Пожалуйста, помогите мне, я запутался в этой концепции - person runcode; 25.09.2012
comment
@runcode, вот пример отношения: PurchaseOrder {OrderNum, ItemNum, Qty}. Ключ {OrderNum, ItemNum}. Оба этих атрибута вместе необходимы для идентификации кортежа. Ни один атрибут не будет уникальным, поскольку с OrderNum может быть связано более одного элемента, а элемент может появляться более чем в одном заказе. - person nvogel; 25.09.2012
comment
О, я вижу! Но значит ли это, что мы должны подчеркивать два атрибута OrderNum и ItemNum на нашей ER-диаграмме? - person runcode; 25.09.2012
comment
О, я вижу! потому что я только начинаю изучать СУБД и никогда не вижу, чтобы два атрибута в одном и том же объекте подчеркивались одновременно. Спасибо!!!! - person runcode; 25.09.2012

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

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

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

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

person marc_s    schedule 23.09.2012

Итак, из вашего вопроса я понял, что вы запутались в основных трех ключах (или, скорее, в четырех), которые обычно используются в СУБД. Постараюсь объяснить их кратко и доступным языком:

1) СУПЕР КЛЮЧИ:

Единственный атрибут или набор атрибутов, который можно использовать для уникальной идентификации каждого кортежа (строки) в таблице, называется суперключом (подумайте об этом, так как большое количество ключей можно назвать суперключами, поскольку их может быть много). комбинации атрибутов, которые делают его уникальным идентифицируемым) — но запомните только одну вещь для суперключа УНИКАЛЬНОСТЬ».

2) Кандидатные ключи (МИНИМАЛЬНЫЕ СУПЕРКЛЮЧИ):

Из всех супер ключей, которые мы получаем, мы начинаем идентифицировать ключи, которые являются самыми минимальными из всех, т.е. которые не могут быть далее разбиты (с точки зрения состава атрибутов), и если они нарушены, мы теряем уникальность, подпадающую под категорию КЛЮЧЕЙ-КАНДИДАТОВ. - просто запомните одну вещь для ключей-кандидатов: «УНИКАЛЬНОСТЬ» + «НЕПРЕОДУШИМОСТЬ»< /сильный>.

3)ПЕРВИЧНЫЙ КЛЮЧ:

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

А) предпочитаю брать ключ с цифрами, а не с текстом, как ПК.

Б) предпочитаю брать ключ, контроль над которым имеет владелец данных.

в) предпочесть ту, которая короче.

г) и предпочесть несоставные ключи, если они существуют.

Я надеюсь, что это поможет вам понять концепцию.

person Anupam Dewan    schedule 04.09.2017