đ SAISON C Semaine 1 Ăpisode 3 - ModĂ©lisation de bases de donnĂ©es
Aujourdâhui, nous avons plongĂ© dans le monde de la modĂ©lisation de bases de donnĂ©es et de la conception dâAPI.
La journĂ©e a Ă©tĂ© rythmĂ©e par des notions clĂ©s comme MERISE, les diagrammes entitĂ©-relation, et les spĂ©cifications dâAPI. Nous avons dĂ©jĂ abordĂ© les bases de la modĂ©lisation de bases de donnĂ©es avec la mĂ©thode MERISE en saison B.
đ Notions du jour
- Modélisation de base de données :
- MERISE :
- MCD
- MLD
- MPD
- Dictionnaire de données :
- Diagramme entité-relation
- Conception dâAPI :
- Spécifications
đ ModĂ©lisation de Base de DonnĂ©es : Les Fondamentaux
La modĂ©lisation de base de donnĂ©es est une Ă©tape cruciale dans la conception dâun projet. Elle permet de structurer les donnĂ©es de maniĂšre logique et efficace, facilitant ainsi leur stockage, leur rĂ©cupĂ©ration et leur manipulation.
1ïžâŁ MERISE : Une MĂ©thode StructurĂ©e
MERISE est une méthode de conception de bases de données qui se décompose en plusieurs étapes :
- MCD (ModÚle Conceptuel de Données) : Représentation graphique des données et de leurs relations.
- MLD (ModÚle Logique de Données) : Traduction du MCD en un modÚle plus technique incluant des tables de jonction.
- MPD (ModÚle Physique de Données) : Implémentation concrÚte du MLD en SQL.
Nous avons déjà abordé les bases de la modélisation de bases de données avec la méthode MERISE en saison B. Je ne développerai donc pas plus aujourd'hui sur le sujet.
2ïžâŁ Dictionnaire de DonnĂ©es
Le dictionnaire de données est un document qui décrit en détail chaque table et chaque champ de la base de données. Il est souvent généré à partir du MLD.
Exemple de dictionnaire de données pour une table user :
| Champ | Type | Unique | Not null | Référence | Par défaut | Exemple de valeur | Explication |
|---|---|---|---|---|---|---|---|
id |
GENERATED | â | â | - | - | 1 | Identifiant unique de l'utilisateur |
email |
VARCHAR | â | â | - | - | "alice@mail.com" | Adresse email de l'utilisateur |
username |
VARCHAR | â | â | - | - | "Al1ce123" | Pseudo de l'utilisateur |
firstname |
VARCHAR | â | â | - | - | "Alice" | PrĂ©nom de l'utilisateur |
lastname |
VARCHAR | â | â | - | - | "Durand" | Nom de famille de l'utilisateur |
password |
VARCHAR | â | â | - | - | "$2a$10$..." | Mot de passe chiffrĂ© |
role |
VARCHAR | â | â | - | "member" | "admin" | RĂŽle ("member" ou "author" ou "admin") |
Explications du dictionnaire :
- Champ : Nom du champ dans la table.
- Type : Type de données du champ (ex:
VARCHAR,INT,BOOL). - Unique : Indique si le champ doit ĂȘtre unique.
- Not null : Indique si le champ ne peut pas ĂȘtre nul.
- Référence : Indique si le champ est une clé étrangÚre qui fait référence à la clé primaire d'une autre table.
- Par défaut : Valeur par défaut du champ.
- Exemple de valeur : Exemple de valeur pour le champ.
- Explication : Description du champ.
đ Conception dâAPI : Les SpĂ©cifications
La conception dâune API (Application Programming Interface) est une Ă©tape essentielle pour permettre la communication entre diffĂ©rentes parties dâun systĂšme. Les spĂ©cifications dâAPI dĂ©crivent comment les diffĂ©rentes parties du systĂšme interagissent entre elles.
1ïžâŁ SpĂ©cifications dâAPI
Les spĂ©cifications dâAPI dĂ©crivent les endpoints, les mĂ©thodes HTTP, les paramĂštres, les rĂ©ponses et les erreurs possibles. Elles peuvent Ă©crites en utilisant des outils comme OpenAPI ou Swagger.
Explications des spécifications :
- Endpoints : Les URLs des différentes ressources (ex:
/projects,/projects/{id}). - Méthodes HTTP : Les méthodes utilisées pour interagir avec les ressources (ex:
GET,POST). - ParamÚtres : Les paramÚtres requis pour certaines méthodes (ex:
idpour/projects/{id}). - Réponses : Les réponses possibles pour chaque méthode (ex:
200,201,404). - SchĂ©mas : Les structures de donnĂ©es utilisĂ©es dans les requĂȘtes et les rĂ©ponses.
đĄ Ce Que Jâai Appris Aujourdâhui
-
Modélisation de base de données :
- Comment utiliser la méthode MERISE pour concevoir une base de données.
- La création de MCD, MLD et MPD pour structurer les données.
- Lâutilisation des diagrammes entitĂ©-relation pour visualiser les donnĂ©es.
- La rĂ©daction dâun dictionnaire de donnĂ©es pour dĂ©crire les tables et les champs.
-
Conception dâAPI :
- Comment Ă©crire des spĂ©cifications dâAPI pour dĂ©crire les endpoints et les mĂ©thodes HTTP.
- Lâutilisation dâoutils comme OpenAPI ou Swagger pour documenter les API.
âšïž Challenge du jour : "ModĂ©liser YouTube (MERISE)"
đ PrĂ©sentation du Challenge
Aujourdâhui, nous avons travaillĂ© sur un challenge de modĂ©lisation. Lâobjectif Ă©tait de concevoir une base de donnĂ©es pour un clone de YouTube en utilisant la mĂ©thode MERISE.
Contexte :
- On veut un clone de YouTube avec des fonctionnalités de base comme les vidéos, les playlists, les commentaires, les tags, les utilisateurs et la recherche.
- Il faut modéliser les différentes entités et leurs relations.
Ce challenge était trÚs intéressant à faire car j'utilise YouTube tous les jours et je n'avais jamais réfléchi à comment cela avait été pensé. Et je ne m'attendais pas à ce que le modÚle de base de données soit aussi poussé.
đŻ Objectifs du Challenge
- Analyser les fonctionnalités de YouTube pour identifier les entités et leurs relations.
- Concevoir un MCD pour représenter les données et leurs relations.
- Traduire le MCD en MLD pour obtenir un modĂšle plus technique.
- Implémenter le MLD en MPD pour obtenir un script SQL.
- Rédiger un dictionnaire de données pour décrire les tables et les champs.
đ Ătapes RĂ©alisĂ©es
1ïžâŁ Analyse des FonctionnalitĂ©s
- VidĂ©os : Les vidĂ©os sont le cĆur de YouTube. Elles ont un titre, une durĂ©e, un nombre de vues, des likes, des dislikes, etc.
- Playlists : Les playlists permettent de regrouper des vidĂ©os. Elles peuvent ĂȘtre publiques ou privĂ©es.
- Commentaires : Les utilisateurs peuvent commenter les vidĂ©os. Les commentaires peuvent ĂȘtre likĂ©s ou dislikĂ©s. On peut Ă©galement rĂ©pondre Ă un commentaire.
- Tags : Les tags permettent de catĂ©goriser les vidĂ©os. Ils peuvent avoir une couleur et ĂȘtre hiĂ©rarchisĂ©s.
- Utilisateurs : Les utilisateurs peuvent téléverser des vidéos, créer des playlists, commenter des vidéos, etc.
2ïžâŁ Conception du MCD
Jâai conçu un MCD pour reprĂ©senter les donnĂ©es et leurs relations. Voici ma version mĂȘme si je pense que l'on peut dĂ©velopper encore plus :

3ïžâŁ Traduction du MCD en MLD
Jâai traduit le MCD en MLD. Voici ma version :

4ïžâŁ CrĂ©ation du dictionnaire de donnĂ©es
Voici quelques tables avec leur dictionnaire de données :
Table video
| Champ | Type | Unique | Not null | Référence | Par défaut | Exemple de valeur | Explication |
|---|---|---|---|---|---|---|---|
id |
GENERATED | â | â | - | - | 1 | Identifiant unique de la vidĂ©o |
title |
VARCHAR | â | â | - | - | "Ma Super vidĂ©o" | Titre de la vidĂ©o |
duration |
TIME | â | â | - | "00:00:00" | "01:30:00" | DurĂ©e de la vidĂ©e |
views |
INT | â | â | - | 0 | 1,000,000 | Le nombre de vues de la vidĂ©o |
like |
INT | â | â | - | 0 | 100 | Le nombre de "like" de la vidĂ©o |
dislike |
INT | â | â | - | 0 | 100 | Le nombre de "dislike" de la vidĂ©o |
đ user_id |
INT | â | â | user(id) | - | 1 | RĂ©fĂ©rence vers l'utilisateur |
Table comment
| Champ | Type | Unique | Not null | Référence | Par défaut | Exemple de valeur | Explication |
|---|---|---|---|---|---|---|---|
id |
GENERATED | â | â | - | - | 1 | Identifiant unique du commentaire |
content |
TEXT | â | â | - | - | "Super vidĂ©o !" | Contenu du commentaire |
like |
INT | â | â | - | 0 | 100 | Le nombre de "like" du commentaire |
dislike |
INT | â | â | - | 0 | 100 | Le nombre de "dislike" du commentaire |
is_reported |
BOOL | â | â | - | - | True | Indique si le commentaire a fait l'objet d'un signalement |
đ comment_id |
INT | â | â | comment(id) | - | 1 | RĂ©fĂ©rence vers le commentaire |
đ user_id |
INT | â | â | user(id) | - | 1 | RĂ©fĂ©rence vers l'utilisateur |
đ video_id |
INT | â | â | video(id) | - | 1 | RĂ©fĂ©rence vers la vidĂ©o |
5ïžâŁ ImplĂ©mentation du MLD en MPD
Voici les mĂȘmes tables aprĂšs implĂ©mentation du MLD en MPD pour obtenir un script SQL.
-- Table video
CREATE TABLE video (
id INTEGER GENERATED BY DEFAULT AS IDENTITY,
title VARCHAR(200) NOT NULL,
duration TIME DEFAULT '00:00:00' NOT NULL,
views INT DEFAULT 0,
"like" INT DEFAULT 0,
dislike INT DEFAULT 0,
user_id INT UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (id),
FOREIGN KEY (user_id) REFERENCES "user"(id)
);
-- Table comment
CREATE TABLE comment (
id INTEGER GENERATED BY DEFAULT AS IDENTITY,
content TEXT NOT NULL,
"like" INT DEFAULT 0,
dislike INT DEFAULT 0,
is_reported BOOL,
comment_id INT UNIQUE NOT NULL,
user_id INT UNIQUE NOT NULL,
video_id INT UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (id),
FOREIGN KEY (comment_id) REFERENCES comment(id),
FOREIGN KEY (user_id) REFERENCES "user"(id),
FOREIGN KEY (video_id) REFERENCES video(id)
);
đĄ Ce Que Jâai Appris avec ce Challenge
- Analyse des fonctionnalitĂ©s : Comment analyser les fonctionnalitĂ©s dâune application pour identifier les entitĂ©s et leurs relations.
- Conception MERISE : Utilisation de la méthode MERISE pour concevoir une base de données.
- Dictionnaire de donnĂ©es : RĂ©daction dâun dictionnaire de donnĂ©es pour dĂ©crire les tables et les champs.