sql >> Database >  >> RDS >> Oracle

Superkey, kandidaatsleutel &primaire sleutel

Omdat je geen tekstboekdefinities wilt, losjes gesproken, is een supertoets een reeks kolommen die op unieke wijze een rij definieert.

Deze set kan een of meer elementen bevatten en er kan meer dan één supersleutel voor een tafel zijn. Meestal doe je dit door middel van functionele afhankelijkheden.

In uw voorbeeld neem ik aan:

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

In dit geval is een superkey elke combinatie die het studentnummer bevat.

Dus de volgende zijn supertoetsen

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

Neem nu aan dat als PhoneNumber uniek is (die tegenwoordig telefoons deelt), de volgende ook supertoetsen zijn (naast wat ik hierboven heb vermeld).

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

Een kandidaatsleutel is gewoon de "kortste" supersleutel. Teruggaand naar de eerste lijst met supersleutels (d.w.z. het telefoonnummer is niet uniek), de kortste supersleutel is StudentNumber.

De primaire sleutel is meestal alleen de kandidaatsleutel.



  1. JDBC-verbindingen in pool sluiten

  2. Hoe kan ik kolommen afzonderlijk tellen en groeperen met MySQL?

  3. ORA-02070:database ondersteunt in deze context niet

  4. Zoek een tabel voor Point in Polygon met MySQL