Jeg har en tabel med konsulenter (tblkonsulent) og en tabel med tools tbltesttool. Det er en en-mange relation, da en konsulent kan have kendskab til flere tools. I min tblkonsulent har jeg en foreign key der er relateret til tabellen tbltesttool, men på den måde kan jeg kun tilknytte et tool til en konsulent.
Hvordan sætter jeg det op i et array så en konsulent kan have flere tools tilknyttet ? Er jeg tvunget til at have tool1,tool2 OSV i min tblkonsulent ? eller kan det gøres på en anden måde ?
Hvis det vitterligt ER en 1:* relation, så laver du et felt på tools-tabellen der peger på den rette konsulent.
Jeg vil dog tro det er en *:* relation, da flere konsulenter vel kan kende samme tool. I så fald laver du en relationstabel der indeholder to felter - konsulentId og toolId - hvor begge felter udgør primærnøglen.
Du har ret, selvfølgelig er det mange-mange, da flere konsulenter har kendskab til samme tool. Hvis jeg forstår dig ret, opretter jeg en ny tabel, f.eks. tblToolRelation, og herefter sætter jeg en foreign key i min tblkonsulent som peger på konsulentID i tblToolRelation og en foreign key i min tbltestool som peger på toolID i samme tabel ?
Helt korrekt - hvert felt i relationstabllen er en fremmednøgle til hhv. tblKonsulent og tblTestTool, samtidigt med at de to tilsammen udgør primærnøglen.
Afhængigt af hvordan du skal søge på det, kan det være en ide samtidigt at lave et separat indeks på det felt du placerer sidst i primærnøglen - hvis du altid kun skal søge den ene vej, placerer du bare det felt først i primærnøglen og lader det blive ved det, men hvis du både skal vide hvad en konsulent kan og hvem der kender et bestemt tool, er et ekstra indeks på det sidste felt en god ide, for at undgå table scan når det går den anden vej. Hvorvidt det har en større effekt afhænger selvfølgelig af både datamængde, samt hvor ofte den anden søgning finder sted, men det er værd at have i baghovedet.
Omvendt, du har to foreign keys i din tblToolRelation, en som peger på konsulentID i din tblkonsulent tabel og en som peger på toolID i din tbltestool tabel.
Din tbltestool og tblkonsulent skal ikke indeholde nogen foreign keys fra tblToolRelation, da tblToolRelation udelukkende består af id'er fra de to tabeller.
takker og bukker, hvis i begge smider et svar, kan i dele pointene. Lige et spørgsmål. Jeg kan vel ikke undgå en primary key i min tbltoolrelation, så felterne hedder vel lidt ala: toolrelationID: PK konsulentID: FK toolID: FK
Nej, felterne hedder kun konsulentID og toolID, og de udgør *tilsammen* primærnøglen - dvs. primærnøglen består af begge felter:
konsulentID: PK,FK toolID: PK,FK
Et ekstra ID tjener intet formål her, fordi du har en naturlig, og fuldt ud praktisk nøgle i de to felter - du vil aldrig have brug for at have samme konsulent optræde to gange for samme tool.
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.