83 lines
2.9 KiB
SQL
83 lines
2.9 KiB
SQL
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);
|
|
|