Avatar billede hurra Novice
01. september 2007 - 04:28 Der er 5 kommentarer og
1 løsning

mange til flere tabeller relationer

Jeg kom til at tænke på om man i sql kan lave en "mange til én, men den ene i ukent tabel" relation.

Fx. har jeg 3 tabeller, 'bolte', møtrikker' og 'indkøb'. Tabellerne 'bolte' og 'møtrikker' indeholder klart nok beskrivelsen af de forskellige bolte og møtrikker der findes fx. på et lager. Hver gang der bliver foretaget et indkøb af en af typerne, bliver det registreret i en anden tabel 'indkøb'.

Altså vil hver forekomst af en bolt eller en møtrik kunne være blevet bestilt hjem flere gange.

Tabelerne kunne se ud en lille smule som nedenstående, hæng jeg i første omgang ikke for meget i fremmed nøglerne.
bolte
    id
    indkøb_id (fk)
    antal
    længde
    tykkelse
møtrikker
    id
    inkøb_id (fk)
    antal
    størrelse

indkøb
    id
    bolt/møtrik _id (fk)
    dato
    antal
    pris

Problemerne er nu, og hvis jeg laver det med fremmed nøglerne i 'bolte' og 'møtrikker', vil det kun være muligt at købe hver type én gang. Men hvis jeg på den anden side laver fremed nøglen i 'indkøb', skal min fremmed nøgle kunne pege i to forskellige tabeller. Jeg kan desuden recikere at ha en bolt og en møtrik med samme id.

Hvordan løser med dette scenarie smartest?

ja, ja, jeg ved godt i det her tilfælde minder bolte og møtriker så meget om hinanden at det ville være smartest at ha dem i samme tabel, men der kunne jo også være andre ting på det lager der ikke mindede om bolte og møtrikker p ånogen måde, exempel vis atombomber :)
Avatar billede dkfire Nybegynder
01. september 2007 - 11:12 #1
Hvis du gerne vil bevare din tabel struktur, så tror jeg der kun er en måde.

Du laver den tabel som indeholder de forskellige typer af vare du har.
I din indkøb tabel har du så et felt som også referer til typetabellen, som så fortæller  hvilken tabel din id henviser til. Men det kan godt være lidt bøvlet at få noget fornuftigt sql til at virker på den måde.

bolte
    id
    antal
    længde
    tykkelse

møtrikker
    id
    antal
    størrelse

indkøb
    id
    typeid (fk)
    bolt/møtrik _id (fk)
    dato
    antal
    pris

typer
    id
    type

Men tror det nemmeste vil være at lægge alle dine vare/ting i en tabel og stadig have din indkøbstabel. Ved dog ikke lige hvad du så skal have forskellig beskrivelse til dine vare.
Avatar billede hurra Novice
01. september 2007 - 15:24 #2
Den der tanke havde jeg også tænk, men hvis jeg gør det sådan der, kommer jeg kan ikke til at kunne lave bolt/møtrik_id som en fremmed nøgle, kan jeg?.

Jeg ved ikke om det er helt vildt vigtigt i denne situation at det er en rigtig fremmed nøgle, men der bliver lidt manuelt arbejde i at ryde op i databasen hvis der skal slettes noget der fra, og noget extra arbejde i at sikre sig at der ikke er fejl i det indtastede data.
Avatar billede dkfire Nybegynder
01. september 2007 - 16:16 #3
Det er rigtig at du kan ikke have en fremmednøgle, da den nøgle skal henvise til flere forskellige tabeller. Det viol sikkert også give dig lidt mere arbejde, og du skal have tjek på at alt går rigtigt til.
Jeg vil nu heller ikke anbefale den metode, da dine forespørgsler hurtigt kan blive meget komplekse.

Jeg vil prøve at se om ikke det kunne være muligt for dig at have alle dine vare i en tabel.
Avatar billede hurra Novice
03. september 2007 - 16:58 #4
Jeg giver dig fuldstændig ret i det her tilfælde ville det bedst kunne svare sig med én tabel til varene. Men det her exempel var det eneste jeg lige kunne komme i tanke om hvor der kunne være en relation af den type jeg søgte svar på :)

Jeg har ikke en konkret opgave til mit problem, det var bare for at ha en tabel der skulle henvise til to eller flere andre tabeller.

Men jeg er ret sikker på at du har ret, der er ikke nogen måde at lave det med rigtige nøgler.

Tak for hjælpen, kom med at svar.
Avatar billede hurra Novice
14. august 2008 - 13:21 #5
dkfire, du skal altså ha nogle points :) kom med et svar.
Avatar billede hurra Novice
04. oktober 2010 - 07:33 #6
Så indkasser jeg selv
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