Avatar billede sandrasmurf Nybegynder
19. marts 2007 - 01:20 Der er 18 kommentarer og
1 løsning

A related record is required

Hej eksperter

Så er det blevet min tur til at designe databaser. Jeg er startet med access og er stødt ind et lille problem. Så håber i  kan hjælpe.

Jeg designer en for-sjov-database baseret på mp3 oplysninger.

Jeg har lavet en tabel, der hedder Mp3Entries, der indeholer:
Primary Key
Filename
Title
Album

Jeg vil nu gerne have Artist info med i tabellen.

Problemet er, at der kan være flere Artists om at lave et nummer.

Derfor har jeg lavet endnu 3 tabeller: PrimaryArtist, SecondaryArtist og ThirdArtist, der gemmer en Foreign key til min "rigtige" Artist Tabel, der rummer alle kunstnerne.

I MP3Entries har jeg oprettet 3 felter(Artist1_FK, Artist2_FK og Artist3_FK), der skal indeholde en foreign key til den tilsvarende Prim, sec og third Artist Tabel.

I øjeblikket brokker Access sig, når jeg skal oprette en Mp3Entry, der kun er lavet af 1 Artist. Den kunne ganske givet godt tænke sig, at jeg ikke skrev 0 i Artist2_FK og Artist3_FK.

Mit spørgsmål er derfor:
1) Er min fremgangsmåde den rigtige til problemstillingen med flere kunstnere til et nummer. Kan ikke lure om man kan udvide til flere kunstnere eller evt. N kunstnere. Det virker ikke så optimalt at oprette 3 kunstnere i Artist tabellen og så lave entries i de tre andre artist tabeller, hvor der bare står
1,1
2,2
3,3
2) Givet at mit design er OK, hvordan får man så fortalt access at Artist2_FK og Artist3_FK godt må indeholde værdien 0, mens Artist1_FK altid skal angives.

Allan
Avatar billede hugopedersen Nybegynder
19. marts 2007 - 06:10 #1
Umiddelbart er dit design ikke godt nok vil jeg påstå.
Du skal have lavet dig en mange til mange relation ved hjælp af 3 tabeller (1 med musikstykker, 1 med kunstnere og en der knytter dem sammen) Jeg har ikke lige et eksempel ved hånden, men mon ikke mugs har det når han kommer op.

(hvis det skal være helt rigtigt, så skulle du rent fakstisk have 5 tabeller da der jo sådan set er 2 mange til mange relationer i det - 1 album kan indeholde flere numre, 1 nummer kan findes på flere albums, 1 nummer kan have flere kunstnere, 1 kunstner kan medvirke på flere numre)

Jeg tror rent faktisk at der findes en wizard til at oprette sådan en database. Det gjorde der i hvert fald i gamle dage.
Avatar billede rosco Novice
19. marts 2007 - 08:46 #2
Jeg har et eksempel jeg gerne vil sende dig, den er til at taste album ind i, men princippet er det samme. prøv at se på relationerne.
Læg blot din email så skal jeg sende den.
Avatar billede Slettet bruger
19. marts 2007 - 08:51 #3
Mp3Entries:
idMp3Entries (autonr. og primærnøgle)
Filename
Title
Album

Mp3Artists:
idMp3Artist (autonr. og primærnøgle)
idMp3Entries
idAllArtists
Status (sæt et opslag med kombiboks på den, med en værdiliste: Primary;Secondary;Third)

AllArtists:
idAllArtists (autonr. og primærnøgle)
ArtistName
Note (eller hvad du nu ønsker af oplysningsfelter!~)
Avatar billede sandrasmurf Nybegynder
19. marts 2007 - 12:06 #4
rosco ->
Vil altid gerne se et eksempel. sandrasmurf (at) hotmail.com

HugoPedersen --> 
Tak for dit ærlige svar.... Havde jo nok på fornemmelsen at mit design var lidt skævt. Har du evt et hint til hvad sådan en wizard hedder og hvor den ligger? Du opsummerer mine relationer meget godt. Skal lige have forstået hvordan man kringler de 2 many-to-many relationerne i mit eksempel. Det er nøjagtig din beskrivelse, der dækker det problem jeg gerne vil løse.

spg --->
Du har smidt idMp3Entries ind i Mp3Artist. Er det ikke lidt den omvendte verden? I min verden har en mp3entry en defineret Artist, mens logikken i, at en artist har en Mp3Entry virker, hvis ikke forkert, så i hvert fald meget omvendt. Men det er vel blot en anden måde at se sin entity på. Kan ikke lure fordelen i din opbygning.

Derudover er jeg ikke helt med på hvordan du klarer flere artists. Kunne du ikke uddybe hvad du mener med
"Status (sæt et opslag med kombiboks på den, med en værdiliste: Primary;Secondary;Third)"

Dit design vil kræve 1 række per artist til et nummer i Mp3Artist tabellen. Er det korrekt forstået. Så 4 kunstnere, der har lavet et nummer sammen, vil give mig 4 rækker med redundant data i Mp3Artist, da kun status feltet vil skelne rækkerne. Er det korrekt forstået?

-------

Nu har jeg ikke tilbragt så meget tid i Access kategorien herinde før, men man bliver helt spændt på at høre hvad "mugs" har af kommentarer/eksempler, når du nærmest tager det for givet at han har et godt eksempel. Andre kommentarer er naturligvis også velkomne.

Allan
Avatar billede rosco Novice
19. marts 2007 - 12:14 #5
Det er sendt.
Avatar billede Slettet bruger
19. marts 2007 - 12:42 #6
Hvis man nu som eksempel siger, at man skulle lave en db, som skulle styre indkøb... Så ville man lave en tabel med alle varene og en tabel med alle kunderne. Selve indkøbene ville man så kunne styre fra en tabel, som indeholder varenr og kundenr!~)
Avatar billede sandrasmurf Nybegynder
19. marts 2007 - 13:48 #7
rosco --> har modtaget en email, men der er ingen attach?

Spg ---> Det vigtige i database design er vel netop at få defineret sine entities så de harmonerer med formålet med databasen. Jeg har desværre ingen erfaring med at designe databaser, så denne design abstraktion og konsekvensen af at definere sine entities på en given måde kan jeg ikke rigtig forudsige.

Lad mig præcisere formålet med databasen. Formålet er at finde sangoplysninger ud fra et filnavn og at kunne oprette playlister, der indeholder mange mp3 numre.

Derfor ser jeg behov for at have en Mp3Entry, der ligger mellem Playlist og Mp3Info(Album, Artist osv).

Mine relationer er at:
1 playlist kan have flere Mp3Entries, mens 1 entry kan være på flere playlister.
1 Artist kan have lavet flere sange.
1 Album kan indeholde flere numre og 1 Nummer kan findes på flere Albums.
1 Nummer kan have flere Artists og 1 Artist kan medvirke på flere numre.

Allan
Avatar billede Slettet bruger
19. marts 2007 - 22:46 #8
Hvorfor bruger du ikke mediaplayer?~)
Avatar billede sandrasmurf Nybegynder
20. marts 2007 - 00:03 #9
spg --> Er ikke interesseret i at udkonkurrere media player, winamp eller des lige... Øvelsen her er såmænd bare sat i værk for at lære noget om database design og i første ombæring MS Access.

rosco -> kan du ikke sende email igen. Der er ingen attachments. Måske outlook helst vil have filer sendt som zip.

Jeg håber stadig, at der sidder nogen derude, der kan beskrive, hvordan jeg bedst kan designe databasen.

Allan
Avatar billede rosco Novice
20. marts 2007 - 07:58 #10
Allan: Det er zip filer, Jeg har sendt dem igen.
Du kunne evt. sende det du har lavet, for at se hvad du havde tænkt dig.
Avatar billede Slettet bruger
20. marts 2007 - 08:26 #11
Hvis du ønsker playlists, så tilføjer du bare flg. tabel til 19/03-2007 08:51:13...

Playlists:
idPlaylists (autonr. og primærnøgle)
idMp3Entries
NamePlaylist
SortPlaylist (nummer for at kunne styre rækkefølge af sange)
Avatar billede sandrasmurf Nybegynder
20. marts 2007 - 10:15 #12
Rosco --> Der sker desværre ingenting i min hotmail indbakke... Kunne du ikke verificere, at du virkelig sender til sandrasmurf (at) hotmail.com. Ellers kan du prøve allan (at) paretoit.dk.
Avatar billede Slettet bruger
20. marts 2007 - 10:50 #13
Har hotmail ikke lukket helt ned for mdb filer også zippede?~)
Avatar billede rosco Novice
20. marts 2007 - 10:58 #14
Jeg har nu sendt dem til allan (at) paretoit.dk.
Det var sandrasmurf (at) hotmail.com jeg brugte før.
Computere har deres eget liv :-))
Avatar billede sandrasmurf Nybegynder
20. marts 2007 - 13:10 #15
Rosco --> Det er åbenbart ikke skæbnen, at jeg skal modtage en email fra dig. Computere har deres eget liv og vilje og de har åbenbart besluttet at lukke for email kontakten imellem os.

Jeg har nu lavet lidt om på designet inspireret af ovenstående kommentarer og her følger en opsummering :-)

Artist(ArtistID, ArtistName)
Album(AlbumID, AlbumTitle, RecordLabel, CatalogNumber)
AlbumArtist_mm(AlbumArtistID, AlbumID_mm, ArtistID_FK)
Track(TrackID, TrackFilename, TrackTitle)
AlbumTrack_mm(AlbumTrackID, AlbumID_FK, TrackID_FK)
PlayList(PlayListID, PlayListName, )
TrackPlayList_mm(PlayListID_FK, TrackID_FK, EpisodeID_FK)

Er der nogen kommentarer til dette design? Mangler jeg relationen mellem Track og Artist eller er den "automatisk" med gennem de andre relationer.

En Artist kan jo have lavet flere Tracks, mens et Track kan være lavet af flere Artists.

Allan
Avatar billede sandrasmurf Nybegynder
20. marts 2007 - 13:12 #16
Det gik lidt for stærkt:

AlbumArtist_mm(AlbumArtistID, AlbumID_FK, ArtistID_FK)
TrackPlayList_mm(PlayListID_FK, TrackID_FK, PlayListID_FK)
Avatar billede sandrasmurf Nybegynder
20. marts 2007 - 13:31 #17
Ville gerne have lagt et screenshot af nuværende relationer ud, men der er aldrig liv i file -> export funktionen i relationsdesigneren.
Avatar billede sandrasmurf Nybegynder
31. marts 2007 - 21:31 #18
Tak for kommentarer.
Rosco smid et svar så skal du få point. Jeg er ikke nået så langt med designet som jeg gerne ville, men jeg er da kommet derhenad.
Avatar billede rosco Novice
01. april 2007 - 09:42 #19
Et svar.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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