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

SQL Procédural MySQL Discussion :

Plusieurs clés Etrangères ?


Sujet :

SQL Procédural MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Plusieurs clés Etrangères ?
    salut !

    Est il possible de créer plusieurs clés étrangères dans une table?
    J'ai une table fille avec 2 champs en UNIQUE KEY et 2 table mere.
    Je peux créer une clés etrangeres mais pas 2. ET si je vire l'UNIQUE KEY je ne peux plus rien créer du tout.
    Comment puis-je faire??

    Merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    bien sur qu'il est possible d'voir plusieurs clé etrangères dans une même table...
    ensuite, je ne comprends pas trop ton problème.
    donne nous ton instruction CREATE TABLE et ce qui pose problème et on t'aidera au mieux

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    salut

    Vola pour le creation des 3 tables
    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
     
    DROP TABLE IF EXISTS Nom_Table_Fille;
    CREATE TABLE IF NOT EXISTS Nom_Table_Fille
    	(
    	Champ1 VARCHAR(20) NOT NULL,
    	Champ2 INT NOT NULL,
    	Champ3 SMALLINT NOT NULL DEFAULT '0',
    		UNIQUE KEY (Champ1,Champ2)
    	) TYPE=INNODB;
     
    DROP TABLE IF EXISTS Nom_Table_Mere1;
    CREATE TABLE IF NOT EXISTS Nom_Table_Mere1
    	(
    	Champ1 VARCHAR(20) NOT NULL,
    	Champ2 VARCHAR(1) NOT NULL DEFAULT 'S',
    	Champ3 VARCHAR(30) NOT NULL,
    	Champ4 VARCHAR(10) NOT NULL,
    	Champ5 VARCHAR(50) DEFAULT '0',
    	Champ6 VARCHAR(1) NOT NULL DEFAULT 'D',
    	Champ7 TINYINT NOT NULL DEFAULT '1',
    		PRIMARY KEY (Champ1),
    		UNIQUE (Champ3)
    	) TYPE=INNODB;
     
    DROP TABLE IF EXISTS Nom_Table_Mere2;
    CREATE TABLE IF NOT EXISTS Nom_Table_Mere2
    	(
    	Champ1 INT NOT NULL,
    	Champ2 VARCHAR(30) NOT NULL,
    	Champ3 VARCHAR(30) NOT NULL,
    		PRIMARY KEY (Champ1),
    		UNIQUE KEY (Champ2,Champ3)
    	) TYPE=INNODB;
    Et voila por la creation des 2 relation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE Nom_Table_Fille 
    	ADD FOREIGN KEY (Champ1) REFERENCES Nom_Table_Mere1 (Champ1),
    	ADD FOREIGN KEY (Champ2) REFERENCES Nom_Table_Mere2 (Champ1);
    la premiere relation marche mais pas la deuxieme non
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [root@localhost:3306] ERREUR 1005: Can't create table '.\test\#sql-ffe26349_22.frm' (errno: 150)

  4. #4
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    pourquoi ne cree tu pas directement les clés etrangères dans ton create...

    si tu tiens à faire comme ça, une remarque tout de même :

    tu ne peux pas creer des champs, puis en creer du même nom en tant que clés etrangère...

    il vaut mieux que tu fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DROP TABLE IF EXISTS Nom_Table_Fille; 
    CREATE TABLE IF NOT EXISTS Nom_Table_Fille 
       ( 
       Champ3 SMALLINT NOT NULL DEFAULT '0', 
          UNIQUE KEY (Champ1,Champ2) 
       ) TYPE=INNODB;
    puis ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE Nom_Table_Fille 
       ADD FOREIGN KEY (Champ1) REFERENCES Nom_Table_Mere1 (Champ1), 
       ADD FOREIGN KEY (Champ2) REFERENCES Nom_Table_Mere2 (Champ1);
    j'espere que ça va t'aider...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    j'ai essayé de créer les cles etrangeres directement dans la table mais le probleme est qu'il ne crée meme pas la table.(dur pour comprendre ce qu'il ce passe).
    A moins que la syntaxe ne soit pas bonne
    Exemple:
    Comme ca, ca marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DROP TABLE IF EXISTS Nom_Table_Fille;
    CREATE TABLE IF NOT EXISTS Nom_Table_Fille 
    	(
    	Champ1 VARCHAR(20) NOT NULL,
    	Champ2 INT NOT NULL,
    	Champ3 SMALLINT NOT NULL DEFAULT '0',
    		UNIQUE (Champ1,Champ2),
    		FOREIGN KEY (Champ1) REFERENCES Nom_Table_Mere1 (Champ1),
    		FOREIGN KEY (Champ2) REFERENCES Nom_Table_Mere2 (Champ1)
                     ) TYPE=INNODB;
    Comme ca, ca marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DROP TABLE IF EXISTS Nom_Table_Fille;
    CREATE TABLE IF NOT EXISTS Nom_Table_Fille 
    	(
    	Champ1 VARCHAR(20) NOT NULL,
    	Champ2 INT NOT NULL,
    	Champ3 SMALLINT NOT NULL DEFAULT '0',
    		UNIQUE (Champ1,Champ2),
    		FOREIGN KEY (Champ1) REFERENCES Nom_Table_Mere1 (Champ1)
                     ) TYPE=INNODB;
    et comme ca, ca marche pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DROP TABLE IF EXISTS Nom_Table_Fille;
    CREATE TABLE IF NOT EXISTS Nom_Table_Fille 
    	(
    	Champ1 VARCHAR(20) NOT NULL,
    	Champ2 INT NOT NULL,
    	Champ3 SMALLINT NOT NULL DEFAULT '0',
    		UNIQUE (Champ1,Champ2),
    		FOREIGN KEY (Champ2) REFERENCES Nom_Table_Mere2 (Champ1)
                     ) TYPE=INNODB;
    comprend pas ce qui se passe....
    si tu peux me donner la bonne syntaxe ce serais cool.

    De plus, pour l'autre facon de faire, il me faut absolument les 3 champs dans la table fille.
    Donc si je comprend bien ce que tu me dis, "ALTER TABLE" peut me servir pour créer les champs 1 et 2, si oui comment indiquer les types de valeur, les NULL et valeur par default...

  6. #6
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    que te met mysql comme erreur déjà ?

    je pensais que l'erreur venait peut être d'un conflit entre creation du champ et creation de la clé etrangère mais visiblement, ce que je dis, c'est n'importe quoi.
    bon, je vais regarder un peu la doc pour la syntaxe l'histoire de ne pas te dire de betises.
    [edit]
    Bon,déjà, tu n'as oublié le mot clé CONSTRAINT devant foreign key...
    j'ai aussi toruvé un sujet qui pourrait t'interesser :
    http://www.developpez.net/forums/vie...t=create+table
    [/edit]

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    l'erreur est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [root@localhost:3306] ERREUR 1005: Can't create table '.\test\u_lnk.frm' (errno: 150)
    j'ai essayé avec "CONSTRAINT", rien a faire marche pas.

    Un doute me viens a l'esprit :
    Faut il créer une relation Foreign Key dans la la table Fille ou dans la Mere?

  8. #8
    Membre confirmé
    Avatar de omiossec
    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2002
    Messages : 241
    Points : 563
    Points
    563
    Par défaut
    Essaye d'utilsé deux index au lieu d'un dans ta table fille et Nom_Table_Mere2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UNIQUE KEY (champ1),
    UNIQUE KEY (champ2),
     au lieu de 
    UNIQUE KEY (Champ1,Champ2)
    Olivier Miossec

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    cela marche mais je ne peux pas avoir les 2 champs unique(concaténé)

    exemple de donnée sur les deux champs:
    0,1
    0,2
    1,1
    2,1
    2,3
    etc

  10. #10
    Membre confirmé
    Avatar de omiossec
    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2002
    Messages : 241
    Points : 563
    Points
    563
    Par défaut
    Dans ce cas la il faut créer un Troisième index unique
    En fait Mysql à besoin des index pour gerer les contrainte avoir le même colones dans un index genere des conflit
    Olivier Miossec

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

Discussions similaires

  1. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 16h58
  2. Plusieurs scenes
    Par logramme dans le forum DirectX
    Réponses: 2
    Dernier message: 11/08/2002, 14h02
  3. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 08h19
  4. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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