26. april 2005 - 20:50Der er
7 kommentarer og 2 løsninger
Normalisering uden brug af 1. og 2. normalform
Er her nogen som kender til normalisering? Jeg sidder nemlig med et skoleprojekt, hvor jeg skal normalisere til og med 3. normalform, men jeg kan ikke bruge 1. og 2. normalform - kan det godt hænde at man ikke skal bruge de to første?
Det er en database over reparationer, og jeg har følgende felter: Reparationsnummer Dato for indlevering Dato for modtagelse Reperatørnummer Reparatørnavn Reparatør kontaktinfo
Varenummer Mærke Model VareInfo Indkøbspris Salgspris
Jeg vælger så at tage udgangspunkt i Reparationsnummer som værende primærnøgle.. Men 1. normalform siger at data i primærnøglen ikke må optræde flere gange.. Det kan jeg heller ikke se hvordan den skulle gøre.. 2. normalform siger at hvis der, i en tabel med en sammensat primærnøgle, er nogle felter, som er afhængige af dele af primærnøglen skal disse skilles fra. Men min primærnøgle er jo ikke sammensat...
Grunden til at jeg spørg er at vi i alle de eksempler vi er blevet forelagt har skulle bruge i hvert fald 1. normalform - så jeg ville bare gerne høre om det er muligt at de to første ikke skal bruges..
Jeg kan desværre ikke bare spørge min lærer, da han er blevet sygemeldt, og vores vikar ikke er super ekspert på dette område..
Så hvis der er en der kan hjælpe vil jeg blive meget glad.. :D
VEd ikke om jeg helt forstår dit spm. Men hvis din database er normaliseret til 3. normal form, så er den også normaliseret til 1. og anden. Man kan sige at 3. normalform indeholder 1. og anden plus noget mere.
I dit eksempel, hvis din primærnøgle ikke er sammensat, ja men så har du jo første normalform.
Det korte svar er altså at du kan ikke "springe 1. og anden normal form over" for at nå tredje.
Jeg vil heller ikke springe den over*, jeg er klar over at man skal tage dem i rækkefølge, men jeg har set nogle eksempler hvor man ikke skulle bruge 2. normalform, da man ikke havde en sammensatprimærnøgle. Mit spørgesmål er bare om det samme kan ske ved 1. normalform - altså at man ikke skal gøre noget. I følge det jeg har fået afvide går 1. normalform ud på at hvis den man har valgt til primærnøgle optræde flere gange skal den dele... Altså hvis jeg starte med at vælge f.eks. kundenummer til at være primærnøgle kan man godt forestille sig at det samme kundernummer vil optræde flere gange (da den samme kunde godt kan komme med flere reklamationer), og derfor normalisere man den efter 1. normalform og deler den ud, man skiller resten fra disse.. Kundenummer Kundenavn Kundeadresse Kundepostnummer KundeBy
Og får derfor to tabeller. En med overstående felter og en med resten, samt en kopi af kundenummer. Jeg har så bare valgt at tage udgangspunkt i reperationsnummer, som jeg mener ikke kan optræde flere gange, da der kun er én reparation, som netop har dét nummer. Skal man så ikke gøre noget ved 1. normalform?
*) Jeg har ikke normaliseret noget endnu - jeg har selvfølgelig prøvet, men blev i tvivl da jeg ikke kunne finde ud af at anvende 1. normalform... At jeg har stillet felterne op med mellemrum har ikke noget med min normalisering at gøre.. Tænkte bare at det blev uoverskueligt, hvis de bare stod listet alle sammen lige efter hinanden - sådan:
Reparationsnummer Dato for indlevering Dato for modtagelse Reperatørnummer Reparatørnavn Reparatør kontaktinfo Kundenummer Kundenavn Kundeadresse Kundepostnummer KundeBy Varenummer Mærke Model VareInfo Indkøbspris Salgspris
imago-dei, har ret. Sagt på en anden måde, hvis du forstår hvad det indebærer at bringe en db i 3NF, er det bare at gå igang find de felter der skal flyttes over i sin egen tabel.
Nej hvis din primærnøgle ikke optræder flere gange ér du allerede i 1. normalform. Der er ingen naturlov at du aktivt skal gøre noget for at normalisere en database.
Det er en god øvelse at gøre som du gør og sørge for at f.eks. reparationsnummer kun optræder én gang. Men jeg vil meget stærkt anbefale at du ALDRIG bruger f.eks. reparationsnumemr som primærnøgle. Man bør ALTID oprette en primærnøgle, som kun er et rækketal (autonumber), og ingen anden betydning har i databasen end kun at være primærnøgle. Grunden til at man bør det er at der altid kan opstå en situation hvor det er uhensigtsmæssigt at bruge en kolonne som har en betydning til nøgle.
Et tænkt eksempel kan være at du bruger cpr nummer til nøgle. Hvis dit program nu skal bruges i et land hvor man ikke bruger cpr nummer eller cpr nummeret f.eks. indeholder et tegn så er man meget bedre stillet hvis cpr nummeret IKKE er primærnøglen.
"...Der er ingen naturlov at du aktivt skal gøre noget for at normalisere en database."
Var lige det jeg skulle have bekræftet... Det er sgu lidt træls at lave forspørgsler og alt muligt, for bagefter at finde ud af, at man lavede noget helt galt i starten...
Men så vil jeg da overveje at lave et "ligegyldigt" ID-felt.. :D
Takker for svar.. Så er det vist bare at gå i gang. ;)
@ rosco.. bare i orden! Det er helt fint med lidt input ude fra :D
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.