Avatar billede nih Novice
11. marts 2004 - 21:41 Der er 18 kommentarer og
2 løsninger

Normalisering for eksperter

Jeg er ved at lave en db til en forening indeholdende en kalender.

Jeg regner med at lave en tabel med alle datoer.
Derefter skal jeg have en tabel med arrangementer - men de har meget forskellig karrakter - stævne, lejr, ledermøde og andet.

Hvordan skal jeg normalisere dette???

Jeg har læst om 'Vertikal opsplitning af entitet' hvor der oprettes en tabel for hver art arrangement.

Er der nogle gode ideer eller erfaringer med lignende tabelstrukturer.

mvh Niels
Avatar billede terry Ekspert
11. marts 2004 - 21:52 #1
Hi Niels
First I wouldnt have a table with all dates, I would just have a field in your table containing the date.
If possible keep all information concerning "arrangementer" in one table, with a relationship to another table containing the "arrangementer" type. As you say yourself.
Then when you show the information you can show the relevant fields for that "art"
Avatar billede terry Ekspert
11. marts 2004 - 21:58 #2
I cant recall seeing anything about 'Vertikal opsplitning af entitet' so I cant comment on that.
If you start splitting your different types into other tables then you will have to take this into account when displaying your data, either by changing sub forms for the specif type or hiding fields etc.
Avatar billede nih Novice
11. marts 2004 - 22:03 #3
Skal jeg så have en tabel for hver arrangementArt

mht. datoer har jeg fundet ud af at det er nemmest at have en tabel med alle datoer i - så kan jeg styre det hele i SQL :o)

tDato : dato
tArrangagement: aID(autoNr), arrArt(FK), Dato(FK)
tStaevne: aID(FK), ,,,,, oplysn om stævner
tMoede: aID(FK), ,,,,,, oplyn om møder
tLejr: aID(FK), ,,,,,,, oplysn om lejr og familie turer

Er det noget i den stil du mener
11. marts 2004 - 22:08 #4
Jeg har heller ikke hørt om begrebet 'Vertikal opsplitning af entitet', men jeg kan godt regne ud hvad det drejer sig om. Og jeg vil sige, at det ofte er en afvejning, hvor man må vurdere hvormeget de forskellige arrangementer adskiller sig fra hinanden.
Hvis de alle stort set benytter samme kolonner, så er der ingen tvivl om, at de bør ligge i samme tabel. Men problemet er vel netop, at der registreres forskellige oplysninger for de forskellige arrangementer!? Men igen...hvis der kun er én eller 2 kolonner til forskel, så kan man måske godt have 'råd' til at have disse felter tomme for visse arrangementtyper. Men er det flere, så bør man nok splitte det op.
Og som Terry skrive, så har man jo broblemer med at skifte recorksoure og felter ud på formularen. Så det optimale vil således være at have en formular til hver arrangementtype.

Men det kunne være intressant at høre om der er en 'facitliste'...!
Avatar billede nih Novice
11. marts 2004 - 22:08 #5
Der vil nemt komme en H.. mase felter i tabellen tArrangement hvis ikke jeg opretter nogle 'subentiteter' - Jeg har bare ikke rigtig nogen erfaring i det.
Og som du siger skal formularer og rapporter laves om hvis klubben kommer i tanker om andre slag arrangementer.

Niels
Avatar billede nih Novice
11. marts 2004 - 22:09 #6
Bogen hedder Database håndbogen af Joakim Dalby og kan varmt anbefales
Avatar billede jkrons Professor
11. marts 2004 - 22:24 #7
Dalby taler ganske rigtigt om vertikal opsplitning i Databasehåndbogen - men jeg vil nu ikke sige at bogern er anbefalelsesværdig til praktisk databasedesign :-)

Fx har han nogle fine eksempler, hvor han bruger Efternavn som primærnøgle!!

Der sker ikke noget ved at have mange felter i din arrangementstabel, hvis du fylder noget i dem. Er felterne speciefikke for de enkelte typer arrangementer bør du dermod have dem i hver sin tabel med tilhørende formularer og rapporter.

Jeg er enig med terry i det vil være en dårlig idé med en tabel med alle datoerne i. Men det er måske mest fori jeg ikke kan se formålet med den.
Avatar billede nih Novice
11. marts 2004 - 22:32 #8
Jeg tror jeg vil lade spørgsmålet stå lidt....
og lege lidt med en db - for det kan vel også gå galt hvis der oprettes både et møde og et stævne med samme aID

mht til datoer, har jeg lige scoret en tusse på at 'opgradere' en af mine gamle db'er ved at tilføje 5 år mere til tabellen datoer fordi den udløb her i år 2004 :o) så det har jeg god erfaring med

Niels
Avatar billede jkrons Professor
11. marts 2004 - 22:34 #9
:-)
11. marts 2004 - 23:18 #10
Jeg kender ikke bogen, men har lidt dårlige erfaringer med Joakim Dalby fra år tilbage (han er dog sikkert blevet bedre siden - det er vi jo alle), men at bruge efternavn som primærnøgle, er ikke umiddelbart det mest kvikke, jeg har hørt om ! ;o)

Men derfor kan bogen jo sagtens være god som helhed.
Avatar billede nih Novice
11. marts 2004 - 23:27 #11
Tja - jeg har haft glæde af min udgave (1994) det største plus er at den er på DANSK.
Avatar billede jkrons Professor
11. marts 2004 - 23:33 #12
Det største problem med dalbys bog er nok at den er så hamrende teoretisk. På mig virker det mest som om, at han går ud fra princippet om, at når bare teorien holder, så skidt være med om det kan anvendes i praksis.

Han mangler efter min mening en hel del omkring definition af problemområde, datainsamlig og strukturering mm. altså alt det, der går forud for normalisering, diagrammering mm. Ligeledes har bogen ret store mangler på det, der kommer efter at designet er færdigt, fx brugergrænseflade design, dokumentation mm.
Avatar billede trer Nybegynder
12. marts 2004 - 08:48 #13
Mht vertikal opsplitning - jeg har da kendskab til det bliver brugt som en rent praktisk foranstaltning for at forbedre performance i et eksisterende system.

Ved at opsplitte tabellen vertikalt kan de forskellige dele (typisk 1 eller 2) placeres på selvstændige tablespaces som igen er på separate raids.

Derudover laver man opsplitningen så kolonnerne splittes op efter hvad der typisk opdateres / læses etc for at minske låse og øge opdateringshastigheden.

Men jeg har altså først set det brugt når systemet har kørt et stykke tid og man har viden om hvad der reelt set sker i databasen, brugsmønstre etc. Tror ikke jeg er stødt på det i designfasen på et system
Avatar billede jkrons Professor
12. marts 2004 - 09:23 #14
trer-> Det har jeg, men ikke af performancehensyn. Alene for at undgå "huller" i tabellerne.
Avatar billede trer Nybegynder
12. marts 2004 - 09:25 #15
jkrons> Lyder som en tabel i 0'te normalform :-) eller en fact-tabel?
Avatar billede nih Novice
12. marts 2004 - 09:30 #16
Tak for de interessante indlæg.
Min løsning blev en kombination

tDato : dato
tAndreArrangementer: ID (autoNr), dato(FK), ,,,,
tStaevner:  ID (autoNr), dato(FK) ,,,,,,

Hvis andre end Terry vil have pts. bedes de svare

mvh Niels
Avatar billede jkrons Professor
12. marts 2004 - 09:37 #17
trer-> Har du en tabel med en række felter og ét af dem kun er udfyldt i meget få tilfælde, kan det med fordel betale sig at splitte tabellen op, så dette felt står i en tabel for sig selv.

Jeg har 12000 ansatte og vil gerne styre hvilket personale nummer, der har hvilken firmabil, så kan jeg vælge at lave et felt til firmabilens registreringsnummer. Men er der kun 8 ansatte, der har firmabil, vil det være mere effektivt at lave en tabel til disse 8.
Avatar billede trer Nybegynder
12. marts 2004 - 10:00 #18
jkrons> Kan godt se din tanke - men jeg ville nok ikke vælge det (pladsforbruget bekymrer mig generelt ikke og i dit eks vil det kun være omkring 64KB). Det er heller ikke helt hvad jeg forstår ved en vertikal split da man der vil have en 1-1 mapning mellem del-tabellerne - og dermed ingen pladsbesparelse.
Avatar billede nih Novice
12. marts 2004 - 11:48 #19
lukker nu - God weekend

The key; The whole key; And nothing but the key. So help me Codd

Niels
Avatar billede jkrons Professor
12. marts 2004 - 12:26 #20
:-) Tak for point.
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