Avatar billede spaulsen Nybegynder
06. juli 2011 - 22:02 Der 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
Avatar billede NielsErikP Mester
06. juli 2011 - 22:20 #1
Hej..
Lytter lige med ;-)
Avatar billede kop Nybegynder
06. juli 2011 - 23:55 #2
Prøv denne her.http://audiograbber.en.softonic.com/ den kan måske hjælpe dig lidt af vejen,,,,,, den hjalp mig et langt stykke.
Avatar billede arne_v Ekspert
06. juli 2011 - 23:56 #3
Du skal have en tabel sangeudgiveks md 2 felter sangid og udgivelsesid som knytter dem sammen.
Avatar billede spaulsen Nybegynder
07. juli 2011 - 09:33 #4
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?
07. juli 2011 - 14:31 #5
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'

o.s.v.
11. juli 2011 - 06:46 #6
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.
Avatar billede spaulsen Nybegynder
15. juli 2011 - 16:37 #7
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.
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