PB BDD

Signaler
Messages postés
215
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
19 février 2009
-
Messages postés
215
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
19 février 2009
-
Sous mysql, je voudrais créer cette base :


(3 tables: nlt_page clé primaire num_nlt; nlt_cadre_type clé
primaire lib_type_cadre et nlt_cadre clé primaire num_cadre et 2 clé
etrangères num_nlt et lib_type_cadre)



Ainsi je voudrais savoir si ceci est bon
:
CREATE TABLE nlt_page (
num_nlt int(4) NOT NULL,
mois_nlt int(2)
NOT NULL,
annee_nlt int(2) NOT NULL,
photo_nlt varchar(100) NOT
NULL,
PRIMARY KEY (num_nlt)
)ENGINE=InnoDB ;



CREATE TABLE nlt_cadre_type(
lib_type_cadre varchar(20) NOT
NULL,
PRIMARY KEY (lib_type_cadre)
)ENGINE=InnoDB ;



CREATE TABLE nlt_cadre (
num_cadre int(5) NOT NULL,
titre_cadre_fr
varchar(255) NOT NULL,
titre_cadre_en varchar(255) NOT
NULL,
texte_principal_fr text NOT NULL,
texte_principal_en text NOT
NULL,
texte_secondraire_fr text,
texte_secondraire_en
text,
lien_cadre varchar(255),
photo_cadre
varchar(100),
nlt_cadre_num_nlt int(4) NOT NULL REFERENCES
nlt_page(num_nlt),
nlt_cadre_lib_type_cadre varchar(20) NOT NULL REFERENCES
nlt_cadre_type(lib_type_cadre),
PRIMARY KEY(num_cadre)
)ENGINE=InnoDB
;

En effet cela me parait bizarre. nlt_cadre_num_nlt de nlt_cadre dépend
de nlt_page. Ainsi, lorsque que je modifie num_nlt dans nlt_page, il n'es pas
modifié dans nlt_cadre. De la même façon, lorsque lib_type_cadre est modifié
dans nlt_cadre_type il n'est pas modifié dans nlt_cadre. Enfin je parle dans le
cas où je fais des modifs directement sous PhpMyAdmin. De plus, quand je saisi
un nouveau "nlt_cadre", pour la saisi de la clé étrangère c'est un champ texte
tout simple alors que normalement cela devrait être une liste déroulante (enfin
je ne sais pas si cela est gérable directement au niveau de la BDD ou cela doit
être fait au niveau du code PHP).

Merci de votre réponse.




Y.C

3 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

il manque effectivement quelques trucs :
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
Messages postés
215
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
19 février 2009

Et comme ceci:
CREATE TABLE nlt_page (
num_nlt int(4) NOT NULL,
mois_nlt int(2) NOT NULL,
annee_nlt int(2) NOT NULL,
photo_nlt varchar(100) NOT NULL,
PRIMARY KEY (num_nlt)
)TYPE=InnoDB ;


CREATE TABLE nlt_cadre_type(
lib_type_cadre varchar(20) NOT NULL,
PRIMARY KEY (lib_type_cadre)
)TYPE=InnoDB ;


CREATE TABLE nlt_cadre (
num_cadre int(5) NOT NULL,
titre_cadre_fr varchar(255) NOT NULL,
titre_cadre_en varchar(255) NOT NULL,
texte_principal_fr text NOT NULL,
texte_principal_en text NOT NULL,
texte_secondraire_fr text,
texte_secondraire_en text,
lien_cadre varchar(255),
photo_cadre varchar(100),
PRIMARY KEY(num_cadre),


INDEX (nlt_cadre_num_nlt),
FOREIGN KEY (nlt_cadre_num_nlt) int(4) NOT NULL REFERENCES nlt_page(num_nlt),


INDEX (nlt_cadre_lib_type_cadre),
FOREIGN KEY (nlt_cadre_lib_type_cadre) varchar(20) NOT NULL REFERENCES nlt_cadre_type(lib_type_cadre)
)TYPE=InnoDB ;


Tu peux m'aider ? car perso j'avais déjà trouver ce lien. Si tu pux corriger ça serait cool

Y.C
Messages postés
215
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
19 février 2009

Maintenant ce qu'il y a en dessous je ne peux pas ajouter des infos dotn la clé étrangère n'existe pas (donc normal) :
CREATE TABLE nlt_page (
num_nlt int(4) NOT NULL,
mois_nlt int(2) NOT NULL,
annee_nlt int(2) NOT NULL,
photo_nlt varchar(100) NOT NULL,
PRIMARY KEY (num_nlt)
)TYPE=InnoDB ;


CREATE TABLE nlt_cadre_type(
lib_type_cadre varchar(20) NOT NULL,
PRIMARY KEY (lib_type_cadre)
)TYPE=InnoDB ;


CREATE TABLE nlt_cadre (
num_cadre int(5) NOT NULL,
titre_cadre_fr varchar(255) NOT NULL,
titre_cadre_en varchar(255) NOT NULL,
texte_principal_fr text NOT NULL,
texte_principal_en text NOT NULL,
texte_secondraire_fr text,
texte_secondraire_en text,
lien_cadre varchar(255),
photo_cadre varchar(100),
nlt_cadre_num_nlt int(4) NOT NULL,
nlt_cadre_lib_type_cadre varchar(20) NOT NULL,
PRIMARY KEY(num_cadre),
FOREIGN KEY (nlt_cadre_num_nlt) REFERENCES nlt_page(num_nlt),
FOREIGN KEY (nlt_cadre_lib_type_cadre) REFERENCES nlt_cadre_type(lib_type_cadre)
)TYPE=InnoDB ;

Cependant en php


SELECT * FROM nlt_page, nlt_cadre WHERE nlt_page.num_nlt = nlt_cadre.num_nlt


ne fonctionne plus
???
Y.C