sql >> Database >  >> RDS >> Database

Wat is een kandidaatsleutel in databaseontwerp?

Een kandidaatsleutel is een belangrijk concept bij het normaliseren van databases. Lees verder om erachter te komen wat een kandidaatsleutel is en hoe u kunt controleren of een set kenmerken een kandidaatsleutel is.

De kandidaatsleutel, ook gewoon een sleutel genoemd, is een belangrijk onderdeel van het databaseontwerp. Het is de theoretische basis voor technische concepten zoals primaire en alternatieve (unieke) sleutels. Elke databaseontwerper moet weten hoe hij kandidaatsleutels kan identificeren en hoe hij de juiste kan kiezen voor zijn tabel.

Het concept van de kandidaatsleutel wordt in alle universitaire databasecursussen onderwezen als onderdeel van de theorie van databasenormalisatie. De veelvoorkomende problemen die u tegenkomt bij het leren over kandidaatsleutels, zijn het verifiëren of een bepaalde set attributen een kandidaatsleutel is en het vinden van alle kandidaatsleutels voor een relatie.

Het begrijpen van kandidaatsleutels is belangrijk voor het begrijpen van de normale vormen in databasetabellen. Deze kennis helpt je de regels voor de meest voorkomende normaalvormen te onthouden.

In dit artikel leggen we het concept van kandidaatsleutels in eenvoudige bewoordingen uit. Bovendien laten we u zien hoe u kunt verifiëren of een set kenmerken een kandidaatsleutel is.

Basisterminologie voor databasenormalisatie

Voordat u leest over kandidaatsleutels, moet u ervoor zorgen dat u bekend bent met de basisterminologie voor normalisatie. Laten we de belangrijkste termen kort doornemen.

Een relatie is de theoretische naam voor een databasetabel. Een relatie (tabel) heeft een naam en bestaat uit benoemde attributen (kolommen).

Een functionele afhankelijkheid in een relatie (A -> B ) vertelt je dat wanneer twee rijen dezelfde waarden hebben voor alle attributen in set A, ze ook dezelfde waarden zullen hebben voor alle attributen in set B.

De afsluiting van een set attributen is de set van die attributen die functioneel kan worden bepaald uit deze set. U kunt hier het algoritme bekijken om de sluiting van attributen te berekenen.

Supertoetsen

Informeel is een kandidaatsleutel een set attributen die een rij uniek identificeren.

Per definitie is een kandidaatsleutel een minimale supersleutel. Dus, wat betekent dit? Een supersleutel is een attribuut of een set attributen zodat de afsluiting alle attributen in de relatie zijn.

Laten we enkele voorbeelden bekijken. Hier hebben we de tabel CourseEditions. Het slaat informatie op over cursusedities.

Elk jaar kan een bepaalde cursus door een andere docent worden gegeven, met een andere prijs en een ander aantal plaatsen. We hebben dus de volgende functionele afhankelijkheden:

  • id -> cursus, jaar, docent, prijs, plaatsen – de ID bepaalt alle andere attributen
  • cursus, jaar -> id, docent, prijs, plaatsen – de cursus en het jaar bepalen de ID, docent, prijs en plaatsen.

Cursusedities

id cursus jaar leraar prijs plekjes
1 Databases 2019 Chris Cape 100 45
2 Wiskunde 2019 Daniel Parr 80 34
3 Databases 2020 Jennifer Klok 110 30

Wat zijn de supertoetsen in deze tabel? Ten eerste vormen alle attributen een supersleutel, dus de set {id, course, year, teacher, price, spots} is een supersleutel. Onthoud dat de verzameling van alle attributen een supersleutel is in alle tabellen.

Zijn er kleinere superkeys in deze tabel? Ja er zijn. De set {id} is een supersleutel. We hebben de functionele afhankelijkheid id -> cursus, jaar, leraar, prijs, plaatsen , en natuurlijk hebben we de triviale afhankelijkheid id -> id . Zodra we de id hebben, we kunnen alle andere attributen bepalen uit de functionele afhankelijkheden.

De set {course, year} is ook een supersleutel. We hebben de functionele afhankelijkheid cursus, jaar -> id, leraar, prijs, plekken , en we hebben de triviale functionele afhankelijkheden cursus -> cursus en jaar -> jaar . Zodra we cursus hebben en jaar , kunnen we alle andere attributen bepalen uit de functionele afhankelijkheden.

De set {id, course, year, teacher} is ook een supersleutel. We hebben id , cursus , en jaar . We kunnen dus alle andere attributen in de tabel bepalen met deze drie attributen.

Aan de andere kant, de set {teacher} is geen supersleutel. Als we de leraar kennen, we kunnen geen ander attribuut bepalen dan de leraar. De set {teacher, price} is ook geen superkey. Zodra we leraar hebben en prijs , we kunnen geen attributen meer bepalen.

Minimale supertoetsen

Niet alle superkeys zijn kandidaatsleutels. Om een ​​kandidaatsleutel te zijn, moet een supersleutel minimaal . zijn wat betekent dat als je er attributen uit haalt, het geen superkey meer zal zijn. Laten we enkele voorbeelden bekijken.

De set {id} is een superkey, en het is minimaal. Je kunt er geen attributen uit halen, omdat je dan een lege set hebt en een lege set is geen supersleutel. Dus de set {id} is een kandidaatsleutel.

De set {course, year} is ook een supersleutel en een kandidaatsleutel. Als u een van de attributen eruit haalt, is de resterende set niet langer een supersleutel. Je hebt beide cursus nodig en jaar om de andere attributen in de set te bepalen.

Echter, de set {id, course, year, teacher} is een supersleutel, maar geen kandidaatsleutel. Als u bijvoorbeeld het kenmerk leraar verwijdert, de resterende set is nog steeds een superkey. In dit geval kunt u zelfs elk kenmerk verwijderen uit {id, course, year, teacher} , en de resterende set zal nog steeds een supertoets zijn.

Merk op dat een minimale supersleutel niet de supersleutel met het kleinste aantal elementen betekent. Beide {id} en {course, year} zijn kandidaatsleutels, ook al hebben ze een ander aantal elementen.

Algoritme:verifiëren dat een set attributen een kandidaatsleutel is

Dit is het algemene databaseontwerpprobleem:hoe verifieer je of een set attributen een kandidaatsleutel is?

Hier is het algoritme om het te verifiëren:

  • Stap 1:Controleer of de opgegeven set een supersleutel is. Bereken de sluiting van attributen in de set. Als de sluiting de verzameling van alle attributen is, is de verzameling een supersleutel.
  • Stap 2:Controleer of de supersleutel minimaal is. Verwijder elk attribuut, één voor één. Als de resterende set een supersleutel is, is de supersleutel niet minimaal en is de set geen kandidaatsleutel. Als u geen van de kenmerken kunt verwijderen en de eigenschap superkey kunt behouden, is de set een kandidaatsleutel.

Laten we bijvoorbeeld eens kijken of de set {course, year} is inderdaad een kandidaatsleutel.

  • Stap 1:Laten we de afsluiting van {course, year} berekenen. Met behulp van het sluitingsalgoritme concluderen we dat de sluiting inderdaad {id, course, year, teacher, price, spots} is. Dus de set {course, year} is inderdaad een supersleutel.
  • Stap 2. Laten we proberen cursus te verwijderen van het stel. We blijven zitten met de set {year}. Er is geen functionele afhankelijkheid met slechts jaar als de linkerkant. De sluiting van deze set is dus {year} . Evenzo, wanneer we het kenmerk jaar verwijderen, de afsluiting van de resterende set is {course}. Geen van beide {jaar} noch {course} zijn superkeys, dus de set {course, year} is een minimale supersleutel en dus een kandidaatsleutel.

Als je dit artikel leuk vond, bekijk dan andere normalisatie-artikelen op onze blog.

Als je een student bent die databaselessen volgt, zorg er dan voor dat je een gratis Academic Account aanmaakt in Vertabelo, onze online tool voor het tekenen van ER-diagrammen. Hiermee kunt u logische en fysieke ER-diagrammen rechtstreeks in uw browser tekenen.

Vertabelo ondersteunt PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift en andere relationele databases. Probeer het uit en zie hoe gemakkelijk het is om aan de slag te gaan!


  1. Kolom toevoegen of verwijderen met behulp van GUI in SQL Server - SQL Server / T-SQL-zelfstudie, deel 39

  2. ProxySQL 2.0 uitvoeren en configureren voor MySQL Galera Cluster op Docker

  3. Hoe u de native gecompileerde opgeslagen procedures van Hekaton niet aanroept?

  4. MySQL:record invoegen indien niet aanwezig in tabel