Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2007, 16h29   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut Clés primaires multiples non autorisées ?

Bonjour,

Je bute sur un petit problème: j'aborde la méthode Merise et ça va plutôt pas mal dans la théorie mais j'ai un petit problème dans la pratique: j'ai résolu un exercice dans lequel je passe par une table de transition où (d'après la méthode et également le corrigé) j'ai 3 clés primaires/secondaires se référant à 3 autres tables.

Le problème est que lorsque je passe ceci :

create table tab1 (id int);
create table tab2 (id int);
create table tab3 (id int);

create table entre (
id_tab1 int primary key,
id_tab2 int primary key,
id_tab3 int primary key,
foreign key (id_tab1) references tab1(id),
foreign key (id_tab2) references tab2(id),
foreign key (id_tab3) references tab3(id)
);

dans Postgresql j'ai une erreur :

ERREUR: les clés primaires multiples ne sont pas autorisées pour la table «entre»

Auriez-vous un conseil à ce sujet ?

En vous remerciant,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 16h51   #2
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 738
Points : 2 738
Citation:
Envoyé par ctobini
Bonjour,

Je bute sur un petit problème: j'aborde la méthode Merise et ça va plutôt pas mal dans la théorie mais j'ai un petit problème dans la pratique: j'ai résolu un exercice dans lequel je passe par une table de transition où (d'après la méthode et également le corrigé) j'ai 3 clés primaires/secondaires se référant à 3 autres tables.

Le problème est que lorsque je passe ceci :

create table tab1 (id int);
create table tab2 (id int);
create table tab3 (id int);

create table entre (
id_tab1 int primary key,
id_tab2 int primary key,
id_tab3 int primary key,
foreign key (id_tab1) references tab1(id),
foreign key (id_tab2) references tab2(id),
foreign key (id_tab3) references tab3(id)
);

dans Postgresql j'ai une erreur :

ERREUR: les clés primaires multiples ne sont pas autorisées pour la table «entre»

Auriez-vous un conseil à ce sujet ?

En vous remerciant,

C. Tobini
Code :
1
2
3
4
5
6
7
8
9
10
 
CREATE TABLE tab1 (id int PRIMARY KEY);
CREATE TABLE tab2 (id int PRIMARY KEY);
CREATE TABLE tab3 (id int PRIMARY KEY);
 
CREATE TABLE entre (
 FOREIGN KEY (id_tab1) REFERENCES tab1(id),
 FOREIGN KEY (id_tab2) REFERENCES tab2(id),
 FOREIGN KEY (id_tab3) REFERENCES tab3(id)
);
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 17h16   #3
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour et merci de la réponse,

Ca veut dire qu'en fait il y a 3 clés étrangères seulement et pas primaires ?

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 18h57   #4
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 738
Points : 2 738
Citation:
Envoyé par ctobini
Bonjour et merci de la réponse,

Ca veut dire qu'en fait il y a 3 clés étrangères seulement et pas primaires ?

C. Tobini
clé "étrangère" = un champ qui référence la clé (primaire) d'une autre table

vous pouvez avoir autant de champs qui référencent (pointent) vers d'autres tables que vous voulez
il n'y a qu'une seule clé primaire par table : elle permet d'identifier chaque enregistrement sans ambiguité (== la valeur de ce champ doit être unique dans la table…)
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2007, 19h47   #5
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Je sais que la clé étrangère fait référence à une clé primaire d'une autre table, mais ce que je ne comprends pas c'est que dans le cas d'une modélisation Merise, lorsqu'on a une table se rapportant à 3 autres avec des cardinalités (X, n) la notation d'après les exemples que j'ai est (on appelera la table 'RACCORD' par exemple) :

RACCORD
id_table1 pk,fk
id_table2 pk,fk
id_table3 pk,fk
...

C'est bien que les 3 id_tables sont clé primaires et étrangères de RACCORD ou c'est seulement au sein de Merise qu'il y a cette notation ?

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 11h50   #6
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 738
Points : 2 738
Citation:
Envoyé par ctobini
Je sais que la clé étrangère fait référence à une clé primaire d'une autre table, mais ce que je ne comprends pas c'est que dans le cas d'une modélisation Merise, lorsqu'on a une table se rapportant à 3 autres avec des cardinalités (X, n) la notation d'après les exemples que j'ai est (on appelera la table 'RACCORD' par exemple) :

RACCORD
id_table1 pk,fk
id_table2 pk,fk
id_table3 pk,fk
...

C'est bien que les 3 id_tables sont clé primaires et étrangères de RACCORD ou c'est seulement au sein de Merise qu'il y a cette notation ?

C. Tobini
posez la question dans un forum MERISE…

mais a priori je dirais que cette notation est extrêmement confuse…
car ne peut conduire qu'à induire en erreur…

à moins que le but soit d'obtenir comme clé primaire le tuple(id_table1, id_table2, id_table3)
ce qui reviendrait à dire qu'il n'y a qu'un seul RACCORD pour un triple donné…
et là cela a un sens…

mais je préferais voir une notation :
RACCORD
id_table1 fk
id_table2 fk
id_table3 fk
pk(id_table1, id_table2, id_table3)
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 15h16   #7
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Vous avez raison, je ne savais pas si c'était une particularité de Postgresql ou le style de notation propre à Merise, mais vu la tournure que prend le topic, ça semble plus être une confusion due à la notation Merise

Merci beaucoup en tout cas pour votre intervention et bonne journée,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h28.


 
 
 
 
Partenaires

Hébergement Web