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 :

Création de table avec 2 foreign keys [MySQL-5.6]


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 118
    Points
    118
    Par défaut Création de table avec 2 foreign keys
    Bonjour

    J'ai une petite problématique lorsque je souhaite créer une table avec une clé primaire et 2 clés étrangères, chacune pointant sur 1 table différente.
    Ma problématique, un vendeur, un acheteur, un contrat
    le vendeur peut passer de 1 à x contrats, l'acheteur peut passer aussi de 1 à x contrats mais un contrat donné n'est acté qu'entre 1 vendeur et 1 acheteur.

    j'ai fait mon create table sur mon vendeur, avec son id en clé primaire
    j'ai fait mon create table sur mon acheteur, avec son id en clé primaire

    Voici ma requête sur mon contrat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Create table contrat (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    id_vendeur int UNSIGNED NOT NULL,
    id_acheteur int UNSIGNED NOT NULL,
    tarif int(5),
    dateContrat date,
    FOREIGN KEY (id_acheteur) REFERENCES acheteur(id), 
    FOREIGN KEY (id_vendeur) REFERENCES vendeur(id)
    );
    J'ai une erreur 1215 sur le foreign key. Si j'enlève le foreign key sur ma table vendeur, ça fonctionne (par contre si je garde ma table vendeur et que j'enlève mon foreign key sur l'acheteur, j'ai aussi une erreur mysql 1215).

    Est-ce que quelqu'un a une petite idée ?

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Points : 97
    Points
    97
    Par défaut
    Salut,

    il faut faire attention à ce que les types soient identiques pour id_vendeur et id_acheteur (dans les tables respectives , en gros tu mets partout pareil : INT(6) en general je met int(11) )

    quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Create table contrat (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    id_vendeur iINT(6) UNSIGNED NOT NULL,
    id_acheteur INT(6) UNSIGNED NOT NULL,
    tarif int(5),
    dateContrat date,
      PRIMARY KEY (`id`),
      CONSTRAINT `id_acheteur` FOREIGN KEY (`id_acheteur`) REFERENCES `acheteur` (`id`),
      CONSTRAINT `id_vendeur` FOREIGN KEY (`id_vendeur`) REFERENCES `vendeur` (`id`),
    );

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 118
    Points
    118
    Par défaut
    bonjour
    merci pour ton retour
    Oui j'avais fait attention mais ce n'est pas ça...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 241
    Points : 118
    Points
    118
    Par défaut
    ça y est trouvé, j'avais omis de mettre ma clé primaire en unsigned sur la table vendeur...
    désolé et encore merci

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Citation Envoyé par coeurDeSql
    le vendeur peut passer de 1 à x contrats, l'acheteur peut passer aussi de 1 à x contrats mais un contrat donné n'est acté qu'entre 1 vendeur et 1 acheteur.
    Mais un autre contrat peut-il être passé entre ce même vendeur et ce même acheteur ?
    D'où mon interrogation au sujet de la dépendance fonctionnelle entre le contrat et le couple (vendeur ; acheteur).

    vendeur (vendeur_id, ...)
    acheteur (acheteur_id, ...)

    1) le couple (vendeur ; acheteur) est unique dans la table contrat !

    contrat (#vendeur_id, #acheteur_id, contrat_id, contrat_date, ...)

    Ce couple (#vendeur ; #acheteur) va constituer votre clef primaire.
    De ce fait, entre un vendeur et un acheteur, un seul contrat pourra se faire. Désirez-vous cette restriction ?
    Cela me parait tout de même bizarre qu'un seul contrat se fait entre un vendeur et un acheteur.

    Le "#" signifiant clef étrangère, ils doivent respectivement pointer sur les tables vendeur et acheteur.
    Dans ce cas-ci, la valeur de la clef étrangère ne peut pas être NULL puisqu'elles font parties de la clef primaire.

    2) le couple (vendeur ; acheteur) n'est pas unique dans la table contrat, mais on peut faire une distinction avec la date de la signature.

    contrat (#vendeur_id, #acheteur_id, contrat_date, contrat_id, ...)

    Dans ce cas-ci, le triplé (vendeur ; acheteur ; date du contrat) va constituer votre clef primaire.
    Un autre contrat peut se faire entre le même acheteur et le même vendeur, puisque la date de signature du contrat ne sera pas la même.

    3) un contrat détermine le couple (vendeur ; acheteur).

    contrat (contrat_id, contrat_date, #vendeur_id, #acheteur_id, ...)

    Ce qui revient à votre solution.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. Newbie PgSQL->Probleme Creation de table avec FOREIGN KEY
    Par ralkif dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 07/03/2006, 21h59
  2. Création d'une table avec foreign key.
    Par Paulinho dans le forum Débuter
    Réponses: 6
    Dernier message: 01/12/2005, 18h47
  3. [mysql]table avec foreign key
    Par samjung dans le forum Langage SQL
    Réponses: 24
    Dernier message: 24/11/2005, 14h42
  4. Création d'une table avec foreign key
    Par lepierre dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/09/2004, 14h20
  5. Probleme 'ALTER TABLE' et 'FOREIGN KEY'
    Par maahta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2003, 14h25

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