У SQL це складові чи складні ключі?


31

Про SQL (обчислювальна техніка / бази даних):

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

Я бачив в Інтернеті обидва способи використання, тому я не дуже впевнений.


1
Ознайомтеся з цими двома тенденціями пошуку Google: goo.gl/5u4XdR .
igordcard

Відповіді:


32

Як складений ключ, так і складний ключ описують ключ-кандидат з більш ніж одним атрибутом. Відповідно до Словника реляційних баз даних (CJDate) вони означають те саме.

У моделюванні ER термін "складний ключ" також має більш конкретне значення. Він означає ключ, складовими атрибутами якого є посилання на ключі в інших об'єктах - тобто складений ключ утворює ідентифікаційний зв'язок. Для більшості цілей це не особливо корисна або важлива концепція, тому терміни композит / сполука часто трактуються як взаємозамінні. Напевно, найкраще дотримуватися "складеного ключа", якщо ви конкретно не посилаєтесь на концепцію моделювання ER складеного ключа.


3
"У моделюванні ER термін" складний ключ "також має більш конкретне значення" - Звучить переконливо :) Але у вас є цитування?
день, коли

Отже, складений ключ був би ключем, як правило, знайденим у таблиці з'єднання, яка використовується, наприклад, для багатьох-багатьох відносин?
Джош П

19

Я досі не впевнений, чому http://en.wikipedia.org/wiki/Compound_key не проводили консультації. Це дуже чітко зазначає (і правильно):

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

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

Складений ключ складається з елементів, які можуть бути або не бути сторонніми ключами. Приклад: у таблиці деталей транзакції ключовим є (TransactionId, ItemNumber). Деталізація транзакції - це суб'єкт транзакції. TransactionId - це зовнішній ключ, посилаючись на таблицю транзакцій. ItemNumber - це не сам по собі ключ. Він лише однозначно ідентифікує предмет у контексті однієї транзакції.

Складний ключ - це ключ, за допомогою якого будь-яка частина ключа є стороннім ключем. Приклад: у системі бронювання готелів бронювання має складний ключ (GuestId, HotelId, ArrivalDate). GuestId ідентифікує Гість та посилається на таблицю гостей. HotelId ідентифікує готель та посилається на таблицю готелів. ArrivalDate визначає дату. Таблиця дат, на яку вона посилається, може бути, а може і не бути, але вона так само ідентифікує об'єкт (дату).

Також слід зазначити цей фактоїд: Простий ключ - це ключ, що складається з одного стовпця, тоді як складний ключ складається з двох або більше стовпців.


4
jcolebrand: "Складний ключ - це ключ, за допомогою якого будь-яка частина ключа може ідентифікувати запис." Це неправильно. За визначенням ключ повинен бути невідворотним (мінімальний супер ключ). Якщо для унікальної ідентифікації кортежу потрібні лише деякі атрибути, то, за визначенням, це суперлюк, а не ключ.
nvogel

а) Я цитував сторінку вікіпедії. б) я схильний з цим погоджуватися. Будь-яка частина складеного ключа сама по собі є простим ключем. Я не заперечую, якщо ви також називаєте це супер-ключем. Однак я не вірю, що всі складові ключі можуть бути супер-ключами. Ерго, я стою за тим, що є у статті у Вікіпедії, і я стою за визначенням, яке я цитував. Я можу зайти і отримати свою опубліковану книгу з оформленням бази даних у твердій обкладинці, якщо це зробить вас щасливішими.
jcolebrand

2
Я думаю, що ви пропустили відповідний пункт, який полягає в тому, що складний ключ складається з ключів від інших об'єктів . Належний підмножина ключа не може бути ключем. Як я впевнений, ви знаєте, ключ повинен бути мінімальним (усередині таблиці, в якій він є ключем) - тому якщо ви видалите з нього якийсь атрибут, то він більше не буде ключем.
nvogel

2
"Ключ" - це лише короткий термін "ключ-кандидат". Визначення ключовим словом у підручнику є і завжди було «мінімальною суперклейкою». Посилання: Словник дати pg17 або книга Еліс, якщо ви сумніваєтесь у визначенні ключа.
nvogel

1
Визначення " складний ключ " та " ключ ключа " на сторінці Вікіпедії були змінені 13 липня 2014 року, і вони вже не відповідають визначеням у цій відповіді. (Я не змінив визначення, просто зазначивши, що визначення зараз не відповідають.)
spencer7593

3

По-англійськи це "складові ключі". Наприклад, подивіться на веб-сайт MSDN (будь-який пошук, що містить "складовий ключ sql", зробить).

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

Припускаючи, що питання стосується реляційних баз даних, я шукав "нейтральне" визначення у Вікіпедії :

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


1
Ні джерела, ні посилання, ні посилання, ні нічого ... погана відповідь.


google.com/search?q=sql+composite+key+definition просто приведе вас до мільйона сайтів, які розповідають про складені ключі SQL
Hemme

1
так Google пошукатиме складний ключ
jcolebrand

3
Це науково: googlefight.com/…
Hemme

3

Складовий ключ складається з декількох атрибутів, щоб однозначно ідентифікувати виникнення сутності. Це відрізняється від складного ключа тим, що один або кілька атрибутів, які складають ключ, самі по собі не є простими ключами.

Наприклад, у вас є база даних, що містить вашу колекцію компакт-дисків. Одне з об'єктів називається треками, які містять деталі треків на компакт-диску. Тут є складений ключ назви компакт-диска, номер доріжки.


2

Мені це звучить, як складений ключ - це суперсет, який включає складні ключі. Якщо ми визнаємо, що складений ключ складається з декількох атрибутів (будь-якого виду), а складний ключ складається з більш ніж одного простого ключа. Складний ключ - це тип складеного ключа з більш конкретним значенням, але термін "складений" ключ завжди доцільно використовувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.