Avatar billede boblebad Nybegynder
16. august 2011 - 22:07 Der er 9 kommentarer

Normaliseret relationel database design ??

Hejsa

Det er efterhånden en del år siden jeg har arbejdet med databaser sidst, og er nu havnet i et lidt større projekt end jeg også er vant til, så jeg har brug for lidt hjlæp, og særligt da jeg sidst arbejdede med det, var det i Access ..

Jeg skal lave et større projekt over et tidsskrift, som skal vise indholdet af hvet enkelt nr., der er tale om ca. 1000 stk på gennemsnitligt 20 sider - den første del af projektet går ud på blot at vise indholdsfortegnelsen af de enkelte numre - del 2 går ud på lægge selve tidsskrifterne ind også, og lave fuld-tekst-søgning med index og det hele - med tiden skal det hele flyttes på en vps hvor jeg kan smide Sphinx eller en lign søgemaskine på ..

Der er to ting jeg umiddelbart ikke helt har styr på, det ene er min hukommelse omkring relationer - jeg har dog læst en del rundt, og fundet  det meste frem igen, men projektet er også en del større end jeg har været vant til tidligere, så det er lige med at gennemskue det hele også - og så er det med at få dataene ind i MySQL databasen - jeg ved det gøres med LOAD DATA INFILE, men ikke helt hvad der kan lade sig gøre og ikke - her tænker jeg bl.a. i forholdet til relationeliteten, om det er muligt at hive alle data ind på én gang, selvom det skal i flere tabeller - jeg har en csv fil med de fleste data i, nogle skal efterfyldes, og jeg ønsker at få et dato-opdaterings felt på også ..

Jeg ser som start ca. 13 tabeller:

# Tidsskrift (En hovedtabel hvor det hele samles i som en styring for det enkelte tidsskrift nr.)

.. dertil følgende tabeller ..

# ArtikelNavn

# ArtikelType (der kan være tale om notits eller nyhed også)

# ArtikelKategori (selve artiklerne kan omhandle forskellige emner)

# Forfatter

# Nr (nr for tidsskriftet artiklen er i)

# Årstal/årgang (årstal/årgang for tidsskriftet artiklen er i)

# Side (side i tidsskriftet artiklen starter på)

De næste er sådan mere relateret til beskrivelse af den fysiske udformning af tidsskriftet ..

# Størrelse (fysiske dimension for tidsskriftet)

# AntalSider (hvor mange sider der er i tidsskriftet)

# AntalNrÅr (hvor mange numre af tidsskriftet der udkom dette år)

# Forsidebillede

Og den sidste tabel er så datomærkning for hvornår en given post er opdateret ..

Som sagt handler det om hvilke relationer jeg skal oprette, og jeg synes at se flere mange-til-mange relationer, bl.a. på ArtikelNavn og Forfatter, som er den mest åbenlyse, og så hvordan den så forbindes med hovedtabellen "Tidsskrift" ..

Årstal/årgang har jeg lagt i samme tabel, og regner med at jeg kan bruge PK ID som tal for visning som årgang 1, som så automatisk viser årstallet 1933, osv.

Og ja, så kommer hele herligheden med at få csv filen ind i databasen, jeg har fået at vide at jeg må splitte den op, en fil til hver tabel - men det forstår jeg ikke helt, da det jo er et programmeringssprog - det er vel muligt eks. at bede om at kolonne 1 går til tabel 1 kolonne 2, da kolonne 1 jo er PK, og kolonne 2 til tabel 3 kolonne 2 osv, i den rækkefølge det nu behøves ..

Og ja, så sidenhen med tilkobling af en ekstern søgemaskine ..

Håber det er beskrevet detaljeret nok, og at det i samme "tråd" heller ikke er for meget, for stor en mundfuld :)

Mange hilsner
Carsten
Avatar billede majbom Novice
18. august 2011 - 08:00 #1
jeg kan ikke hjælpe dig ret meget, men jeg sidder og undrer mig lidt over nogle af dine tabeller. f.eks. kan jeg ikke se ideen med flg tabeller:

# ArtikelNavn
# Nr (nr for tidsskriftet artiklen er i)
# Årstal/årgang (årstal/årgang for tidsskriftet artiklen er i)
# Side (side i tidsskriftet artiklen starter på)

hvorfor er disse ikke bare kolonner i tabellen med artiklen?

# Størrelse (fysiske dimension for tidsskriftet)
# AntalSider (hvor mange sider der er i tidsskriftet)
# AntalNrÅr (hvor mange numre af tidsskriftet der udkom dette år)
# Forsidebillede

lidt ligesom de andre; hvorfor er de ikke kolonner i tabellen med tidskriftet?
Avatar billede boblebad Nybegynder
18. august 2011 - 08:56 #2
Hej splazz

# Artikelnavn: fordi der er flere artikler som er gengivet i de forskellige tidsskrifter, og der findes flere artikler med samme navn, men af flere forskellige forfattere

# Nr: Relaterer sig til ovenstående

# Årstal/årgang: Fordi det genbruges til alt hvad der er i det givne tidsskrift

# Side: Relaterer sig igen til at der findes flere artikler med samme navn, eller samme artikel gengivet i flere numre af tidsskriftet

Og for disses vedkommende:

# Størrelse (fysiske dimension for tidsskriftet)
# AntalSider (hvor mange sider der er i tidsskriftet)
# AntalNrÅr (hvor mange numre af tidsskriftet der udkom dette år)
# Forsidebillede

.. handler det om at der igen er en masse genbrug af samme detaljer, hvilket det også gør noget af vejen for de første tabeller du nævner - kort sagt handler det hele om normalisering, mindskning af gentagelser ..

Mange hilsner
Carsten
Avatar billede boblebad Nybegynder
20. august 2011 - 13:22 #3
Anyone ??

Mange hilsner
Carsten
Avatar billede boblebad Nybegynder
31. august 2011 - 07:17 #4
Hej igen

Kan det virkelig passe at der kommer så mange forbi herinde, og at der ikke er en der kan svare eller har lyst til at hjælpe med ovenstående ??

Mange hilsner
Carsten
Avatar billede arne_v Ekspert
06. september 2011 - 02:02 #5
Jeg tror ikke at der er nogen paa denne jord som kan svare paa dit spoergsmaal.

Normalisering og foreign keys drejer sig om felter. Og du har jo valgt ikke at fortaelle om dine felter.
Avatar billede boblebad Nybegynder
08. september 2011 - 08:40 #6
Hej Arne

Jeg er ikke helt sikker på at jeg forstår hvad du mener ..

Tabellerne indeholder ikke andet end de data som tabelnavnet angiver, samt naturligvis en PrimaryKey til at holde styr på det - og spørgsmålet er så hvilken måde der er den "rigtige" at forbinde tabellerne på med ForeignKeys for at det kommer til at virke optimalt :)

Mange hilsner
Carsten
Avatar billede arne_v Ekspert
08. september 2011 - 18:11 #7
Hvis du kun har et rigtigt felt per tabel, saa tror jeg at designet er helt galt.
Avatar billede boblebad Nybegynder
09. september 2011 - 07:30 #8
Hej igen Arne

Det er det ikke jævnfør det jeg har lært om opbygning af normaliserede databaser, hvor man går efter ikke at skulle have de samme data stående fysisk flere steder, men hvor man kæder tabellerne sammen så de kun står et sted, og man derved har en henvisning ..

Og stort set alt hvad jeg har i min tabel der udgør et tidskrift, er ting som gengår i flere tidsskrifter, og derfor skilles det ud i separate tabeller ..

Mange hilsner
Carsten
Avatar billede arne_v Ekspert
12. september 2011 - 03:19 #9
Jeg tror at der er noget du har misforstaaet med hensyn til normalisering.

Lad os tage eksemplet med antal sider.

Du oensker ikke at genbruge samme raekke i en antalsider tabel fra flere raekker i tidsskrift tabellen. Goer du det vil du ved at rette antal sider for et tidskrift ogsaa rette for de andre som bruger den raekke. Duer ikke.

Og der er ikke nogen pointe i at have en raekke i antalsider tabellen for hver raekke i tidssskrift tabellen. Det ville vaere en 1:1 relation og kan aldig begrundes med normalisering.

Derfor skal antal sider over som attribut i en anden tabel.

Og jeg tror at der er mange andre af den slags.
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