DB Designer & FK

Petit nouveau ! | 3 Messages

22 mai 2006, 10:26

Salut

Comment faire pour definir comme cle primaire deux cles etrangeres ?

Merci d avance

Mammouth du PHP | 19672 Messages

22 mai 2006, 10:38

Tu veux parler d'une clé composite dans une relation ?

Si tu as par exemple :
- table1 avec en clé primaire t1_id (PK)
- table2 avec en clé primaire t2_id (PK)
une relation entre les deux dans une cardinalité 0:n/0:n va donner donc:
- relationt1t2 avec t1_id(FK, PK) et t2_id (FK, PK)

Si c'est ça, alors voici (version abbrégée):

Code : Tout sélectionner

CREATE TABLE relationt1t2 ( `t1_id` INT(11) UNSIGNED NOT NULL, `t2_id` INT(11) UNSIGNED NOT NULL, PRIMARY KEY (`t1_id`, `t2_id`) );
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

22 mai 2006, 10:41

Tu veux parler d'une clé composite dans une relation ?

Si tu as par exemple :
- table1 avec en clé primaire t1_id (PK)
- table2 avec en clé primaire t2_id (PK)
une relation entre les deux dans une cardinalité 0:n/0:n va donner donc:
- relationt1t2 avec t1_id(FK, PK) et t2_id (FK, PK)

Si c'est ça, alors voici (version abbrégée):

Code : Tout sélectionner

CREATE TABLE relationt1t2 ( `t1_id` INT(11) UNSIGNED NOT NULL, `t2_id` INT(11) UNSIGNED NOT NULL, PRIMARY KEY (`t1_id`, `t2_id`) );
ce ne serrait pas comme cela :

Code : Tout sélectionner

CREATE TABLE relationt1t2 ( `t1_id` INT(11) UNSIGNED NOT NULL, `t2_id` INT(11) UNSIGNED NOT NULL, INDEX t1_FKIndex1(table1), INDEX t2_FKIndex2(table2) PRIMARY KEY (`t1_id`, `t2_id`) );
en fait mon prob c de le faire sous DB Deigner ... j 'arrive bien a mettre les deux cles etrangres dans la table mais pas a les definir comme une cle primaire

Mammouth du PHP | 19672 Messages

22 mai 2006, 14:09

Édite la table dans DBDesigner: à coté du nom de chaque champ, tu as une clé pour la clé primaire et un point gris à coté des autres champs: clique sur le point gris, il va se transformer en clé et s'ajoutera à la clé primaire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

22 mai 2006, 14:17

Édite la table dans DBDesigner: à coté du nom de chaque champ, tu as une clé pour la clé primaire et un point gris à coté des autres champs: clique sur le point gris, il va se transformer en clé et s'ajoutera à la clé primaire.
je sais cela, mais lorsqu il s agit d'une cle etrangere le point est rouge et il n'y a pas moyen de le positionner en cle primaire

Mammouth du PHP | 19672 Messages

22 mai 2006, 14:24

Bon, je viens de faire un test dans DBDesigner :

-1- créer une table table_01 avec idTable_01 en clé primaire;
-2- créer une table table_02 avec idTable_02 en clé primaire;
-3- Sélectionner à gauche "Nouvelle Relation n:m[]"
-4- cliquer sur la première table;
-5- cliquer sur la seconde table;

Le résultat: ça me crée automatiquement une troisième table entre les deux avec en clés étrangères les clés primaires de mes deux premières tables et les deux sont mises en clé primaire composite.

Rien n'interdit ensuite de rajouter des champs dans cette troisième table.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

22 mai 2006, 15:14

Bon, je viens de faire un test dans DBDesigner :

-1- créer une table table_01 avec idTable_01 en clé primaire;
-2- créer une table table_02 avec idTable_02 en clé primaire;
-3- Sélectionner à gauche "Nouvelle Relation n:m[]"
-4- cliquer sur la première table;
-5- cliquer sur la seconde table;

Le résultat: ça me crée automatiquement une troisième table entre les deux avec en clés étrangères les clés primaires de mes deux premières tables et les deux sont mises en clé primaire composite.

Rien n'interdit ensuite de rajouter des champs dans cette troisième table.
ahhh je vais essaye ..en fait moi j etais partis d'une table existante ...

Petit nouveau ! | 3 Messages

22 mai 2006, 15:15

ca marche merci ...