Aller au contenu

TP : Modéliser StreamFlix - La base de données d'une plateforme de streaming

Thème : Conception de bases de données et schémas relationnels


Contexte

En 2026, les plateformes de streaming (Netflix, Disney+, Prime Video, Apple TV+) dominent le marché du divertissement. Derrière leurs interfaces élégantes se cachent des bases de données massives qui gèrent des millions d'utilisateurs, de contenus et de visionnages.

Vous êtes embauché(e) comme stagiaire chez StreamFlix, une nouvelle plateforme de streaming française qui veut concurrencer les géants américains. Votre mission : concevoir la base de données qui fera tourner la plateforme.


Partie 1 : Analyse des besoins

Les fonctionnalités de StreamFlix

La plateforme doit permettre : - Aux utilisateurs de créer un compte et de s'abonner - De parcourir un catalogue de films et séries - De regarder des contenus et de reprendre là où on s'est arrêté - De créer une liste de favoris ("Ma Liste") - De noter les contenus (1 à 5 étoiles)

Exercice 1 : Identifier les entités

À partir de la description ci-dessus, identifiez les entités principales de la base de données.

Indice : Une entité est un "objet" du monde réel qu'on souhaite représenter. Pensez aux noms communs dans la description.


Partie 2 : Le Modèle Entité-Association

Exercice 2 : Définir les attributs

Pour chaque entité identifiée, listez les attributs pertinents.

Exemple :

Entité : Utilisateur
Attributs : ID, Email, Mot_de_passe, Nom, Prénom, Date_naissance, Date_inscription

Faites de même pour : - Film - Série - Épisode - Abonnement

Exercice 3 : Identifier les associations

Quelles sont les relations entre les entités ? Pour chaque relation, précisez : - Les entités concernées - Le nom de l'association - Les cardinalités (1-1, 1-n, n-n)

Exemple :

Utilisateur ---< possède >--- Abonnement
Cardinalités : Un utilisateur possède 0 ou 1 abonnement actif.
               Un abonnement appartient à 1 et 1 seul utilisateur.
               → Relation 1-1

Exercice 4 : Dessiner le MCD

Représentez le Modèle Conceptuel de Données complet sous forme de schéma.

Utilisez la notation suivante :

┌─────────────┐         ┌─────────────┐
│   ENTITE1   │         │   ENTITE2   │
├─────────────┤   1,n   ├─────────────┤
│ #clé        │◄───────►│ #clé        │
│  attribut1  │   nom   │  attribut1  │
│  attribut2  │         │  attribut2  │
└─────────────┘         └─────────────┘


Partie 3 : Du MCD au Schéma Relationnel

Rappel des règles de conversion

Élément MCD Conversion en relationnel
Entité Table
Attribut Colonne
Association 1-1 Clé étrangère dans l'une des tables
Association 1-n Clé étrangère côté "n"
Association n-n Table de liaison

Exercice 5 : Convertir en schéma relationnel

Transformez votre MCD en schéma relationnel. Utilisez la notation :

NomTable(#cle_primaire, attribut1, attribut2, cle_etrangere*)

Convention : - # indique la clé primaire - * indique une clé étrangère


Partie 4 : La gestion des visionnages

Le problème

StreamFlix veut permettre aux utilisateurs de reprendre un contenu là où ils l'ont arrêté. Il faut donc enregistrer : - Quel utilisateur a regardé quel contenu - À quelle date/heure - Jusqu'à quelle minute du contenu - Si le visionnage est terminé ou non

Exercice 6 : Modéliser les visionnages

  1. Créez une entité/table Visionnage avec les attributs appropriés.
  2. Quelles sont les clés étrangères nécessaires ?
  3. Quelle est la clé primaire de cette table ?

Réflexion : Un utilisateur peut-il regarder le même contenu plusieurs fois ? Comment gérer ce cas ?


Partie 5 : Les contraintes d'intégrité

Exercice 7 : Identifier les contraintes

Pour chaque table de votre schéma, identifiez : - Les contraintes d'intégrité d'entité (clé primaire unique et non nulle) - Les contraintes d'intégrité référentielle (clés étrangères valides) - Les contraintes de domaine (types de données, valeurs autorisées)

Exemple :

Table Utilisateur :
- ID_Utilisateur : entier, clé primaire, non nul, unique
- Email : chaîne, non nul, unique, format email valide
- Date_naissance : date, non nul, doit être dans le passé

Exercice 8 : Que se passe-t-il si...

Répondez aux questions suivantes en justifiant :

  1. On essaie d'insérer un utilisateur avec un email déjà existant ?
  2. On essaie de supprimer un film qui a été visionné par des utilisateurs ?
  3. On essaie d'ajouter un visionnage pour un utilisateur qui n'existe pas ?

Partie 6 : Normalisation

Exercice 9 : Vérifier la normalisation

Voici une proposition de table pour gérer les séries :

ID_Serie Titre Genre Nb_Saisons Acteur1 Acteur2 Acteur3
1 Stranger Things SF 5 Millie Bobby Brown Finn Wolfhard Gaten Matarazzo
2 The Crown Drame 6 Claire Foy Olivia Colman Imelda Staunton
  1. Cette table est-elle en 1NF ? Pourquoi ?
  2. Proposez un schéma normalisé pour gérer les séries et leurs acteurs.

Partie 7 : Schéma final

Exercice 10 : Synthèse

Proposez le schéma relationnel complet de StreamFlix avec : - Toutes les tables - Toutes les clés (primaires et étrangères) - Les types de données principaux

Exemple de format attendu

Utilisateurs(
    #ID_Utilisateur INT,
    Email VARCHAR(255) UNIQUE NOT NULL,
    Mot_de_passe VARCHAR(255) NOT NULL,
    Nom VARCHAR(100),
    Prénom VARCHAR(100),
    Date_naissance DATE,
    Date_inscription DATE DEFAULT CURRENT_DATE
)

Films(
    #ID_Film INT,
    Titre VARCHAR(255) NOT NULL,
    ...
)

...

Bonus : Pour aller plus loin

Réflexion 1 : L'algorithme de recommandation

Netflix utilise un algorithme de recommandation basé sur : - Les contenus déjà visionnés - Les notes attribuées - Les contenus similaires (même genre, mêmes acteurs)

Quelles informations de notre base de données seraient utiles pour cet algorithme ?

Réflexion 2 : Passage à l'échelle

StreamFlix a maintenant 10 millions d'utilisateurs et chacun regarde en moyenne 2 contenus par jour.

  1. Combien d'enregistrements sont ajoutés dans la table Visionnage chaque jour ?
  2. Quels problèmes cela peut-il poser ?
  3. Avez-vous entendu parler des bases de données NoSQL ? Pourquoi pourraient-elles être utiles ici ?

Résumé des notions travaillées

Notion Application dans ce TP
Entité Utilisateur, Film, Série, etc.
Attribut Email, Titre, Durée, etc.
Association "regarde", "possède", etc.
Clé primaire ID_Utilisateur, ID_Film
Clé étrangère ID_Utilisateur dans Visionnage
Cardinalités 1-1, 1-n, n-n
Contraintes d'intégrité Unicité, référence, domaine
Normalisation Éviter la redondance

Annexe : Schéma relationnel de référence (corrigé)

Cliquez pour afficher le corrigé
Utilisateurs(
    #ID_Utilisateur,
    Email,
    Mot_de_passe,
    Nom,
    Prenom,
    Date_naissance,
    Date_inscription
)

Abonnements(
    #ID_Abonnement,
    Type,           -- "Basic", "Standard", "Premium"
    Prix_mensuel,
    Date_debut,
    Date_fin,
    ID_Utilisateur*
)

Films(
    #ID_Film,
    Titre,
    Annee,
    Duree_minutes,
    Synopsis,
    ID_Genre*
)

Series(
    #ID_Serie,
    Titre,
    Annee_debut,
    Annee_fin,
    Synopsis,
    ID_Genre*
)

Episodes(
    #ID_Episode,
    Numero_saison,
    Numero_episode,
    Titre,
    Duree_minutes,
    ID_Serie*
)

Genres(
    #ID_Genre,
    Nom_genre
)

Acteurs(
    #ID_Acteur,
    Nom,
    Prenom,
    Date_naissance
)

Films_Acteurs(
    #ID_Film*,
    #ID_Acteur*,
    Role
)

Series_Acteurs(
    #ID_Serie*,
    #ID_Acteur*,
    Role
)

Visionnages(
    #ID_Visionnage,
    Date_heure,
    Minute_arret,
    Est_termine,
    ID_Utilisateur*,
    ID_Film*,        -- NULL si c'est un épisode
    ID_Episode*      -- NULL si c'est un film
)

MaListe(
    #ID_Utilisateur*,
    #ID_Film*,       -- ou ID_Serie selon le contenu
    Date_ajout
)

Notes(
    #ID_Utilisateur*,
    #ID_Film*,       -- ou ID_Serie
    Note,            -- 1 à 5
    Date_note
)
**MCD correspondant** :
┌──────────────┐     1,1     ┌──────────────┐
│ UTILISATEUR  │◄────────────┤  ABONNEMENT  │
├──────────────┤   possède   ├──────────────┤
│ #ID          │             │ #ID          │
│  Email       │             │  Type        │
│  Nom         │             │  Prix        │
└──────┬───────┘             └──────────────┘
       │ 0,n
       ▼         0,n          ┌──────────────┐
   REGARDE ─────────────────► │    FILM      │
       │                      ├──────────────┤
       │                      │ #ID          │
       │                      │  Titre       │
       │ 0,n                  │  Duree       │
       │                      └──────────────┘
┌──────────────┐
│   EPISODE    │◄──── appartient ──── SERIE
├──────────────┤         1,n
│ #ID          │
│  Numero      │
│  Titre       │
└──────────────┘

Auteur : Florian Mathieu

Licence CC BY NC

Licence Creative Commons
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.