Hvordan skal denne database opbygges?

Tags:    databaser

Hej folkens.

Jeg er forholdsvis ny indenfor database design. Jeg vil gerne prøve at lave en side, som fungerer som en oversigt over en bestemt genre cd'er. Meget i stil med det her: http://dhhu.dk/w/Forside

Men jeg er i tvivl om hvordan databasen skal opbygges. Hvordan tilknytter jeg en cd til en kunstner? Og ville i anbefale mig at uploade albumbilleder til en database eller skal jeg uploade det til en mappe og gemme stien i en database?

Jeg håber at i kan hjælpe mig.

På forhånd mange tak!



Hey.
Nu ved jeg ikke helt hvilket database du bruger, men vil næsten gætte på at du bruger MySQL.

Der er rigtig, rigtig mange måder at løse det her på. Hvilken der er bedst afhænger lidt af hvordan du vil fremvise dit data, hvilke forespørgsler du forventer at lave med mere.

Den nok simpleste måde du kan lave er således:

Fold kodeboks ind/udKode 


Hver række repræsenterer et album.

id er vores "nøgle" som er unik og som vi bruger til at identificerer. Vi har sat den til "AUTO INCREMENT", som gør at den automatisk giver den en værdi en højere end den der blev givet tidligere. Først indsatte har derfor id=1, næste id=2 og så videre..

De øvrige er det data som vi gerne vil knytte til albummet.

Ønsker du at se eksempler på forespørgsler til denne struktur?


Hvis du gerne vil kunne søge på en bestemt kunstner, og finde alt inden for den kunstner, så vil det være simplest og hurtigst at lave to tabeller, en med kunstnere, og en med alle albums.


Omkring album, så er det lidt op til dig. Det kan være meget simpelt at gemme data i din database. Men det kan måske give lidt problemer at du ikke "bare" kan hente alle albumcover uden at skulle igennem din database.

Din spørgsmål er meget åbent, så ved ikke om det er den besvarelse du ønsker.



En kommentar til albumbilleder. Du må aldrig gemme billeder i en database. Performance er alt for dårlig og derfor skal du som du selv skriver, gemme henvisningen til filen i stedet for.



Du bør nok splitte det op i flere tabeller. Da en kunstner både kan lave cd'er og lp'er bør du have en tabel med kunstnere (id, kunstnernavn), og så tabeller med f.eks. cd'er, lp'er og dvd'er som alle har et kunstner_id felt der matcher et id i kunstner-tabellen.



Du bør nok splitte det op i flere tabeller. Da en kunstner både kan lave cd'er og lp'er bør du have en tabel med kunstnere (id, kunstnernavn), og så tabeller med f.eks. cd'er, lp'er og dvd'er som alle har et kunstner_id felt der matcher et id i kunstner-tabellen.



Er sådan set enig med Jonas. Så i praksis er min struktur måske lidt åndsvag. Men teoretisk afhænger det jo af dine forespørgsler. Ved brug af min struktur er det hurtigere at finde ud af hvem der har lavet et bestemt album, mens det men Jonas's struktur er lettere at udskrive de albums en bestemt kunster har lavet.



Mange tak for svarene! Det er meget brugbart! Jeg tror jeg vil bruge Jonas' struktur, da jeg både vil have at man skal kunne klikke sig ind på kunstneren og ind på de forskellige albums.

Men så skal jeg vel lave noget foreign key hvor jeg sætter artist_id ind i cd-tabellen eller hvordan ville det være bedst at gøre det?

Og igen... Tusinde tak for hjælpen! Dejligt forum.



En lille kommentar til Brian B. Christensen. Hvis du ved at fragmentationen i databasen aldrig forekommer (eller er meget lille), så gem billederne i databasen. Det er ikke ulovligt. Det kan dog være ressourcekrævende hvis den skal omrokerer data for meget.

Fx. har MSSQL en image type som kan holde en variabel længde af mange bytes.

Jeg vil anbefale at du gemmer billederne i databasen, hvis du ved at du har lav fragmentation. Det er så meget mere nemmere.



Jep. Det ville klart være den smarteste måde at gøre det.

Derefter kan du, hvis du er rigtig smart benytte et View til at knytte artist og album sammen. Læs:
http://www.w3schools.com/sql/sql_view.asp



Tak for view-linket! Er det noget med at man kun kan lave foreign keys med en InnoDB engine?



t