Bonjour,
je suis en train de faire une application qui me demande de passer par l'héritage. Pour simplifier, j'ai une table parent "produit" et beaucoup de tables (plus de 100) enfant "produit1 produit2 ..."
Je pourrais le gérer sans héritage avec des clé étrangére et des jointures mais c'est vraiment pas pratique et l'héritage simplifierait les choses.
De plus je ne sais pas si une jointure avec plus de 100 tables est très efficace...
Voici mon problème :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
CREATE TABLE produit
(
id numeric NOT NULL,
"name" text,
CONSTRAINT "PK" PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE produit OWNER TO postgres;
CREATE TABLE produit1
(
-- Geerbt from table produit1: id numeric NOT NULL,
-- Geerbt from table produit1: "name" text,
capacite numeric,
CONSTRAINT "PK2" PRIMARY KEY (id)
)
INHERITS (produit)
WITH (
OIDS=FALSE
);
ALTER TABLE produit1 OWNER TO postgres;
CREATE TABLE produiit2
(
-- Geerbt from table produiit2: id numeric NOT NULL,
-- Geerbt from table produiit2: "name" text,
epaisseur numeric,
CONSTRAINT "PK3" PRIMARY KEY (id)
)
INHERITS (produit)
WITH (
OIDS=FALSE
);
ALTER TABLE produiit2 OWNER TO postgres; |
1 2 3 4 5 6 7
|
INSERT INTO produiit2(
id, "name", epaisseur)
VALUES (2, 'planche', 18);
INSERT INTO produiit2(
id, "name", capacite)
VALUES (1, 'classeur', 100); |
Jusque l'à tout va bien.
Apres je veux faire un select :
j'obtiens :
1;"classeur"
1;"planche"
Ca semble cohérent.
Mais n'est il pas possible d'obtenir aussi les colonnes Capacité et épaisseur en sélectionnant la table produit et sans faire de jointures ?
Que j'obtienne cela :
1;"classeur";NULL;100
1;"planche";18;NULL
Sur le même principe j aimerais faire un select comme ceci sans jointure:
select * from produit where capacite =100
mais bien sur écrit comme ceci il me dit que la colonne n'éxiste pas.
Est ce qu'une solution éxiste ou il faut passer par les jointures obligatoirement ?
Partager