Avatar billede KKKnudsen Nybegynder
16. oktober 2013 - 19:28 Der er 6 kommentarer og
1 løsning

Granskning af database-struktur

Kære eksperter

Jeg er for nyligt begyndt at tumle med databaser og MySQL. Jeg øver mig ved at lave en database over byrådsmedlemmer og er nået til normalisering. Jeg har læst flere tutorials om emnet, men er stadig i tvivl om, hvad der er mest fornuftigt i konkrete tilfælde.

Derfor hører jeg gerne andres bud på en fornuftig struktur til projektet.

Indtil videre har jeg følgende tabeller:

kommuner.medlemmer
------------------
ID int(4), auto-increment
Køn varchar(1) - henviser til tabellen kommuner.køn
Navn varchar(35)
Parti varchar(40) - henviser til kommuner.partier
ErMedlem tinyint(1) - har værdien 0 eller 1
ErBorgmester tinyint(1) - har værdien 0, 1 eller 2
Kommune varchar(17) - henviser til kommuner.kommuner
Født date
Død date
Indtrådt date
Udtrådt date
Hop1dato date
Hop1til varchar(17) - henviser til kommuner.partier
Hop2dato date
Hop2til varchar(17) - henviser til kommuner.partier
Hop3dato date
Hop3til varchar(17) - henviser til kommuner.partier
ErMF tinyint(1) - har værdien 0, 1 eller 2
Noter tinytext

kommuner.køn
------------
M
K

kommuner.partier
----------------
A Socialdemokratiet
B De Radikale
[...]
O Dansk Folkeparti

kommuner.kommuner
-----------------
Albertslund
Allerød
[...]
Aarhus


Konkrete spørgsmål:
1) giver det mening at have tabellen kommuner.køn - eller ville det være bedre at taste værdierne direkte ind i kommuner.medlemmer? (det samme problem gælder for kolonnerne ErMedlem, ErBorgmester, ErMF)

2) Alle Hop-kolonnerne bruges i de tilfælde, hvor kandidater skifter parti. Jeg kender til et enkelt byrådsmedlem, som har været medlem af 3 forskellige partiet + en periode som løsgænger i denne valgperiode. Det giver temmelig mange celler med værdien NULL. Bør hoppene i virkeligheden have sin egen tabel - og burde de i så fald samles i 1 tabel eller splittes i 3 forskellige?


Mange hilsner
Kenneth
Avatar billede arne_v Ekspert
17. oktober 2013 - 04:04 #1
re 1)

Du skal kun have de ekstra tabeller, hvis du i hoved tabellen har en tal kode som bruges til at slaa tekst op i ekstra tabel.
Avatar billede arne_v Ekspert
17. oktober 2013 - 04:07 #2
re 2)

Ideelt set burde du nok have en tabel med:

medlem_id
parti
start_tid
slut_tid

og droppe parti og hop* felterne i hoved tabellen.

Men muligvis vil dine queries blive noget simplere ved at have parti_vedvalg og parti_nuvaerende flter i hoved tabellen.

Det sidste er ikke normaliseret, men jeg tror altsaa at det vil goere nogle ting nemmere.
Avatar billede KKKnudsen Nybegynder
17. oktober 2013 - 23:30 #3
Hej Arne, tak for svar.

ad 1) Hvis jeg forstår dig ret, så er det ikke den bedste løsning at have en selvstændig tabel kun til køn ...

ad 2) Det forslag giver meget god mening. Du nævner noget med "filter" - kan man opsætte en kolonne i hovedtabellen til at trække data fra andre tabeller? Og hvad kaldes det begreb i så fald, hvis jeg skal læse mere om det?
Avatar billede arne_v Ekspert
17. oktober 2013 - 23:41 #4
typo - jeg mente felter
Avatar billede arne_v Ekspert
17. oktober 2013 - 23:41 #5
det er muligvis JOIN du leder efter
Avatar billede KKKnudsen Nybegynder
10. januar 2015 - 06:52 #6
Jeg lukker tråden og siger tak til Arne.

Jeg vil gerne give point, hvis du smider et svar.
Avatar billede arne_v Ekspert
10. januar 2015 - 17:19 #7
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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