Bonjour,
Je me suis auto-formé à la programamtion PHP-MySQL aussi j'ai des bases trouées comme du gruyère, aussi désolé par avance si je dis de grosses conneries.
Voilà j'utilise DBDesigner pour créer mes tables. J'ai une table "article" et une table "média" reliées par une relation 1-n (la table média contient les infos et chemins des photos représentant mes articles). La clé primaire de ma table "article" est donc une clé étrangère dans ma table "média".
Maintenant je voudrais rajouter la possibilité d'avoir une photo qui prime sur les autres pour représenter un article. Je rajoute donc une relation 1-1 pour faire une référence circulaire et rajouter la clé primaire de ma table "media" dans ma table "article". Lorsque je veux faire la synchro avec ma base de données, DBDesigner me jette comme un mal-propre en me disant qu'il y a une référence circulaire (je le sais c'est moi qui l'ai voulu). Je cherche...je découvre que cela est un problème qui se règle avec la déférabilité. Si je faisais un script ça devrait donner ça, n'est ce pas ?
CREATE TABLE article (
idART INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
...bla bla bla
media_idMED INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(idART),
);
CREATE TABLE media (
idMED INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
article_idART INTEGER UNSIGNED NOT NULL,
... bla bla bla
PRIMARY KEY(idMED),
INDEX media_FKIndex1(article_idART)
);
ALTER TABLE article
ADD CONSTRAINT article_FKIndex1 FOREIGN KEY REFERENCES media (idMED)
DEFERRABLE INITIALLY DEFERRED
et après je fais un UPDATE de ma table "article" quand mes photos sont entrées dans ma table "media" (j'espère que j'ai bien saisie la notion de référabilité...?)
Mais moi je veux continuer à gérer le design de ma base avec DBDesigner. Aussi je ne sais pas comment faire pour arriver à mon but.
Quelqu'un peut-il m'aider ? (question subsidiaire...il est bien possible de faire une référence circulaire dans MySQL ???)
Merci,
Ranbaz
Partager