sql >> Databasteknik >  >> RDS >> Database

Hur man skapar en databasmodell från grunden

Så du vill skapa din första databasmodell men du vet inte hur du ska börja? Läs vidare!

Jag antar att du redan vet lite om tabeller, kolumner och relationer. Om du inte gör det, titta på våra videohandledningar innan du fortsätter.

Börja med en systembeskrivning

Du bör alltid börja skapa en databasmodell med en beskrivning av ett system. I en klassrumssituation ges en systembeskrivning till dig av en lärare. I verkligheten är det en process att förbereda en beskrivning i sin egen rätt. Jag antar bara att du har beskrivningen. Det spelar ingen roll om det gavs till dig av din klient, din chef, din lärare eller om du skrev det själv.

Ta en titt på beskrivningen och markera alla substantiv . Substantiven i beskrivningen kan grovt delas in i tre kategorier:tabeller, attribut och exempel.

  • Tabell representerar primära enheter i systemet:människor, fysiska föremål, händelser, transaktioner, etc.
  • Attribut är egenskaper associerade med en primär enhet. De beskriver funktioner i din enhet. I databasmodellen kommer de att vara kolumnerna i dina tabeller.
  • Exempel är just det, exempel. De hjälper dig att förstå datatyperna av vissa attribut och de hjälper dig att förstå förhållandet mellan olika enheter.

Att börja med en beskrivning har fördelen av att du tvingas använda samma ordlista som dina användare. Skapar man ett system för en grundskola ska man prata om elever. Om du skapar ett liknande system för ett universitet bör du prata om studenter.

Tabell, relationer, kolumner

  1. När dina substantiv är markerade identifierar du tabellerna . Du behöver inte modellera allt på en gång. Fokusera först på systemets kärnfunktioner.
  2. När du har tabellerna, ta reda på förhållandena mellan borden. Det här steget kan leda till att nya mellanliggande (korsnings-) tabeller introduceras.
  3. Lägg slutligen till kolumnerna till borden.

Vid det här laget bör du läsa beskrivningen igen och se om något saknas. Jag försäkrar dig att det kommer att finnas något att tillägga. Lägg till de nya tabellerna, de nya relationerna och de nya kolumnerna. Läs beskrivningen igen...

Saker att tänka på

Att skapa en databasmodell är en iterativ bearbeta. Försök inte att modellera allt på en gång. Börja med kärnenheterna i ditt system. Du kan lägga till mer information senare.

Det är OK att ställa frågor . Oavsett hur exakt beskrivningen är, kommer du alltid att tvivla. Något kommer alltid att vara underspecificerat. Ställ frågor om saker du inte är säker på. Om du inte kan ställa frågor, gör ett rimligt antagande och anteckna antagandet du gör.

Det finns alltid mer än ett sätt att modellera varje system. Vissa modeller är helt klart dåliga, men med de flesta andra är det svårt att bedöma om de har rätt eller fel. Modellen beror på vad syftet med systemet är, hur data kommer till systemet, även på designerns personliga smak. När du får erfarenhet blir du mer säker på dina designbeslut.

Exempel:Biluthyrningssystem

Som ett exempel kommer vi att skapa en databasmodell för ett biluthyrningssystem. Ta först en titt på en beskrivning av systemet:

Ett biluthyrningsföretag hyr ut bilar till kunder. Företaget äger flera bilar. Varje bil har ett märke, modellnamn, produktionsår, körsträcka, färg och så vidare. Bilar delas in i olika kategorier:små, medelstora, stora, limousiner.

Företaget har många ställen där du kan hyra en bil. Uthyrningsplatserna finns i olika städer i hela landet. Det kan finnas mer än ett företag i en stad.

Alla över 21 som har ett giltigt körkort kan hyra en bil. Kunder under 25 eller över 75 år betalar andra (högre) avgifter än andra kunder.

Innan en kund bilar hyr bilar vanligtvis en reservation för en bil. En kund anger datum där bilen kommer att hyras, upphämtningsplats, avlämningsplats och vilken kategori bil han vill hyra. En kund kan ange att han vill ha extrautrustning i bilen, till exempel en GPS, en bilbarnstol för ett barn osv.

När en kund hyr en bil, deklarerar han hämtnings- och avlämningsplatsen och lämningsdatumet. Kunden kan köpa olika typer av försäkringar. Han kan också bestämma att han inte behöver försäkring eftersom försäkringen skyddas på annat sätt, till exempel av hans kreditkortsföretag. Kunden kan välja ytterligare alternativ som möjligheten till tidig avlämning, olika tankningsalternativ osv.

Kunden betalar avgifterna när han lämnar tillbaka bilen.

Vi börjar med att markera alla substantiv: 

Nästa steg är att hitta tabeller . Vi letar efter de grundläggande enheterna i systemet. Till att börja med bör du åtminstone ha dessa:bil, kund, plats, stad, utrustning, (bil)kategori, försäkring. Vi lägger dem i diagrammet. Jag lade till id kolumn i varje tabell eftersom varje tabell borde ha någon form av id. Du kan alltid ändra primärnyckeln senare.




De grundläggande systemenheterna finns i modellen men du bör märka att vi saknar systemets kärnfunktionalitet:hyra bilar och bokningar. Kom ihåg vad vi sa i början:tabeller är inte bara fysiska objekt utan också händelser och transaktioner. Du bör lägga till reservation och rental som bord också. Nu kör vi:




Nu lägger vi till referenserna mellan tabellerna i modellen. Jag numrerade referenserna när jag lade till dem. Anteckningen bredvid varje referens talar om när den lades till:

  1. Varje bil tillhör en kategori,
  2. Varje reservation är för en kategori av bilar,
  3. Varje plats är i en stad,
  4. Varje bokning har en upphämtnings- och avlämningsplats,
  5. Varje bokning görs av en kund,
  6. Varje hyra görs av en kund,
  7. Varje hyra är för en viss bil,
  8. Varje hyra har en upphämtnings- och avlämningsplats.
  9. Varje hyra är kopplad till någon försäkring. Men finns det bara en försäkring för varje hyra? Nej. Det kan finnas många försäkringar kopplade till en hyra (försäkring mot fordonsskada, mot personskador, mot att skada någon annans bil, ...). Jag lade till en mellantabell som heter rental_insurance ansluten till rental och insurance tabeller.



Vi saknar fortfarande referensen mellan bil och utrustning. Är utrustning permanent kopplad till en bil eller kan den flyttas från en bil till en annan? Det finns inget svar på den frågan i beskrivningen, så vi gör ett rimligt antagande:ja, den kan flyttas. Vi lägger till en ny tabell car_equipment och referenser mellan car och equipment .

Vi tar bort company tabell. Uthyrningsföretaget är implicit närvarande i systemet. Ett annat företag kommer trots allt att ha sitt eget system och sin egen databas.




Slutligen lägger vi till kolumnerna och deras datatyper. Vi märker också att det inte finns något samband mellan reservation och equipment . Men görs reservationen för en viss utrustning? Nej, den är gjord för en typ av utrustning:vi lägger till tabellen equipment_category och anslut tabellerna reservation och equipment till det.




Är vi klara? Läs beskrivningen igen. Vår databasmodell utelämnar fortfarande avgifterna. Tja...

Det är en övning för läsaren. (Men om du inte känner för att öva på dina färdigheter i databasmodellering, här kan du hitta en färdig databasstruktur för ett biluthyrningsföretag.)


  1. Vad är Azure Data Studio?

  2. Är vi redo för Nordic PGDay?

  3. Oracle Trigger WHEN Klausulexempel

  4. Utveckling av feltolerans i PostgreSQL:Tidsresor