Leksjon B: Fra datamodell til database
De grunnleggende konstruksjonene i ER ble introdusert i forrige leksjon. I denne leksjonen skal vi se på et par nye konstruksjoner og jobbe med litt større eksempler. For å bli god i datamodellering er det nødvendig å løse mange oppgaver!
En svak entitet er en entitet som arver primærnøkkel fra en annen entitet. Slike entiteter knyttes til den entiteten den skal arve fra med et identifiserende forhold, og tegnes med en heltrukken linje. Når vi lager mange-til-mange forhold, oppretter mange modelleringsverktøy automatisk en koblingstabell. Slike tabeller svarer til svake entiteter.
For å tegne datamodeller skal vi nå også ta i bruk MySQL Workbench. Det er et nært forhold mellom ER-diagrammer og tabellene i en database. I MySQL Workbench, der fremmednøkler blir vist i modellen, er sammenhengen svært direkte. De fleste modelleringsverktøy har mekanismer for automatisk generering av database fra et ER-diagram (forward engineering) og også mulighet for å gå den motsatte veien (reverse engineering).
Merk: Læreboken bruker en litt annen notasjon (tegnemåte) for ER-diagrammer enn det MySQL Workbench gjør. Boken skiller mellom begrepsmessige datamodeller (kapittel 7) og logiske datamodeller (kapittel 8), og foreslår at man starter med begrepsmessig modellering. I kapittel 7 blir ikke fremmednøkler vist i diagrammet, det blir de i Workbench (her går man altså rett på logiske diagrammer).
Læringsmål
- Kunne bruke identifiserende forhold / svake entiteter.
- Forstå mange-til-mange forhold og koblingsentiteter.
- Forstå forskjellen på begrepsmessige og logiske datamodeller.
- Forstå sammenhengen mellom ER-diagrammer og database.
- Utvikle litt større datamodeller med ER.
A. Oppgaver i LearnER
Prøv deg på følgende oppgaver:
- A1. Værstasjoner
- A2. Værstasjoner – variant
- A3. Legesenter
- A4. Forum
Bruk (som før) oppsett med konseptuell og logisk fase og kråkefot-notasjon i begge faser, men etter at du har fått en korrekt begrepsmessig modell skal du nå også gå videre til logisk modell å ta med alle primærnøkler og fremmednøkler!
Hvis du vil ha mer "frihet", så kan du velge å gå rett på logisk fase. Da kan du sette på fremmednøkler underveis.
Tips: Løs oppgavene uten hjelp først (og gjerne på papir). Da får du trening i å velge gode navn på entiteter og attributter.
B. Oppgaver i MySQL Workbench
Du skal nå bruke MySQL Workbench for å bygge opp enkle datamodeller, som automatisk kan oversettes til MySQL databaser. Du starter med å følge en innføring i selve verktøyet (oppgave B, steg 1 – 16), deretter skal du lage et par egne datamodeller.
B: Lage datamodeller i MySQL Workbench
- Før du kan bygge opp egne datamodeller må du lære "håndgrepene" i MySQL Workbench.
- Denne oppgaven går gjennom de viktigste teknikkene steg for steg.
1. Opprette databaseforbindelse
- Start med å opprette en forbindelse til databasen ved å klikke sirkelen merket med + til høyre for "MySQL Connections".
- Du må skrive inn følgende opplysninger:
- Connection name: Et navn du velger selv, f.eks. itfag.
- Host name: Adressen til USN sin MySQL-database er itfag.usn.no.
- Username: Skriv inn brukernavnet du har fått.
- Default schema: Navnet på databasen din. Dette punktet er ikke helt nødvendig, men gjør generering av database litt lettere.
Hvis du jobber mot en lokal database, og du ikke har opprettet brukere, kan du skrive root for brukernavn. Hvis du oppga et passord under installasjon, må du skrive inn dette for passord, og host name blir localhost.
Vis tips /
Skjul tips
2. Logge på
- Forbindelsen blir lagt til på forsiden av MySQL Workbench. Klikk på den nye forbindelsen og skriv inn passordet ditt.
- Hvis du jobber på egen PC kan du eventuelt bruke "Store in vault" (se forrige bilde) for å slippe og skrive inn passord hver gang. Det sikreste er å la være, du blir da spurt om passord hver gang du åpner forbindelsen.
Vis tips /
Skjul tips
3. Opprette en ny datamodell
- Klikk sirkelen merket med + til høyre for "Models" på forsiden. Det blir opprettet en ny fane merket MySQL Model.
- Høyreklikk den gule harddisken merket "mydb" og velg "Edit schema". Endre navnet på modellen til navnet på databasen du har fått på itfag.usn.no.
Vis tips /
Skjul tips
4. Bli kjent med verktøypaletten
- Gjør deg kjent med verktøypaletten - her finner du knapper for å lage tabeller og forhold.
Vis tips /
Skjul tips
5. Lage tabeller ansatt og avdeling
- Bruk tabellverktøyet for å lage to tabeller.
- Dobbeltklikk tabellene for å endre navn og legge til kolonner.
- Den første kolonnen blir som standard primærnøkkel – avkrysningsboks PK.
- Velg fornuftige datatyper for hver enkelt datatype.
Vis tips /
Skjul tips
6. Lage en-til-mange forhold mellom ansatt og avdeling
- Bruk verktøyet for en-til-mange forhold (se bilde av verktøypaletten over).
- Fremmednøkkelen skal i ansatt, så klikk denne tabellen først og deretter avdeling.
- Det blir opprettet et forhold med "kråkefoten" nærmest ansatt: 1 avdeling kan ha mange ansatte.
Vis tips /
Skjul tips
7. Generere database – forward engineer
- Bruk menyvalg Database | Forward engineer.
- Velg forbindelsen du laget innledningsvis fra nedtrekkeslisten Stored connection.
- Klikk Next.
Vis tips /
Skjul tips
8. Generere database – sette opsjoner
- Kryss av for "DROP Objects og så Next.
- Dette er nyttig hvis du endrer i modellen og vil lage databasen på nytt.
- Med DROP blir først alle tabellene slettet – og så opprettet i henhold til ny modell.
Vis tips /
Skjul tips
9. Generere database – velge objekter
- Kryss av for å eksportere tabeller og så Next.
Vis tips /
Skjul tips
10. Generere database – se på SQL-skript
- MySQL lager nå et SQL-skript som oppretter databasen.
- Du kunne kjørt dette skriptet i et SQL-vindu, men det er enklere å klikke Next.
Hvis skriptet inneholder en kommando CREATE SCHEMA og du kjører mot itfag.usn.no, så må du fjerne denne linjen før du kjører skriptet. Grunnen til det er at dere ikke har rettigheter til å opprette databaser på denne databasetjeneren.
Vis tips /
Skjul tips
11. Generere database – sjekk status
- Hvis alt er gjort riktig skal du få en kvittering med "finished successfully".
- Får du feilmeldinger må du trolig tilbake i modellen å rette opp noe.
Merk at du jobber mot den samme databasen på itfag.usn.no som du tidligere har jobbet med fra phpMyAdmin. Hvis du får feilmelding om at noen av tabellene ikke kan opprettes fordi de allerede finnes, så prøv først å slette alle tabellene manuelt. Det kan du gjøre fra phpMyAdmin eller Workbench.
Vis tips /
Skjul tips
Hvis du får feilmeldinger som sier at det er en syntaksfeil når du kjører forward engineer, så kan det skyldes at MySQL Workbench ikke er konfigurert med riktig MySQL-versjon. Prøv å gå inn på meny Model og menyvalg Model Option, fjerne krysset i "Use defaults from global setting" og endre (target) versjon på MySQL-databasen til 5.7. Dette gjelder hvis du jobber mot itfag.usn.no. Hvis du bruker en lokal database, så kommer det an på hvilken versjon du har installert. Dette styrer altså hva slags SQL-kode som Workbench lager.
Vis tips /
Skjul tips
12. Legge til en ny tabell prosjekt
- Bruk tabell-verktøyet som vist over.
- Figuren under viser hvordan modellen skal se ut.
Vis tips /
Skjul tips
13. Lage et mange-til-mange forhold
- Bruk verktøyet for mange-til-mange forhold (se forklaring til verktøypaletten).
- En ansatt kan delta på mange prosjekter, og et prosjekt kan ha mange deltakere.
- MySQL Workbench lager automatisk en koblingstabell og to en-til-mange forhold.
- Endre navn på tabellen til deltakelse.
Legg merke til at de to en-til-mange forholdene blir tegnet med heltrukne linjer (ikke stiplede), og at koblingstabellen arver primærnøklene fra ansatt og prosjekt. Dette kalles for svake entiteter / identifiserende forhold.
Vis tips /
Skjul tips
14. Redigere koblingstabellen
- Endre navn på tabellen til deltakelse.
- Legg til en ny kolonne for å ta vare på antall timer (en bestemt ansatt har jobbet på et bestemt prosjekt).
- Sørg for å godta ansatte som ikke deltar på prosjekter og prosjekter uten deltakere. Klikk på forholdene og fjern så kryss i boksen Mandatory under fanen Foreign key (nederst).
Vis tips /
Skjul tips
15. Lage et en-til-en forhold
- Legg til et nytt en-til-en forhold mellom ansatt og avdeling.
- Forholdet skal representere avdelingsledelse: Hvem er leder for hvilke avdelinger.
- Klikk først i tabellen avdeling og legg merke til at det er denne tabellen som får fremmednøkkelen.
- Endre navn på fremmednøkkelen til leder_ansattnr.
Vis tips /
Skjul tips
16. Ta vare på datamodellen
- MySQL Workbench lagrer datamodeller med filutvidelse mwb.
- Før du avslutter bør du klikke i fanen merket MySQL Model og velge File | Save As.
- Modellen skal dukke opp på hovedsiden i MySQL Workbench (i figuren under har jeg lagret modellen med navn oppgave1.mwb).
Vis tips /
Skjul tips
C: Lage datamodell fra database – reverse engineering
- Opprett databasen for Hobbyhuset på itfag.usn.no: Kjør SQL-skriptet via phpMyAdmin.
- Velg meny Database | Reverse engineer.
- Du må velge (eller opprette) forbindelse til databasen, og kan krysse av for hvilke tabeller som skal tas med i modellen.
- Om ønskelig kan du nå utvide modellen (med nye tabeller og forhold), og deretter oppdatere databasen (med forward engineering som forklart over).
Hobbyhuset
Vis tips /
Skjul tips
D: Den Norske Fotturistforening
Oppgave 13, kapittel 7. Løs på papir, eller i LearnER, eller i MySQL Workbench.
Dette er en krevende oppgave. Kanskje er det lurt å gjøre noen flere enklere oppgaver i LearnER først.
Før du går videre
Les oppsummering til kapittel 7 og 8, og sjekk at du har forstått følgende begreper:
- Datamodell
- ER-diagram
- Entitet (entitetstype, entitetsforekomst)
- Attributt
- Forhold
- Rolle
- En-til-en forhold
- En-til-mange (mange-til-en) forhold
- Mange-til-mange forhold
- Identifiserende forhold
- Ikke-identifiserende forhold
- Svak entitet
Prøv gjerne relevante quiz-spørsmål:
Test deg selv quiz