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

Requêtes MySQL Discussion :

Erreur la déclaration d'une Foreign Key [MariaDB]


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Erreur la déclaration d'une Foreign Key
    Bonjour alors voila pour faire simple je suis très débutant en sql et donc je souhaite créer une basse avec un item et qui s'affiche avec une catégorie et une sous catégorie et avec des tags

    j'ai créer une base de donnée avec mysql workbench et quand je l'importe j'ai une erreur de création (Errcode: 150 "Foreign key constraint is incorrectly formed")
    exemple je souhaite afficher un menu avec une catégorie material / sous categorie bois et des tags Wood - chêne - brut

    alors je mis prend peu être mal voici le script merci de votre aide
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    -- MySQL Script generated by MySQL Workbench 
    -- Wed Jan 16 11:14:20 2019 
    -- Model: New Model Version: 1.0 
    -- MySQL Workbench Forward Engineering 
     
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 
     
    -- ----------------------------------------------------- 
    -- Schema ressource 
    -- ----------------------------------------------------- 
     
    -- ----------------------------------------------------- 
    -- Schema ressource 
    -- ----------------------------------------------------- 
    CREATE SCHEMA IF NOT EXISTS `ressource` DEFAULT CHARACTER SET utf8 ; 
    USE `ressource` ; 
     
    -- ----------------------------------------------------- 
    -- Table `ressource`.`menbers` 
    -- ----------------------------------------------------- 
    CREATE TABLE IF NOT EXISTS `ressource`.`menbers` ( 
    `id` INT NOT NULL AUTO_INCREMENT, 
    `password` VARCHAR(255) NOT NULL, 
    `email` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`id`)) 
    ENGINE = InnoDB; 
     
     
    -- ----------------------------------------------------- 
    -- Table `ressource`.`items` 
    -- ----------------------------------------------------- 
    CREATE TABLE IF NOT EXISTS `ressource`.`items` ( 
    `id` INT NOT NULL AUTO_INCREMENT, 
    `title` VARCHAR(255) NULL, 
    `description` VARCHAR(255) NULL, 
    `categories_id` INT NOT NULL, 
    `subcategories_id` INT NOT NULL, 
    `tag_id` INT NOT NULL, 
    `images` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`id`)) 
    ENGINE = InnoDB; 
     
     
    -- ----------------------------------------------------- 
    -- Table `ressource`.`categories` 
    -- ----------------------------------------------------- 
    CREATE TABLE IF NOT EXISTS `ressource`.`categories` ( 
    `name` VARCHAR(255) NOT NULL, 
    `subcategories_id` INT NOT NULL, 
    `id` INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `fk_categories_items1` 
    FOREIGN KEY (`id`) 
    REFERENCES `ressource`.`items` (`categories_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
    ENGINE = InnoDB; 
     
     
    -- ----------------------------------------------------- 
    -- Table `ressource`.`subcategories` 
    -- ----------------------------------------------------- 
    CREATE TABLE IF NOT EXISTS `ressource`.`subcategories` ( 
    `id` INT NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `fk_subcategories_categories1` 
    FOREIGN KEY (`id`) 
    REFERENCES `ressource`.`categories` (`subcategories_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
    ENGINE = InnoDB; 
     
     
    -- ----------------------------------------------------- 
    -- Table `ressource`.`tags` 
    -- ----------------------------------------------------- 
    CREATE TABLE IF NOT EXISTS `ressource`.`tags` ( 
    `id` INT NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(255) NOT NULL, 
    `items_id` INT NULL, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `fk_tags_items1` 
    FOREIGN KEY (`id`) 
    REFERENCES `ressource`.`items` (`tag_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
    ENGINE = InnoDB; 
     
     
    SET SQL_MODE=@OLD_SQL_MODE; 
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; 
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    Les déclarations de contraintes de clé étrangres sont faites à l'envers.

    Par exemple, c'est dans la délaration de la table ressource.items qu'on devrait trouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONSTRAINT fk_categories_items1 
    FOREIGN KEY (categories_id) 
    REFERENCES ressource.categories (id)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci je vais regarder cela

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    je viens de regarder mais je comprend pas de plus j'utilise mysql workbench pour créer ma BDD je fais une liaison de id catégorie vers le catégorie de items dans l'autre sens cela ne fonctionne pas non plus j'ai d'autre erreur.

    je suis perdu


    Citation Envoyé par al1_24 Voir le message
    Les déclarations de contraintes de clé étrangres sont faites à l'envers.

    Par exemple, c'est dans la délaration de la table ressource.items qu'on devrait trouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONSTRAINT fk_categories_items1 
    FOREIGN KEY (categories_id) 
    REFERENCES ressource.categories (id)

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut A
    Bonsoir,

    A priori vous avez mal lié les tables entre elles lors de la modélisation de votre BDD

    Par exemple, dans ITEM on trouve à la fois l'identifiant de la catégorie et de la sous-catégorie, or on pourrait intuitivement s'attendre aux règles de gestion suivantes (à vous de confirmer)

    R001a : un article est rattaché à une et une seule sous-catégorie
    R001b : pour une sous-catégorie, on peut avoir zéro ou plusieurs articles

    R002a : une sous-catégorie est rattachée à une et une seule catégorie
    R002b : une catégorie peut avoir une ou plusieurs sous-catégories

    Si ces règles sont les bonnes, le modèle conceptuel correspondant est

    AR_ARTICLE 1,1 --- rattacher_SC --- 0,n SC_SOUS_CATEGORIE 1,1 --- rattacher_CT--- 1,n CT_CATEGORIE

    Ce qui donne les tables suivantes (les foreign keys sont marquées #) :
    ARTICLE (ARID, ARCODE, ARDESCRIPTION,..., SCID#) Avec : constraint SCID references SOUS-CATEGORIE.SCID
    SOUS_CATEGORIE(SCID, SCCODE, SCLIBELLE, ..., CTID#) Avec : constraint CTID references CATEGORIE.CTID
    CATEGORIE(CTID, CTCODE, CTLIBELLE...) Pas de contrainte de type référence ici !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci a tous en fait j'ai résolu mon problème j'avais pas mis index et mysql workbench bugguer a importation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/02/2007, 10h16
  2. Une Foreign Key peut-elle être null ?
    Par bassim dans le forum Firebird
    Réponses: 9
    Dernier message: 21/11/2006, 20h20
  3. Réponses: 16
    Dernier message: 19/11/2005, 16h47
  4. suppression d'une foreign key
    Par GMI dans le forum InterBase
    Réponses: 7
    Dernier message: 01/02/2005, 11h07
  5. [débutant] Aide pour mettre une FOREIGN KEY sur une table
    Par cauldron dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/11/2004, 17h16

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