Foreign Key

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SQLpro
Le #21691751
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
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
Publicité
Poster une réponse
Anonyme