Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Foreign Key

1 réponse
Avatar
Patrick
Bonjour,

Comme une même table, j'aimerais que 2 champs fassent référence au même
champ d'une autre table comme "Foreign Key". J'ai voulu utiliser "ON UPDATE
CASCADE" pour les 2 champs mais il y a un message disant que ce n'est pas
possible.

Selon vous, comment faut-il faire pour laisser la "Foreign Key" et en même
temps pouvoir ensuite modifier les valeurs de la table de référence et
automatiquement toutes les valeurs des champs qui y font référence ?

Merci beaucoup pour votre aide.

--
Patrick

1 réponse

Avatar
SQLpro
Voici un exemple du pouquoi du comment :

--- code ---
CREATE TABLE T1 (K1 INT PRIMARY KEY)

CREATE TABLE T2 (K2 INT PRIMARY KEY,
K1A INT FOREIGN KEY REFERENCES T1 (K1),
K1B INT FOREIGN KEY REFERENCES T1 (K1))
GO
--- code ---

OK

--- code ---
DROP TABLE T2;
GO

CREATE TABLE T2 (K2 INT PRIMARY KEY,
K1A INT FOREIGN KEY REFERENCES T1 (K1) ON UPDATE
CASCADE,
K1B INT FOREIGN KEY REFERENCES T1 (K1))

GO
--- code ---

OK

--- code ---
DROP TABLE T2;
GO

CREATE TABLE T2 (K2 INT PRIMARY KEY,
K1A INT FOREIGN KEY REFERENCES T1 (K1) ON UPDATE
CASCADE,
K1B INT FOREIGN KEY REFERENCES T1 (K1) ON UPDATE
CASCADE)

--- code ---

Msg 1785, Niveau 16, État 0, Ligne 1
L'introduction d'une contrainte FOREIGN KEY 'FK__T2__K1B__164452B1'
sur la table 'T2' peut provoquer des cycles ou des accès en cascade
multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION, ou
modifiez d'autres contraintes FOREIGN KEY.
Msg 1750, Niveau 16, État 0, Ligne 1
Impossible de créer la contrainte. Voir les erreurs précédentes.

En effet il n'est pas possible de faire porter le mode cascade en deux
endroits de la table, et plus généralement dans tout ce qui peut
s'avérer être un cycle capable de devnir instable du point de vu
transactionnel.

Plus généralement le mode CASCADE est à déconseillé, car il est t rès
dangereux !

Si vous voulez quand même cascader (ce qui à mon sens dans une BD bien
modélisée n'a aucun intérêt, car les clefs de vos tables ne devraie nt
pas être sémantiques) alors faites le par des triggers.

A +


Frédéric BROUARD, Spécialiste modélisation, SGBR relationnel,
optimisation, langage SQL.
Le site sur le langage SQL et les SGBD relationnels : http://sqlpro.develop pez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation,
tuning, formation
Le blog sur SQL / MS SQL Server http://blog.developpez.com/sqlpro
* * * * * Enseignant au CNAM PACA et à l'ISEN à Toulon * * * * *

On 5 mai, 14:36, Patrick wrote:
Bonjour,

Comme une même table, j'aimerais que 2 champs fassent référence au même
champ d'une autre table comme "Foreign Key". J'ai voulu utiliser "ON UPDA TE
CASCADE" pour les 2 champs mais il y a un message disant que ce n'est pas
possible.

Selon vous, comment faut-il faire pour laisser la "Foreign Key" et en m ême
temps pouvoir ensuite modifier les valeurs de la table de référence e t
automatiquement toutes les valeurs des champs qui y font référence ?

Merci beaucoup pour votre aide.

--
Patrick