Skip to content

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.

choices (
  id         SERIAL PRIMARY KEY,
  label      VARCHAR(50) NOT NULL
)

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.

vote_session (
  id           SERIAL PRIMARY KEY,
  question     TEXT NOT NULL,
  starts_at    TIMESTAMP NOT NULL,
  ends_at      TIMESTAMP NOT NULL
)