sql >> Databasteknik >  >> RDS >> Oracle

Supernyckel, kandidatnyckel och primärnyckel

Eftersom du inte vill ha läroboksdefinitioner, löst sett, är en supernyckel en uppsättning kolumner som unikt definierar en rad.

Denna uppsättning kan ha ett eller flera element, och det kan finnas mer än en supernyckel för ett bord. Du brukar göra detta genom funktionella beroenden.

I ditt exempel antar jag:

StudentNumber    unique
FamilyName     not unique
Degree     not unique
Major      not unique
Grade      not unique
PhoneNumber    not unique

I det här fallet är en supernyckel vilken kombination som helst som innehåller studentnumret.

Så följande är supernycklar

StudentNumber
StudentNumber, FamilyName
StudentNumber, FamilyName, Degree
StudentNumber, FamilyName, Degree, Major
StudentNumber, FamilyName, Degree, Major, Grade
StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber
StudentNumber, Degree
StudentNumber, Degree, Major
StudentNumber, Degree, Major, Grade
StudentNumber, Degree, Major, Grade, PhoneNumber
StudentNumber, Major
StudentNumber, Major, Grade
StudentNumber, Major, Grade, PhoneNumber
StudentNumber, Grade
StudentNumber, Grade, PhoneNumber
StudentNumber, PhoneNumber

Anta nu att om Telefonnummer är unikt (som delar telefoner nu för tiden), så är följande också supernycklar (utöver det jag har listat ovan).

PhoneNumber
PhoneNumber, Grade, 
PhoneNumber, Major, Grade
PhoneNumber, Degree, Major, Grade
PhoneNumber, FamilyName, Degree, Major, Grade
PhoneNumber, Major
PhoneNumber, Degree, Major
PhoneNumber, FamilyName, Degree, Major
PhoneNumber, StudentNumber, FamilyName, Degree, Major
PhoneNumber, Degree
PhoneNumber, FamilyName, Degree
PhoneNumber, StudentNumber, FamilyName, Degree
PhoneNumber, FamilyName
PhoneNumber, StudentNumber, FamilyName

En kandidatnyckel är helt enkelt den "kortaste" supernyckeln. Om du går tillbaka till den första listan över supernycklar (dvs. telefonnumret är inte unikt), är den kortaste supernyckeln StudentNumber.

Den primära nyckeln är vanligtvis bara kandidatnyckeln.



  1. Så här väljer du senaste veckans data från dagens datum

  2. verify_queryable_inventory returnerade ORA-20008:Timeout

  3. MySQL - ORDER BY-värden inom IN()

  4. Introduktion till Python SQL-bibliotek