Databaseteori
Download
Report
Transcript Databaseteori
Databaseteori
Hva er en database?
Oppgave:
Gi en beskrivelse av hva ordet betyr
Bruk gjerne et oppslagsverk (f eks
www.dictionary.com) og se andres
definisjoner
Hva kan vi bruke databaser til?
Databaseverktøy
Vi trenger et program for å opprette og
kommunisere med en database
DBMS
Database Management System
Eksempler på databaseverktøy
Access, Oracle, Sybase og MySQL (som vi
skal benytte)
Datamodellering
Hva er datamodellering?
La oss gjøre en liten omskrivning:
Modellering av data
Datamodellering handler altså om å lage
en modell over dataene
Når vi er fornøyd med modellen vår, kan
vi bruke den som grunnlag for å utvikle
databasen vår
Interesseområde
Før vi lager en datamodell, må vi finne ut hvilke
data som er interessante
De data som skal avbildes i datamodellen
Den del av verden som er interessant for vårt
informasjonssystem
På engelsk: Universe of Discourse (UoD)
Også kalt samtaleunivers
Entiteter
En entitet er et objekt innen vårt
interesseområde
Eksempler:
En person
En bil
En entitet er en rad i en tabell
Kalles også en forekomst
Entitetstyper
En entitetstype er en samling entiteter
Eksempler:
Entitetstypen person inneholder alle personer
Entitetstypen bil inneholder alle biler
Merk forskjellen fra forrige lysark hvor det var snakk om en
bestemt bil/person
Modell av en entitetstype
Entitetstyper kan visualiseres som en boks
med navnet på entitetstypen inni
Bil
Atributter
Et atributt er en egenskap ved en entitet
Alle atributter må ha en type
Når vi lager et informasjonssystem må vi vurdere hvilke
attributter som er relevante
•
Tekst, tall …
Dvs de som er innenfor vårt interesseområde
Eksempel:
–
Entitetstypen person kan ha atributtene:
•
personnummer, navn og alder
Entitetstyper med attributter
Dersom vi har informasjon om hvilke attributter
som bør tilhøre de forskjellige entitetstypene,
kan vi angi dette i modellen
Oppgave
Finn fem ting i rommet vi er som du
mener er naturlige entitetstyper
Velg en av disse, og lag en modell av
denne, og atributtene du mener hører til
Gi eksempler på entiteter av denne
entitetstypen
ER-modellering
Den modellen vi vil benytte heter ER-modellen
Entity-Relationship model
Så langt har vi sett på modellering av entiteter
Entitetene utgjør dataene
Nå skal vi se på relasjonene mellom dataene
Relasjoner
Relasjoner er det som binder entitetene
sammen
Vi skal se på tre typer relasjoner:
En-til-en relasjoner
En-til-mange relasjoner
Mange-til-mange relasjoner
En-til-en relasjoner
En-til-en relasjoner indikerer at en entitet i den
ene entitetstypen er relatert til ingen eller en
(og maks en) entitet i den andre entitetstypen
En mann kan bare være
gift med en kvinne
En kvinne kan bare
være gift med en mann
Noen menn og kvinner
er ugift
En-til-mange relasjoner
En en-til-mange relasjon indikerer at en entitet i den
ene entitetstypen er relatert til ingen, en eller flere
entiteter i den andre entitetstypen
Dette gjelder ikke den andre veien. En entitet i den
andre entitesgruppen er relatert til ingen eller en (og
maks en) entitet i den førstnevnte entitetstypen
En person kan eie
mange biler
En bil kan bare ha en
eier
Mange-til-mange relasjoner
En mange-til-mange relasjon indikerer at en entitet i
den ene entitetstypen er relatert til ingen, en eller flere
entiteter i den andre entitetstypen
Det samme gjelder den andre veien
Et fag kan ha mange
elever
En elev kan ta mange
fag
Oppgave
Hvorfor har vi relasjoner?
Hvordan lager vi relasjoner?
For å lage relasjoner trenger vi
En primærnøkkel
En fremmednøkkel
Primærnøkler
Primærnøkkel – et attributt eller en samling
attributter som entydig identifiserer en entitet
Primærnøkkelen angis med en strek under
attributtnavnet
Fremmednøkler
Fremmednøkkel – et attributt som settes inn i en
entitetstype for å angi en referanse til en annen
entitetstype
Eksempel:
I dette tilfellet er eier fremmednøkkelen som lager
koblingen til entitetstypen Person
Modellering
• Entitet
– Understreking indikerer primærnøkkel
– * indikerer fremmednøkkel
• Relasjoner
– Null eller en
– En-til-en
– En og bare en
– En-til-mange
– Null, en eller flere
– Mange-til-mange
– En eller flere
Relasjon: en-til-en
MANN
er gift med
KVINNE
er gift med
Oppgave:
Utvid modellen til også å vise atributter
Relasjon: en-til-mange
BIL
eies av
PERSON
eier
Oppgave:
Utvid modellen til også å vise atributter
Foreslå primærnøkler og fremmednøkler
Oppgave
Lag en modell over klasser og elever
forutsetninger:
– en elev kan bare gå i en klasse
– en klasse har mange elever
Relasjon: mange-til-mange
tar
STUDENT
FAG
velges av
Oppgave:
Utvid modellen til også å vise atributter
Foreslå primærnøkler og fremmednøkler
Mange-til-mange relasjoner
Mange-til-mange relasjoner gir oss et referanseproblem
Hvor skal vi plassere fremmednøkkelen?
Ingen av de nedenstående løsningene er tilfredsstillende
I hvilken av tabellene kan vi registrere når faget ble tatt?
Løsning: entitetisering
Også kalt begrepsdannelse
Når vi har en mange-til-mange relasjon, må vi danne en
ny entitet (eller et nytt begrep)
En modell av typen over (mange-til-mange relasjon) kan
alltid gjøres om til en modell av typen under
Eksempel på entitetisering
En elev kan ta mange fag og et fag kan tas av mange
elever
Entitetiserer
Etter entitetiseringen
Ofte kan den nye entiteten tillegges flere
attributter
Det vil kanskje være ønskelig å vite hvilket
studieår en elev har deltatt i et fag
Merk i modellen over at studieår er en del av
primærnøkkelen
Kan du tenke deg hvorfor?
Eksempel
(se de 7 nest lysarkene)
et medlemsregister for en idrettsklubb
med flere idrettsgrener (fotball, håndball,
osv).
klubben ønsker å lagre informasjon om
medlemmenes navn, fødselsdato,
adresse, telefonnr, innmeldingsår og
idrettsgren. Et enkelt forslag til en
datamodell kunne være (se neste lysark):
• alle attributter skal ha en enkelt verdi
Det betyr f.eks. at man bare kan fylle inn ett telefonnr for
hvert medlem i idrettsklubben i eksemplet forrige lysark.
Hvis man ønsker å lagre flere telefonnr (f.eks. privat,
arbeid og mobil) for hvert medlem, må man innføre en ny
entitet med en-til-mange relasjon til entiteten medlem, slik
som vist på dette lysarket
• det må opprettes entiteter for attributter som ikke er
entydig avhengig av entitetens identifikator
I eksemplet på forrige lysark betyr det at f.eks. at
idrettsgren ikke er noe som entydig kobles til hvert
medlem. Idrettsgren skal derfor opprettes som en egen
entitet, som vist i figuren på dette lysarket
• det skal være slik at ingen attributter er avhengige av
hverandre slik at de alltid opptrer sammen
Slike attributter skal også gis en egen entitet. I eksemplet
vårt opptrer attributtene poststed og postnr alltid
sammen, og vi fjerner det ved å innføre en ny entitet.
• eventuelle mange-til-mange relasjoner må fjernes
Dersom klubben tillater et medlem å drive med flere av
klubbens idrettsgrener samtidig, har vi en mange-tilmanger relasjon på forrige lysark. I så fall må vi endre
relasjonen mellom medlem og idrettsgren til en mangetil-mange relasjon.
Siste steg: konvertering til
tabeller i en database
• Hver entitetstype gis en egen tabell.
• Hvert attributt gis en kolonne i entitetstypens tabell.
Bestem attributtenes datatype (heltall, desimaltall, tekst,
dato osv)
• Alle tabellene gis en primærnøkkel. Enten brukes en
kolonne med et felt som er entydig (f.eks. en kode,
varenr, etc). Hvis ikke et slikt entydig attributt finnes,
opprettes en ny kolonne som bare har til hensikt å være
en identifikator for hver post i tabellen.
• Relasjoner legges inn med fremmednøkler. Det betyr at
entiteten som har "mange"-enden (den enden med
"kråkefoten") får en kolonne som skal inneholde verdien i
kolonnen som er primærnøkkel til entitetstypen i den
andre enden av relasjonen.
PN: nummer
FN: medlemsnr
PN: idretts_id
FN: idretts_id
FN: medlemsnr
PN: postnr
PN: medlemsnr
FN: postnr
PN = primærnøkkel
FN = fremmednøkkel
Forslag til framgangsmåte,
(gjentas til vi er fornøyd)
1. Bestem målet for databasen
2. Bestem hva som skal være med (tabeller, entitetstyper)
3. Bestem hvilke egenskaper som skal beskrives (felter, attributter)
4. Bestem relasjoner
5. Vurder relasjonstyper (en-til-en, en-til-mange, mange-til-mange)
6. Ev. mange-til-mange relasjoner må splittes opp til en-til-mange
7. Bestem primærnøkler og fremmednøkler
Oppgave 2
Lag en datamodell for et medlemsregister
forutsetninger:
– modellen skal inneholde data om nåværende
medlemmer og tillitsverv
– et medlem kan ha ett eller flere tillitsverv
– hvert tillitsverv kan bare være besatt av ett
medlem
Oppgave 2b
et medlem kan ha ett eller flere tillitsverv
hvert tillitsverv kan være besatt av ulike
medlemmer i forskjellige perioder
Medlemsregister, versjon 1
Medlemsregister, versjon 2
Hjemmeoppgave: Lag en
datamodell for et klassebibliotek
datamodellen skal inneholde data om elever, bøker og
bokanmeldelser
forutsetninger:
hver elev kan eie flere bøker og hver bok har en eier
en elev kan bare låne en bok om gangen
hver elev kan skrive mange bokanmeldelser og hver bok kan ha flere
anmeldelser, en anmeldelse er skrevet av en elev og handler om en bok
om hver bok skal det finnes opplysninger om forfatter og tittel
om hver elev skal finnes opplysninger om navn
om hver anmeldelse skal selve teksten finnes
modellen skal vise hvem som eier en bok, hvem som låner en bok,
anmeldelser knyttet til en bok og hvem som har skrevet en
anmeldelse