Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[PostgreSQL]: Heritage et foreign key

1 réponse
Avatar
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.

1 réponse

Avatar
Fred BROUARD - SQLpro
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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">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" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">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.