webForumDet fria alternativet

Foreign keys trubbel

Databaser & SQL

4 svar · 326 visningar · startad av Compusa

Medlem sedan jan. 20023 327 inlägg
Frågan#1

Låt oss säga att jag har följande tre tabeller:

Tabell A
A1 PK
A2
PK: A1

Tabell B
B1
B2
FK: B2 FK till A1
PK: B1, B2

Tabell C
C1
C2
C3
FK: C2 till B1, C3 FK till A1

I tabell C vill jag att primärnyckel ska vara kombinationen C1, C2, C3 där C2 och C3 är främmande nycklar till hela primärnyckeln av tabell B. Är det då rätt att ange de främmandenycklarna i tabellen C på följande vis?

CONSTRAINT BFK
FOREIGN KEY (C2, C3) REFERENCES B(B1, B2)
ON DELETE CASCADE ON UPDATE CASCADE

Anledningen till att jag undrar detta är för att jag refererar en främmande nyckel till en främmande nyckel dvs:

C.C3 -> B.B2 -> A.1

Om jag försöker på följande vis så får jag error, att unikt index ej kan skapas:

FOREIGN KEY (C2) REFERENCES B(B1)
ON DELETE CASCADE ON UPDATE CASCADE

FOREIGN KEY (C3) REFERENCES A(A1)
ON DELETE CASCADE ON UPDATE CASCADE
Medlem sedan dec. 200012 464 inlägg
#2

Är det då rätt att ange de främmandenycklarna i tabellen C på följande vis?

Ja. Vilka foreign keys som finns i B är helt irrelevant.

Medlem sedan jan. 20023 327 inlägg
#3

Okej. Jag vet inte om jag blivit lurad av kurslitteraturen. Men i de relationsscheman som finns där så går alltid de främmande nycklarna till basattributet. Dvs ingen fk går till en annan fk. Hade det varit irrelevant även om detta attribut inte hade varit en del av primärnyckel?

Om jag har entitetstypen A och entitetstypen B som ingår i relationen S och denna relation ger upphov till att A behöver ha en FK till B, ska jag alltid hämta Fk från denna relation, även om detta attribut kan vara fk till en annan enitetstyp? Har jag tolkat ditt svar rätt så är det så, och rent logiskt så borde det också vara på det viset.

Medlem sedan dec. 200012 464 inlägg
#4

Hade det varit irrelevant även om detta attribut inte hade varit en del av primärnyckel?

Vilket attribut syftar du på?

Medlem sedan jan. 20023 327 inlägg
#5

LarsG skrev:

Hade det varit irrelevant även om detta attribut inte hade varit en del av primärnyckel?

Vilket attribut syftar du på?

Ursäkta att jag var otydlig: B.B2 syftade jag på :)

Jag tror jag besvarat mig själv i inlägget ovan, men du får gärna verifiera. Jag tror det är jag som missuppfattat det hela. Naturligtvis ska man referera fk till den tabell som ingår i den relation som ger upphov till att fk behövs?

256 ms totalt · 3 externa anrop · v20260731065814-full.c4b5ca48
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)