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 :
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
- Créez une entité/table
Visionnageavec les attributs appropriés. - Quelles sont les clés étrangères nécessaires ?
- 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 :
- On essaie d'insérer un utilisateur avec un email déjà existant ?
- On essaie de supprimer un film qui a été visionné par des utilisateurs ?
- 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 |
- Cette table est-elle en 1NF ? Pourquoi ?
- 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.
- Combien d'enregistrements sont ajoutés dans la table
Visionnagechaque jour ? - Quels problèmes cela peut-il poser ?
- 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
)
┌──────────────┐ 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
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.