|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
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 |
|
|
00
|
|
|
#2 | |||
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 291 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
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 |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 291 ![]() |
Citation:
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…) |
|
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
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 |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 291 ![]() |
Citation:
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) |
|
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com