Det här är ett avsnitt i en
webbkurs om databaser
som finns fritt tillgänglig på adressen
http://www.databasteknik.se/webbkursen/.
Senaste ändring:
18 juli 2005.
Av Thomas Padron-McCarthy. Copyright, alla rättigheter reserverade, osv. Skicka gärna kommentarer till webbkursen@databasteknik.se.
|
Raderna brukar kallas tupler. Kolumnerna brukar kallas attribut.
Titta på den här tabellen, som vi kan kalla Medlem (tabell 1), och som innehåller data om medlemmarna i en klubb:
Medlemsnummer | Namn | Telefonnummer |
---|---|---|
2 | Stina | 282677 |
3 | Saddam | 260088 |
4 | Lotta | 174590 |
1 | Olle | 260088 |
Varje tupel (rad) innehåller data om en medlem i klubben. Varje attribut (kolumn) anger en viss egenskap som medlemmarna kan ha.
Tuplerna (raderna) i en relation utgör en mängd. Det betyder att tuplerna (raderna) inte har någon speciell ordning, utan de kan skrivas i vilken ordning som helst. Det kan inte heller förekomma några dubletter, dvs flera tupler med samma värde på alla attributen (kolumnerna).
Ibland definierar man en eller flera nycklar. En nyckel är ett attribut, eller en kombination av attribut, vars värden är unika. Om man har en nyckel i en relation, så kan det inte finnas flera tupler med samma värde på alla attribut som ingår i nyckeln. Nyckeln kan därför användas för att ange eller "peka ut" en viss tupel (rad), så att man inte blandar ihop den med de andra tuplerna. I tabellen Medlem ovan är attributet Medlemsnummer en nyckel, om vi antar att medlemsnummer är unika. Attributen Namn och Telefonnummer kan vi inte använda som nycklar, eftersom vi vet att namn på personer inte brukar vara unika, och eftersom flera medlemmar kan bo på samma ställe och ha samma telefonnummer.
Relationen innehåller bara enkla och atomära värden. Att värdena är enkla betyder att man inte kan ha mer än ett enda värde per ruta. Om en person, i relationen Medlem ovan, har två olika telefonnummer, kan vi alltså inte skriva in båda telefonnumren på samma rad. Vi måste använda två olika rader för att lagra detta. Att värdena är atomära betyder att vi (normalt) bara arbetar med hela telefonnumret, och inte tittar på delar av det. Att relationen har enkla och atomära värden kallas också första normalformen.
Det finns också något som kallas null-värden. Om en person inte har någon telefon, eller om vi inte vet telefonnumret, kan vi skriva värdet null i det attributet. Null är inte samma sak som 0. Om till exempel en temperaturangivelse satts till null betyder det att det inte finns någon temperatur, och det är ju inte samma sak som en temperatur på 0 grader.
Därför talar vi om relationens schema (även kallat intension) och relationens innehåll (även kallat instans eller extension). I schemat ingår bland annat vilka attribut som relationen har, deras domäner (dvs vilka värden de kan innehålla), och vilka nycklar som finns.
Vi börjar med att kalla ett attribut, eller en kombination av attribut, vars värden garanterat är unika, för en supernyckel. En supernyckel kan innehålla "onödigt" många attribut. I relationen Medlem finns fyra supernycklar:
En kandidatnyckel är en minimal supernyckel, dvs en supernyckel där man inte kan ta bort några attribut om den fortfarande ska vara garanterat unik. I relationen Medlem finns bara en kandidatnyckel, nämligen attributet Medlemsnummer. (Men en kandidatnyckel kan vara sammansatt av flera attribut, om alla behövs för att den ska bli unik.)
Det finns alltid minst en supernyckel och minst en kandidatnyckel i varje relation. Samtliga attribut tillsammans utgör alltid en supernyckel, för vi har ju sagt tidigare att det inte kan finnas två rader med samma värde på alla attribut. Alltså är kombinationen av alla attributen garanterat unik, och därför en supernyckel. (Att bevisa att det finns minst en kandidatnyckel lämnas som övning till den intresserade läsaren. [Svar]) Kandidatnycklarna heter kandidatnycklar eftersom det är bland dessa kandidater som vi väljer en primärnyckel. Vi väljer alltid en primärnyckel i varje relation, och det är primärnyckeln som oftast används för att identifiera tupler i tabellen.
De övriga kandidatnycklarna, som inte valdes som primärnyckel, kallas alternativnycklar.
Språkförbistring: När man säger nyckel, som i att "den här kolumnen är en nyckel", brukar man för det mesta mena kandidatnyckel: "den här kolumnen är en kandidatnyckel". Om man säger nyckeln, i bestämd form, brukar man mena primärnyckeln. |
Sektionskod | Namn | Ledare |
---|---|---|
A | Bowling | 4 |
C | Konstsim | 2 |
B | Kickboxing | 4 |
Vi antar att Sektionskod är primärnyckel, med Namn som alternativnyckel.
Attributet Ledare är ett referensattribut, även kallat främmande nyckel, till relationen Medlem. Ett referensattribut refererar alltid till primärnyckeln i en annan (eller samma!) relation. Vi ser till exempel att ledaren för bowlingsektionen är medlem nummer 4. Alltså går vi till relationen Medlem, letar rätt på medlem nummer 4, och ser att det är Lotta.
Namnet främmande nyckel på referensattribut beror på att referensattributets domän, dvs vilka värden det kan ha, är samma som primärnyckeln i den relation som det refererar till.
Om det står att medlem nummer 4 leder en sektion, så måste det också finnas en medlem nummer 4 i medlemstabellen. Detta villkor kallas referensintegritet.
Sedan relationen Deltar (tabell 3), som anger vilka medlemmar som deltar i vilka sektioner:
Medlem | Sektion |
---|---|
1 | A |
1 | B |
1 | C |
2 | C |
3 | A |
Medlem är referensattribut till relationen Medlem, och Sektion är referensattribut till relationen Sektion. Medlem och Sektion utgör tillsammans den enda kandidatnyckeln, och blir därför automatiskt primärnyckel.
relationsmodellen, relationsdatabas, relation (eller tabell), tupel (eller rad), attribut (eller kolumn), primärnyckel, kandidatnyckel, supernyckel, referensattribut (eller främmande nyckel), referensintegritet