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