ikramta
Messages postés151Date d'inscriptionlundi 24 décembre 2007StatutMembreDernière intervention10 février 2016
-
18 févr. 2009 à 12:26
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
21 févr. 2009 à 11:41
bonjour tout le monde et bon courage.$
bon depuis pas mal de temps que je suis entrain
de cherché comment creé des clés etrangé sous mysql,
dans le site officiel de mysql il on dit que :
le type INNODB comprend les clé etrangé .
par exemple:
create table chambre(id_ch int(10) not null auto_increment,numero_ch smallint(6) unsigned not null,etage smallint(6) unsigned not null,description_ch text,tarif_extrat decimal(6,6) unsigned,statut_ch enum('v','f'),id_type int(10),hotel varchar(100),primary key (id_ch) ,constraint id_type foreign key(id_type)references type_chambre(id_type) on update cascade,constraint hotel foreign key(hotel)references hotel(hotel) on update cascade)type INNODB;
quand j'excute cet syntaxe elle ne me donne pas le hotel et type_ch comme des clé etrangé mais elle me donne que sont des indexe .
pouvez vous me dire comment je peut resoudre ce problème ou bien pas de différence entre index et foreign key (bon mes information ditent q'il ya une large difference).
merci d'avance et salut.
gr43
Messages postés95Date d'inscriptionmardi 20 mai 2008StatutMembreDernière intervention 8 septembre 2010 18 févr. 2009 à 16:05
Salut, toutes les contraintes (primaires, unicité, étrangères) sont gérés par le sgbd par des index.
Si tu insère des données dans ta table avec un champ hotel qui ne référence pas le champ hotel de la table hotel tu devrais avoir une erreur de contrainte de clé étrangère
ikramta
Messages postés151Date d'inscriptionlundi 24 décembre 2007StatutMembreDernière intervention10 février 2016 18 févr. 2009 à 17:35
salut gr43 et merci bien mais j'utilise easyphp version1.8 et il m'affiche ls clés primaire comme des primaires mais les étrangés comme je t'ai dit des index mais dans le script de creation de ma table je lui dit en update cascade et j'ai changé expré le nom hotel dans la table hotel et rien n'est changé dans la table chambre. et quand j'ai fait l'ingenieurie inverse avec DBDesigner il ne m'affiche aucune integritées entre les pages.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 21 févr. 2009 à 11:41
Bonjour,
D'une manière générale :
1- ne pas donner aux contraintes le même nom qu'un champ existant ou qu'un index. Le SGBD risque fort de ne pas comprendre et de s'emmêler les pinceaux.
2- Penses à préfixer les identifiants de contraintes de clé étrangère par FK_ comme on le préconise et les index par IDX_. C'est une bonne habitude à prendre et ça évitera de chercher pourquoi ça ne fonctionne pas.
3- Un index n'a rien à voir avec une clé étrangère, du moins de près.
Voici donc le DDL modifié :
CREATE TABLE chambre (
id_ch INT(10) NOT NULL AUTO_INCREMENT,
numero_ch SMALLINT(6) UNSIGNED NOT NULL,
etage SMALLINT(6) UNSIGNED NOT NULL,
description_ch TEXT,
tarif_extrat DECIMAL(6,6) UNSIGNED,
statut_ch ENUM('v','f'),
id_type INT(10),
hotel VARCHAR(100),
PRIMARY KEY ( id_ch ),
CONSTRAINT FK_id_type FOREIGN KEY ( id_type ) REFERENCES type_chambre(id_type) ON UPDATE CASCADE,
CONSTRAINT FK_hotel FOREIGN KEY ( hotel ) REFERENCES hotel(hotel) ON UPDATE CASCADE)
TYPE INNODB;
A plus...
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.