Haaaa help!!

Fermé
pyfeu - 27 avril 2009 à 11:00
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009 - 27 avril 2009 à 14:06
Bonjour,
voila environ 5h que je passe sur un script qui ne marche pas ... ca marque jusque errno 150.
Je sais que le problème vient de la références sur la clé étrangère Realisation .
Voici le script :

## Klein Pierre Yves ##
##This database is a mySql database for a website ##

###############################################################################
## Deletion of tables
###############################################################################
DROP TABLE IF EXISTS Sauvg;
DROP TABLE IF EXISTS InterMachine;
DROP TABLE IF EXISTS Image;
DROP TABLE IF EXISTS Machine;
DROP TABLE IF EXISTS Intervention;
DROP TABLE IF EXISTS Groupe;
DROP TABLE IF EXISTS Famille;

###############################################################################
## Creation of tables
###############################################################################

CREATE TABLE Famille(
Id_Famille INT(3) PRIMARY KEY AUTO_INCREMENT ,
Libelle VARCHAR(50)
)TYPE=INNODB;

CREATE TABLE Groupe(
Id_Groupe INT(3) PRIMARY KEY AUTO_INCREMENT ,
Libelle VARCHAR(20) NOT NULL UNIQUE
)TYPE=INNODB;

CREATE TABLE Intervention(
Id_Intervention INT(10) PRIMARY KEY AUTO_INCREMENT ,
Famille INT(3) ,
CONSTRAINT fk_Affectation4 FOREIGN KEY (Famille) REFERENCES Famille(Id_Famille),
ElementInter VARCHAR(100) ,
Description TEXT ,
Niveau INT(1) ,
Frequence INT(4) ,##Si seulement besoin ou usure mettre 9999
Operateur VARCHAR(10)
)TYPE=INNODB;



CREATE TABLE Machine(
Id_Machine INT PRIMARY KEY AUTO_INCREMENT,
Nom_Machine VARCHAR(50) ,
Id_Ordinateur VARCHAR(50) ,#Si il est affecté a cette machine ou si il est administrateur
Serie VARCHAR(20) ,
DateRecep DATE ,
MiseEnService DATE ,
Marque VARCHAR(30) ,
Id_Groupe INT(3) ,
CONSTRAINT fk_Affectation1 FOREIGN KEY (Id_Groupe) REFERENCES Groupe(Id_Groupe)
)TYPE=INNODB;

CREATE TABLE Image(
Id_Image INT(3) PRIMARY KEY AUTO_INCREMENT ,
Id_Machine INT ,
CONSTRAINT fk_Image FOREIGN KEY (Id_Machine) REFERENCES Machine(Id_Machine) ,
Id_Intervention INT(10) ,
CONSTRAINT fk_Image2 FOREIGN KEY (Id_Intervention) REFERENCES Intervention(Id_Intervention)
)TYPE=INNODB;


CREATE TABLE InterMachine(
Id_Machine INT ,
CONSTRAINT fk_Affectation2 FOREIGN KEY (Id_Machine) REFERENCES Machine(Id_Machine) ,
Id_Intervention INT(10) ,
CONSTRAINT fk_Affectation3 FOREIGN KEY (Id_Intervention) REFERENCES Intervention(Id_Intervention) ,
CONSTRAINT pk_Affectation PRIMARY KEY (Id_Machine, Id_Intervention) ,
DateProchaineInter DATE ,
Realisation DATE
)TYPE=INNODB;

CREATE TABLE Sauvg(
Id_Machine INT ,
CONSTRAINT fk_Affectation10 FOREIGN KEY (Id_Machine) REFERENCES Machine(Id_Machine) ,
Id_Intervention INT(10) ,
CONSTRAINT fk_Affectation30 FOREIGN KEY (Id_Intervention) REFERENCES Intervention(Id_Intervention) ,
date_Realisation DATE ,
CONSTRAINT fk_Affectation20 FOREIGN KEY (Date_Realisation) REFERENCES InterMachine(Realisation) ,
CONSTRAINT pk_Affectation60 PRIMARY KEY (Id_Machine, Id_Intervention, Date_Realisation)
)TYPE=INNODB;


###############################################################################
############################ Tests ############################################
###############################################################################
##
SELECT * FROM Intervention;
SELECT * FROM Machine;
SELECT * FROM InterMachine;

7 réponses

internetasso Messages postés 1054 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 30 juin 2013 177
Modifié par crapoulou le 27/09/2010 à 20:29
tu peux t'inscrire pour avoir de l'aide... aussi !
si c'est une db sql.... pourquoi tu mets pas
) TYPE=MyISAM;



La création d'un site commence par la réflexion de son devenir...
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
27 avril 2009 à 12:47
Parce que MyISAM ne gère pas les contraintes de clefs étrangères, seul INNODB le peut.

Moi ce qui me choque sur ton SQL, c'est que tu mest des contraintes partout...
On met une contrainte sur une colonne de type UNIQUE (PK, UNIQUE), Realisation DATE ne peut être UNIQUE.
0
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009
27 avril 2009 à 13:32
c'est un primarykey sur 3 attributs donc il n'y a pas de problème la dessus, le problème est sur la phrase :
CONSTRAINT fk_Affectation20 FOREIGN KEY (Date_Realisation) REFERENCES InterMachine(Realisation) ,

ET en effet il n'y a que innoDB qui gère les clés étrangères en mysql...

ps: désolé j'avais oublié de me loguer.
J'ai mis des contraintes partout parce que je n'ai pas le choix .. :/
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
27 avril 2009 à 13:44
Ah, j'ai vu l'erreur, Realisation n'est pas indexé.

Ajoute unINDEX(realisation) dans ta table InterMachine.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009
27 avril 2009 à 13:54
les index ne sont pas obligatoire.. et il ne servent que pour les requêtes en sql
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
27 avril 2009 à 14:01
Bien sûr que si.
http://dev.mysql.com/doc/refman/5.0/fr/innodb-foreign-key-constraints.html
0
pyfeu Messages postés 38 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 26 novembre 2009
27 avril 2009 à 14:06
j'ai rajouté un index mais ça ne sert pas.. ça plante toujours
0