Avatar billede janriis Nybegynder
14. november 2007 - 10:05 Der er 8 kommentarer

En til mange relation - array ?

Hej alle

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 ?
Avatar billede pidgeot Nybegynder
14. november 2007 - 10:08 #1
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.
Avatar billede janriis Nybegynder
14. november 2007 - 10:19 #2
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 ?
Avatar billede pidgeot Nybegynder
14. november 2007 - 10:31 #3
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.
Avatar billede dkfire Nybegynder
14. november 2007 - 10:34 #4
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.
Avatar billede janriis Nybegynder
14. november 2007 - 12:50 #5
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
Avatar billede pidgeot Nybegynder
14. november 2007 - 12:58 #6
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.
Avatar billede janriis Nybegynder
14. november 2007 - 13:08 #7
ah ok, så er jeg med. afventer lige et svar fra dkfire, så kan i dele point. Håber det er iorden. Tak for hjælpen
Avatar billede dkfire Nybegynder
14. november 2007 - 13:54 #8
send du bare pointene til pidgeot :-)
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