TP1 - DB Schema¶
Ce n'est qu'une suggestion, vous pouvez adapter à votre guise.
Table users¶
La liste des users qui se sont enregistrés.
users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
)
Table choices¶
Une réponse possible à un sondage.
C'est rempli au démarrage du backend depuis les variables d'environnement.
Table votes¶
Une entrée est crée dans cette table à chaque fois qu'un utilisateur soumet un vote.
votes (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL,
choice_id INTEGER NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
UNIQUE (user_id),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (choice_id) REFERENCES choices(id)
)
Hint
On note le ptit UNIQUE sur le user_id : on enforce côté DB l'unicité du user ID.
Vous pouvez aussi le gérer côté backend, mais ça n'est jamais suffisant, on verra dans la suite pourquoi.
Des contraintes fortes, à tous les niveaux, pour un comportement maîtrisé.
Table vote_session¶
Une entrée est crée à chaque fois que le backend est lancé pour lancer une nouvelle session de vote.