ProjetDevWeb2/Projet/projet.sql

61 lines
2.1 KiB
SQL

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,
FOREIGN KEY (auteur_id) REFERENCES utilisateur(id) ON DELETE CASCADE
);
CREATE TABLE bloc (
id INT PRIMARY KEY AUTO_INCREMENT,
type ENUM('TEXTE', 'LISTE', 'TITRE', 'CODE', 'PAGE') 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,
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);