CREATE DATABASE IF NOT EXISTS projet; USE projet; DROP TABLE IF EXISTS 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 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 ); 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);