Skip to content

📅 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: id pour /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

  1. 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.
  2. 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

  1. Analyser les fonctionnalités de YouTube pour identifier les entités et leurs relations.
  2. Concevoir un MCD pour représenter les données et leurs relations.
  3. Traduire le MCD en MLD pour obtenir un modĂšle plus technique.
  4. Implémenter le MLD en MPD pour obtenir un script SQL.
  5. 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 :

MCD

3ïžâƒŁ Traduction du MCD en MLD

J’ai traduit le MCD en MLD. Voici ma version :

MLD

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.

create_database.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

  1. Analyse des fonctionnalitĂ©s : Comment analyser les fonctionnalitĂ©s d’une application pour identifier les entitĂ©s et leurs relations.
  2. Conception MERISE : Utilisation de la méthode MERISE pour concevoir une base de données.
  3. Dictionnaire de donnĂ©es : RĂ©daction d’un dictionnaire de donnĂ©es pour dĂ©crire les tables et les champs.