Jeg forstår ikke helt din side... Men den eneste normalisering jeg ville lave, udfra dit første datagrundlag, var at lave en tabel til by og postnummer.
Viveroque - velkommen til det spaendende emne normalisering.
Din foerste tabel, som vi maaske kan kalde Personer, er, som du allerede ved, ikke i nogen normalform fordi der er en gentagende gruppe: Hver person kan have adskillige relationer saasom Friend, collage, boss. Hvis vi saa antager at en person er i relation til en eller flere andre personer, for eksempel at Susan er Friend med Mark siden 2008-11-21 og colleage med Karen siden en anden dato har du flere problemer MED tabellen.
Du skiller saa, korrekt, relationerne ud i en saerskilt tabel, som jeg ville kalde Relationer i stedet for blot Table 2.
Men du kommer galt afsted derved at du synes at give Relationer fremmednoegle (FK) til Personer. I saa fald kan en relation kun hoere til en enkelt person, og det stemmer ikke med at relationen Family hoerer til to forskellige personer. Du har en saakaldt mange-til-mange sammenhaeng hvor hver person kan have mange relationer og hver relation kan hoere til mange personer.
Det klarer du ved at lave en tredje tabel, Reference_Relation, som viser hvilke personer har hvilke relationer til hvilke andre personer fra hvilken rel_date.
Jeg stiller tabellerne op saadan som jeg foreslaar og med de data du har i din foerste tabel plus nogle jeg selv digter for eksemplet. Jeg forenkler persontabellen til kun at indeholde en persons fornavn.
Referencer ref_id Name 1 Susan 2 Mark 3 Karen
Relations ref_id relation 1 Friend 2 Colleague 3 Boss 4 Family
Reference_Relation p_fra p_til relation Rel_date 1 2 1 2008-11-21 1 3 2 2008-11-22 2 1 3 2008-11-23 2 3 4 1983-01-23 3 1 1 2008-11-21 3 2 4 1983-01-23 FK fra p_fra og p_til til Personer.id og FK fra relationer til Relations.id
Saa person 1, Susan har med person 2, Mark relationen Friend siden 2008-11-21 og har med person 3, Karen, relationen colleague siden 2008-11-22 o.s.v.
Naar du saaledes har skilt den gentagne gruppe, relation, ud af Personer, saa er tabellerne i 1NF.
Og saa er tabellerne Relations og Reference_Relations samtidig baade i 2NF og i 3NF fordi ingen af kolonnerne i de tabeller er afhaengige af hinanden.
I tabellen Personer er kolonnerne adresse, zip, og town afhaengige af hinanden. Nu er det mange aar siden jeg har boet i Danmark, saa jeg ved ikke om det er saaledes at hvis man kender en 'by' som for eksempel Odense NV, saa kender man ogsaa postnummeret. I saa fald giver jeg jakobdo ret i at lave en tabel Towns med tre kolonner, id, town, og zip. Persontabellen beholder saa kolonnen address, men i stedet for zip og town faar den en enkelt kolonne town_id med FK til Towns.id
Og saa er Persons ogsaa i 2NF, og fordi i alle tabeller alle kolonner er afhaengige af den Principal Key (PK) og ikke andet er tabellen i 3NF.
Nej desværre. den smuttede lige. Normalisering går i bund og grund ud på at bygge sin database op, så data ikke skal skrives igen og igen. f.eks postnummer og bynavn. og man bør også se om man kan undgå "tomme" felter. feks kunne man have bygget din tabel som friend - yes/no osv
Jeg finder emnet normalisering spaendende. En gang omkring 1975 (hermed roeber jeg min alder) faldt jeg over en bog af en der hed Codd som handlede om relationelle databaser og om normalisering. Jeg fandt det yderst interessant. Codd skrev at han i sin bog kun diskuterede teorien, ikke komputere der skulle implementere teorien. Hvad jeg ikke dengang vidste var at Codd var den der udviklede teorien og at den bog jeg laeste var et af hans oprindelige vaerker. Da han udviklede teorien var komputere endnu ikke kraftige nok til at implementere den. Saa cirka 15 aar senere, da de hierarkiske og link-baserede databaser blev mere og mere utilfredsstillende, fandt industrien, saasom Oracle, Codds teorier frem og begyndte at udvikle praktiske implementeringer af relationelle databaser. Da jeg saa endnu senere startede i mine it studier kom til databaser kunne jeg linke det til det jeg laeste mange aar tidligere.
viviroque, du ville 'taenke over det foer du forstaar det.' Hvordan gik det med at taenke? Er det ved at falde paa plads? Hvis du har problemer saa fortael hvor det kniber saa vi kan kikke paa det. Ellers vil jeg foreslaa at du lukker spoergsmaalet. Jeg opretter dette som svar idet jeg mener at have besvaret dit spoergsmaal.
Hej Christian. Det må du undskylde. Jeg kom helt fra det. Selvfølgelig skal du have dine point, og et stort tak her fra :) Det var storartet!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.