Bonjour,
J'ai un peu de mal à écrire ma DDL concernant le cas de figure suivant (notez que je suis peut-être à côté de mon sujet).

J'ai une table user classique (id,nom,prenom....).
Les users peuvent être prof et/ou eleve et/ou administratif ou les trois ensembles ou aucun d'eux.

J'ai dessiné comme ceci :Nom : heritage.png
Affichages : 664
Taille : 22,5 Ko

En PostgreSQL, j'ai créé comme ceci :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
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
40
41
42
43
44
45
46
47
48
49
 
CREATE TABLE public.users(
	id_user serial NOT NULL,
	nom varchar(50) NOT NULL,
	prenom varchar(50),
	matricule integer NOT NULL,
	CONSTRAINT users_pk PRIMARY KEY (id_user)
 
);
 
-- object: public.professeurs | type: TABLE --
-- DROP TABLE IF EXISTS public.professeurs CASCADE;
CREATE TABLE public.professeurs(
	id_professeur serial NOT NULL,
-- 	id_user integer NOT NULL,
-- 	nom varchar(50) NOT NULL,
-- 	prenom varchar(50),
-- 	matricule integer NOT NULL,
	CONSTRAINT proffeseurs_pk PRIMARY KEY (id_professeur)
 
) INHERITS(public.users)
;
-- ddl-end --
ALTER TABLE public.professeurs OWNER TO postgres;
-- ddl-end --
 
-- object: public.eleves | type: TABLE --
-- DROP TABLE IF EXISTS public.eleves CASCADE;
CREATE TABLE public.eleves(
	id_eleve serial NOT NULL,
--	id_user integer NOT NULL,
-- 	nom varchar(50) NOT NULL,
-- 	prenom varchar(50),
-- 	matricule integer NOT NULL,
	CONSTRAINT eleves_pk PRIMARY KEY (id_eleve)
 
) INHERITS(public.users)
;
 
CREATE TABLE public.administratif(
	id_administratif serial NOT NULL,
-- 	id_user integer NOT NULL,
-- 	nom varchar(50) NOT NULL,
-- 	prenom varchar(50),
-- 	matricule integer NOT NULL,
	CONSTRAINT administratifs_pk PRIMARY KEY (id_administratif)
 
) INHERITS(public.users)
;


Cela fonctionne comme voulu, sauf que si je crée un prof ok, c'est bien hérité dans users, par contre si je crée le même users dans eleves, alors il se duplique dans users avec la même PK dans users ????

Voici un select de ma table user :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
id_user |nom        |prenom   |matricule |
--------|-----------|---------|----------|
3       |Marchal    |Philippe |8745      |
4       |Ismael     |Aras     |784       |
1       |Ernaelsten |Gérard   |1254      |
2       |Devos      |Denis    |2541      |
4       |Ismael     |Aras     |784       |
On voit que j'ai deux fois id_user : 4

Pouvez-vous me donner une piste de là où je me trompe ?
D'avance je vous remercie.