[PostgreSQL]: Heritage et foreign key

Le
F.Julien
Bonjour,

je rencontre actuellement un probleme avec les héritages de tables et les
foreign key. Je m'explique, j'ai une table de base "Produit" qui contient les
champs "ID" et "Nom". J'ai deux tables "Moto" et "Voiture" qui hérite de la
table "Produit" et qui contient des champs propre en plus. J'ai enfin une autre
table "Prestation" qui possède un champ "Produit_ID" qui est une foreign key
sur "Produit.ID".

Je fais les inserts suivant:

INSERT INTO Produit(Nom) VALUES ('table de base');
> Ok (Produit.ID = 1)
INSERT INTO Moto(Nom) VALUES ('table moto qui hérite de Produit')
> Ok (Moto.ID = Produit.ID = 2)

Jusqu'ici tout va bien.
Maintenant si je tente d'inserer des entrées dans la table Prestation:

INSERT INTO Prestation(Produit_ID) VALUES(1);
> Ok
INSERT INTO Prestation(Produit_ID) VALUES(2);
> ERROR: insert or update in table "Prestation" violate foreign key constraint
> "Produit_ID_Fk"
> DETAIL: Key (Produit_ID)=(2) is not present in table "Prestation"

On dirait que la foreign key ne fonctionne pas sur une table hérité ! pourtant
le champ Produit.ID = 2 existe bien, c'est juste que cette ID a été crée par
l'insertion d'une entrée dans la table Moto.

D'apres mes recherches sur google, il semblerait que ceci ne soit pas encore
supporté par PostgreSQL. Quelqu'un aurait il une idée pour résoudre ce probleme
? Suis - je obliger de casser ma structure sous forme d'héritage ?

Cordialement,

F.Julien.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Fred BROUARD - SQLpro
Le #21716521
1) poste la structure complète de tes tables sous forme d'ordres SQL
2) voici un article sur l'héritage qui fait le point :
http://sqlpro.developpez.com/heritage/herit.html

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

F.Julien a écrit:
Bonjour,

je rencontre actuellement un probleme avec les héritages de tables et les
foreign key. Je m'explique, j'ai une table de base "Produit" qui
contient les
champs "ID" et "Nom". J'ai deux tables "Moto" et "Voiture" qui hérite de la
table "Produit" et qui contient des champs propre en plus. J'ai enfin
une autre
table "Prestation" qui possède un champ "Produit_ID" qui est une foreign
key
sur "Produit.ID".

Je fais les inserts suivant:

INSERT INTO Produit(Nom) VALUES ('table de base');

Ok (Produit.ID = 1)



INSERT INTO Moto(Nom) VALUES ('table moto qui hérite de Produit')

Ok (Moto.ID = Produit.ID = 2)




Jusqu'ici tout va bien.
Maintenant si je tente d'inserer des entrées dans la table Prestation:

INSERT INTO Prestation(Produit_ID) VALUES(1);

Ok



INSERT INTO Prestation(Produit_ID) VALUES(2);

ERROR: insert or update in table "Prestation" violate foreign key
constraint
"Produit_ID_Fk"
DETAIL: Key (Produit_ID)=(2) is not present in table "Prestation"




On dirait que la foreign key ne fonctionne pas sur une table hérité !
pourtant
le champ Produit.ID = 2 existe bien, c'est juste que cette ID a été crée
par
l'insertion d'une entrée dans la table Moto.

D'apres mes recherches sur google, il semblerait que ceci ne soit pas
encore
supporté par PostgreSQL. Quelqu'un aurait il une idée pour résoudre ce
probleme
? Suis - je obliger de casser ma structure sous forme d'héritage ?

Cordialement,

F.Julien.
Poster une réponse
Anonyme