87 lines
2.8 KiB
SQL
87 lines
2.8 KiB
SQL
```sql
|
|
CREATE TABLE utilisateurs (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(50) NOT NULL UNIQUE,
|
|
email VARCHAR(100) NOT NULL UNIQUE,
|
|
mot_de_passe VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX idx_utilisateurs_username ON utilisateurs (username);
|
|
CREATE INDEX idx_utilisateurs_email ON utilisateurs (email);
|
|
|
|
CREATE TABLE roles (
|
|
id SERIAL PRIMARY KEY,
|
|
nom VARCHAR(50) NOT NULL UNIQUE,
|
|
description TEXT
|
|
);
|
|
|
|
CREATE INDEX idx_roles_nom ON roles (nom);
|
|
|
|
CREATE TABLE utilisateurs_roles (
|
|
utilisateur_id INTEGER NOT NULL,
|
|
role_id INTEGER NOT NULL,
|
|
PRIMARY KEY (utilisateur_id, role_id),
|
|
FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs (id),
|
|
FOREIGN KEY (role_id) REFERENCES roles (id)
|
|
);
|
|
|
|
CREATE TABLE tokens (
|
|
id SERIAL PRIMARY KEY,
|
|
utilisateur_id INTEGER NOT NULL,
|
|
token VARCHAR(255) NOT NULL,
|
|
expires_at TIMESTAMP NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs (id)
|
|
);
|
|
|
|
CREATE INDEX idx_tokens_utilisateur_id ON tokens (utilisateur_id);
|
|
CREATE INDEX idx_tokens_expires_at ON tokens (expires_at);
|
|
|
|
CREATE TABLE articles (
|
|
id SERIAL PRIMARY KEY,
|
|
titre VARCHAR(100) NOT NULL,
|
|
contenu TEXT NOT NULL,
|
|
auteur_id INTEGER NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (auteur_id) REFERENCES utilisateurs (id)
|
|
);
|
|
|
|
CREATE INDEX idx_articles_titre ON articles (titre);
|
|
CREATE INDEX idx_articles_auteur_id ON articles (auteur_id);
|
|
|
|
CREATE TABLE commentaires (
|
|
id SERIAL PRIMARY KEY,
|
|
contenu TEXT NOT NULL,
|
|
article_id INTEGER NOT NULL,
|
|
auteur_id INTEGER NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (article_id) REFERENCES articles (id),
|
|
FOREIGN KEY (auteur_id) REFERENCES utilisateurs (id)
|
|
);
|
|
|
|
CREATE INDEX idx_commentaires_article_id ON commentaires (article_id);
|
|
CREATE INDEX idx_commentaires_auteur_id ON commentaires (auteur_id);
|
|
|
|
INSERT INTO roles (id, nom, description) VALUES
|
|
(1, 'admin', 'Administrateur'),
|
|
(2, 'utilisateur', 'Utilisateur standard');
|
|
|
|
INSERT INTO utilisateurs (id, username, email, mot_de_passe) VALUES
|
|
(1, 'admin', 'admin@example.com', 'password'),
|
|
(2, 'utilisateur', 'utilisateur@example.com', 'password');
|
|
|
|
INSERT INTO utilisateurs_roles (utilisateur_id, role_id) VALUES
|
|
(1, 1),
|
|
(2, 2);
|
|
|
|
INSERT INTO articles (id, titre, contenu, auteur_id) VALUES
|
|
(1, 'Article 1', 'Contenu de l\'article 1', 1),
|
|
(2, 'Article 2', 'Contenu de l\'article 2', 2);
|
|
|
|
INSERT INTO commentaires (id, contenu, article_id, auteur_id) VALUES
|
|
(1, 'Commentaire 1', 1, 1),
|
|
(2, 'Commentaire 2', 2, 2);
|
|
``` |