01. september 2007 - 04:28Der 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 :)
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.
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.
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.
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.
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.