Je tente de créer les tables de ma base de données avec le script SQL suivant:
CODE
CREATE TABLE Personne(
code_personne INT NOT NULL PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL
) TYPE=InnoDB;
CREATE TABLE Membre(
code_personne INT NOT NULL PRIMARY KEY,
adresse VARCHAR(100) NOT NULL,
date_inscription DATE NOT NULL,
INDEX(code_personne),
FOREIGN KEY(code_personne) REFERENCES Personne(code_personne)
) TYPE=InnoDB;
CREATE TABLE Film(
code_film INT NOT NULL PRIMARY KEY,
titre VARCHAR(50) NOT NULL,
annee SMALLINT(6) NOT NULL,
genre VARCHAR(25) NOT NULL,
evaluation TINYINT(4) NOT NULL,
code_personne INT NOT NULL,
INDEX(code_personne),
FOREIGN KEY(code_personne)
REFERENCES Personne(code_personne)
) TYPE=InnoDB;
CREATE TABLE Joue_dans(
code_personne INT NOT NULL,
code_film INT NOT NULL,
PRIMARY KEY(code_personne, code_film),
INDEX(code_personne, code_film),
FOREIGN KEY(code_personne) REFERENCES Personne(code_personne),
FOREIGN KEY(code_film) REFERENCES Film(code_film)
) TYPE=InnoDB;
CREATE TABLE Media(
code_media INT NOT NULL PRIMARY KEY,
type VARCHAR(5) NOT NULL
) TYPE=InnoDB;
CREATE TABLE Localisation(
code_localisation INT NOT NULL PRIMARY KEY,
description VARCHAR(50) NOT NULL
) TYPE=InnoDB;
CREATE TABLE Exemplaire(
code_film INT NOT NULL,
code_exemplaire INT NOT NULL,
code_media INT NOT NULL,
code_localisation INT NOT NULL,
PRIMARY KEY(code_film, code_exemplaire),
INDEX(code_film, code_media, code_localisation),
FOREIGN KEY(code_film)
REFERENCES Film(code_film),
FOREIGN KEY(code_media)
REFERENCES Media(code_media),
FOREIGN KEY(code_localisation)
REFERENCES Localisation(code_localisation)
) TYPE=InnoDB;
CREATE TABLE Emprunt(
code_personne INT NOT NULL,
code_film INT NOT NULL,
code_exemplaire INT NOT NULL,
date_emprunt DATE NOT NULL,
date_restitution DATE,
PRIMARY KEY(code_personne, code_film, code_exemplaire, date_emprunt),
INDEX(code_personne, code_film, code_exemplaire),
FOREIGN KEY(code_personne)
REFERENCES Membre(code_personne),
FOREIGN KEY(code_film)
REFERENCES Film(code_film),
FOREIGN KEY(code_exemplaire)
REFERENCES Exemplaire(code_exemplaire)
) TYPE=InnoDB;
code_personne INT NOT NULL PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL
) TYPE=InnoDB;
CREATE TABLE Membre(
code_personne INT NOT NULL PRIMARY KEY,
adresse VARCHAR(100) NOT NULL,
date_inscription DATE NOT NULL,
INDEX(code_personne),
FOREIGN KEY(code_personne) REFERENCES Personne(code_personne)
) TYPE=InnoDB;
CREATE TABLE Film(
code_film INT NOT NULL PRIMARY KEY,
titre VARCHAR(50) NOT NULL,
annee SMALLINT(6) NOT NULL,
genre VARCHAR(25) NOT NULL,
evaluation TINYINT(4) NOT NULL,
code_personne INT NOT NULL,
INDEX(code_personne),
FOREIGN KEY(code_personne)
REFERENCES Personne(code_personne)
) TYPE=InnoDB;
CREATE TABLE Joue_dans(
code_personne INT NOT NULL,
code_film INT NOT NULL,
PRIMARY KEY(code_personne, code_film),
INDEX(code_personne, code_film),
FOREIGN KEY(code_personne) REFERENCES Personne(code_personne),
FOREIGN KEY(code_film) REFERENCES Film(code_film)
) TYPE=InnoDB;
CREATE TABLE Media(
code_media INT NOT NULL PRIMARY KEY,
type VARCHAR(5) NOT NULL
) TYPE=InnoDB;
CREATE TABLE Localisation(
code_localisation INT NOT NULL PRIMARY KEY,
description VARCHAR(50) NOT NULL
) TYPE=InnoDB;
CREATE TABLE Exemplaire(
code_film INT NOT NULL,
code_exemplaire INT NOT NULL,
code_media INT NOT NULL,
code_localisation INT NOT NULL,
PRIMARY KEY(code_film, code_exemplaire),
INDEX(code_film, code_media, code_localisation),
FOREIGN KEY(code_film)
REFERENCES Film(code_film),
FOREIGN KEY(code_media)
REFERENCES Media(code_media),
FOREIGN KEY(code_localisation)
REFERENCES Localisation(code_localisation)
) TYPE=InnoDB;
CREATE TABLE Emprunt(
code_personne INT NOT NULL,
code_film INT NOT NULL,
code_exemplaire INT NOT NULL,
date_emprunt DATE NOT NULL,
date_restitution DATE,
PRIMARY KEY(code_personne, code_film, code_exemplaire, date_emprunt),
INDEX(code_personne, code_film, code_exemplaire),
FOREIGN KEY(code_personne)
REFERENCES Membre(code_personne),
FOREIGN KEY(code_film)
REFERENCES Film(code_film),
FOREIGN KEY(code_exemplaire)
REFERENCES Exemplaire(code_exemplaire)
) TYPE=InnoDB;
Toutes les tables se créent correctement sauf la dernière (Emprunt). J'ai l'erreur suivante:
CITATION
#1005 - Can't create table './travail2/Emprunt.frm' (errno: 150)
C'est la dernière clé étrangère (code_exemplaire) qui pose problème, parce que si je retire les lignes
CODE
FOREIGN KEY(code_exemplaire)
REFERENCES Exemplaire(code_exemplaire)
REFERENCES Exemplaire(code_exemplaire)
ça ne me met plus d'erreur (mais évidemment, j'ai perdu ma contrainte aussi, ce qui est ennuyeux
Ça fait des heures que je cherche et que j'épluche la documentation de mySQL et les forums, mais je ne trouve pas.
Merci d'avance de m'aider
