06. juli 2011 - 22:02Der er
6 kommentarer og 1 løsning
Musik database
Ved godt at det her er lavet før men jeg har lidt problemer. Håber på lidt hjælp her.
Er ved at lave en musik database i mysql og php. Har tænkt på følgende:
tabel Artist: Indeholder navn på alle artister, for at sikre at alle artister bliver indtastet ens.
tabel Sang: Indeholder titel på sang, artist (valgt fra tabel artist), forfatter, tekst, m.m.
tabel udgivelse (indeholder alle oplysninger om hver udgivelse, dvs CD,LP,EP, CD-single, 7" single m.m.) dvs Indeholder artist, title, katalognr, m.m. format, type m.m.
Problemet er hvordan laver jeg en kopling mellem hver udgivelse og de sange der er på udgivelsen? Jeg kan selvfølgelig lave 100 ekstra felter til sange i hver udgivelse men det er jo ikke optimalt. Problemet er også at jeg har en masse CD'er og LP'er af samme kunstner med de samme sange på. Så det er jo lidt kedeligt at skulle indtaste alle oplysninger hver gang.
Har også tænkt på at hver udgivelse kan have sin egen tabel med sange. Men så bliver der rigtig mange tabeller med ens data. Problemet er også at rigtig mange cd'er kun indeholder 1 sang mens andre kan være en box med 3 LP'er med hver 10 sange.
Jeg ved godt det kan lyde lidt rodet det her. Men håber nogle forstår hvor jeg vil hen. Mvh Søren
Jeg forstår ikke helt hvad du mener arne_v. Har tænkt på at hvis jeg skal kunne rette i sangene til de enkelte albums så bliver det jo nødvendigt at hvert album har sin unikke tabel med sange tilknyttet, ikke? Men det betyder ca 3000 tabeller med sange. Hvad så når der skal søges på en sang?
Løsningen er det som arne_v kortfattet siger. Du forstod den ikke, så lad mig skære det lidt mere ud i pap.
Du har ret i det med en særskilt tabel med artister. I den tabel giver du hver artist et id nummer plus felter for navn og eventuelt andre ting du vil huske om den enkelte artist. For eksemplets skyld har jeg lavet denne tabel:
Artist id navn 1 Artist1 2 Artist2 3 Artist3
Ligeledes, som du siger, en tabel for sange, hvor hver sang får et id nummer og felter for titel, artist-id (under den forudsætning, at hver sang kun kan have en artist), o.s.v. Igen for eksemplets skyl lavede jeg denne tabel:
Sang id titel forfatter tekst artistid 1 titel1 forfatter1 tekst1 2 2 titel2 forfatter2 tekst2 1 3 titel3 forfatter3 tekst3 1 4 titel4 forfatter4 tekst4 2 5 titel5 forfatter5 tekst5 2
Altså artist 1 er på 2 sange, nummer 2 og 3, og artist 2 er på tre sange, 1, 4, og 5. Artist 3 har du ikke på nogen sange endnu.
Tabellen for udgivelser skal så have et id-nummer for hver udgivelse og felter for type (CD, LP, o.s.v.) og felter for hvad der er karakteristisk for den enkelte udgivelse såsom udgiver, titel, o.s.v., men IKKE indholdet, sangene.
Udgivelse id type titel 1 CD Best of Blues 2 LP Worst of Westerns
Du holder så rede på hvilke sange der er på hvilke udgivelser (kobling mellem udgivelse og sange) ved en særskilt tabel SangeUdgivelse med en række for hver kombination af sang og udgivelse. Hvis vi antager at udgivelse 1 har sangene 2, 3, og 4 og udgivelse 2 har sangene 1 og 3, og at sang 5 ikke er på nogen udgivelse, så kommer tabellen til at se således ud:
SangeUdgivelse udgivelse sang 1 2 1 3 1 4 2 1 2 3
Hvis du så vil vide, for eksempel, titlerne på de udgivelser der indeholder sangen med titlen 'titel3', så kører du denne query:
SELECT u.titel FROM Sang s JOIN SangeUdgivelse su ON s.id = su.sang JOIN Udgivelse u ON su.udgivelse = u.id WHERE s.titel = 'titel3'
Hvis du vil kende navnene på de artister der optræder i udgivelse 'Best of Blues' kører du sådan en query:
SELECT a.navn FROM Udgivelse u JOIN SangUdgivelse su ON u.id = su.udgivelse JOIN Sang s ON su.sang = s.id JOIN Artist a ON s.artistid = a.navn WHERE u.titel = 'Best of Blues'
spaulsen, fik du mit indlæg #5? Fik du løst problemet? I så fald vil jeg bede dig lukke spørgsmålet igen. Jeg opretter dette som svar, idet jeg mener at have bidraget til løsningen. Du vil velsagtens bede om svar fra andre der har bidraget. Eller er det i mellemtiden lige meget? I så fald læg selv et svar og få spørgsmålet lukket.
Jeg er på ferie og har ikke haft tid til at tjekke det. Men Kan fornemme at nogle folk er meget utålmodige her så skynder mig at lukke spørgsmålet.
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.