Hello.
Script simplifié (HSQLDB) :
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 CREATE TABLE T_PERSONNES_TY ( PER_TY_ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL, PER_TY_LIB VARCHAR(16) NOT NULL, CONSTRAINT PK_PER_TY_ID PRIMARY KEY (PER_TY_ID) ); CREATE TABLE T_PERSONNES ( PER_ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL, PER_TY_ID INTEGER NOT NULL, PER_NOM VARCHAR(32) NOT NULL, PER_PRENOM VARCHAR(32) NOT NULL, CONSTRAINT PK_PER_ID PRIMARY KEY (PER_ID), CONSTRAINT FK_T_PERSONNES_T_PERSONNES_TY FOREIGN KEY (PER_TY_ID) REFERENCES T_PERSONNES_TY (PER_TY_ID) ); CREATE TABLE T_RESIDENTS ( RES_ID INTEGER NOT NULL, CONSTRAINT PK_RES_ID PRIMARY KEY (RES_ID), CONSTRAINT FK_RESIDENTS_PERSONNES FOREIGN KEY (RES_ID) REFERENCES T_PERSONNES (PER_ID) ); CREATE TABLE T_CONTACTS ( CON_ID INTEGER NOT NULL, CONSTRAINT PK_CON_ID PRIMARY KEY (CON_ID), CONSTRAINT FK_CONTACTS_PERSONNES FOREIGN KEY (CON_ID) REFERENCES T_PERSONNES (PER_ID) ); CREATE TABLE TJ_RESIDENTS_CONTACTS ( RES_ID INTEGER NOT NULL, CON_ID INTEGER NOT NULL, CONSTRAINT PK_RES_ID_CON_ID PRIMARY KEY (RES_ID), CONSTRAINT FK_TJ_A FOREIGN KEY (RES_ID) REFERENCES T_RESIDENTS (RES_ID), CONSTRAINT FK_TJ_B FOREIGN KEY (CON_ID) REFERENCES T_CONTACTS (CON_ID) );
PER_TY_ID : 1, résident ; 2, contact.
Les tables T_RESIDENTS et T_CONTACTS sont les sous-types de T_PERSONNES.
- Un contact n'existe que si il est charge (administrativement parlant) d'un résident.
- Un contact peut avoir 1 ou plusieurs résidents.
- Un résident peut avoir 0 ou 1 contact.
Tout ceci fonctionne correctement jusqu'à ce qu'un cas particulier vienne tout chambouler : un résident, qui n'a pas de contact, mais qui est en même temps contact d'un autre résident. Ma première idée serait de créer une nouvelle personne avec le même nom est de la définir comme contact dans PER_TY_ID mais j'ai l'impression que ça n'est pas la bonne méthode.
Merci.
Partager