Hjälp med relationer i databas i Ms Access

Trädvy Permalänk
Medlem
Registrerad
Dec 2013

Hjälp med relationer i databas i Ms Access

Hej behöver lite hjälp med en databas och relationer. Databasen är en musikbutik och säljer musikalbum.
En "huvudtabell" som är album skall länkas med tabeller, låtar och artist. Har lite svårt att greppa vilken relation jag skall använda för tabellen "album" , dvs huvudtabellen skall endast ha två fält, år albumet släpptes och albumets titel.

Jag förmodar jag behöver ha en tabell till för länka artist med album och likaså en tabell till som länkar låtar med tabellen album?

Eller hur skall jag få en "huvudtabell" i relation med både artist tabellen och låtar tabellen då det endast är två fält i album.. ?
Förstår att jag måste ha en en till "flera" relation för det kan ju vara fler artister på ett album likaså låtar.. men strukturen att bygga upp relationerna fastnar jag vid..

Vore tacksam för hjälp,
vh

Trädvy Permalänk
Medlem
Registrerad
Jun 2016

@Matte.mhk: Alltså... Jag har läst en kurs i databaser och det var inte direkt igår... och jag har lite svårt att få grepp om din faktiska fråga. Men rent spontant känns det som att du bara behöver två relationstabeller, t.ex. "låt_förekommer" (för relationen album - låt) och "medverkar_i" (relationstabell för att koppla artist till album).

Alltså... åter igen, har bara läst 7,5hp databasteknik och kan egentligen inte ett smack. Så fort någon annan svarar i tråden kan du glömma detta inlägg.

Intel i7 6700k | MSI GTX 1070 Gaming X | MSI Z170A Gaming M5 | Corsair 16GB DDR4 2133MHz CL13 Vengeance | Corsair RM750x | Samsung 850 EVO 250GB | Seagate Desktop 2TB | Be queit! Pure rock | NZXT Noctis 450 Vit | AOC G2460PG 144Hz G-Sync | QPAD MK-80 Pro MX Blue | Logitech G502 Proteus Spectrum | Kingston HyperX Cloud II

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010

Jag kan inte Access särskilt bra men jobbar med databaser i MS SQL och frågan är ju ganska generell så det borde inte vara några problem.

Som jag ser det borde egentligen artist vara huvudtabellen för en artist har ju normalt flera album och ett album normalt bara en artist, förutom samlingar då men det kan inte ens Spotify hantera på ett bra sätt utan det står bara various artists på dem.

Jag antar att alla tabeller också har ett ID så att det går enkelt att relatera dem (inte minst för hastigheten i basen). Men annars får du helt enkelt relatera m.h.a. fritextfält.

Jag hade lagt upp det som:

Artist - Namn - ID Album - Namn - År - Artist.ID - ID Låt - Namn - Album.ID

Sen kan du förstås fylla på med mer fält om du behöver, som låtnummer eller längd i Låt-tabellen osv.

Behöver du utgå från Album som du säger så hade jag kanske lagt upp det som:

Album - Namn - År - ID Artist - Namn - ID Låt - Namn - Album.ID - ID AlbumArtist (tabell endast för relationen, ingen unik nyckel utan kombinerad av båda fälten) - Album.ID - Artist.ID

Ska du stöda samlingsalbum kanske du borde koppla artisten till låten istället för albumet, eller skapa en egen tabell just för samlingsalbum som relaterar en låt till en artist men som bara tittas på om albumet är kopplat till "Various artists" eller så.

Edit: Ska du använda fritextfält för relationer så kan det bli problem då varken bandnamn, artister eller låttitlar är unika. Exempelvis banden som heter Nirvana, ett från 70-talet och ett från 90-talet, eller låten Express Yourself med Madonna eller med Salt N Pepa eller låten Who Are You med The Who eller med Black Sabbath (för att ta tre exempel jag kom på på rak arm).

Trädvy Permalänk
Medlem
Registrerad
Dec 2013

Det Ser bra ut Snajk. Jag måste nog dessvärre utgå från album. Jag skall vidare föra kundregister och försäljning av "albumen" i två tänkta tabeller

-Försäljning
-Kund

Där får jag väl utgå från försäljningsID som unik nyckel för varje order för att kunna hålla reda på vem som köpt vilket album.
KundID för kund.

Tack åter igen för svar.
Upskattat!

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010
Skrivet av Matte.mhk:

Det Ser bra ut Snajk. Jag måste nog dessvärre utgå från album. Jag skall vidare föra kundregister och försäljning av "albumen" i två tänkta tabeller

-Försäljning
-Kund

Där får jag väl utgå från försäljningsID som unik nyckel för varje order för att kunna hålla reda på vem som köpt vilket album.
KundID för kund.

Tack åter igen för svar.
Upskattat!

Jo något sånt i alla fall. Med kundID (Kund.ID) på försäljningen då (jag hade nog kallat den order eller kvitto ). Man kan normalisera den mer (alltså göra den mer generell/abstrakt) också förstås, men för en skoluppgift så är det nog viktigare att vara tydlig liksom.

Trädvy Permalänk
Medlem
Registrerad
Dec 2013
Skrivet av snajk:

Jo något sånt i alla fall. Med kundID (Kund.ID) på försäljningen då (jag hade nog kallat den order eller kvitto ). Man kan normalisera den mer (alltså göra den mer generell/abstrakt) också förstås, men för en skoluppgift så är det nog viktigare att vara tydlig liksom.

Jo det förstås.
Stötte på ett annat problem dock, inverteringen och relationerna i sig med försäljningen och kundregistret fungerar som en smäck. Men att lägga till album genom ett formulär jag gjort fungerar inte pga, det är nån relation till tabellen "Artist" som inte fungerar.
Jag har gjort ett formulär från en fråga från tabellen album och artist.

.Album
-album
-utgivningsår

.Artist
-Artist

Tanken var att smidigt kunna fylla i album, utgivningsår med Artist. Dock skapades dubbletter av artist trots jag har "index" inga dubbletter i kopplingstabellen och om det inte skapade några så hämtade tabellen album inget från artist.

Jag behöver en koppling som löser det antar jag.

Länk på relationer

Vh

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010

@Matte.mhk: Hmm. Jag vet inte riktigt hur det funkar i Access men det borde vara något fel i formuläret. Du måste få formuläret att i första hand titta i Artist-tabellen och om artisten inte finns där lägga upp en ny, annars ta den som finns. Inte så mycket hjälp kanske, men jag har ingen aning om hur sånt funkar i Access tyvärr.

Trädvy Permalänk
Medlem
Plats
Staffanstorp
Registrerad
Mar 2008

I ditt schema har album bara en albumartist men varje albumartist har en eller flera artister. Ta bort kolumnen artist, lägg artistnamnet i albumartist och låt albumartist få många till många relation till album. Det borde fungera.

Trädvy Permalänk
Medlem
Registrerad
Dec 2013

@bore69:
Måste dock ha kvar Tabellen artist. Låser jag upp den blir det nog problem med dubbletter är jag rädd för.

Problemet är att Albumid inte får relation till artist just nu.
Efter gjort formulär och skall lägga till nytt Album ut ifrån en fråga, där jag har:
Album
Album.Album
Album.utgivningsår

och en kontroller från tabellen Låtar:

-Låtar.Artist
Skriver jag en post i Artist binder den inte artisten med Albumet jag postar som är problemet. Jag måste ange artistID till varje album jag lägger till för de skall kopplas..
Borde ju vara en relation som skall göras nånstans som är fel.
Vh

Trädvy Permalänk
Medlem
Plats
Staffanstorp
Registrerad
Mar 2008

Jag kan inget om MS Access men relationer ska fungera likadant i alla relationsdatabaser. Jag var kanske lite otydlig när jag sa ta bort artist o h lägg till en många till många relation. Jag menade att du inte behöver både Artist och Albumartist som entiteter. Men många till många relation blir det en tabell ändå. Jag ser Artist som entitet. En artist kan ha flera album och ett album kan ha flera artister, en många till många relation. I databasen hanteras en sådan relation av en tabell som länkar samman Album och Artist. AlbumID och ArtistID kan förekomma på flera rader men bara tillsammans på en rad. Tillsammans utgör AlbumID och ArtistID en nyckel för att identifiera raden och därmed relationen. Jag kan inget om hur MS Access fungerar. Kan du rita en många till många relation? Eller måste du koda den själv?

Sedan får du fundera över hur du gör med låt. Är det viktigt att du kan se vilken artist som gjort vilken låt på vilket album. I sådana fall får du lägga till LåtID i din relationstabell och då är det alla 3 id som utgör nyckel. Annars kan du lägga relation till Album eller Artist direkt. Det blir i praktiken som att behålla tabellen Albumartist men den innehåller bara id från de andra tabellerna. Och relationerna till den är en till många från alla 3 tabeller.

Blev det tydligare?

Trädvy Permalänk
Medlem
Registrerad
Dec 2013

@bore69:
Något tydligare, jo jag kan fixa N-N relationer, dock är Artist tabellen ett tvång.
Jag är kanske otydlig med fast oerhört tacksam för svar.
Jag har en uppgift att sköta ett register med sålda album, som en invertering typ.
Tabller som måste vara med

-album
-låtar
-artist
Dessa skall på lämpligt vis ha relationer. Har jag många till många relationer är jag rädd för det blir massa dubbletter poster i fälten, kan ju låsa dem så det inte blir så men då blir det en 1-n relation vad jag vet. Det är därför jag har kopplingstabellen för Album tabellen är låst till två fält av tvång
id
Album.album
Album.utgivningsår
Kanske jag som gjort fel med en kopplingstabell men ända sättet jag ser som kan lösa lämpliga relationer så man kan se vilka artister som är med på albumen man lägger in och vilka låtar som albumen har är väl målet att uppnå. Sedan koppla det till ett kundregister har jag redan löst vilket är mycket lättare.
Kanske blev lite mer klarhet eftersom det kan vara ett mycket lämpligare sätt kanske att tillgå.
Tacksam för den tid i övrigt!
Vh

Trädvy Permalänk
Medlem
Plats
Staffanstorp
Registrerad
Mar 2008

I en många till många relation kan samma kolumnvärde var för sig förekomma på flera rader, annars kan det inte vara många till många. Däremot så kan kombinationen av kolumnvärdena bara förekomma en gång.

| ID_1 | ID_2 |
--------------------
| 1 | A |
| 1 | B |
| 2 | B |

är helt OK eftersom kombon 1-A och 1-B och 2-B är unik. Om album är ID_1 och artist ID_2 så har artist A medverkat på album 1 och artist B på både album 1 och 2. Du måste inte ha en kolumn som är unik för varje rad, men du måste ha en eller en kombination av kolumner som är garanterat unik för varje rad. När flera kolumner tillsammans gör raden unik brukar man kalla det för sammansatt nyckel. I praktiken lägger man ofta till en id kolumn i varje tabell för att undvika sammansatta nycklar eftersom de gör de tar en hel del på prestandan. Men om du gör det så ligger ansvaret för att raden är unik på affärslogik eller gränssnitt.

Vill du göra det mer komplicerat så lägger du till låt också:

| ID_1 | ID_2 | ID_3 |
-----------------------------
| 1 | A | 1 |
| 1 | A | 2 |
| 1 | B | 1 |
| 2 | B | 1 |
| 2 | B | 2 |

Många rader är nästan likadana, speciellt med 14 låtar per album Men så länge varje rad är unik är det OK. Och nu kan du se att artist B som var med på både album 1 och 2 var med på 1:a spåret på album 1 men inte 2:a.