sql >> Databasteknik >  >> RDS >> Database

Vad är en kandidatnyckel i databasdesign?

En kandidatnyckel är ett viktigt begrepp i databasnormalisering. Läs vidare för att ta reda på vad en kandidatnyckel är och hur du kontrollerar om en uppsättning attribut är en kandidatnyckel.

Kandidatnyckeln, även kallad nyckel är en viktig del av databasdesign. Det är den teoretiska grunden för tekniska begrepp som primära och alternativa (unika) nycklar. Varje databasdesigner bör vara medveten om hur man identifierar kandidatnycklar och hur man väljer rätt för sitt bord.

Begreppet kandidatnyckel lärs ut i alla universitetets databaskurser som en del av databasnormaliseringsteorin. De vanliga problemen du kommer att möta när du lär dig om kandidatnycklar är att verifiera om en given uppsättning attribut är en kandidatnyckel och att hitta alla kandidatnycklar för en relation.

Att förstå kandidatnycklar är viktigt för att förstå de normala formerna i databastabeller. Denna kunskap hjälper dig att komma ihåg reglerna för de vanligaste normalformerna.

I den här artikeln kommer vi att förklara konceptet med kandidatnycklar i enkla termer. Dessutom visar vi dig hur du verifierar om en uppsättning attribut är en kandidatnyckel.

Grundläggande terminologi för databasnormalisering

Innan du läser om kandidatnycklar, se till att du är bekant med den grundläggande normaliseringsterminologin. Låt oss kort gå igenom de viktigaste termerna.

En relation är det teoretiska namnet för en databastabell. En relation (tabell) har ett namn och består av namngivna attribut (kolumner).

Ett funktionellt beroende i en relation (A -> B ) berättar att när två rader har samma värden för alla attribut i uppsättning A, kommer de också att ha samma värden för alla attribut i uppsättning B.

stängningen av en uppsättning attribut är uppsättningen av de attribut som funktionellt kan bestämmas från denna uppsättning. Du kan granska algoritmen för att beräkna stängningen av attribut här.

Supernycklar

Informellt sett är en kandidatnyckel en uppsättning attribut som unikt identifierar en rad.

Per definition är en kandidatnyckel en minimal supernyckel. Så vad betyder detta? En supernyckel är ett attribut eller en uppsättning attribut så att dess stängning är alla attribut i relationen.

Låt oss se några exempel. Här har vi tabellen CourseEditions. Den lagrar information om kursupplagor.

Varje år kan en viss kurs undervisas av en annan lärare, med ett annat pris och olika platser. Vi har alltså följande funktionella beroenden:

  • id -> kurs, år, lärare, pris, platser – ID bestämmer alla andra attribut
  • kurs, årtal -> id, lärare, pris, platser – kursen och året avgör ID, lärare, pris och platser.

CourseEditions

id kurs år lärare pris fläckar
1 Databaser 2019 Chris Cape 100 45
2 Matematik 2019 Daniel Parr 80 34
3 Databaser 2020 Jennifer Clock 110 30

Vilka är supernycklarna i den här tabellen? Först bildar alla attribut en supernyckel, så uppsättningen {id, course, year, teacher, price, spots} är en supernyckel. Kom ihåg att uppsättningen av alla attribut är en supernyckel i alla tabeller.

Finns det några mindre supernycklar i den här tabellen? Ja det finns. Uppsättningen {id} är en supernyckel. Vi har det funktionella beroendet id -> kurs, år, lärare, pris, platser , och naturligtvis har vi det triviala beroendet id -> id . När vi har id, vi kan bestämma alla andra attribut från de funktionella beroenden.

Uppsättningen {kurs, år} är också en supernyckel. Vi har det funktionella beroendet kurs, år -> id, lärare, pris, platser , och vi har de triviala funktionella beroendena kurs -> kurs och år -> år . När vi har kurs och år , kan vi bestämma alla andra attribut från de funktionella beroenden.

Uppsättningen {id, kurs, år, lärare} är också en supernyckel. Vi har id , kurs och år . Så vi kan bestämma alla andra attribut i tabellen med dessa tre attribut.

Å andra sidan, uppsättningen {lärare} är inte en supernyckel. Om vi ​​känner läraren, vi kan inte fastställa någon annan egenskap än läraren. Uppsättningen {lärare, pris} är inte heller en supernyckel. När vi har lärare och pris , vi kan inte fastställa några fler attribut.

Minsta supernycklar

Alla supernycklar är inte kandidatnycklar. För att vara en kandidatnyckel måste en supernyckel vara minimal, vilket innebär att om du tar några attribut ur det, kommer det inte att vara en supernyckel längre. Låt oss titta på några exempel.

Uppsättningen {id} är en supernyckel, och den är minimal. Du kan inte ta attribut ur det, eftersom du då har en tom uppsättning, och en tom uppsättning är inte en supernyckel. Alltså uppsättningen {id} är en kandidatnyckel.

Uppsättningen {kurs, år} är också en supernyckel och en kandidatnyckel. Om du tar bort något av attributen är den återstående uppsättningen inte längre en supernyckel. Du behöver båda kursen och år för att bestämma de andra attributen i uppsättningen.

Men uppsättningen {id, kurs, år, lärare} är en supernyckel men inte en kandidatnyckel. Om du till exempel tar bort attributet lärare, den återstående uppsättningen är fortfarande en supernyckel. I det här fallet kan du faktiskt ta bort alla attribut från {id, course, year, teacher} , och den återstående uppsättningen kommer fortfarande att vara en supernyckel.

Observera att en minimal supernyckel inte betyder supernyckeln med det minsta antalet element. Båda {id} och {kurs, år} är kandidatnycklar även om de har ett annat antal element.

Algorithm:Verifiera att en uppsättning attribut är en kandidatnyckel

Det här är det vanliga problemet med databasdesign:hur verifierar du om en uppsättning attribut är en kandidatnyckel?

Här är algoritmen för att verifiera det:

  • Steg 1:Kontrollera om den givna uppsättningen är en supernyckel. Beräkna stängningen av attribut i uppsättningen. Om stängningen är en uppsättning av alla attribut är uppsättningen en supernyckel.
  • Steg 2:Kontrollera om supernyckeln är minimal. Ta bort varje attribut, ett i taget. Om den återstående uppsättningen är en supernyckel är supernyckeln inte minimal och uppsättningen är inte en kandidatnyckel. Om du inte kan ta bort något av attributen och behålla supernyckelegenskapen är uppsättningen en kandidatnyckel.

Låt oss till exempel kontrollera om uppsättningen {kurs, år} är verkligen en kandidatnyckel.

  • Steg 1:Låt oss beräkna stängningen av {kurs, år}. Med hjälp av stängningsalgoritmen drar vi slutsatsen att stängningen verkligen är {id, kurs, år, lärare, pris, platser}. Alltså uppsättningen {kurs, år} är verkligen en supernyckel.
  • Steg 2. Låt oss försöka ta bort kurs från uppsättningen. Vi är kvar med setet {year}. Det finns inget funktionellt beroende med bara år som vänster sida. Därför är stängningen av denna uppsättning {year} . På samma sätt, när vi tar bort attributet year, stängningen av den återstående uppsättningen är {course}. Inte heller {year} inte heller {kurs är supernycklar, så uppsättningen {kurs, år} är en minimal supernyckel och därmed en kandidatnyckel.

Om du gillade den här artikeln, kolla in andra normaliseringsartiklar på vår blogg.

Om du är student som tar databasklasser, se till att skapa ett gratis akademiskt konto i Vertabelo, vårt online ER-diagramritningsverktyg. Det låter dig rita logiska och fysiska ER-diagram direkt i din webbläsare.

Vertabelo stöder PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift och andra relationsdatabaser. Testa det och se hur lätt det är att komma igång!


  1. Falsk främmande nyckel-begränsning misslyckas

  2. PHP-visningsbild BLOB från MySQL

  3. Oracle SQL:Kolumn inte tillåten

  4. Hantera PostgreSQL High Availability – Del I:PostgreSQL Automatic Failover