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

PostgreSQL et l'heritage... petit soucis...

2 réponses
Avatar
WebShaker
salut j'essaye l'heritage de class sous postgresql que je trouve bien
utile pour pouvoir relier plusieurs objet en eux sans me soucier de leur
type.... mais...

soit la base suivante
CREATE TABLE obj (
idobj serial,
PRIMARY key (idobj)
);

CREATE TABLE carre (
decription text
PRIMARY key (idobj)
) INHERITS (obj);

CREATE TABLE rond (
decription text
PRIMARY key (idobj)
) INHERITS (obj);

CREATE TABLE obj_link (
idobj1 integer,
idobj2 integer,
PRIMARY key (idobj1, idobj2),
FOREIGN key (idobj1) REFERENCES obj (idobj),
FOREIGN key (idobj2) REFERENCES obj (idobj)
);


INSERT INTO carre (description) VALUES ('carre1');
INSERT INTO carre (description) VALUES ('carre2');
INSERT INTO rond (description) VALUES ('rond1');
INSERT INTO rond (description) VALUES ('rond2');
INSERT INTO carre (description) VALUES ('carre3');

J'ai donc mes 5 objets qui on donc une meme sequence et donc des idobj
différent...

mon probleme est que je ne peux absolument pas executer un lien en deux
object différent.

J'execute
INSERT INTO obj_link (idobj1, idobj2) VALUES (2, 3);

dans l'espoir d'arriver à lier mon carre2 avec mon rond1.
Mais voila mes contraintes d'intégrité m'empêchent de faire cela...

C'est bien dommage.
Donc évidement je peux faire sauter les contraintes, mais cela me
perturbe un peu.

Y a t-il une solution pour me permettre de faire cela?

Peut-être a partir d'un trigger !!!
Je sais pas exactement ce que c'est au juste, mais il me semble que
c'est un truc qui s'éxecute à chaque modification d'un enregistrement ! non.

Y a t-il un autre moyen de créer ces FOREIGN KEY puisque les deux
entrées sont évidement dans ma table obj.

Merci

Etienne

2 réponses

Avatar
Sebastien Lardiere
Le 03/02/2010 23:53, WebShaker a écrit :

Y a t-il un autre moyen de créer ces FOREIGN KEY puisque les deux
entrées sont évidement dans ma table obj.



Salut,

Non, justement, les données sont physiquement dans les tables filles, et
la vérification de la FK se fait en utilisant SELECT FROM ONLY

select * from obj ;


idobj
-------
1
2
5
3
4
(5 lignes)

select * from only obj ;


idobj
-------
(0 lignes)


--
Sébastien
Avatar
WebShaker
Non, justement, les données sont physiquement dans les tables filles, et
la vérification de la FK se fait en utilisant SELECT FROM ONLY



Ben c'est moche ;)
on ne peut pas forcer le FK a ne pas utiliser FROM ONLY ???

Etienne