Avatar billede pokejohn Nybegynder
26. april 2005 - 20:50 Der 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

Kundenummer
Kundenavn
Kundeadresse
Kundepostnummer
KundeBy

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
Avatar billede imago-dei Nybegynder
26. april 2005 - 20:59 #1
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.
Avatar billede pokejohn Nybegynder
26. april 2005 - 21:20 #2
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
Avatar billede pokejohn Nybegynder
26. april 2005 - 21:59 #3
Forstår du mit spørgesmål? Ellers må jeg jo lige prøve igen!
Avatar billede rosco Novice
26. april 2005 - 22:16 #4
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.
Avatar billede rosco Novice
26. april 2005 - 22:24 #5
Et hurtigt bud er at du behøver 6 tabeller til 3NF.
Avatar billede imago-dei Nybegynder
26. april 2005 - 22:37 #6
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.
Avatar billede rosco Novice
26. april 2005 - 22:51 #7
Jeg' forstod vist ikke spørgsmålet, Blot glem min kommentar.
Avatar billede pokejohn Nybegynder
26. april 2005 - 22:53 #8
"...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. ;)
Avatar billede pokejohn Nybegynder
26. april 2005 - 22:54 #9
@ rosco.. bare i orden! Det er helt fint med lidt input ude fra :D
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester