Vad är Relationsdatabasdesign? Relationsdatabasdesign nikosd@kth.se 08-7904460 rum 8522 Connolly/Begg (3rd edition) Kapitel 4., 4.2 och 5 (4th edition) Kapitel 5., 5.2 och 6 (5th edition) Kapitel 6., 6.2 och 7 Logisk relationsdatabasdesign Omvandla en konceptuell modell till en logisk relationsdatabasmodell (i 3NF) Kallas ofta för översättning av konceptuell modell till relationsdatabasmodell eller till logisk modell Fysisk relationsdatabasdesign Omvandla en logisk relationsdatabasmodell till en fysisk relationsdatabasmodell 2 Metod Begrepp Utgå från den konceptuella modellen Översätt klasser, attribut och associationer till tabeller, kolumner och nycklar Validera den framtagna modellen med normalisering Validera att modellerna stämmer överens (tänk på multipliciteter och andra regler) Modifiera vid behov (gå tillbaka till den konceptuella modellen vid behov) Tabeller (relationer) Kolumner, attribut Nycklar Primärnycklar Främmande nycklar Surrogatnycklar Kandidatnycklar Alternativa nycklar Sammansatta nycklar Datatyper (domäner) Andra regler UNIQUE, NOT NULL Regler för främmande nycklar 3 4
Notation Notation (mer komplett) Tabellnamn Kolumnnamn Primärnyckel Datatyp Andra regler för kolumner *Främmande nyckel Relationens multiplicitet: minimum maximum 0 många 5 6 Översättning Exempel Klasser Attribut Envärda (max en) Flervärda (max många) Partiella (min noll) Sammansatta (ett attribut - flera kolumner) Associationer (Relationstyper) Ett-till-ett (:) Ett-till-många (:M) Många-till-många (M:M) Arv bästa vän läser födelseår.. Number telefon String An stä lld lön.. Number äger jobbar för Tidning Unique 0.. webbplats 0.. String 7 8
Klasser Envärda attribut Klass Tabell Klassens namn blir tabellens namn Från klassen till motsvarande tabell Attributets namn i tabellen kan/bör vara samma som i klassen Tidning Unique 9 0 Flervärda attribut Flervärda attribut Egen tabell för varje flervärt attribut Attributets namn kan bli den nya tabellens namn Man kan också omvandla den konceptuella modellen för att få bort det flervärda attributet födelseår.. Number telefon String Men det är inte klart. Vi behöver koppla tabellerna med en främmande nyckel. Men då måste man ha en primärnyckel i tabellen : födelseår.. Number telefon String födelseår.. Number har telefon Telefon Telefon.. String Sedan kan man hantera denna ett-till-många-association. 2
Sammansatta attribut Partiella attribut En kolumn för varje del av det sammansatta attributet Hantera som vanliga attribut men låt kolumnerna acceptera NULL, eller Skapa en ny tabell (en subklass) för att lägga det partiella attributet. Det här borde eventuellt göras redan i den konceptuella modellen. Företa g webbplats 0.. String MedWP webbplats.. String 3 4 Associationer/Relationer Ett-till-ett relationer För att översätta associationer behöver man främmande nycklar. För att skapa främmande nycklar måste man först ha primärnycklar. Då vissa primärnycklar är beroende av andra främmande nycklar, gör man dessa parallellt. Dock är det lämpligt att börja med de oberoende tabellerna/klasserna (strong entities). En främmande nyckel på den ena sidan Välj den sidan som är bäst för att undvika NULL, dvs främmande nyckeln på noll-sidan äger 0.. 5 6
Ett-till-många relationer Ett-till-många relationer En främmande nyckel på många-sidan jobbar för Anställd lön.. Number Även om relationen är rekursiv gäller samma regel: En främmande nyckel på många-sidan bästa vän 7 8 Många-till-många relationer Arv En ny tabell med två främmande nycklar: en till varje sida Den nya tabellens primärnyckel blir oftast en sammansatt nyckel som består av de två främmande nycklarna Tidning Unique Subklassens tabell får samma primärnyckel som superklassens tabell. Primärnyckeln i subklassens tabell är en främmande nyckel till primärnyckeln i superklassens tabell. Anställd lön.. Number 9 20
Arv Resultat Alla andra arvsregler (mandatory OR, optional OR, etc) blir verksamhetsregler. Relationen mellan superklassens tabell och subklassens tabell blir en vanlig ett-till-ett-relation. En relationsdatabas förstår inte att det finns arv. 2 22 Validera resultatet Tips Kontrollera att modellen stämmer överens med den konceptuella modellen. Om något inte kunde översättas, kan det t ex bli en verksamhetsregel. Kontrollera att modellen är i 3NF. Ofta blir modellen direkt i 3NF om man har en bra konceptuell modell. Om en refererad primärnyckel är sammansatt, måste främmande nyckeln också vara sammansatt. Om en association är 0..-till-0.. kan man placera främmande nyckeln på vilken sida som helst, (eller kan man ändra den konceptuella modellen). Om flera FN-relationer går mellan samma tabeller, skall man namnge främmande nycklarna (kolumnerna) så att man kan skilja på relationerna. Välj namn för tabeller och kolumner som visar vad ett värde i kolumnen / en rad i tabellen är. Undvik pluralform. För tabeller som refereras av flera andra, kan det vara lämpligt att skapa surrogatnycklar om de naturliga nycklarna är för stora. 23 24
Konceptuell modell vs. Relationsmodell Konceptuell modell Inga relationsdatabasspecifika grejer Inga surrogatnycklar Inga primärnycklar (dock OK med identifierare) Inga främmande nycklar Endast attribut från den modellerade verksamheten (Helst inga flervärda attribut) Relationsdatabasmodell Inga flervärda attribut Inga många-till-många-relationer Inget arv Nycklar (primärnycklar & främmande nycklar) 25