Relationsmodellen och syntetisk databasdesign

Presensational content template slides
Relationsmodellen
och syntetisk
databasdesign
Den teoretiska grunden för
relationsdatabaser
Från konceptuellt schema till
databas
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Relationsmodellen
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Bil
Ägare
En
En relationsdatabas
relationsdatabas är
är en
en databas
databas
som
som uppfattas
uppfattas av
av användaren
användaren som
som
en
en samling
samling tabeller
tabeller -- oberoende
oberoende av
av
hur
hur datamängden
datamängden fysiskt
fysiskt är
är lagrad.
lagrad.
Relationsmodellen
Relationsmodellen är
är grunden
grunden för
för
relationsdatabaserna.
relationsdatabaserna.
1
Presensational content template slides
Relationsmodellens grundbegrepp
Tabell/Relationsnamn
Varje tabell identifieras av
sitt namn
Relationsschema (tabell-definition)
En lista av attribut (kolumner) som specificerar
vad relationen handlar om
Attribut (kolumn)
En etikett som kan
användas för att
beskriva data i en
tabell .
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
TABELLNAMN
Personnr:
String
Namn:
String
Ålder:
Integer
Lön:
Integer
1122
Eva
22
19000
2233
Olle
33
29000
3344
Erik
44
39000
4455
Pelle
55
49000
5566
Stina
66
59000
Tuppel (rad)
En lista, en n-tuppel, av
värden som passar med
relationsschemat
Domän
En mängd av värden
som används för att
ange tillåtna värden
hos en kolumn
Relation (tabell)
En mängd av tupler
Ett relationsschema
Tabell/Relationsnamn
Varje tabell identifieras av
sitt namn
Relationsschema (tabelldefinition)
En lista av attribut (kolumner) som
specificerar vad relationen handlar om
TABELLNAMN
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Personnr:
String
Namn.
String
Ålder:
Integer
Lön:
Integer
Graden
Graden för
för ett
ett relationsschema
relationsschema är
är
lika
lika med
med antalet
antalet kolumner
kolumner ii
schemat.
schemat.
II detta
detta exempel
exempel är
är graden
graden 4.
4.
Attribut (kolumn)
En etikett som kan
användas för att
beskriva data I en
tabell
Domän
En mängd av värden
som används för att
ange tillåtna värden
hos en kolumn
Ett relationsschema kan skrivas linjärt på
följande enkla sätt (där identifierande attribut
vanligen är understruket):
TABELLNAMN(Personnr, Namn, Ålder, Lön)
2
Presensational content template slides
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
En relation
Personnr:
String
Namn:
String
Ålder:
Integer
Lön:
Integer
1122
Eva
22
19000
2233
Olle
33
29000
3344
Erik
44
39000
4455
Pelle
55
49000
5566
Stina
66
59000
Kardinaliteten
Kardinaliteten för
för
en
en relation
relation är
är lika
lika
med
med antalet
antalet
tuppler
tuppler ii schemat.
schemat.
II detta
detta exempel
exempel är
är
kardinaliteten
kardinaliteten 5.
5.
Relation (tabell)
En mängd av tupler
Tuppel (rad)
En lista, en n-tuppel, av
värden som passar med
relationsschemat
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Relationer och relationsscheman
Personnr:
String
Namn:
String
Ålder:
Integer
Lön:
Integer
1122
Eva
22
19000
2233
Olle
33
29000
3344
Erik
44
39000
4455
Pelle
55
49000
5566
Stina
66
59000
Personnr:
String
Namn:
String
Ålder:
Integer
Lön:
Integer
1122
Lisa
22
19000
2233
Pia
33
29000
6677
Nils
77
69000
4545
Pelle
44
29000
7788
Greta
55
59000
Det
Det kan
kan finnas
finnas
flera
flera relationer
relationer
som
som instansierar
instansierar
samma
samma
relationsschema.
relationsschema.
3
Presensational content template slides
Egenskaper hos relationer
En relation är en mängd
„ Varje rad (tuppel) är unik
„ En mängd har inga dublett-element!
„ Ordningen mellan raderna är oväsentlig
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
„ Elementen i en mängd är oordnade!
Men,
Men, fysiskt,
fysiskt, då,
då,
raderna
raderna måste
måste
väl
väl ändå
ändå ligga
ligga ii
någon
någon slags
slags
ordning?
ordning?
Javisst,
Javisst, på
på en
en dators
dators hårddisk
hårddisk kommer
kommer
raderna
raderna förstås
förstås att
att ligga
ligga på
på olika
olika ställen,
ställen,
eventuellt
eventuellt sorterade
sorterade ii sekvens.
sekvens.
Användaren
Användaren behöver
behöver dock
dock inte
inte känna
känna till
till
något
något om
om hur
hur raderna
raderna ligger
ligger lagrade
lagrade
fysiskt
fysiskt för
för att
att kunna
kunna använda
använda databasen!
databasen!
När
När man
man optimerar
optimerar databaser
databaser måste
måste man
man
dock
dock ta
ta hänsyn
hänsyn till
till hur
hur raderna
raderna är
är
sorterade
sorterade fysiskt.
fysiskt.
Egenskaper hos relationer
En relation är en mängd
„ Varje rad (tuppel) är unik
„ En mängd har inga dublett-element!
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
PERSON
PERSON
Personnr
Namn
Personnr
Namn
111111-1111
Olle
111111-1111
Olle
111111-2222
Pelle
111111-1111
Olle
999999-9999
Lisa
999999-9999
Lisa
Relation
Ej relation!
4
Presensational content template slides
Egenskaper hos relationer
En relation är en mängd
„ Ordningen mellan raderna är oväsentlig
„ Elementen i en mängd är oordnade!
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
PERSON
PERSON
Personnr
Namn
Personnr
Namn
111111-1111
Olle
111111-2222
Pelle
111111-2222
Pelle
111111-1111
Olle
999999-9999
Lisa
999999-9999
Lisa
Samma relation
Egenskaper hos relationer
En rad är en n-tuppel
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
„ Ordningen mellan attributen är väsentlig!
Personnr
Namn
Vikt
111111-1111
Olle
81
111111-2222
Pelle
59
….
….
999999-9999
Lisa
En
63
tabe
ll!
Olika
tabeller!
Namn
Personnr
Vikt
Olle
111111-1111
81
Pelle
222222-2222
59
….
….
Lisa
999999-9999
En
an
ann
ell!
tab
63
5
Presensational content template slides
Nycklar
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Ett
Ett sätt
sätt att
att visa
visa
vad
vad som
som utgör
utgör
primärnyckelprimärnyckelkolumn
kolumn
(kolumner
(kolumner om
om
primärnyckeln
primärnyckeln är
är
sammansatt)
sammansatt) är
är
att
att stryka
stryka under
under
den!
den!
Personnr
Namn
Vikt
111111-1111
Olle
81
111111-2222
Pelle
59
….
….
999999-9999
Lisa
63
„ En nyckel är en mängd attribut (t ex ett) som unikt
identifierar en rad.
„ Mängden av alla sådana möjliga nycklar för en viss
tabell kallas tabellens kandidatnycklar.
„ Det nyckel som av databas-administratören valts att
användas som identifierare av en rad kallas
primärnyckel – de övriga nycklarna kallas, efter valet
av primärnyckel, för alternativnycklar.
Övning - primärnyckel
FILMVISNING
Filmtitel
Biograf
Startid
Pris
Vilka attribut identifierar en rad unikt?
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Filmtitel
Filmtitel, Biograf
Filmtitel, Biogfraf, Starttid
Filmtitel, Biograf, Startid, Pris
6
Presensational content template slides
En möjlig lösning - primärnyckel
FILMVISNING
Filmtitel
Biograf
Startid
Pris
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Filmtitel
Filmtitel, Biograf
Filmtitel, Biogfraf, Starttid
Filmtitel, Biograf, Startid, Pris
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
NULL-värde
Regnr
Märke
Ägare
ABC123
Volvo
Pelle
DEF456
Saab
Eva
GHI789
Skoda
NULL
NULL används för att beteckna ett ’okänt’
värde på ett visst attribut på en viss rad.
NULL-värden anses problematiska eftersom
de kan tolkas på olika sätt.
Vad betyder NULL?
ƒ Värde finns men är okänt, just nu. Det
kanske registreras en ägare till bil GHI789
senare
ƒ Värde är ej tillämpligt (på alla rader, jfr
”arvs-hierarkier”)
ƒ Värde saknas
7
Presensational content template slides
Primärnyckel
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
PERSON
Personnr
Namn
Vikt
111111-1111
Olle
81
111111-2222
Pelle
59
….
….
999999-9999
Lisa
63
Att
Att välja
välja en
en kolumn
kolumn (eller
(eller flera
flera kolumner)
kolumner) till
till
primärnnyckel
primärnnyckel innebär
innebär att
att ingen
ingen del
del av
av dessa
dessa
kolumner
kolumner någonsin
någonsin får
får vara
vara NULL
NULL
(primärnyckelns
(primärnyckelns roll
roll är
är ju
ju att
att identifiera
identifiera en
en
rad
rad och
och den
den måste
måste alltså
alltså alltid
alltid finnas!).
finnas!).
Alternativnycklar
Alternativnycklar får
får däremot
däremot vara
vara NULL
NULL
(men
(men måste
måste inte
inte vara
vara det).
det). Denna
Denna regel
regel
brukar
brukar kallas
kallas entity
entity integrity.
integrity.
Vad är en främmande nyckel?
Kolumen
Kolumen ‘Ägare’
‘Ägare’ ii tabellen
tabellen BIL
BIL
utgör
utgör främmande
främmande nyckel
nyckel mot
mot
primärnyckeln
primärnyckeln ii tabellen
tabellen PERSON
PERSON
BIL
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
PERSON
Personnr
Namn
Regnr
Ägare
111111-1111
Olle
ABC123
111111-1111
111111-2222
Pelle
DEF111
222222-2222
222222-2222
Pelle
BEF222
999999-8888
999999-8888
Lisa
TAX455
999999-8888
„ En främmande nyckel i en tabell är ett eller flera
attribut som refererar till primärnyckeln i en ANNAN
tabell (eller i vissa specialfall mot samma tabell)
„ Alla kolumnvärden som förekommer i främmande
nyckel-kolumnerna (kolumnen) måste motsvaras av
värden i den tabell som den främmande nyckeln
refererar till, eller också vara NULL. Denna regel
brukar kallas referential integrity
8
Presensational content template slides
Vad är en främmande nyckel?
BIL
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
PERSON
Personnr
Namn
Regnr
Ägare
111111-1111
Olle
ABC123
111111-1111
111111-2222
Pelle
DEF111
222222-2222
222222-2222
Pelle
BEF222
777777-1111
999999-8888
Lisa
TAX455
999999-8888
Brott
Brott mot
mot referential
referential integrity
integrity –
– främmande
främmande nyckelnyckelvärdet
värdet ‘777777-1111’
‘777777-1111’ refererar
refererar inte
inte till
till något
något
existerande
existerande primärnyckelvärde!
primärnyckelvärde!
Främmande nycklar - syntax
HOTELL
KUND
Pnr
Rum
Hotellnamn Antal_stjärnor
Hotell
}
RUM
Rumsnr Hotellnamn
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
}
Främmande
Främmande nycklar
nycklar kan
kan specificeras
specificeras grafiskt,
grafiskt, som
som ovan,
ovan, via
via pilar.
pilar.
Pilen
Pilen utgår
utgår från
från den
den (de)
(de) kolumn
kolumn (-er)
(-er) som
som utgör
utgör främmande
främmande
nyckel
nyckel och
och pekar
pekar på
på motsvarande
motsvarande primärnyckel-kolumner.
primärnyckel-kolumner.
Ett
Ett annat
annat sätt
sätt är
är att
att skriva
skriva ut
ut vilka
vilka främmande
främmande nyckel-kolumner
nyckel-kolumner
som
som svarar
svarar mot
mot vilka
vilka primärnyckel-kolumner.
primärnyckel-kolumner. II fallet
fallet ovan
ovan har
har
KUND
KUND en
en sammansatt
sammansatt främmande
främmande nyckel
nyckel mot
mot RUM
RUM och
och RUM
RUM har
har
en
en främmande
främmande nyckel
nyckel mot
mot HOTELL:
HOTELL:
KUND.(Rum,
KUND.(Rum, Hotell)
Hotell) utgör
utgör FN
FN mot
mot RUM.(Rumsnr,
RUM.(Rumsnr, HotellNamn)
HotellNamn)
RUM.Hotellnamn
RUM.Hotellnamn utgör
utgör FN
FN mot
mot HOTELL.Hotellnamn
HOTELL.Hotellnamn
9
Presensational content template slides
Surrogatnycklar
BOENDE
Namn
Från
Till
Olle
2000-08-28
2000-09-01
Lisa
1999-09-01
2006-01-02
Petia
2004-05-06
2004-05-07
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Vanliga användardefinierade nycklar kan vara bristfälliga
på olika sätt:
„ De förändras över tid. T ex kan verksamhetsreglerna ändras,
det attribut som en gång var unikt kanske inte längre är det
„ Olika användargrupper kan använda olika kolumner för att
identifiera en och samma tabell
„ Nycklar bestående av “riktiga” attribut kan bli mycket långa
(i värsta fall alla kolumnerna i tabellen)
En
En surrogatnyckel
surrogatnyckel är
är en
en konstgjord
konstgjord identifierare,
identifierare, genererad
genererad av
av
databashanteringssystemet
databashanteringssystemet som
som garanterar
garanterar att
att den
den alltid
alltid är
är unik.
unik.
Surrogatnycklar
el
ck
y
n
t
ga
rro
u
S
Id
Namn
Från
Till
111111-1111
Olle
2000-08-28
2000-09-01
111111-2222
Pelle
1999-09-01
2006-01-02
999999-8888
Lisa
2004-05-06
2004-05-07
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
„ Användarna behöver inte vara medvetna om
surrogatet
„ Surrogatnycklar är vanligen inte synliga i
användargränssnitt mot databasen. Fortfarande har
man alltså behov av att kunna använda ‘naturliga’
attribut (som Namn, Från, Till, etc.) i sökningar mot
databasen
„ Analys av vilka naturliga kolumner som eventuellt
identifierar en rad skall alltså alltid göras oberoende
av om surrogatnyckel används eller ej
„ Surrogatet används dock internt som en unik
identifierare och även i främmande nyckel-referenser
10
Presensational content template slides
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Syntetisk databasdesign – från konceptuellt
schema till relationsdatabasschema:
översättningsregler
Klassiagram
Relationsdatabasschema
Klass
Tabell
Envärt attribut
Kolumn
Flervärt attribut
Tabell + främmande nyckel
0/1:1 association
Främmande nyckel/tabell
0/1:M association
Generalisering
Främmande nyckel/tabell
Tabell + främmande
nycklar
Främmande nyckel/tabell
Regler
Nyckel, främmande nyckel
Regler
Domändef, triggers etc.
M:M association
Från klass till tabell
PERSON
Personnr: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Namn: String 1..1
Varje
Varje klass
klass ii klassdiagrammet
klassdiagrammet
översätts
översätts till
till en
en tabell
tabell ii
relationsdatabasschemat.
relationsdatabasschemat.
Attributen
Attributen ii klassen
klassen ger
ger upphov
upphov
till
till kolumner
kolumner och
och ibland
ibland till
till nya
nya
klasser.
klasser.
Klassens
Klassens identifierande
identifierande attribut
attribut
blir
blir en
en nyckel
nyckel ii tabellen.
tabellen.
PERSON
Personnr
Namn
11
Presensational content template slides
Från envärt attribut till kolumn
PERSON
Varje
Varje envärt
envärt attribut
attribut ii en
en klass
klass
ger
ger upphov
upphov till
till en
en kolumn
kolumn II
motsvarande
motsvarande tabell.
tabell.
Personnr: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Namn: String 1..1
PERSON
Personnr
Namn
Från flervärt attribut till tabell
Varje
Varje flervärt
flervärt attribut
attribut ger
ger
upphov
upphov till
till en
en extra
extra
tabell.
tabell.
PERSON
Personnr: String 1..1
Namn: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Titel: String 1..*
Primärnyckeln
Primärnyckeln ii den
den nya
nya
tabellen
tabellen är
är sammansatt
sammansatt
av
av det
det flervärda
flervärda attributet
attributet
tillsammans
tillsammans med
med den
den
gamla
gamla primärnyckelprimärnyckelkolumnen.
kolumnen.
Den
Den nya
nya tabellen
tabellen har
har en
en
främmande
främmande nyckelnyckelkolumn
som
refererar
kolumn som refererar till
till
primärnyckeln
primärnyckeln ii den
den
första
första tabellen.
tabellen.
TITEL
PERSON
Personnr
Namn
Personnr
Titel
12
Presensational content template slides
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Översättning av associationer
Varje
Varje 1:1
1:1 eller
eller 0:1
0:1
association
association mellan
mellan två
två
klasser
klasser kan
kan översättas
översättas
som
som en
en främmande
främmande
nyckel
nyckel mellan
mellan de
de två
två
tabeller
tabeller som
som svarar
svarar
mot
mot klasserna.
klasserna.
Men
Men om
om man
man
har
har en
en 0:1
0:1
association
association så
så
kan
kan man
man väl
väl
råka
råka ut
ut för
för
NULL-värden?
NULL-värden?
Jo,
Jo, så
så är
är det
det och
och NULLNULLvärden
värden vill
vill man
man ju
ju helst
helst
undvika.
undvika. Därför
Därför kan
kan
man
man ibland
ibland behöva
behöva
introducera
introducera extra
extra
tabeller
tabeller vid
vid
översättning
översättning av
av
associationer.
associationer.
Från 0:1 association till främmande
nyckel-kolumn
PERSON
BIL
0..1
Personnr: String 1..1
Namn: String 1..1
Märke: String 1..1
BIL
PERSON
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
0..1
Regnr: String 1..1
äger
Personnr
Namn
Regnr
Märke
Ägare
1122
Pelle
ABC123
Volvo
Pelle
2233
Eva
DEF456
Saab
Eva
3344
Nisse
GHI789
Skoda
NULL
En
En association
association med
med max-värde
max-värde 1
1 ii BÅDA
BÅDA rollerna
rollerna ger
ger upphov
upphov till
till en
en
främmande
främmande nyckel
nyckel ii endera
endera tabellen!
tabellen! Vi
Vi får
får välja!
välja!
Vet
Vet vi
vi att
att fler
fler PERSON:er
PERSON:er saknar
saknar BIL
BIL än
än BIL:ar
BIL:ar som
som saknar
saknar ägare
ägare så
så väljer
väljer vi
vi
lösningen
lösningen ovan!
ovan! Men
Men NULL-problem
NULL-problem blir
blir det
det hursomhelst
hursomhelst eftersom
eftersom båda
båda
rollerna
rollerna har
har 00 ii minimivärde!
minimivärde!
13
Presensational content template slides
Från 0:1 association till extra tabell
PERSON
BIL
0..1
0..1
Regnr: String 1..1
äger
Personnr: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Namn: String 1..1
PERSON
Märke: String 1..1
BILÄGANDE
BIL
Personnr
Namn
Ägare
Bil
Regnr
Märke
1122
Pelle
Pelle
ABC123
ABC123
Volvo
2233
Eva
Eva
DEF456
DEF456
Saab
3344
Nisse
GHI789
Skoda
II denna
denna översättning
översättning introducerar
introducerar vi
vi en
en extra
extra tabell
tabell för
för att
att
hantera
hantera associationen
associationen ”äger”.
”äger”. På
På detta
detta sätt
sätt undviker
undviker man
man
NULL-värden.
NULL-värden.
Från 0/1:M association till
främmande nyckel-kolumn
PERSON
BIL
0..1
Personnr: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Namn: String 1..1
Märke: String 1..1
Notera
Notera att
att ‘M’
‘M’
(“många”)
(“många”) också
också
ofta
ofta symboliseras
symboliseras
av
av ‘*’
‘*’ eller
eller ‘n’
‘n’
BIL
PERSON
Personnr
0..*
Regnr: String 1..1
äger
Namn
Regnr
Märke
Ägare
En
En 0:M
0:M eller
eller 1:M
1:M (där
(där alltså
alltså EN
EN av
av rollerna
rollerna har
har M
M som
som max-värde)
max-värde)
association
association översätts
översätts till
till en
en främmande
främmande nyckel.
nyckel. Den
Den nya
nya kolumnen
kolumnen placeras
placeras
på
på ”många-sidan”,
”många-sidan”, d.v.s.
d.v.s. ii den
den tabell
tabell som
som svarar
svarar mot
mot den
den klass
klass som
som ligger
ligger på
på
många-sidan
många-sidan av
av associationen.
associationen. Just
Just här,
här, eftersom
eftersom båda
båda rollerna
rollerna dessutom
dessutom
har
har 00 ii minimivärde
minimivärde så
så gäller
gäller samma
samma NULL-problematik
NULL-problematik som
som ii tidigare
tidigare bild.
bild.
14
Presensational content template slides
Från M:M association till extra tabell
PERSON
BIL
0..*
0..*
Regnr: String 1..1
äger
Personnr: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Namn: String 1..1
BILÄGANDE
PERSON
Personnr
Märke: String 1..1
Namn
Ägare
BIL
Bil
Regnr
Märke
En
En M:M
M:M association
association måste
måste alltid
alltid översättas
översättas till
till en
en extra
extra
tabell.
tabell. Denna
Denna tabell
tabell kommer
kommer att
att innehålla
innehålla främmande
främmande
nycklar
nycklar till
till primärnycklarna
primärnycklarna ii de
de tabeller
tabeller som
som svarar
svarar mot
mot
de
de associerade
associerade klasserna.
klasserna.
Översättning av generalisering
ANSTÄLLD
ISA
Avd.: String 1..1
Personnr: String 1..1
ISA
KONSULT
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
PERSON
Namn: String 1..1
Projekt: String 1..1
ANSTÄLLD
PERSON
KONSULT
Personnr Namn
Personn
Avd
Personnr
Projekt
1122
Pelle
1122
Sko
2233
Proj1
2233
Eva
Vid
Vid generalisering
generalisering så
så blir
blir var
var och
och en
en av
av subklasserna
subklasserna en
en egen
egen tabell
tabell med
med en
en
primärnyckel
primärnyckel som
som kommer
kommer från
från superklassen.
superklassen. Denna
Denna primärnyckel
primärnyckel blir
blir också
också en
en
främmande
främmande nyckel
nyckel mot
mot primärnyckeln
primärnyckeln ii den
den tabell
tabell som
som svarar
svarar mot
mot superklassen.
superklassen.
15
Presensational content template slides
Övning
PERSON
PERSON
Personnr: String 1..1
Personnr: String 1..1
Namn: String 1..1
Namn: String 1..1
1..1
1..1 gift_med
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ISA
ANSTÄLLD
Anstnr: String 1..1
ANSTÄLLD
Anstnr: String 1..1
Översätt
Översätt de
de två
två klassdiagrammen
klassdiagrammen ovan
ovan till
till två
två
olika
olika relationsdatabasscheman!
relationsdatabasscheman!
Övning forts.
PERSON
Personnr: String 1..1
Namn: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ISA
ANSTÄLLD
Anstnr: String 1..1
ANSTÄLLD
PERSON
Personnr
Namn
Personnr
Anstnr
16
Presensational content template slides
En svårare övning
PERSON
Personnr: String 1..1
Namn: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
1..1
1..1 gift_med
ANSTÄLLD
Anstnr: String 1..1
ANSTÄLLD
PERSON
Personnr
Namn
Personnr
Anstnr
En svårare övning
PERSON
PERSON
Personnr: String 1..1
Personnr: String 1..1
Namn: String 1..1
Namn: String 1..1
Informationsförlust!
1..1
gift_med
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ISA
1..1
ANSTÄLLD
Anstnr: String 1..1
Anstnr: String 1..1
ANSTÄLLD
PERSON
Personnr
Relationsmodellen
ANSTÄLLD
är semantiskt fattig!
Namn
Personnr
Anstnr
17
Presensational content template slides
Översättning av sammansatta identifierare
KURS
KURSTILLFÄLLE
1..1
Kurskod: Integer 1..1
0..*
av
Från: Date 1..1
Till: Date 1..1
Kursnamn: String
1..1
Ansvarig_lärare: String 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Översätt klasschemat till ett relationsdatabasschema!
Men
Men inget
inget av
av attributen
attributen ii klassen
klassen
KURSTILLFÄLLE
KURSTILLFÄLLE är
är ju
ju unikt?
unikt? Inte
Inte
ens
ens om
om vi
vi kombinerar
kombinerar ihop
ihop alla
alla
attributen
attributen har
har vi
vi en
en unik
unik
identifierare
identifierare (t
(t ex
ex kan
kan en
en lärare
lärare vara
vara
ansvarig
ansvarig för
för flera
flera kurstillfällen
kurstillfällen som
som
går
går samtidigt)?
samtidigt)?
Det
Det beror
beror på
på att
att en
en del
del av
av
ett
ett KURSTILLFÄLLE.s
KURSTILLFÄLLE.s
identifierare
identifierare helt
helt enkelt
enkelt
utgörs
utgörs av
av dess
dess association
association
mot
mot KURS!
KURS!
Översättning av sammansatta identifierare
KURS
KURSTILLFÄLLE
1..1
Kurskod: Integer 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Kursnamn: String
1..1
0..*
Från: Date 1..1
Till: Date 1..1
Ansvarig_lärare: String 1..1
KURSTILLFÄLLE
KURS
Kurskod
av
Kursnamn
Kurs
Från
Till
Ansvarig
Den
Den sammansatta
sammansatta primärnyckeln
primärnyckeln ii tabellen
tabellen KURSTILLFÄLLE
KURSTILLFÄLLE utgörs
utgörs av
av
kolumnerna
kolumnerna ‘Kurs’,
‘Kurs’, ‘Från’,
‘Från’, och
och ‘Till’.
‘Till’. Två
Två KURSTILLFÄLLE:n
KURSTILLFÄLLE:n av
av samma
samma KURS
KURS
kan
kan alltså
alltså inte
inte ges
ges samtidigt!
samtidigt! Kolumnen
Kolumnen ‘Kurs’
‘Kurs’ utgör
utgör vidare
vidare främmande
främmande
nyckel
nyckel mot
mot tabellen
tabellen KURS.
KURS.
18
Presensational content template slides
Övning översättning av sammansatta identifierare
Klass
KlassRUM
RUMidentifieras
identifieras
av
avsitt
sitt‘Rumsnamn’
‘Rumsnamn’
och
sin
association
och sin association
mot
motHOTEL.
HOTEL.
Klass
KlassKUND
KUND
identifieras
identifierasav
avsitt
sitt
‘Pnr’.
‘Pnr’.
KUND
HOTELL
RUM
Pnr: Integer 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Klass
KlassHOTELL
HOTELL
identifieras
identifierasav
avsitt
sitt
‘Hotelnamn’.
‘Hotelnamn’.
Namn: String 1..1
1..1 Rumsnr: Integer
0..*
1..1
1..*
Hotelnamn: String 1..1
1..1 Antal_stjärnor: Int 1..1
Översätt
Översätt klasschemat
klasschemat ovan
ovan till
till ett
ett relationsdatabasrelationsdatabasschema!
Ange
tabellnamn,
namn
schema! Ange tabellnamn, namn på
på alla
alla kolumner,
kolumner,
primärnycklar
och
främmande
nycklar!
primärnycklar och främmande nycklar!
Lösning översättning av sammansatta identifierare
KUND
Pnr: Integer 1..1
1..1 Rumsnr: Integer
0..*
1..1
1..*
Hotellnamn: String 1..1
1..1 Antal_stjärnor: Int 1..1
HOTELL
KUND
Rum
Hotellnamn Antal_stjärnor
Hotell
}
RUM
Rumsnr Hotellnamn
}
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Namn: String 1..1
Pnr
HOTELL
RUM
Notera
Notera att
att främmande
främmande
nyckel-kolumnerna
nyckel-kolumnerna
inte
inte behöver
behöver heta
heta
likadant
likadant som
som de
de
primärnycklar
primärnycklar de
de
svarar
svarar mot!
mot! (De
(De kan
kan
dock
dock göra
göra det
det som
som vi
vi
sett
sett förut!)
förut!)
19
Presensational content template slides
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Från klasschema till relationsdatabas – Regler
Vart
Vart tog
tog alla
alla
regler
regler som
som
fanns
fanns ii det
det
konceptuella
konceptuella
schemat
schemat vägen
vägen
när
när vi
vi översatte
översatte
till
till databas?
databas?
Datatyp!
Datatyp!
Min-värde!
Min-värde!
Översättning av regler fortsättning
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Men
Men vissa
vissa regler
regler har
har väl
väl
redan
implementerats
redan implementerats
när
när vi
vi översatte
översatte från
från
konceptuellt
konceptuellt schema
schema till
till
databas?
databas?
Javisst,
Javisst, tt ex
ex har
har funktionella
funktionella
beroenden
beroenden mellan
mellan attribut
attribut ii en
en
klass
klass gett
gett upphov
upphov till
till val
val av
av
primärnycklar
primärnycklar när
när klassen
klassen
översattes
översattes till
till en
en tabell.
tabell. Attribut
Attribut
med
med max-värde
max-värde == 11 har
har gett
gett
upphov
upphov till
till kolumner.
kolumner. Flervärda
Flervärda
attribut
attribut har
har gett
gett upphov
upphov till
till
tabeller.
tabeller.
20
Presensational content template slides
Översättning av regler fortsättning
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Vart
Vart tog
tog alla
alla
andra
andra regler
regler
vägen?
vägen?
ƒDomänbeskrivningar
ƒReferensregler (främmande
nyckel-regler)
ƒAndra domän-regler, t ex
triggers (triggers går vi
igenom på SQL-föreläsningen)
Kontroll
Kontroll av
av data
data ska
ska ske
ske så
så tidigt
tidigt som
som
möjligt!
möjligt!
Systemet
Systemet ska
ska inte
inte kontrollera
kontrollera att
att
informationen
informationen inte
inte är
är felaktig,
felaktig, det
det ska
ska så
så
långt
långt det
det är
är möjligt
möjligt undanröja
undanröja möjligheten
möjligheten
att
att felaktig
felaktig information
information matas
matas in
in eller
eller
lagras!
lagras!
Domän
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
„ Ett värdeförråd ur vilket ett eller
flera attribut får sina värden
„ Regler som begränsar tillåtna
värden
„ Två attribut är jämförbara
endast om de får sina värden ur
samma domän
„ Alla värden är atomära
21
Presensational content template slides
Domän
Varför
Varför är
är det
det bra
bra att
att
använda
använda domän-konceptet
domän-konceptet
för
för kontroll
kontroll av
av datavärden?
datavärden?
ƒDet
ƒDet flyttar
flyttar kontrollen
kontrollen från
från
applikationsnivå
applikationsnivå till
till systemnivå
systemnivå
(DBMS)
(DBMS)
ƒVarje
ƒVarje domän
domän behöver
behöver
deklareras
gång
deklareras endast
endast en
en gång
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ƒFlexibelt,enklare
ƒFlexibelt,enklare att
att ändra,
ändra,
enklare
enklare dokumentation
dokumentation
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Domän-regler
Domänregler
Exempel
Datatyp
Heltal, flyttal,
textsträng, tecken…
Längd
5 signifikanta
siffror, 30 tkn, …
Format
ååmmdd, nnnnnnnnnnnn
Defaultvärde
‘John Doe’
Max/Min-.värden
(kardinalitetsregler)
Minst en, högst
fyra, …
22
Presensational content template slides
Domän-regler och främmande nyckel
regler via DDL
Datatyp!
Datatyp!
MaxMaxvärde!
värde!
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
Min-värde!
Min-värde!
„ Tabellerna ovan, inklusive datatyper och främmande
nycklar (och andra regler) kan definieras via SQL DDL
„ SQL har en DDL-del (lite mer okänd än DML-delen)
„ DDL – Data Definition Language, DML – Data
Manipulation Language
„ Via DDL definierar vi tabeller, regler etc. Via DML kan vi
sen ställa frågor mot de tabeller vi skapat
DDL
Datatyp!
Datatyp!
FÖRETAG
Företagsnamn: String 1..1
Antal_anställda: Int 1..1
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
FÖRETAG
Min-värde!
Min-värde!
Företagsnamn Antal_anställda
CREATE TABLE FÖRETAG (Företagsnamn Varchar(25)
NOT NULL, Antal_anställda Integer NOT NULL, Primary
key (Företagsnamn))
23
Presensational content template slides
DDL – Främmande nyckel-regler
FÖRETAG
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ANSTÄLLD
Anstnr
Namn Mitt_företag
Företagsnamn
Antal_anställda
11111
Maria
‘BULT AB’
‘BULT AB’
2
22222
Paul
‘BULT AB’
‘SKRUV AB’
1
33333
Petia
‘SKRUV AB’
CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, Namn String
NOT NULL, Mitt_företag Varchar(25) NOT NULL, Primary
key(Anstnr),
Foreign key(Mitt_företag) REFERENCES FÖRETAG(Företagsnamn) ON
DELETE restrict ON UPDATE cascade)
DDL – Främmande nyckel-regler
FÖRETAG
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ANSTÄLLD
Anstnr
Namn Mitt_företag
Företagsnamn
Antal_anställda
11111
Maria
‘BULT AB’
‘BULT AB’
2
22222
Paul
‘BULT AB’
‘SKRUV AB’
1
33333
Petia
‘SKRUV AB’
CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, Namn String
NOT NULL, Mitt_företag Varchar(25) NOT NULL, Primary
key(Anstnr), Foreign key(Mitt_företag) REFERENCES
FÖRETAG(Företagsnamn) ON DELETE cascade ON UPDATE cascade)
FÖRETAG
ANSTÄLLD
Anstnr
Namn Mitt_företag
Företagsnamn
Antal_anställda
11111
Maria
‘BULT AB’
‘BULT AB’
2
22222
Paul
‘BULT AB’
24
Presensational content template slides
DDL – Främmande nyckel-regler
FÖRETAG
Copyright © 2004-2005 NameOfTheOrganization. All rights reserved.
ANSTÄLLD
Anstnr
Namn Mitt_företag
Företagsnamn
Antal_anställda
11111
Maria
‘BULT AB’
‘BULT AB’
2
22222
Paul
‘BULT AB’
‘SKRUV AB’
1
33333
Petia
‘SKRUV AB’
CREATE TABLE ANSTÄLLD (Anstnr String NOT NULL, Namn String
NOT NULL, Mitt_företag Varchar(25) NOT NULL, Primary
key(Anstnr), Foreign key(Mitt_företag) REFERENCES
FÖRETAG(Företagsnamn) ON DELETE cascade ON UPDATE cascade)
ANSTÄLLD
FÖRETAG
Anstnr
Namn Mitt_företag
Företagsnamn
Antal_anställda
11111
Maria
‘BULTIA AB’
‘BULTIA AB’
2
22222
Paul
‘BULTIA AB’
‘SKRUV AB’
1
33333
Petia
‘SKRUV AB’
25