```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); ```