CREATE DATABASE IF NOT EXISTS projet; USE projet; DROP TABLE IF EXISTS bloc; DROP TABLE IF EXISTS historique_bloc; DROP TABLE IF EXISTS partage; DROP TABLE IF EXISTS page; DROP TABLE IF EXISTS message; DROP TABLE IF EXISTS utilisateur; CREATE TABLE utilisateur ( id INT PRIMARY KEY AUTO_INCREMENT, login VARCHAR(100) NOT NULL, mot_de_passe VARCHAR(255) NOT NULL, privilege ENUM('ADMIN', 'USER', 'GUEST') NOT NULL ); CREATE TABLE page ( id INT PRIMARY KEY AUTO_INCREMENT, titre VARCHAR(200) NOT NULL, date_creation DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, date_modification DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, auteur_id INT NOT NULL, droits ENUM('LECTURE', 'ECRITURE', 'ADMIN') NOT NULL, page_parent_id INT DEFAULT NULL, FOREIGN KEY (auteur_id) REFERENCES utilisateur(id) ON DELETE CASCADE, FOREIGN KEY (page_parent_id) REFERENCES page(id) ON DELETE SET NULL ); CREATE TABLE bloc ( id INT PRIMARY KEY AUTO_INCREMENT, type ENUM('TEXTE', 'LISTE', 'TITRE', 'CODE', 'PAGE', 'SEPARATEUR', 'CITATION') NOT NULL DEFAULT 'TEXTE', contenu TEXT, date_creation DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, date_modification DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, page_id INT NOT NULL, ordre INT NOT NULL, auteur_id INT NOT NULL, metadata JSON NOT NULL, FOREIGN KEY (page_id) REFERENCES page(id) ON DELETE CASCADE, FOREIGN KEY (auteur_id) REFERENCES utilisateur(id) ON DELETE CASCADE ); CREATE TABLE historique_bloc ( id INT PRIMARY KEY AUTO_INCREMENT, bloc_id INT NOT NULL, version INT NOT NULL, contenu TEXT, date_modification DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, modifie_par INT, metadata JSON NOT NULL, ordre INT NOT NULL, type ENUM('TEXTE', 'LISTE', 'TITRE', 'CODE', 'PAGE', 'SEPARATEUR', 'CITATION') NOT NULL, FOREIGN KEY (bloc_id) REFERENCES bloc(id) ON DELETE CASCADE, FOREIGN KEY (modifie_par) REFERENCES utilisateur(id) ON DELETE SET NULL ); CREATE TABLE message ( id INT AUTO_INCREMENT PRIMARY KEY, login VARCHAR(100) NOT NULL, contenu TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE partage ( id INT AUTO_INCREMENT PRIMARY KEY, page_id INT NOT NULL, utilisateur_id INT NOT NULL, droits ENUM('LECTURE', 'ECRITURE') NOT NULL DEFAULT 'LECTURE', date_partage DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (page_id) REFERENCES page(id) ON DELETE CASCADE, FOREIGN KEY (utilisateur_id) REFERENCES utilisateur(id) ON DELETE CASCADE, UNIQUE(page_id, utilisateur_id) -- EmpĂȘche les doublons de partage ); INSERT INTO utilisateur (login, mot_de_passe, privilege) VALUES ('root', SHA2('123', 256), 'ADMIN'); CREATE INDEX idx_page_auteur ON page(auteur_id); CREATE INDEX idx_bloc_page ON bloc(page_id); CREATE INDEX idx_partages_user ON partage(utilisateur_id);