Mål: minimera upprepningar och
minskar där med lagringsutrymmet
som krävs
Anomalies
Insertion
För att skriva in nya uppgifter
så behöver man även lägga
till ytterligare information om
något som inte är relaterat i
grund och botten.
För att skriva in information om något som
kanske inte har någon personal än krävs
null-värden.
Deletion
Om man tar bort en anställd som
försvinner även information om
arbetsplatsen, data som går helt
förlorad om det var den enda anställda.
Modification
För att ändra ett värde på adressen på arbetsplats
måste adressen ändras på alla anställda som har den
arbetsplatsen.
Lösning: decoupling , alltså att separera
informationen. Varje tabell ska bara vara
ansvarigt för att hålla en sorts information.
Exempel: Facebook. Allt verkar vara
separerat från det andra, har vänner på
en plats, meddelanden på en plats, bilder
på en plats osv. Upplevs därför som
strukturerat, enklare och mer
användarvänligt.
First Normal Form (1NF)
En tabell där varje
cell bara innehåller
ETT värde.
Löser genom att separera
tabellerna och skapar
istället en länk mellan de
två genom primary keys /
foreign keys.
Foreign keys: en kolumn eller flera kolumner
som skapar en länk mellan flera tabeller. Den
ena refererar alltså till en annan tabell och
den andra är referensen.
Tänk: varje tabell ska innehålla en sak/ ett
koncept. Om tabellen innehåller BÅDE adress
och telefonnummer är något fel → skapa en ny
tabell för att separera informationen.
Second Normal Form(2NF)
Appliceras på tabeller med sammansatta primärnycklar –
alltså primärnycklar med två eller fler kolumner – alltså en
tabell som är i 1NF och där värdena i alla kolumner som
inte är primärnycklar bestäms av värdena i ALLA kolumner
som är primärnycklar.
Tänk: om man ska uppdatera tabellen och behöver
ändra i två rader för att göra samma sak är något
förmodligen fel.
När tabeller har sammanslagna primary keys, alltså består av
två eller fler kolumner för att skapa en unik primary key. Ex
staffNum (S45) och dCentreNum (D2) skapar en unik primary
key S45-D2. Men vissa kolumner kan vara kopplade till en av
dessa primary keys t.ex. Name och Position hör till staffNum =
partial dependency.
Olika former av beroende
Partiellt beroende: alla
kolumner styrs inte av
primärnyckeln.
Funktionellt beroende: anta att det finns en tabell med
kolumnerna a och b där kolumn a bestämmer b: a→b
Om man vet värdet för a så finns det bara ETT värde för
b i alla records som har detta värde för a. MEN för ett
givet värde för b kan det finnas flera olika värden av a.
Fullt funktionellt beroende: b ska bestämmas helt av
a och inte av något subset till a. För att en tabell ska
vara i 2NF så ska alla kolumner som inte är
primärnyckel vara fullt funktionellt beroende av
primärnyckeln
Third Normal Form(3NF)
Trots att en tabell är i 2NF kan den fortfarande lida
av update anomalies. ”En tabell som är i 1NF och
2NF, och där värdena i alla kolumner som inte är
primärnyckel kan bestämmas av BARA
primärnyckel och inga andra kolumner.
→ transitivt beroende: ” If a
determines b (i.e. a ⇒ b) and b
determines c (i.e. b ⇒ c), then c is
transitively dependent on a via b
(provided that b or c does not
determine a)
Om kolumner bestäms av varandra
ska de har en egen tabell.
Tänk: om värden upprepas inom
tabellen är något förmodligen fel.