|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : mai 2010 Messages : 24 ![]() |
Bonjour à tous,
Je me tourne vers vous après plus de 2h de recherche ne sachant plus trop quoi faire, je vous explique mon problème. J'ai une table Contact : Code :
J'ai ensuite une table option qui est liée à contact avec un ON DELETE CASCADE pour que si un contact est supprimé les champs de la table option soient supprimés aussi. Voici la structure de ma table option : Code :
![]() L'attribut `idTable` est valorisé quand j'insert le choix dans la table qui représentée par nomTable je récupère la dernière insertion et la met à la place de idTable. Voici un exemple de table de choix (Gala_ChampOptionnel0). ![]() Je vous explique maintenant ce que je veux faire : quand un contact est supprimé les champs de la table options correspondants au contact sont supprimés et les lignes des champs optionnels contenant les choix des options supprimés doivent l'être aussi. En gros tout ce qui a rapport avec un contact supprimé doit l'être aussi. Pour supprimé les champs de options si un contact est supprimé avec un ON DELETE CASCADE cela se fait très bien le problème vient quand je veux il faut supprimer les champs des tables de choix (comme Gala_ChampOptionnel0) car la clé primaire de ma table est l'option est un id et je valorise le champ idTable une fois l'insertion faite dans ma table de choix. Hors pour faire un ON DELETE CASCADE sur une clé étrangère il faut que celle ci soit l'UNIQUE clé primaire de la table ce qui n'est pas le cas. Si vous n'avez pas compris je peux ré expliquer le problème est un peu lourd à comprendre et je m'en excuse. Toute idée est la bienvenue! |
||||
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() Développeur informatique Inscription : juin 2004 Messages : 697 ![]() |
Citation:
1/ D'après ton script de création de table, la clé primaire de Options est id_table, hors dans ton screen, on voit des valeurs de id_table en double 2/ Tu n'expliques pas à quoi sert ta table GalaChampOptionnel, ni ce que représente la colonne "choix" 3/ Citation:
__________________
Roland |
||
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 24 ![]() |
J'ai corrigé la structure de ma table option je pense que se sera plus compréhensible.
Citation:
Un table peut avoir pour clé primaire 2 clés étrangères il me semble. Après je ne sais pas si je peux lui donner 2 clé primaire (l'une étrangère et l'autre pas). |
|
|
|
00
|
|
|
#4 | |
|
Membre émérite
![]() Développeur informatique Inscription : juin 2004 Messages : 697 ![]() |
Citation:
Les conditions sont que : - ces colonnes ne contiennent pas de valeurs Null - il n'existe pas dans la table deux lignes qui aient, pour ces colonnes, le même ensemble de valeurs. Donc : - Quelle est la clé primaire de GalaChampOptionnel (de quelle(s) colonne(s) est-elle constituée) ? - Ces colonnes sont-elles des clés étrangères ? A quoi se réfèrent-elles ? - Y a-t-il d'autres clés étrangères dans la table ? Quand on saura tout ça je pense qu'on comprendra pourquoi tes suppressions échouent.
__________________
Roland |
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 24 ![]() |
La clé primaire de galaChampOptionnel est id, ces colonnes ne sont pas clés étrangères. Non il n'y a pas d'autre clé étrangère dans la table.
En fait je voudrais que l'id (de la table GalaChampOptionnel) fasse référence à la clé idTable. Néanmoins le problème étant que je génère idTable en fonction de l'id de galaChampOptionnel... |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Développeur informatique Inscription : juin 2004 Messages : 697 ![]() |
Evidemment, tu ne peux pas mettre de clé étrangère puisque la ligne de Gala.. est créée avant qu' id_table soit renseignée. A la limite, tu pourrais mettre une clé étrangère dans l'autre sens (id_table reference id), mais elle ne t'aidera pas à supprimer "automatiquement" ta ligne.
En fait, si je comprends bien, Chaque ligne dans Gala correspond à une seule ligne d'Options ? Si c'est le cas, la solution est de laisser tomber la colonne id_table dans Options, et d'ajouter une colonne id_option dans Gala.. qui référence l'identifiant de la table options. (A ce propos, je te conseille de donner des noms spécifiques aux colonnes d'identifiants de tes tables (id_option pour Options, etc...) c'est plus clair, les relations d'intégrité référentielles se font entre colonnes de même nom) Ensuite, avec un DELETE CASCADE, lorsque tu supprimes la ligne d'Options, la ligne correspondant de Gala est supprimée.
__________________
Roland |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 24 ![]() |
Effectivement chaque ligne dans Gala correspond à une seule ligne d'Options.
Oui ta solution me semble la meilleur dans le sens ou cela ne me fait pas trop de changement dans mon système actuel. |
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() Développeur informatique Inscription : juin 2004 Messages : 697 ![]() |
Je suis content que ça te convienne
Bon courage NB : Si c'est résolu, n'oublie de mettre la balise au fil de discussion, c'est sympa pour ceux qui parcourent les fils pour aider !
__________________
Roland |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 24 ![]() |
Je mettrais résolu et ma solution. Merci pour ton aide! : )
|
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : mai 2010 Messages : 24 ![]() |
Voila pour ceux qui sont interessés voici la structure de mes trois tables (qui fonctionne ! )
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com