Använd vänsterpil och högerpil för att navigera

Eller Ctrl+P för att skriva ut till PDF (eller på papper)

Databasdesign och normalisering

Hur man tar fram en bra databas

Databasdesign

Process

Exempel: biograf

Biografen består av flera olika salonger som i sin tur är uppdelade i numrerade sittplatser. Antalet sittplatser varierar för varje salong men deras fysiska placering är inte viktiga för detta system, endast deras nummer i salongen. (Radnummer är inte heller viktiga.) Varje salong kan användas flera gånger per dag för att visa filmer.

Varje film har en titel, en längd, en eller flera genrer och en eller flera skådespelare. Filmer kan också ha åldersgränser (baserade på de svenska: 7 år, 11 år, 15 år och 18 år) men vissa filmer är tillåtna för alla. Slutligen har varje film ett biljettpris.

En kund har grundläggande personuppgifter samt en epostadress och ett telefonnummer som behövs för biljettköp. Kunder kan köpa biljetter till visningar, som äger rum i en bestämd salong vid ett bestämt datum och klockslag. Som ovan nämnt är biljettpriset på en visning knutet till själva filmen, men vissa visningar sker i 3D och har således högre biljettpris (en fix ökning oavsett film).

Normalisering

Vad är en normaliserad databas?

Undvik dynamisk tabellstruktur

Exempel: dynamiskt antal kolumner

Person
IDNameGenderCar1Car2Car3...
1SvenmaleABC123NULLNULL...
2EvafemaleDEF456GHI789NULL...
3BradmaleJKL111MNO222PQR333...

Alternativ till dynamiskt antal kolumner

Person
IDNameGender
1Svenmale
2Evafemale
3Bradmale
Car
PersonIDPlate
1ABC123
2DEF456
2GHI789
3JKL111
3MNO222
3PQR333
......

Exempel: dynamiskt antal tabeller

SwedenCity
NamePopulationFounded
Gothenburg572 7791621
Stockholm942 3701252
Jönköping93 7971284
.........
NorwayCity
NamePopulationFounded
Oslo669 0601040
.........
GermanyCity
NamePopulationFounded
Berlin3 670 6221237
.........

Alternativ till dynamiskt antal tabeller

City
NamePopulationFoundedCountry
Gothenburg572 7791621Sweden
Stockholm942 3701252Sweden
Jönköping93 7971284Sweden
Oslo669 0601040Norway
Berlin3 670 6221237Germany
............

Undvik flera beroenden på samma rad

Flera beroenden på samma rad

Person
NameBirthdateHeightCountryCountryCode
Jakob1987-03-031.81SwedenSE
Brad1963-12-181.83United StatesUS
...............

Inkonsekvens vid inmatning

Person
NameBirthdateHeightCountryCountryCode
Jakob1987-03-031.81SwedenSE
Brad1963-12-181.83United StatesUS
Joel1979-11-251.85SwedenSE
Alicia1988-10-031.69SwedenSE
...............

Annat exempel: beräknade värden

Order
IDCustomerDateSum
1Alice2017-10-01850
2Bob2017-10-07200
............
Product
OrderIDNamePrice
1lamp500
1radio300
1batteries50
.........

Denormalisering