CREATE DATABASE IF NOT EXISTS healthnorth CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE healthnorth; -- ========================= -- TABLE: patient -- ========================= CREATE TABLE IF NOT EXISTS patient ( id_patient INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(100) NOT NULL, prenom VARCHAR(100) NOT NULL, date_naissance DATE NULL, num_secu VARCHAR(20) NULL UNIQUE, email VARCHAR(150) NOT NULL UNIQUE, telephone VARCHAR(30) NULL, mot_de_passe VARCHAR(255) NOT NULL DEFAULT '' ) ENGINE=InnoDB; -- ========================= -- TABLE: specialiste -- ========================= CREATE TABLE IF NOT EXISTS specialiste ( id_specialiste INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(100) NOT NULL, prenom VARCHAR(100) NOT NULL, specialite VARCHAR(120) NOT NULL ) ENGINE=InnoDB; -- ========================= -- TABLE: etablissement -- ========================= CREATE TABLE IF NOT EXISTS etablissement ( id_etablissement INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(150) NOT NULL, type VARCHAR(50) NOT NULL, -- ex: 'clinique', 'laboratoire' adresse VARCHAR(255) NULL ) ENGINE=InnoDB; -- ========================= -- TABLE: type_intervention -- ========================= CREATE TABLE IF NOT EXISTS type_intervention ( id_type INT AUTO_INCREMENT PRIMARY KEY, libelle VARCHAR(120) NOT NULL UNIQUE ) ENGINE=InnoDB; -- ========================= -- TABLE: rendez_vous -- ========================= CREATE TABLE IF NOT EXISTS rendez_vous ( id_rdv INT AUTO_INCREMENT PRIMARY KEY, date_rdv DATE NOT NULL, heure_rdv TIME NOT NULL, statut VARCHAR(30) NOT NULL, -- ex: planifie, annule, termine id_patient INT NOT NULL, id_specialiste INT NOT NULL, id_etablissement INT NOT NULL, id_type INT NOT NULL, CONSTRAINT fk_rdv_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT fk_rdv_specialiste FOREIGN KEY (id_specialiste) REFERENCES specialiste(id_specialiste) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT fk_rdv_etablissement FOREIGN KEY (id_etablissement) REFERENCES etablissement(id_etablissement) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT fk_rdv_type FOREIGN KEY (id_type) REFERENCES type_intervention(id_type) ON DELETE RESTRICT ON UPDATE CASCADE, -- Empêche de créer deux rdv identiques (même patient, même date/heure) UNIQUE KEY uq_rdv_patient_datetime (id_patient, date_rdv, heure_rdv) ) ENGINE=InnoDB; -- ========================= -- TABLE: ordonnance -- ========================= CREATE TABLE IF NOT EXISTS ordonnance ( id_ordonnance INT AUTO_INCREMENT PRIMARY KEY, date_ord DATE NOT NULL, description TEXT NULL, id_patient INT NOT NULL, CONSTRAINT fk_ord_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB; -- ========================= -- TABLE: ligne_ordonnance -- (composition: dépend de ordonnance) -- ========================= CREATE TABLE IF NOT EXISTS ligne_ordonnance ( id_ligne INT AUTO_INCREMENT PRIMARY KEY, medicament VARCHAR(150) NOT NULL, dosage VARCHAR(80) NULL, frequence VARCHAR(80) NULL, duree VARCHAR(80) NULL, id_ordonnance INT NOT NULL, CONSTRAINT fk_ligne_ord FOREIGN KEY (id_ordonnance) REFERENCES ordonnance(id_ordonnance) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB; -- ========================= -- TABLE: rappel_medicament -- ========================= CREATE TABLE IF NOT EXISTS rappel_medicament ( id_rappel INT AUTO_INCREMENT PRIMARY KEY, heure TIME NOT NULL, actif BOOLEAN NOT NULL DEFAULT TRUE, id_patient INT NOT NULL, CONSTRAINT fk_rappel_patient FOREIGN KEY (id_patient) REFERENCES patient(id_patient) ON DELETE CASCADE ON UPDATE CASCADE, -- Optionnel: éviter 2 rappels identiques à la même heure pour le même patient UNIQUE KEY uq_rappel_patient_heure (id_patient, heure) ) ENGINE=InnoDB; -- ========================= -- Index utiles (optionnel) -- ========================= CREATE INDEX idx_rdv_date ON rendez_vous(date_rdv); CREATE INDEX idx_ord_date ON ordonnance(date_ord);