Databaser, efterår 2002 Design ved normalisering Troels Andreasen Datalogiafdelingen, hus 42.1 Roskilde Universitetscenter Universitetsvej 1 Postboks 260 4000 Roskilde Telefon: 4674 2000 Fax: 4674 3072 www.dat.ruc.dk
Design ved normalisering Visse relationelle skemaer kan skabe problemer: vare kunde pris postnr by bord jensen 200 4000 roskilde stol jensen 100 4000 roskilde bord hansen 200 4600 køge seng hansen 300 4600 køge stol suhr 100 8000 århus Problemer, såsom redundans oplysninger er gentaget flere steder f.eks. hansens adresse opdatering en oplysning står flere steder f.eks. hansens adresse inkonsistens hvis den kun ændres et sted sletning sletning af en oplysning kan potentielt trække flere med sig f.eks. leverance af stol til suhr (slettes denne forsvinder kunden suhr også) 2
Dekomponering Dekomponering af relation R at splitte relationen R i to relationer S og T R (A 1, A 2,, A n ) kan dekomponeres i S(B 1, B 2,, B m ) og T(C 1, C 2,, C k ), hvis {A 1, A 2,, A n } = {B 1, B 2,, B m } {C 1, C 2,, C k } S = projektionen af R på B 1, B 2,, B m T = projektionen af R på C 1, C 2,, C k 3
Dekomponering Eksempel leverance(vare,kunde,pris,postnr,by) kan dekomponeres i leverance1(vare,kunde,pris) kunde(kunde,postnr,by) vare kunde pris postnr by bord jensen 200 4000 roskilde stol jensen 100 4000 roskilde bord hansen 200 4600 køge seng hansen 300 4600 køge stol suhr 100 8000 århus vare kunde pris bord jensen 200 stol jensen 100 bord hansen 200 seng hansen 300 stol suhr 100 kunde postnr by jensen 4000 roskilde hansen 4600 køge suhr 8000 århus redundans elimineret (adresse), problem med opdatering af adresse løst, problem med sletning af leverance til suhr løst 4
FD s efter dekomponering ( Projektion af FD s ) Problem efter dekomponering hvilke FD s gælder i de nye relationer? Princip givet mængde af funktionelle afhængigheder F for relation R Udvid F med FD s, der følger af F, (altså dan F+) i resultatet kan findes de FD s der følger med ved dekomponering af R i S og T: FD s for S er FD s (udelukkende) på attributter i S FD s for T er FD s (udelukkende) på attributter i T! at projicere FD's F for R på skemaer S og T 5
FD s efter dekomponering, Eksempel R(A,B,C,D) skal dekomponeres til S(A,B,C) og T(A,D) R(A,B,C,D) har FD s F = {AB -> C, C -> D, D -> A} Hvilke FD's har S og T? Bestemmelse af FD s i de nye relationer S og T: F udvides til: {AB -> C, C -> D, D -> A, C -> A, AB -> D, BD -> C} (= alle interessante FD's, der følger af de tre første FD's) (= minimal overdækning af afslutningen af F) Når R(A,B,C,D) dekomponeret til S(A,B,C) og T(A,D) fås ved simpel udvælgelse ("projektion") FD s for S: {AB -> C, C -> A} FD s for T: {D -> A} 6
Boyce-Codd normal form (BCNF) Uformelt enhver FD på R har formen nøgle -> 'attributter fra R' Formelt Relation R er på BCNF såfremt når A 1 A 2 A n -> B 1 B 2 B m er ikke-triviel på R så er {A 1, A 2,, A n } en supernøgle for R Normalisering af relation R til BCNF at dekomponere R så resulterende skemaer overholder BCNF evt. i flere trin 7
BCNF Normalisering, eksempel I denne relation: leverance(vare,kunde,pris,postnr,by) antag postnr -> by er 'leverance' på BCNF? hvorfor? vare kunde pris postnr by bord jensen 200 4000 roskilde stol jensen 100 4000 roskilde bord hansen 200 4600 køge seng hansen 300 4600 køge stol suhr 100 8000 århus 8
BCNF Normalisering, princip Princip relation R med FD s F (X -> A) F bryder BCNF dekomponer R til S med attributter X+ (ikke = alle attributter hvorfor?) og T med attributter ({R attributter} - {attributter i X+ som ikke er i X} udvid F og find heri FD s for hhv. S og T 9
BCNF Normalisering, Eksempel Eksempel (se også side 6) R(A,B,C,D) F = {AB -> C, C -> D, D -> A} D -> A bryder BCNF, dekomponer i S og T Resultat??? S med attributter: D+ = DA T med attributter: ABCD - A = BCD ok nu? 10
At dekomponere At normalisere involverer at dekomponere Er det altid OK at dekomponere? 11
Tabsløs (lossless) dekomponering Teorem hvis vi dekomponerer en relation R med skema XYZ i relationer S og T med skemaer XY og XZ og der gælder: enten X -> Y eller X -> Z så vil R = S T (altså at R kan genskabes uden tab fra S og T) Eksempel leverance(vare,kunde,pris,postnr,by) kan dekomponeres i leverance1(vare,kunde,pris) kunde(kunde,postnr,by) uden tab af information fordi kunde -> postnr,by BCNF-normalisering når man dekomponerer R i S og T er det fordi der er en FD på formen S T -> T S altså er det altid OK 12
BCNF-normalisering er OK BCNF-normalisering OK fordi BCNF-normaliserings-princippet (X -> A) F bryder BCNF for relation R dekomponer R til S med attributter X+ og T med attributter ({R attributter} - {attributter i X+ som ikke er i X} så der gælder en FD på formen S T -> T S altså er der tale om Tabsløs dekomponering (se eksempel s. 8) 13
BCNF-normalisering, Eksempel leverance(vare,kunde,pris,postnr,by)= leverance(v,k,p,n,b) funktionelle afhængigheder på leverance F = {vk->p, k->n, n->b} hvordan bliver leverance bragt på BCNF? bryder nogle FD's fra F med BCNF? hvis nej: ALT OK (OBS: vi behøver ikke at se på FD's der følger af F) hvis ja: dekomponer efter en af de FD's der bryder find afledte FD's fra F "projicer" på ny relationer fortsæt med disse første skridt: vk -> p bryder BCNF dekomponer i (vkp) og (vknb) find afledte FD's udvælg FD's for (vkp) og (vknb) (altså projicer på hhv (vkp) og (vknb)) fortsæt næste skridt?? 14
BCNF-normalisering, Eksempel leverance(vare,kunde,pris,postnr,by)= leverance(v,k,p,n,b) relation leverance(v,k,p,n,b) funktionelle afhængigheder F: F = {vk->p, k->n, n->b} udvid F: v+=v k+=knb (tilføj k->b) p+=p, n+=nb, b+=b vk+=vkpnb vp+=vp, vn+=vnb, vb+=vb, alle overmængder til vk droppes fortsættes: kp,kn,kb,pn,pb,nb, vpn,vpb,vnb,kpn,kpb,knb,pnb,vpnb,kpnb (ingen yderligere) F udvidet til {vk->p, k->n, n->b, k->b} 15