136 lines
4.9 KiB
SQL
136 lines
4.9 KiB
SQL
-- Drop tables if they exist
|
|
DROP TABLE IF EXISTS note;
|
|
DROP TABLE IF EXISTS rendu_devoir;
|
|
DROP TABLE IF EXISTS devoir;
|
|
DROP TABLE IF EXISTS contenu_cours;
|
|
DROP TABLE IF EXISTS inscription;
|
|
DROP TABLE IF EXISTS enseignement;
|
|
DROP TABLE IF EXISTS cours;
|
|
DROP TABLE IF EXISTS utilisateur_role;
|
|
DROP TABLE IF EXISTS role;
|
|
DROP TABLE IF EXISTS utilisateur;
|
|
|
|
-- Table utilisateur : représente un utilisateur de l'application
|
|
CREATE TABLE utilisateur
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
login VARCHAR(8) NOT NULL,
|
|
mot_de_passe VARCHAR(255) NOT NULL,
|
|
nom VARCHAR(100),
|
|
prenom VARCHAR(100),
|
|
email VARCHAR(255),
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT ux_u_login UNIQUE (login),
|
|
CONSTRAINT ux_u_email UNIQUE (email)
|
|
);
|
|
CREATE INDEX ix_u_login ON utilisateur (login);
|
|
|
|
-- Table role : représente un rôle d'utilisateur
|
|
CREATE TABLE role
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
nom VARCHAR(100) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT ux_r_nom UNIQUE (nom)
|
|
);
|
|
CREATE INDEX ix_r_nom ON role (nom);
|
|
|
|
-- Table utilisateur_role : association entre utilisateurs et rôles
|
|
CREATE TABLE utilisateur_role
|
|
(
|
|
utilisateur_id BIGINT NOT NULL,
|
|
role_id BIGINT NOT NULL,
|
|
PRIMARY KEY (utilisateur_id, role_id),
|
|
CONSTRAINT fk_ur_utilisateur_id FOREIGN KEY (utilisateur_id) REFERENCES utilisateur (id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_ur_role_id FOREIGN KEY (role_id) REFERENCES role (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_ur_utilisateur_id ON utilisateur_role (utilisateur_id);
|
|
CREATE INDEX ix_ur_role_id ON utilisateur_role (role_id);
|
|
|
|
-- Table cours : représente un cours
|
|
CREATE TABLE cours
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
nom VARCHAR(100) NOT NULL,
|
|
date_debut DATE NOT NULL,
|
|
PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX ix_c_nom ON cours (nom);
|
|
|
|
-- Table enseignement : association entre utilisateurs et cours
|
|
CREATE TABLE enseignement
|
|
(
|
|
utilisateur_id BIGINT NOT NULL,
|
|
cours_id BIGINT NOT NULL,
|
|
PRIMARY KEY (utilisateur_id, cours_id),
|
|
CONSTRAINT fk_e_utilisateur_id FOREIGN KEY (utilisateur_id) REFERENCES utilisateur (id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_e_cours_id FOREIGN KEY (cours_id) REFERENCES cours (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_e_utilisateur_id ON enseignement (utilisateur_id);
|
|
CREATE INDEX ix_e_cours_id ON enseignement (cours_id);
|
|
|
|
-- Table inscription : association entre utilisateurs et cours
|
|
CREATE TABLE inscription
|
|
(
|
|
utilisateur_id BIGINT NOT NULL,
|
|
cours_id BIGINT NOT NULL,
|
|
date_inscription TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (utilisateur_id, cours_id),
|
|
CONSTRAINT fk_i_utilisateur_id FOREIGN KEY (utilisateur_id) REFERENCES utilisateur (id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_i_cours_id FOREIGN KEY (cours_id) REFERENCES cours (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_i_utilisateur_id ON inscription (utilisateur_id);
|
|
CREATE INDEX ix_i_cours_id ON inscription (cours_id);
|
|
|
|
-- Table contenu_cours : représente le contenu d'un cours
|
|
CREATE TABLE contenu_cours
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
cours_id BIGINT NOT NULL,
|
|
titre VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_cc_cours_id FOREIGN KEY (cours_id) REFERENCES cours (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_cc_cours_id ON contenu_cours (cours_id);
|
|
|
|
-- Table devoir : représente un devoir associé à un cours
|
|
CREATE TABLE devoir
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
cours_id BIGINT NOT NULL,
|
|
titre VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
date_debut TIMESTAMP NOT NULL,
|
|
date_fin TIMESTAMP NOT NULL,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_d_cours_id FOREIGN KEY (cours_id) REFERENCES cours (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_d_cours_id ON devoir (cours_id);
|
|
|
|
-- Table rendu_devoir : représente le rendu d'un devoir par un utilisateur
|
|
CREATE TABLE rendu_devoir
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
devoir_id BIGINT NOT NULL,
|
|
utilisateur_id BIGINT NOT NULL,
|
|
date_rendu TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
contenu TEXT,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_rd_devoir_id FOREIGN KEY (devoir_id) REFERENCES devoir (id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_rd_utilisateur_id FOREIGN KEY (utilisateur_id) REFERENCES utilisateur (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_rd_devoir_id ON rendu_devoir (devoir_id);
|
|
CREATE INDEX ix_rd_utilisateur_id ON rendu_devoir (utilisateur_id);
|
|
|
|
-- Table note : représente une note attribuée à un rendu de devoir
|
|
CREATE TABLE note
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
rendu_devoir_id BIGINT NOT NULL,
|
|
valeur DECIMAL(5, 2) NOT NULL CHECK (valeur >= 0 AND valeur <= 20),
|
|
date_attribution TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_n_rendu_devoir_id FOREIGN KEY (rendu_devoir_id) REFERENCES rendu_devoir (id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX ix_n_rendu_devoir_id ON note (rendu_devoir_id); |