Supposons que la facture F1 concerne le client C1 par le canal FACTURE > CONSULTATION_PAYANTE > CONSULTATION > PATIENT ;
Rien n’empêche que cette même facture F1 puisse concerner le client C2 par le canal FACTURE > TRAITEMENT_PAYANT > TRAITEMENT > CONSULTATION > PATIENT !
-- -----------------------------------------------------
-- Table PATIENT
-- -----------------------------------------------------
CREATE TABLE PATIENT
(
patientId INT NOT NULL
, patientMatricule INT NOT NULL
, patientNom VARCHAR(48) NOT NULL
, CONSTRAINT PATIENT_PK PRIMARY KEY (patientId)
, CONSTRAINT PATIENT_MAT_AK UNIQUE (patientMatricule)
) ;
-- -----------------------------------------------------
-- Table FACTURE
-- -----------------------------------------------------
CREATE TABLE FACTURE
(
patientId INT NOT NULL
, factureId INT NOT NULL
, factureNumero CHAR(8) NOT NULL
, factureDate DATE NOT NULL
, factureMontant INT NOT NULL
, CONSTRAINT FACTURE_PK PRIMARY KEY (patientId, factureId)
, CONSTRAINT FACTURE_NUMERO_AK UNIQUE (factureNumero)
, CONSTRAINT FACTURE_PATIENT_FK FOREIGN KEY (patientId)
REFERENCES PATIENT (patientId)
) ;
-- -----------------------------------------------------
-- Table CONSULTATION
-- -----------------------------------------------------
CREATE TABLE CONSULTATION
(
patientId INT NOT NULL
, consultationId INT NOT NULL
, consultationDate DATE NOT NULL
, CONSTRAINT CONSULTATION_PK PRIMARY KEY (patientId, consultationId)
, CONSTRAINT CONSULTATION_DATE_AK UNIQUE (patientId, consultationDate)
, CONSTRAINT CONSULTATION_PATIENT_FK FOREIGN KEY (patientId)
REFERENCES PATIENT (patientId)
) ;
-- -----------------------------------------------------
-- Table CONSULTATION_PAYANTE
-- -----------------------------------------------------
CREATE TABLE CONSULTATION_PAYANTE
(
patientId INT NOT NULL
, consultationId INT NOT NULL
, factureId INT NOT NULL
, CONSTRAINT CONSULTATION_PAYANTE_PK PRIMARY KEY (patientId, consultationId)
, CONSTRAINT CONSULTATION_PAYANTE_FACTURE_AK UNIQUE (patientId, factureId)
, CONSTRAINT CONSULTATION_PAYANTE_CONSULTATION_FK FOREIGN KEY (patientId, consultationId)
REFERENCES CONSULTATION (patientId, consultationId)
ON DELETE CASCADE
, CONSTRAINT CONSULTATION_PAYANTE_FACTURE_FK FOREIGN KEY (patientId, factureId)
REFERENCES FACTURE (patientId, factureId)
) ;
-- -----------------------------------------------------
-- Table TRAITEMENT
-- -----------------------------------------------------
CREATE TABLE TRAITEMENT
(
patientId INT NOT NULL
, consultationId INT NOT NULL
, traitementId INT NOT NULL
, CONSTRAINT TRAITEMENT_PK PRIMARY KEY (patientId, traitementId)
, CONSTRAINT TRAITEMENT_CONSULTATION_FK FOREIGN KEY (patientId, consultationId)
REFERENCES CONSULTATION (patientId, consultationId)
) ;
-- -----------------------------------------------------
-- Table TRAITEMENT_PAYANT
-- -----------------------------------------------------
CREATE TABLE TRAITEMENT_PAYANT
(
patientId INT NOT NULL
, traitementId INT NOT NULL
, factureId INT NOT NULL
, CONSTRAINT TRAITEMENT_PAYANT_PK PRIMARY KEY (patientId, traitementId)
, CONSTRAINT TRAITEMENT_PAYANT_FACTURE_AK UNIQUE (patientId, factureId)
, CONSTRAINT TRAITEMENT_PAYANT_TRAITEMENT_FK FOREIGN KEY (patientId, traitementId)
REFERENCES TRAITEMENT (patientId, traitementId)
ON DELETE CASCADE
, CONSTRAINT TRAITEMENT_PAYANT_FACTURE_FK FOREIGN KEY (patientId, factureId)
REFERENCES FACTURE (patientId, factureId)
) ;
-- -----------------------------------------------------
-- Table INTERVENTION
-- -----------------------------------------------------
CREATE TABLE INTERVENTION
(
patientId INT NOT NULL
, interventionId INT NOT NULL
, traitementId INT NOT NULL
, interventionDate DATE NOT NULL
, CONSTRAINT INTERVENTION_PK PRIMARY KEY (patientId, interventionId)
, CONSTRAINT INTERVENTION_DATE_AK UNIQUE (patientId, interventionDate)
, CONSTRAINT INTERVENTION_TRAITEMENT_FK FOREIGN KEY (patientId, traitementId)
REFERENCES TRAITEMENT (patientId, traitementId)
) ;
A noter l’action de compensation CASCADE retenue pour les clés étrangères CONSULTATION_PAYANTE_CONSULTATION_FK et TRAITEMENT_PAYANT_TRAITEMENT_FK. En effet une consultation payante P1 n’est qu’une consultation particulière C1 et la suppression de C1 entraîne forcément celle de P1. Même principe pour les traitement payants.
Partager