Database
 sql >> база данни >  >> RDS >> Database

Какво е ключ-кандидат в дизайна на база данни?

Кандидатният ключ е важна концепция в нормализирането на базата данни. Прочетете, за да разберете какво е кандидат ключ и как да проверите дали набор от атрибути е кандидат ключ.

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

Концепцията за кандидат-ключ се преподава във всички курсове за университетска база данни като част от теорията за нормализиране на базата данни. Често срещаните проблеми, с които ще се сблъскате, когато научавате за кандидат ключове, са проверка дали даден набор от атрибути е кандидат ключ и намиране на всички кандидат ключове за връзка.

Разбирането на кандидат ключовете е важно за разбирането на нормалните форми в таблиците на базата данни. Това знание ще ви помогне да запомните правилата за най-често срещаните нормални форми.

В тази статия ще обясним с прости думи концепцията за кандидат ключове. Освен това ще ви покажем как да проверите дали набор от атрибути е кандидат ключ.

Основна терминология за нормализиране на база данни

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

отношение е теоретичното име за таблица на база данни. Връзката (таблица) има име и се състои от наименувани атрибути (колони).

функционална зависимост във връзка (A -> B ) ви казва, че всеки път, когато два реда имат еднакви стойности за всички атрибути в набор A, те също ще имат едни и същи стойности за всички атрибути в набор B.

затварянето на набор от атрибути е наборът от тези атрибути, които могат да бъдат функционално определени от този набор. Можете да прегледате алгоритъма за изчисляване на затварянето на атрибути тук.

Суперключове

Неофициално кандидат-ключът е набор от атрибути, които уникално идентифицират ред.

По дефиниция кандидат-ключът е минимален суперключ. И така, какво означава това? суперключ е атрибут или набор от атрибути, така че неговото затваряне са всички атрибути в релацията.

Нека видим някои примери. Тук имаме таблицата CourseEditions. Той съхранява информация за изданията на курса.

Всяка година даден курс може да се преподава от различен учител, с различна цена и различно ограничение на местата. По този начин имаме следните функционални зависимости:

  • id -> курс, година, учител, цена, места – ИД определя всички останали атрибути
  • курс, година -> идентификатор, учител, цена, места – курсът и годината определят ID, учител, цена и места.

Издания на курсове

id курс година учител цена петна
1 Бази данни 2019 Крис Кейп 100 45
2 Математика 2019 Даниел Пар 80 34
3 Бази данни 2020 Часовник на Дженифър 110 30

Кои са суперключовете в тази таблица? Първо, всички атрибути образуват суперключ, така че наборът {id, course, year, teacher, price, spots} е суперключ. Не забравяйте, че наборът от всички атрибути е суперключ във всички таблици.

Има ли по-малки суперключове в тази таблица? Да, има. Наборът {id} е суперключ. Имаме функционална зависимост id -> курс, година, учител, цена, места , и разбира се, имаме тривиалната зависимост id -> id . След като имаме id, можем да определим всички други атрибути от функционалните зависимости.

Наборът {курс, година също е суперключ. Имаме функционална зависимост курс, година -> идентификатор, учител, цена, места , и имаме тривиалните функционални зависимости course -> course и година -> година . След като имаме курс и година , можем да определим всички други атрибути от функционалните зависимости.

Наборът {id, course, year, teacher също е суперключ. Имаме идентификатор , разбира се , и година . Така че можем да определим всички останали атрибути в таблицата с тези три атрибута.

От друга страна, наборът {teacher} не е суперключ. Ако познаваме учителя, не можем да определим друг атрибут освен учителя. Комплектът {учител, цена също не е суперключ. След като имаме учител и цена , не можем да определим повече атрибути.

Минимални суперключове

Не всички суперключове са кандидат-ключове. За да бъде ключ-кандидат, суперключът трябва да е минимален, което означава, че ако извадите някакви атрибути от него, той вече няма да е суперключ. Нека разгледаме някои примери.

Наборът {id} е суперключ и е минимален. Не можете да вземете атрибути от него, защото тогава ще имате празен набор, а празният набор не е суперключ. По този начин наборът {id} е кандидат ключ.

Наборът {курс, година} също е суперключ и кандидат ключ. Ако извадите някой от атрибутите от него, останалият набор вече не е суперключ. Нуждаете се и от двете курс и година за да определите другите атрибути в набора.

Въпреки това наборът {id, course, year, teacher е суперключ, но не и кандидат ключ. Например, ако премахнете атрибута учител, останалият набор все още е суперключ. Всъщност в този случай можете да премахнете всеки атрибут от {id, course, year, teacher , а останалият набор все още ще бъде суперключ.

Имайте предвид, че минимален суперключ не означава суперключ с най-малък брой елементи. И двете {id} и {курс, година са кандидат ключове, въпреки че имат различен брой елементи.

Алгоритъм:Проверка, че набор от атрибути е кандидат ключ

Това е често срещаният проблем при проектирането на база данни:как да проверите дали набор от атрибути е кандидат ключ?

Ето алгоритъма за проверка:

  • Стъпка 1:Проверете дали даденият набор е суперключ. Изчислете затварянето на атрибутите в набора. Ако затварянето е набор от всички атрибути, наборът е суперключ.
  • Стъпка 2:Проверете дали суперключът е минимален. Премахнете всеки атрибут, един по един. Ако останалият набор е суперключ, суперключът не е минимален и наборът не е кандидат ключ. Ако не можете да премахнете нито един от атрибутите и да запазите свойството суперключ, наборът е ключ-кандидат.

Например, нека проверим дали наборът {course, year наистина е кандидат ключ.

  • Стъпка 1:Нека изчислим приключването на {course, year}. Използвайки алгоритъма за затваряне, заключаваме, че затварянето наистина е {id, course, year, teacher, price, spots}. По този начин наборът {курс, година наистина е суперключ.
  • Стъпка 2. Нека се опитаме да премахнем курс от комплекта. Остава ни наборът {year}. Няма функционална зависимост само с година като лявата страна. По този начин затварянето на този набор е {година . По същия начин, когато премахнем атрибута година, затварянето на оставащия набор е {course}. Нито {година нито {курс са суперключове, така че наборът {course, year е минимален суперключ и по този начин кандидат ключ.

Ако ви е харесала тази статия, разгледайте други статии за нормализиране в нашия блог.

Ако сте студент, който посещава уроци по база данни, не забравяйте да създадете безплатен академичен акаунт във Vertabelo, нашия онлайн инструмент за рисуване на диаграма на ER. Позволява ви да рисувате логически и физически ER диаграми директно във вашия браузър.

Vertabelo поддържа PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift и други релационни бази данни. Изпробвайте го и вижте колко лесно е да започнете!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Печелете пари с неизползвани неща:модел на данни за икономика за споделяне

  2. Внедряване на приложение Django в AWS Elastic Beanstalk

  3. Как да пусна колона в SQL?

  4. Как да инсталирате ArangoDB на Ubuntu 20.04

  5. Как да получите деня от дата в T-SQL