|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Futur Membre du Club
![]() Inscription : juin 2005 Messages : 166 ![]() |
Bonjour,
J'ai une table "produit" définie comme ceci : Code :
J'ai une autre table utilisateur_log_play définie comme ceci : Code :
Je voudrais par contre lier les champs pid et pnom de la table utilisateur_log_play à ceux de la table produit, j'aimerais mettre comme contrainte sur le champ pid (ON DELETE SET NULL et ON UPDATE CASCADE) et sur le champ pnom (ON DELETE NO ACTION et ON UPDATE CASCADE) En gros, si on modifie l'id ou le nom d'un produit, la table utilisateur_log_play est mis à jour, si on supprime un produit seul la reference pid est mis à zero, on ne change pas pnom. Est-ce possible ? Comment ? Merci beaucoup. Cordialement |
||||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Laurent Inscription : juillet 2008 Messages : 141 ![]() |
Bonjour,
La syntaxe SQL est définie ainsi: http://dev.mysql.com/doc/refman/5.1/...nstraints.html. Tu pourrais donc faire sans soucis ta contrainte avec ON UPDATE CASCADE, mais ce n'est pas possible d'avoir un comportement différent sur 2 champs de la FK. Le problème est le suivant : Si le champ utilisateur_log_play.pid devient NULL, mais pas le champ pnom, tu ne respectes pas la contrainte d'integrité. Mais est-ce réellement la bonne solution ? Je ne vois pas trop l'intérêt du comportement désiré. En plus, je ne comprends pas (mais je n'ai pas le contexte) pourquoi avoir une PK (pid,nom). À la lecture, ton pid me semble ta PK (Produit IDentifiant), et nom un attribut "unique" (Une 2eme PK). Néanmoins, tu peux peut-être faire le comportement souhaité avec des triggers: A L'INSERT dans utilisateur_log_play , Trigger vérifiant qu'il y'a des enregistrements correspondants dans produit. A L'UPDATE dans produit, Trigger déclanchant UPDATE dans les champs utilisateur_log_play AU DELETE dans produit, Trigger déclanchant UPDATE dans le champ utilisateur_log_play.pid (=NULL) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com