IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Ajout de clé étrangère impossible


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 36
    Points : 25
    Points
    25
    Par défaut Ajout de clé étrangère impossible
    Bonjour,
    je suis en train de faire une appli web mais j'ai un problème sur mon script de création de ma BDD et j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Erreur
    Requête SQL :
     
     
     
    CREATE TABLE IF NOT EXISTS `UTILISATEUR`
    (
    	`IDUSER`		INT(9)	auto_increment,
    	`IDENTIFIANT`	VARCHAR(100)	NOT NULL,
    	`MOTDEPASSE`	VARCHAR(40)	NOT NULL,
    	`MAIL`		VARCHAR(100)	NOT NULL,
    	`DATEDENAISSANCE`	DATE		NULL,
    	`DESCRIPTION`	VARCHAR(1000)	NULL,
    	`GROUPE`		VARCHAR(100)		NOT NULL,
    	primary key(`IDUSER`),
    	foreign key(`GROUPE`) references`GROUPE`(`IDGROUPE`)
    )ENGINE=InnoDB;
    MySQL a répondu: Documentation
     
    #1215 - Cannot add foreign key constraint

    et je ne comprend pas l'origine de l'erreur, voici le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    CREATE TABLE IF NOT EXISTS `CATEGORIE`
    (
    	`IDCAT`	INT(4)	auto_increment,
    	`NOMCAT`		VARCHAR(80)	NOT NULL,
    	primary key(`IDCAT`)
    )ENGINE=InnoDB;
     
    CREATE TABLE IF NOT EXISTS `GROUPE`
    (
    	`IDGROUPE`	VARCHAR(100)		NOT NULL,
    	`DROIT`		VARCHAR(3)			NOT NULL,
    	primary key(`IDGROUPE`)
    )ENGINE=InnoDB;
     
    CREATE TABLE IF NOT EXISTS `UTILISATEUR`
    (
    	`IDUSER`		INT(9)	auto_increment,
    	`IDENTIFIANT`	VARCHAR(100)	NOT NULL,
    	`MOTDEPASSE`	VARCHAR(40)	NOT NULL,
    	`MAIL`		VARCHAR(100)	NOT NULL,
    	`DATEDENAISSANCE`	DATE		NULL,
    	`DESCRIPTION`	VARCHAR(1000)	NULL,
    	`GROUPE`		VARCHAR(100)		NOT NULL,
    	primary key(`IDUSER`),
    	foreign key(`GROUPE`) references`GROUPE`(`IDGROUPE`)
    )ENGINE=InnoDB;
     
    CREATE TABLE IF NOT EXISTS `ARTICLE`
    (
    	`IDARTICLE` 	INT(9)	auto_increment,
    	`AUTEUR` 		VARCHAR(100) 		NOT NULL,
    	`TITRE` 		VARCHAR(200)		NOT NULL,
    	`CONTENU` 	VARCHAR(100000)	NOT NULL,
    	`CATEGORIE`	VARCHAR(80)		NOT NULL,
    	primary key (`IDARTICLE`),
    	Foreign key	(`AUTEUR`) references`UTILISATEUR`(`IDENTIFIANT`),
    	Foreign key	(`CATEGORIE`) references `CATEGORIE`(`NOMCAT`)
    )ENGINE=InnoDB;
    cordialement

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    C'est une très mauvaise idée d'utiliser du format VARCHAR pour les clefs primaires !
    Commencez par corriger le DDL, en remplaçant ce format par de l'integer pour la colonne IDGROUPE comme vous l'avez d'ailleurs fait pour IDUSER
    Puis harmonisez les noms de colonnes et définissez votre contrainte comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE IF NOT EXISTS `UTILISATEUR`
    (`IDUSER`          INT(9) auto_increment,
     `IDENTIFIANT`     VARCHAR(100)   NOT NULL,
     `MOTDEPASSE`      VARCHAR(40)    NOT NULL,
     `MAIL`            VARCHAR(100)   NOT NULL,
     `DATEDENAISSANCE` DATE           NULL,
     `DESCRIPTION`     VARCHAR(1000)  NULL,
     `IDGROUPE`        INT(9)         NOT NULL,
      primary key(`IDUSER`),
      CONSTRAINT IDGROUPE_fk
        FOREIGN KEY (IDGROUPE) REFERENCES GROUPE(IDGROUPE)
        ON DELETE CASCADE ou ON DELETE RESTRICT
    )ENGINE=InnoDB;
    Perso je préfère coder clairement la contrainte CASCADE, RESTRICT ou SET NULL plutôt que de laisser la valeur implicite (restrict)

    Bien sur, il faut également modifier le format de idgroupe dans la table groupe

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    A mon avis votre problème vient de la création de la table ARTICLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Foreign key	(`AUTEUR`) references`UTILISATEUR`(`IDENTIFIANT`),
    	Foreign key	(`CATEGORIE`) references `CATEGORIE`(`NOMCAT`)
    NOMCAT n'est pas une clef unique dans la table CATEGORIE, et ne peut donc être référencée dans une contrainte d'intégrité référentielle.

    Idem pour la colonne identifiant de la table UTILISATEUR.

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/03/2016, 15h12
  2. Ajout de clefs étrangères
    Par g56589 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/10/2007, 12h31
  3. Création clé étrangère impossible
    Par Mister Nono dans le forum Outils
    Réponses: 4
    Dernier message: 10/10/2006, 15h16
  4. Ajout d'une DLL impossible
    Par anikeh dans le forum Access
    Réponses: 5
    Dernier message: 21/12/2005, 15h49
  5. création de clé étrangère impossible
    Par Kozher dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/08/2005, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo