Så du vil oprette din første databasemodel, men du ved ikke, hvordan du skal starte? Læs videre!
Jeg går ud fra, at du allerede ved lidt om tabeller, kolonner og relationer. Hvis du ikke gør det, så se vores videovejledninger, før du fortsætter.
Start med en systembeskrivelse
Du bør altid begynde at oprette en databasemodel med en beskrivelse af et system. I en klasseværelsessituation får du en systembeskrivelse af en lærer. I det virkelige liv er udarbejdelse af en beskrivelse en proces i sin egen ret. Jeg vil bare antage, at du har beskrivelsen. Det er lige meget, om det blev givet til dig af din klient, din chef, din lærer, eller du skrev det op selv.
Tag et kig på beskrivelsen og fremhæv alle navneord . Navneordene i beskrivelsen kan groft sagt opdeles i tre kategorier:tabeller, attributter og eksempler.
- Tabeller repræsenterer primære enheder i systemet:mennesker, fysiske objekter, begivenheder, transaktioner osv.
- Attributter er egenskaber knyttet til en primær enhed. De beskriver funktioner i din enhed. I databasemodellen vil de være kolonnerne i dine tabeller.
- Eksempler er netop det, eksempler. De hjælper dig med at forstå datatyperne af visse egenskaber, og de hjælper dig med at forstå forholdet mellem forskellige enheder.
At starte med en beskrivelse har fordelen ved at tvinge dig til at bruge den samme ordliste som dine brugere. Hvis man laver et system til en folkeskole, bør man tale om elever. Hvis du opretter et lignende system til et universitet, bør du tale om studerende.
Tabeller, relationer, kolonner
- Når dine navneord er fremhævet, skal du identificere tabellerne . Du behøver ikke modellere alt på én gang. Fokuser først på systemets kernefunktionalitet.
- Når du har tabellerne, skal du finde ud af relationerne mellem bordene. Dette trin kan føre til introduktion af nye mellemliggende (kryds) tabeller.
- Tilføj endelig kolonnerne til bordene.
På dette tidspunkt bør du læse beskrivelsen igen og se, om der mangler noget. Jeg forsikrer dig om, at der vil være noget at tilføje. Tilføj de nye tabeller, de nye relationer og de nye kolonner. Læs beskrivelsen igen...
Ting at huske på
Oprettelse af en databasemodel er en iterativ behandle. Forsøg ikke at modellere alt på én gang. Start med dit systems kerneenheder. Du kan tilføje flere detaljer senere.
Det er OK at stille spørgsmål . Uanset hvor præcis beskrivelsen er, vil du altid være i tvivl. Noget vil altid være underspecificeret. Stil spørgsmål om de ting, du ikke er sikker på. Hvis du ikke kan stille spørgsmål, så lav en rimelig antagelse og noter den antagelse, du gør.
Der er altid mere end én vej at modellere hvert system. Nogle modeller er klart dårlige, men med de fleste andre er det svært at vurdere, om de er rigtige eller forkerte. Modellen afhænger af, hvad formålet med systemet er, hvordan data kommer til systemet, selv af designerens personlige smag. Efterhånden som du får erfaring, bliver du mere sikker på dine designbeslutninger.
Eksempel:Biludlejningssystem
Som et eksempel vil vi lave en databasemodel for et biludlejningssystem. Tag først et kig på en beskrivelse af systemet:
Et biludlejningsfirma udlejer biler til kunder. Virksomheden ejer flere biler. Hver bil har et mærke, modelnavn, produktionsår, kilometertal, farve og så videre. Biler inddeles i forskellige kategorier:små, mellemstore, store, limousiner.
Virksomheden har mange lokationer hvor du kan leje en bil. Lejestederne er placeret i forskellige byer over hele landet. Der kan være mere end én virksomhedsplacering i en by.
Alle over 21 år, der har et gyldigt kørekort, kan leje en bil. Kunder under 25 eller over 75 år betaler andre (højere) gebyrer end andre kunder.
Før man lejer en bil, foretager en kunde normalt en reservation til en bil. En kunde specificerer datoer hvor bilen lejes, afhentningsstedet, afleveringsstedet og den kategori bil, han ønsker at leje. En kunde kan angive, at han vil have noget ekstra udstyr i bilen, for eksempel en GPS, en autostol til et barn osv.
Når en kunde lejer en bil, angiver han afhentnings- og afleveringsstedet og afleveringsdatoen. Kunden kan købe forskellige typer for forsikringer. Han kan også beslutte, at han ikke har brug for forsikring, fordi forsikringen i øvrigt er dækket, for eksempel af hans kreditkortselskab. Kunden kan vælge yderligere muligheder såsom muligheden for tidlig aflevering, forskellige tankningsmuligheder osv.
Kunden betaler gebyrerne, når han returnerer bilen.
Vi starter med at fremhæve alle navneord:
Næste trin er at finde tabeller . Vi leder efter de grundlæggende enheder i systemet. Til en start bør du som minimum have disse:bil, kunde, beliggenhed, by, udstyr, (bil)kategori, forsikring. Vi sætter dem i diagrammet. Jeg tilføjede id
kolonne i hver tabel, fordi hver tabel skal have en slags id. Du kan altid ændre den primære nøgle senere.
De grundlæggende systemenheder er i modellen, men du skal bemærke, at vi mangler systemets kernefunktionalitet:leje af biler og reservationer. Husk, hvad vi sagde i begyndelsen:tabeller er ikke kun fysiske objekter, men også begivenheder og transaktioner. Du bør tilføje reservation
og rental
også som borde. Her går vi:
Nu tilføjer vi referencerne mellem tabellerne i modellen. Jeg nummererede referencerne, efterhånden som jeg tilføjede dem. Noten ud for hver reference fortæller dig, hvornår den blev tilføjet:
- Hver bil tilhører en kategori,
- Hver reservation er for en kategori af biler,
- Hver placering er i en by,
- Hver reservation har et afhentnings- og afleveringssted,
- Hver reservation foretages af en kunde,
- Hver leje foretages af en kunde,
- Hver leje er for en bestemt bil,
- Hver lejemål har et afhentnings- og afleveringssted.
- Hver leje er forbundet med en eller anden forsikring. Men er der kun én forsikring for hver udlejning? Nej. Der kan være mange forsikringer forbundet med en udlejning (forsikring mod køretøjsskader, mod personskader, mod at skade en andens bil, ...). Jeg tilføjede en mellemtabel kaldet
rental_insurance
forbundet tilrental
oginsurance
tabeller.
Vi mangler stadig referencen mellem bil og udstyr. Er udstyr permanent fastgjort til en bil, eller kan det flyttes fra den ene bil til den anden? Der er ikke noget svar på det spørgsmål i beskrivelsen, så vi vil gøre en rimelig antagelse:ja, den kan flyttes. Vi tilføjer en ny tabel car_equipment
og referencer mellem car
og equipment
.
Vi sletter company
bord. Udlejningsfirmaet er implicit til stede i systemet. En anden virksomhed vil trods alt have deres eget system og deres egen database.
Til sidst tilføjer vi kolonnerne og deres datatyper. Vi bemærker også, at der ikke er nogen sammenhæng mellem reservation
og equipment
. Men tages der forbehold for et bestemt udstyr? Nej, det er lavet til en type udstyr:vi tilføjer tabellen equipment_category
og tilslut tabellerne reservation
og equipment
til det.
Er vi færdige? Læs beskrivelsen igen. Vores databasemodel udelader stadig afgifterne. Nå...
Det er en øvelse for læseren. (Men hvis du ikke har lyst til at øve dine databasemodelleringsfærdigheder, kan du her finde en databasestruktur, der er klar til brug for et biludlejningsfirma.)