Optimal database design

Tags:    database

Hejsa piger og drenge.

Jeg sidder med en hulens masse data jeg gerne skal have fyldt i min database.
Jeg kender allerede på forhånd alle datatyper, så det er altså ikke problemet.

Problemet ligger i noget helt andet, nemlig hvordan gør jeg dette bedst.

Jeg har samlet set 79 felter, og det er godt nok en del.
Det er noget omkring noget ansøgningsskema som skal ligges i en database.

CPR. Nr.
Navn
Emailadresse
Adresse
Post nr.
By
Tlf. nr.
Nationalitet
Opholdstilladelse
Arbejdstilladelse
Civiltilstand
Fritidsbeskæftigelse
Nuværende arbejdsgiver
Nuværende arbejds art
Nuværende ansat fra
Årsag til jobskifte
Tidligere arbejdsgiver (1-4)
Tidligere arbejds art (1-4)
Tidligere ansat fra (1-4)
Tidligere ansat til (1-4)
Erfaring
Kontakte tidligere arbejdsgiver
7. klasse
8. klasse
9. klasse
10. klasse
HF/HHX/HTX/Student
Andet
Faglig uddannelse art
Faglig uddannelse sted
Faglig uddannelse fra
Faglig uddannelse til
Uddannelse art (1-6)
Uddannelse sted (1-6)
Uddannelse fra (1-6)
Uddannelse til (1-6)
Aften
Nat
Dag
Skiftehold
Fleksibel
Kørekort
Hygiejnebevis
Truckcertificat
Kroniske sygdomme
Hvorfor søger du stillingen
Fremtidsplaner


De steder hvor der er (), betyder at der kan være 1 og maks op til 4 eller 6 af den, hvordan gør jeg det bedst med dem?

Alle andre siger lidt sig selv at de er nød til at være der som de er.

Dernæst er der et spørgsmål omkring en unik nøgle, skal jeg gøre brug af datoen, cpr.nr. eller bør jeg anvende et ID?



7 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Den data der kan eksistere flere rækker af skal ligge i sin egen tabel.

Dvs. f.eks. arbejdsgivere, ansættelsesforhold og uddannelse skal ligge i sin egen eller egne tabeller og have en 1-n relation mellem hhv. person og nye tabeller.

Husk at hygiejnebevis og truckcertifikat kan principielt være uddannelse (kurser), men det kan også bare være afkrydsningsfelter. :)

7-10. klasse kan beskrives som afgangsår.



Hvis du rev din censor rundt i ERD, hvorfor bruger du det så ikke? Det her er lige ud af landevejen.

Hvis vi tager to eksempler, så er der en 1-n eller en n-n forbindelse mellem en person og uddannelser. Uddannelser er en stærk entitet som kan fungere uden en person, derfor skal den normaliseres ud i sin egen tabel. Så er det fløjtende ligegyldigt om du har 1, 5, 7 eller 245 forskellige på hver. Det er enten en fremmednøgle (1-n) eller en fordelingstabel (n-n) du skal bruge, fra person. Alt dette er det samme for jobs.

Din tabel Person har mange kolonner, og jeg ville måske se om der er nogle der kan normaliseres væk fra denne, således du for en bedre struktur og genbrug af data, fx. civilstand.





Tak for tilbuddet Christian.

Jeg er udemærket klar over hvordan man laver NF3 ud fra Codds regler.
Jeg har terpet det til hudløshed (sidenote - jeg rev min censor rundt i ERD, samt optimering af disse).

Der hvor mit problem ligger er at jeg har 4 muligheder for tidligere jobs (altså 4 entry for hver arbejdsgiver, arbejdsart/stilling, fra og til)
Det samme gør sig gældende for uddannelse, den har dog blot op til 6.
Det er ikke et krav at det skal udfyldes, men hvordan placerer jeg det bedst?
Skal jeg vælge at lave hver tidligere arbejde i sin egen tabel også smide den over med en henvisning via en FK, eller skal jeg ligge det hele i den samme tabe?

Jeg kan ikke helt blive klog på hvad der er bedst, derfor sender jeg den ud plenum.



Hygiejnebevis, truckcertifikat og 7-10 klasse er alle en bool, så dem er der styr på.

Det lyder egentlig som en god ide at smide dem i en tabel for sig selv.
Også det jeg i sidste ende har arbejdet henimod, da jeg har tegnet det hele op



Det hjalp også da det kom ned på papir.

Så kan det være du kan opklare for mig hvorfor jeg skal anvende civilstand i sin egen tabel og ikke som et felt af typen enum, med fx (1,2,3) der ud fra dette bestemmer hvad man er?



Du kan godt have en civilstand uden en person. Plus at du vil kunne genbruge den til flere end een person. Rent praktisk vil du også have din "oversættelse" i din database, således du har en kolonne med "1" og en kolonne med "Gift" - frem for at have denne logik i koden - eller denormaliseret ind i tabellen.



Jeg ville sende dig på youtube og søg efter hvordan du laver et EER og RD skema. Og så normaliser databasen til normaliserings form 3.

Hvis du roder meget med databaser ville jeg også forslå at du anskaffer dig en god bog omkring emnet.

Vh



Indlæg senest redigeret d. 22.08.2014 10:28 af Bruger #16700
t