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 :)
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?
# 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 ..
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 :)
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 ..
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.
Synes godt om
Ny brugerNybegynder
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.