В SQL это составные или составные ключи?

31

О SQL (вычисления / базы данных):

Когда у нас есть два или более полей в таблице, которые вместе идентифицируют ее записи однозначно, как правильно их вызывать? Композитные или составные ключи?

Я видел в Интернете оба варианта использования, поэтому я не совсем уверен.

igordcard
источник
1
Проверьте эти две тенденции поиска Google: goo.gl/5u4XdR .
igordcard

Ответы:

32

Как составной ключ, так и составной ключ описывают ключ-кандидат с более чем одним атрибутом. Согласно Словарю реляционной базы данных (CJDate) они означают одно и то же.

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

nvogel
источник
3
«В моделировании ER термин« составной ключ »также имеет более конкретное значение» - звучит убедительно :) Но есть ли у вас цитата?
onedaywhen
Таким образом, составной ключ будет ключом, обычно находящимся в соединительной таблице, используемой для многих-многих отношений, например?
Джош П
19

Я все еще не уверен, почему http://en.wikipedia.org/wiki/Compound_key не консультировались. Это очень ясно заявляет (и правильно):

В проектировании базы данных составной ключ - это ключ, который состоит из 2 или более атрибутов, которые однозначно идентифицируют вхождение объекта. Каждый атрибут, составляющий составной ключ, сам по себе является простым ключом.

Это часто путают с составным ключом, в результате чего, хотя он также является ключом, который состоит из 2 или более атрибутов, которые однозначно идентифицируют вхождение объекта, по крайней мере, один атрибут, составляющий составной ключ, сам по себе не является простым ключом.

Составной ключ состоит из элементов, которые могут быть или не быть внешними ключами. Пример: в таблице сведений о транзакции ключ (TransactionId, ItemNumber). Деталь транзакции - это сущность транзакции. TransactionId - это внешний ключ, ссылающийся на таблицу транзакций. ItemNumber не является ключом сам по себе. Он только однозначно идентифицирует элемент в контексте одной транзакции.

Составной ключ - это ключ, в котором любая часть ключа является внешним ключом. Пример: в системе бронирования отелей бронирование имеет составной ключ (GuestId, HotelId, ArrivalDate). GuestId идентифицирует гостя и ссылается на таблицу гостей. HotelId идентифицирует отель и ссылается на таблицу отелей. ArrivalDate идентифицирует дату. Может существовать или не быть таблица дат, на которую она ссылается, но она идентифицирует сущность (дату) в любом случае.

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

Jcolebrand
источник
4
jcolebrand: «Составной ключ - это ключ, с помощью которого любая часть ключа может идентифицировать запись». Это неверно По определению ключ должен быть неприводимым (минимальный суперключ). Если для уникальной идентификации кортежа требуются только некоторые атрибуты, то по определению это суперключ, а не ключ.
nvogel
а) Я цитировал страницу википедии. б) Я склонен с этим согласиться. Любая часть составного ключа сама по себе является простым ключом. Я не против, если вы тоже называете это суперключем. Однако я не верю, что все составные ключи могут быть суперключами. Ergo, я поддерживаю то, что есть в статье в Википедии, и я поддерживаю приведенное мной определение. Я могу пойти и принести мою опубликованную книгу по дизайну баз данных в твердом переплете, если это сделает вас счастливее.
Jcolebrand
2
Я думаю, что вы пропустили соответствующий момент, который заключается в том, что составной ключ состоит из ключей от других объектов . Правильное подмножество ключа не может быть ключом. Как я уверен, вы знаете, ключ должен быть минимальным (в пределах таблицы, ключом которого он является) - поэтому, если вы удалите какой-либо атрибут из него, он больше не будет ключом.
nvogel
2
«Ключ» - это просто сокращение от «ключ-кандидат». Определение ключа-кандидата в учебнике всегда было «минимальным суперключем». Ссылки: Словарь дат, стр. 17 или книга Алисы, если у вас есть какие-либо сомнения относительно определения ключа.
nvogel
1
Определения « составной ключ » и « составной ключ » на странице Википедии были изменены 13 июля 2014 года и больше не соответствуют определениям в этом ответе. (Я не менял определения, просто указал, что определения не соответствуют сейчас.)
spencer7593
3

На английском это «составные ключи». Например, посмотрите на сайт MSDN (подойдет любой поиск, содержащий «составной ключ sql»).

http://www.google.com/search?q=sql+composite+key+site:msdn.microsoft.com

Предполагая, что вопрос касается реляционных баз данных, я искал «нейтральное» определение в Википедии :

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

Hemme
источник
1
Нет источника, нет ссылки, нет ссылки, нет ничего ... плохой ответ.
google.com/search?q=sql+composite+key+definition приведет вас к миллиону сайтов, рассказывающих о составных ключах SQL
Hemme
1
так будет Google искать составной ключ
jcolebrand
3
Это научное: googlefight.com/...
Hemme
3

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

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

Dilbag Koundal
источник
2

Мне кажется, что составной ключ - это расширенный набор, который включает составные ключи. Если мы примем, что составной ключ состоит из более чем одного атрибута (любого типа), а составной ключ состоит из более чем одного простого ключа. Составной ключ - это тип составного ключа с более конкретным значением, но термин «составной» ключ всегда уместно использовать.

Том Гнаде
источник