postgre 10 -notion de clé étrangere
Bonjour
Concept de cle étranger
voici la vision table tbr_0110 est lié à tbr_0120 par le champ Code_tbr_0110 .
La table tbr_0110 et tbr_0110_a de légere différence sont les clé primaire
Pour ces 2 tables les champs suivant sont fixes.
Type_enr ='0110'
Drapeau = 'C'
Pour les 4 champ suivant la valeur est unique (Type_enr , Drapeau , Code_tbr_0110 , Date_debut) raison de sa définition de cle primaire pour la table tbr_0110_a.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
CREATE TABLE tbr_0110 (
Type_enr varchar(4) ,
Drapeau varchar(1),
Code_tbr_0110 varchar(10) NOT NULL PRIMARY KEY ,
Date_debut DATE,
Date_fin DATE,
Libelle varchar(50)
);
CREATE TABLE TRB_GE_0120 (
Type_enr varchar(4),
Drapeau varchar(1),
Code_tbr_0110 varchar(10),
Code_tbr_0120 varchar(10),
Date_debut DATE,
Date_fin DATE,
Description varchar(250),
Ordre_vente INTEGER,
nb_de_valeur INTEGER,
CONSTRAINT TRB_GE_0120_PK PRIMARY KEY (Code_tbr_0110 , Code_tbr_0120 , Date_debut ) ,
FOREIGN KEY(Code_tbr_0110) REFERENCES tbr_0110 (Code_tbr_0110)
); |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| CREATE TABLE tbr_0110_a (
Type_enr varchar(4) ,
Drapeau varchar(1),
Code_tbr_0110 varchar(10) ,
Date_debut DATE,
Date_fin DATE,
Libelle varchar(50),
CONSTRAINT tbr_0110_PK PRIMARY KEY (Type_enr , Drapeau , Code_tbr_0110 , Date_debut)
);
CREATE TABLE tbr_0120_a (
Type_enr varchar(4),
Drapeau varchar(1),
Code_tbr_0110 varchar(10),
Code_tbr_0120 varchar(10),
Date_debut DATE,
Date_fin DATE,
Description varchar(250),
Ordre_vente INTEGER,
nb_de_valeur INTEGER,
CONSTRAINT tbr_0120_a_pk PRIMARY KEY (Type_enr , Drapeau ,Code_tbr_0110 , Code_tbr_0120 , Date_debut ) ,
FOREIGN KEY(Code_tbr_0110) REFERENCES tbr_0110_a (Code_tbr_0110)
); |
mon problème est sur la définition FOREIGN KEY dans tbr_0120_a , la creation de la table tbr_0120_a.
Le système refuse de définir la clé étrangere car il ne s'agit pas d'un clé primaire de la table tbr_0110_a.
alors pourquoi ne pas utiliser les champs de la cle primaire de la table tbr_0110_a (Type_enr , Drapeau , Code_tbr_0110 , Date_debut) et bien parce que le contenu des champs Date_debut et Date_fin sont des valeurs unique à chaque table .
on peu ainsi avoir
table tbr_0110_a
Type_enr |
Drapeau |
Code_tbr_0110 |
Date_debut |
Date_fin |
Libelle |
'0110' |
'c' |
'TAX456' |
01/01/2010 |
null |
valeur des codages TAX456 |
'0110' |
'c' |
'XME16' |
01/01/2015 |
null |
valeur des ecarts |
table tbr_0110_a
Type_enr |
Drapeau |
Code_tbr_0110 |
Code_tbr_0120 |
Date_debut |
Date_fin |
Description |
Ordre_vente |
nb_de_valeur |
'0120' |
'c' |
'TAX456' |
'Oker77' |
01/02/2011 |
31/12/2013 |
Traitement des informations |
1 |
22 |
'0120' |
'c' |
'TAX456' |
'OPER456' |
01/01/2015 |
31/12/2017 |
Traitement des affectation |
2 |
17 |
'0120' |
'c' |
'XME16' |
'Aw15' |
01/01/2010 |
null |
Traitement operation complexe |
1 |
33 |
Quelle serait selon vous la FOREIGN KEY a creer pour tbr_0120_a ?
Comment creer un lien entre ces 2 tables ?