diff --git a/.crossnote/config.js b/.crossnote/config.js
new file mode 100644
index 0000000..80613c4
--- /dev/null
+++ b/.crossnote/config.js
@@ -0,0 +1,15 @@
+({
+ katexConfig: {
+ "macros": {}
+},
+
+ mathjaxConfig: {
+ "tex": {},
+ "options": {},
+ "loader": {}
+},
+
+ mermaidConfig: {
+ "startOnLoad": false
+},
+})
\ No newline at end of file
diff --git a/.crossnote/head.html b/.crossnote/head.html
new file mode 100644
index 0000000..079058b
--- /dev/null
+++ b/.crossnote/head.html
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/.crossnote/parser.js b/.crossnote/parser.js
new file mode 100644
index 0000000..0f6b5a9
--- /dev/null
+++ b/.crossnote/parser.js
@@ -0,0 +1,12 @@
+({
+ // Please visit the URL below for more information:
+ // https://shd101wyy.github.io/markdown-preview-enhanced/#/extend-parser
+
+ onWillParseMarkdown: async function(markdown) {
+ return markdown;
+ },
+
+ onDidParseMarkdown: async function(html) {
+ return html;
+ },
+})
\ No newline at end of file
diff --git a/.vscode/ltex.dictionary.fr.txt b/.vscode/ltex.dictionary.fr.txt
new file mode 100644
index 0000000..d2e75cf
--- /dev/null
+++ b/.vscode/ltex.dictionary.fr.txt
@@ -0,0 +1 @@
+SGBD
diff --git a/src/cours/CIEL1/00-ap/questions_entretiens.md b/src/cours/CIEL1/00-ap/questions_entretiens.md
new file mode 100644
index 0000000..38272b4
--- /dev/null
+++ b/src/cours/CIEL1/00-ap/questions_entretiens.md
@@ -0,0 +1,39 @@
+# Entretiens de stage - Questions courantes
+
+#### Pouvez-vous vous présenter ?
+
+- Présentation personnelle
+- Présentation du parcours : études et expériences (pro, associatives, personnelles...)
+
+#### Que savez-vous de nous ?
+
+- Activité de l'entreprise
+- Quelques chiffres
+- Quelques actualités si elles sont publiques
+- Principaux concurrents
+
+#### Qu'est-ce qui a suscité votre intérêt pour cette offre ?
+
+Montrer que votre candidature est cohérente avec vos motivations, votre parcours ou vos objectifs
+
+#### Pourquoi souhaitez-vous venir chez nous ?
+
+Ici il s'agit de savoir ce qui vous intéresse chez cette entreprise : sa culture, sa notoriété, son activité, ses engagements...
+
+#### Pourquoi êtes vous le / la candidat.e idéal.e ?
+
+Montrer que vous savez où vous allez, et que vos expériences sont en adéquation avec l'offre.
+C'est le moment de rentrer dans les détails d'un ou plusieurs projets pour montrer les compétences techniques ou humaines que vous avez.
+
+#### Parlez d'une situation dont vous êtes fier / avez réussi à mener un projet / résolu un problème
+
+Montrer que vous avez déjà réussi des choses, et montrer comment vous avez réagi dans ces circonstances.
+Pas besoin d'un projet énorme : même une petite réalisation est déjà importante : il faut savoir vous valoriser, et mettre en avant vos compétences.
+
+#### Comment gérez-vous les remarques / critiques ?
+
+Montrer que vous avez conscience que les critiques et remarques sont nécessaires, et une occasion de s'améliorer.
+
+#### Où vous voyez vous dans 2 ans / 3 ans / 5 ans ? Quel est votre projet professionnel ?
+
+Montrer que vous avez un projet d'avenir, construit. Que vous savez où vous allez. Parlez objectifs professionnels ou poursuites d'études. Essayez de proposer quelque chose de réfléchi et ambitieux
diff --git a/src/cours/CIEL1/07-bases-de-donnees/bases-de-donnees.md b/src/cours/CIEL1/07-bases-de-donnees/bases-de-donnees.md
index f210215..b286880 100644
--- a/src/cours/CIEL1/07-bases-de-donnees/bases-de-donnees.md
+++ b/src/cours/CIEL1/07-bases-de-donnees/bases-de-donnees.md
@@ -47,4 +47,8 @@
## TD
- Requêtes (2 séances)
-- Analyse de schéma, amélioration de schéma, création de petits schémas
\ No newline at end of file
+- Analyse de schéma, amélioration de schéma, création de petits schémas
+
+
+# Ressources
+[Merise](https://memento-dev.fr/docs/merise/mld)
\ No newline at end of file
diff --git a/src/cours/CIEL1/07-bases-de-donnees/fiche-sequence.md b/src/cours/CIEL1/07-bases-de-donnees/fiche-sequence.md
new file mode 100644
index 0000000..8333be4
--- /dev/null
+++ b/src/cours/CIEL1/07-bases-de-donnees/fiche-sequence.md
@@ -0,0 +1,46 @@
+# Séquence 07 - Bases de données
+
+## Objectif
+Découvrir la conception et le requêtage de bases de données.
+
+## Pré-requis
+Ligne de commande sous Linux
+
+## Scénario pédagogique
+### Démarche
+
+Modélisation d'une base de données de bout en bout
+
+### Organisation
+#### S1 -
+- **Apport de connaissances** : Dictionnaire de données + MCD + MLD
+- **Activité** : Modélisation d'une base de données (MCD et MPD)
+- **Structuration de connaissances** : MPD et Langage + création
+- **Évaluation**
+ - C04 :
+ - Les spécifications du cahier des charges sont extraites
+ - C08 :
+ - Le travail est effectué selon les attentes exprimées de temps, de quantité ou de qualité
+
+#### S2 -
+- **Apport de connaissances** : Droits et création
+- **Activité** : Création + droits + requêtes
+- **Structuration de connaissances** : Requêtage simple
+- **Évaluation**
+ - C0
+ - C0
+
+#### S3 -
+- **Apport de connaissances** : -
+- **Activité** : Remédiation
+- **Structuration de connaissances** : Requêtage avancé (jointures)
+- **Évaluation**
+ - C0
+ - C0
+
+### Évaluation
+
+| Description | Formative | Sommative | Semaine |
+| ----------- | --------- | --------- | ------- |
+| Compétences | x | | 1 2 3 |
+| Devoir | | x | 4 |
\ No newline at end of file
diff --git a/src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.loo b/src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.loo
new file mode 100644
index 0000000..d45a909
Binary files /dev/null and b/src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.loo differ
diff --git a/src/cours/CIEL2/02-python-flask/python-flask.md b/src/cours/CIEL2/02-python-flask/python-flask.md
index be2ad42..a3a947f 100644
--- a/src/cours/CIEL2/02-python-flask/python-flask.md
+++ b/src/cours/CIEL2/02-python-flask/python-flask.md
@@ -85,10 +85,10 @@ Séquence intervenant en fin de deuxième année, peu avant les projets et néce
### C01 - COMMUNIQUER EN SITUATION PROFESSIONNELLE FRANÇAIS/ANGLAIS
-| Compétence | Connaissance | Niveau taxonomique |
-| ---------- | ------------------------------------------------------------------------------------------------ | ------------------ |
-| C01 | Communication écrite : cahiers des charges, dossiers de présentation | 3 |
-| C01 | Règles de présentation et typographie | 3 |
+| Compétence | Connaissance | Niveau taxonomique |
+| ---------- | -------------------------------------------------------------------- | ------------------ |
+| C01 | Communication écrite : cahiers des charges, dossiers de présentation | 3 |
+| C01 | Règles de présentation et typographie | 3 |
### C02 - ORGANISER UNE INTERVENTION
@@ -130,17 +130,17 @@ Séquence intervenant en fin de deuxième année, peu avant les projets et néce
### C08 - CODER
-| Compétence | Connaissance | Niveau taxonomique |
-| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
-| C08 | Langages de développement, description, création d’API et IDE associés | 4 |
-| C08 | Spécificités des environnements de développement, test, production | 2 |
-| C08 | Chaînes d’intégration et de déploiement | 2 |
-| C08 | Bases de données et environnements de traitement de données | 4 |
-| C08 | Programmation multitâche | 3 |
-| C08 | Outils de documentation | 3 |
+| Compétence | Connaissance | Niveau taxonomique |
+| ---------- | ---------------------------------------------------------------------- | ------------------ |
+| C08 | Langages de développement, description, création d’API et IDE associés | 4 |
+| C08 | Spécificités des environnements de développement, test, production | 2 |
+| C08 | Chaînes d’intégration et de déploiement | 2 |
+| C08 | Bases de données et environnements de traitement de données | 4 |
+| C08 | Programmation multitâche | 3 |
+| C08 | Outils de documentation | 3 |
### C09 - INSTALLER UN RÉSEAU INFORMATIQUE
-| Compétence | Connaissance | Niveau taxonomique |
-| ---------- | ----------------------------------------------------------------------------- | ------------------ |
-| C09 | Systèmes d’exploitation Windows, UNIX, virtualisation | 3 |
\ No newline at end of file
+| Compétence | Connaissance | Niveau taxonomique |
+| ---------- | ----------------------------------------------------- | ------------------ |
+| C09 | Systèmes d’exploitation Windows, UNIX, virtualisation | 3 |
\ No newline at end of file
diff --git a/src/cours/CIEL2/02-python-flask/tp/1_base_de_donnees.md b/src/cours/CIEL2/02-python-flask/tp/1_base_de_donnees.md
index 42be204..5db0cda 100644
--- a/src/cours/CIEL2/02-python-flask/tp/1_base_de_donnees.md
+++ b/src/cours/CIEL2/02-python-flask/tp/1_base_de_donnees.md
@@ -123,7 +123,7 @@ Ou si Gitlab est prêt, sous forme de dépôt git.
```admonish travail
- A l'aide du cahier des charges, définir le format qu'aura votre base de données.
- A l'aide du cahier des charges, définir les utilisateurs et leurs droits. Utilisez la [documentation](https://www.postgresql.org/docs/current/index.html) si nécessaire.
-- Écrire le script SQL permettant de créer votre base
+- Écrire le **script SQL** (à versionner) permettant de créer votre base (schéma + droits)
- L'appliquer pour le tester et le valider
- Compléter le document et faire un nouveau commit. Vous pouvez en faire plusieurs si vous le jugez nécessaire.
```
diff --git a/src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.md b/src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.md
new file mode 100644
index 0000000..f18c709
--- /dev/null
+++ b/src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.md
@@ -0,0 +1,155 @@
+---
+puppeteer:
+ format: A4
+ margin:
+ top: "0.5cm"
+ left: "0.5cm"
+ right: "0.5cm"
+ bottom: "0.5cm"
+---
+
+# Application Web - Activité 2 - Service d'observation des données d'utilisation de la machine
+
+## Objectifs
+
+- Développement d'une application Python qui collecte les métriques système
+- Communication entre une application Python et une base PostgreSQL
+- Développement d'une image Docker pour intégrer votre application dans le système
+
+## Évaluation
+
+- L'évaluation aura lieu
+ - au cours de l'activité sous forme orale
+ - à la fin de l'activité grâce aux livrables rendus
+
+### Compétences évaluées
+
+
+## Validation
+### Livrables
+
+Livrer le code et le dossier de conception à l'issue des 3 activités.
+
+### Résultats attendus
+
+- [ ] Un programme python qui observe les données du système et les enregistre en base de données
+- [ ] Une image docker contenant le programme : le service de monitoring
+- [ ] Une mise à jour du fichier docker-compose pour intégrer le service avec la base de données dans les bonnes pratiques de sécurité
+
+## Étapes
+
+### Étape 0 – Démarrage et configuration de l’environnement
+
+**Objectif :** Créer un environnement pour le développement de l'application de monitoring, et installation des dépendances.
+
+!!! example À faire
+ Nous repartons de l'environnement créé lors de l'activité précédente
+ - Créez un nouveau répertoire `monitoring` dans votre dépôt.
+ - Ajoutez-y un fichier [`requirements.txt`](https://pip.pypa.io/en/stable/reference/requirements-file-format/) listant les dépendances : `psutil==7.1.3` et `psycopg[binary]==3.2.12`.
+ - Créez un environnement virtuel Python (`venv`) et installez ces dépendances. (voir aide)
+ - Installer dépendances d'un `requirements.txt` : (dans un environnement virtuel activé) `pip install -r requirements.txt`
+ - À l’intérieur de `monitoring`, créez un sous-dossier `src` pour les sources Python, et dedans un fichier `app.py`
+
+!!! question Aide
+ - Un environnement virtuel Python (venv) est un espace isolé qui contient une installation indépendante de Python ainsi que ses propres bibliothèques, ce qui évite les conflits entre projets.
+ - Pour créer un venv, on utilise la commande : `python -m venv .venv`.
+ - Ensuite, on active cet environnement avec la commande `source .venv/bin/activate`
+ - Enfin, on peut installer des dépendances spécifiques au projet sans impacter l’installation globale de Python ni d’autres projets
+
+### Étape 1 – Script de collecte des données
+
+**Objectif :** Écrire la fonction qui collectera les données de fonctionnement du système
+
+!!! example À faire
+ - Écrivez une fonction `collect_metrics()` qui récupère les données de monitoring système.
+ - Cette fonction doit retourner un dictionnaire Python contenant les métriques nécessaires
+ - Utilisez la bibliothèque `psutil` et sa [documentation](https://psutil.readthedocs.io/en/latest/#) pour récupérer ces données
+ - Les données dont vous avez besoin sont celles demandées par le cahier des charges et pour lesquelles vous avez conçu votre base lors de l'activité précédente
+ - Écrivez une fonction main et appelez-la dans votre script. Elle devra appeler votre fonction `collect_metrics()`.
+ - Testez et validez votre code (en affichant, par exemple, le résultat obtenu)
+ - Complétez votre document de conception et faites un nouveau commit
+
+!!! note Dans le document de conception
+ Expliquez ce que vous avez réalisé dans cette partie
+
+### Étape 2 - Écriture en base de données
+
+**Objectif:** Écrire la fonction pour insérer les données récoltées en base de données
+
+!!! example À faire
+ - Récupérez les informations de connexion (hôte, base, utilisateur, mot de passe, port) [depuis les variables d’environnement](https://docs.python.org/3/library/os.html#os.environ) Python suivantes : `DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASSWORD`, `DB_PORT`.
+ - Utilisez `psycopg3.connect()` pour établir la connexion.
+ ```python
+ conn = psycopg3.connect(
+ host=DB_HOST,
+ dbname=DB_NAME,
+ user=DB_USER,
+ password=DB_PASSWORD,
+ port=DB_PORT
+ )
+ ```
+ - Écrire la fonction qui permettra d'insérer les données en base (voir aide). Cette fonction prendra en paramètre le dictionnaire créé dans l'étape précédente.
+ - Ajouter la nouvelle fonction à la fonction `main`.
+ - Pour tester votre programme localement (avec la base de données dans le conteneur)
+ - Lier le port 5432 du conteneur au port 5432 de la machine hôte dans le docker compose (et le relancer)
+ - Ajouter les variables d'environnement dans la commande permettant de lancer votre script, comme ci-dessous :
+ ```bash
+ DB_HOST=localhost DB_NAME=sysmon DB_USER=metricwriter DB_PASSWORD=metricwriter DB_PORT=5432 python app.py
+ ```
+ - Tester votre code et le valider
+ - Pour finir, il faut utiliser `time.sleep` et une boucle `while` infinie dans `main` pour recommencer l'opération chaque seconde.
+ - La période de mesure doit être configurable par variable d'environnement également. 1 seconde sera la valeur par défaut.
+ - Mettre à jour le document de conception et faire un nouveau commit
+
+!!! question Aide
+ Pour insérer des données dans une base Postgres en Python :
+ ```py
+ cur = conn.cursor() # Création d'un curseur à partir de la connexion : c'est l'objet qui va permettre d'exécuter les commandes SQL.
+ sql = "remplacer par requête" # Définition de la requête SQL d'insertion sous forme de chaîne de caractères. Ici, il faut remplacer cette chaîne par la requête INSERT adaptée.
+
+ cur.execute(sql, metrics) # Exécution de la requête SQL en passant les valeurs à insérer via le dictionnaire 'metrics'. Cela évite les injections SQL en utilisant des paramètres.
+
+ conn.commit() # Validation de la transaction : sans cet appel, les changements effectués ne seraient pas enregistrés définitivement dans la base.
+ cur.close() # Fermeture du curseur pour libérer les ressources utilisées par cet objet.
+ conn.close() # Fermeture de la connexion à la base, elle doit être fermée proprement pour éviter les fuites de connexions et libérer les ressources.
+ ```
+
+!!! warning Attention
+ Vous avez lié le port 5432 du conteneur postgres à celui de l'hôte. C'est utile en debug mais à proscrire en production, sauf si vous savez ce que vous faites. N'oubliez pas de retirer cette directive lorsque votre code est validé.
+
+!!! note Dans le document de conception
+ - Expliquez les différentes étapes pour se connecter et écrire dans une base de données PostgresSQL depuis un programme Python
+ - Le port 5432 est le port standard de postgreSQL. Quel est le risque si on le laisse mappé sur le port 5432 de la machine hôte ?
+ - Expliquer le fonctionnement actuel de votre programme
+
+### Étape 3 – Conteneurisation avec Docker
+
+!!! example À faire
+ - Créer un nouveau fichier appelé `Dockerfile` dans votre répertoire `monitoring`. Il servira à créer votre image docker pour le service de monitoring.
+ - Ce fichier sera basé sur l'image `python:3.13-slim-bookworm`
+ - Écrire le Dockerfile à l'aide des informations suivantes :
+ - S'inspirer de la [documentation de l'image Python](https://hub.docker.com/_/python/)
+ - Il faudra installer les dépendances du fichier `requirements.txt`
+ - Il faut ajouter les fichiers du répertoire `src`
+ - Votre commande sera `python app.py`
+ - Construire l'image pour valider sa compilation : `docker build -t monitoring-service monitoring`
+
+!!! note Dans le document de conception
+ - Expliquez l'intérêt d'utiliser `python:3.13-slim-bookworm` par rapport aux autres tags de l'image python (pourquoi `slim`, pourquoi `bookworm` ?)
+ - Pourquoi est-il inutile de créer un environnement virtuel dans notre image ?
+ - Expliquez les différentes étapes de votre Dockerfile et vos choix
+
+### Étape 4 – Intégration dans un environnement multi-conteneurs
+
+!!! example À faire
+ - Compléter le fichier `docker-compose.yml` pour y ajouter le service de monitoring. Compléter les informations :
+ - image : monitoring-service
+ - réseau : voir cahier des charges (architecture). Attention à le déclarer et à l'ajouter aussi au service postgres
+ - environment : variables de connexion à la base de données
+ - Démarrer votre stack et vérifier que tout fonctionne
+
+!!! note Dans le document de conception
+ - Pourquoi a-t-on choisi d'avoir un réseau distinct pour accéder à la base de données ?
+ - Expliquez ce que vous avez réalisé dans cette partie, et dans cette activité.
+ - Donnez les difficultés rencontrées et la manière dont vous les avez résolues.
+
diff --git a/src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.pdf b/src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.pdf
new file mode 100644
index 0000000..f0e06b5
Binary files /dev/null and b/src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.pdf differ
diff --git a/src/slides/B1/db/01_modèle_de_données.md b/src/slides/B1/db/01_modèle_de_données.md
new file mode 100644
index 0000000..03dadb3
--- /dev/null
+++ b/src/slides/B1/db/01_modèle_de_données.md
@@ -0,0 +1,451 @@
+---
+marp: true
+theme: catppuccin
+paginate: true
+size: 4:3
+transition: coverflow
+footer: ''
+math: katex
+lang: "fr"
+---
+
+
+
+# Bases de données - Modélisation
+
+---
+
+## Modélisation
+
+Qu'est-ce que la modélisation ?
+- **Analyse** et **conception** des informations
+- **Représentation** de la structure des informations
+
+Objectif :
+- Identifier les **éléments** (entités) logiques
+- Identifier et tracer les **dépendances** (relations) logiques entre les entités
+
+C'est une représentation **abstraite** : on ignore les données individuelles elles-mêmes au profit de la structure
+
+---
+
+### Méthode Merise
+
+- Méthodologie de modélisation française assez ancienne (années 70/80)
+- Mais éprouvée et toujours d'actualité
+- Propose plusieurs étapes sous forme de schémas
+ - Dictionnaire de données
+ - **MCD** : Modèle Conceptuel de Données
+ - **MLD** : Modèle Logique de Données
+ - **MPD** : Modèle Physique de Données
+---
+
+#### Dictionnaire de données
+
+- Document utilisé pour lister les informations à stocker en base
+- Obtenu suite à l'analyse des besoins du client
+- Simple et compréhensible de tout le monde
+
+---
+
+#### MCD - Modèle Conceptuel de Données
+
+- Schéma utilisé pour représenter les données extraites du dictionnaire
+- Regroupe par **entités** et montre les **associations** (relations)
+- Reste compréhensible de tout le monde (pas de détails techniques)
+- Important car la suite dépend de lui
+
+---
+
+#### MLD - Modèle Logique de Données
+
+- Schéma qui découle directement du MCD
+- Ajoute des détails techniques :
+ - Découpage en **tables** et **colonnes**
+ - **Clés**
+ - **Tables de jointure**
+
+---
+
+#### MPD - Modèle Physique de Données
+
+- Schéma qui représente les données de manière physique
+ - Tient compte des spécificités du **SGBD**
+ - Ajoute les **types** de données, les **index**, les **contraintes**...
+
+- SGBD = Système de Gestion de Bases de Données
+ - Logiciel dédié à la gestion et manipulation des données
+
+---
+
+## Merise en détails
+
+---
+
+
+
+
+### Demande du client
+
+Une loueur de véhicules souhaite construire une base de données pour
+- Enregistrer les véhicules que ses client peuvent louer et les dates de location.
+- Il veut pouvoir les joindre facilement, donc il voudra leurs noms et prénoms, ainsi qu'un numéro de téléphone.
+- La loi l'oblige également à stocker le numéro du permis de conduire des conducteurs et conductrices, en cas d'infraction du code de la route.
+- Par ailleurs, il souhaite savoir quel est le kilométrage des véhicules en sa possession, et leur prix journalier
+- Pour finir, il veut stocker certaines informations sur les modèles qu'il a en stock pour aider les clients à choisir un véhicule (marque et modèle, nombre de places, type de véhicule, volume pour les utilitaires...)
+
+---
+
+### Le dictionnaire de données
+
+- Document qui contient les informations sur les données à stocker
+- Tiré des informations données par le client
+- À valider avec le client -> il doit le comprendre
+- Informations du dictionnaire de données
+ - Nom
+ - Format
+ - Longueur
+ - Contraintes
+ - Document (le "groupe" de données)
+
+---
+
+#### Les formats
+
+- **Alphabétique**
+ - A-Z uniquement
+- **Alphanumérique**
+ - A-Z et 0-9, éventuellement caractères spéciaux
+- **Numérique**
+ - Nombres entiers, flottants etc..
+- **Date**
+- **Logique**
+ - Vrai/Faux
+
+---
+
+#### Les contraintes
+
+Ce sont les contraintes du client
+- Données **obligatoires**
+- Données **uniques**
+- Valeurs par défaut
+- Etc.
+
+---
+
+
+
+#### Dans notre exemple
+
+**Document** : Conducteur
+
+| Nom | Format | Longueur | Contrainte |
+| ---------------------------- | -------------- | -------- | ------------------- |
+| Nom | Alphabétique | 30 | Obligatoire |
+| Prénom | Alphabétique | 30 | Obligatoire |
+| Numéro de téléphone | Alphanumérique | 20 | Obligatoire |
+| Numéro de permis de conduire | Alphanumérique | 50 | Obligatoire, Unique |
+
+---
+
+**Document** : Véhicule
+
+| Nom | Format | Longueur | Contrainte |
+| --------------- | -------------- | -------- | ------------------- |
+| Immatriculation | Alphanumérique | 30 | Obligatoire, Unique |
+| Kilométrage | Numérique | - | Obligatoire |
+| Prix journalier | Numérique | - | Obligatoire |
+
+---
+
+**Document** : Modèle
+
+| Nom | Format | Longueur | Contrainte |
+| ---------------- | -------------- | -------- | -------------------------------- |
+| Marque | Alphanumérique | 30 | Obligatoire |
+| Modèle | Alphanumérique | 30 | Obligatoire |
+| Nombre de places | Numérique | - | Obligatoire |
+| Volume | Numérique | - | Obligatoire pour les utilitaires |
+| Type de véhicule | Alphabétique | 30 | |
+
+L'association marque-modèle est unique (pour simplifier l'exemple)
+
+---
+
+**Document** : Location
+
+| Nom | Format | Longueur | Contrainte |
+| ------------- | ------ | -------- | ----------- |
+| Date de début | Date | - | Obligatoire |
+| Date de fin | Date | - | Obligatoire |
+
+---
+
+### MCD - Le Modèle Conceptuel de Données
+
+- Représenter les données récupérées dans le dictionnaire
+- Doit rester compréhensible par le client
+
+---
+
+#### Le diagramme
+
+
+
+---
+
+#### Vocabulaire
+
+- Le diagramme possède des **entités**
+ - carrés jaunes
+- qui sont composées d'**attributs**
+ - certains attributs peuvent être **uniques**
+ - écrit en gras
+ - leur valeur ne peut se retrouver qu'une seule fois
+ - certains attributs peuvent être **discriminants**
+ - écrit en gras et souligné
+ - ils **identifient** de manière unique une occurrence
+
+---
+
+- Le diagramme possède des **associations**
+ - Bulle ovale
+ - Représentée par un **verbe à l'infinitif**
+- Les associations ont une **cardinalité**
+ - Nombre d'occurrences d'une entité par rapport à une autre
+
+---
+
+#### Les cardinalités
+
+- Élément essentiel du MCD
+- Définit le nombre d'occurrences d'une entité par rapport à une autre (l'entité est associée à X occurrences)
+- Cardinalité est définie par deux valeurs :
+ - **Minimum** d'occurrences
+ - **Maximum** d'occurrences
+ - On l'écrit sous forme : **Min,Max**
+
+---
+
+- Valeurs courantes :
+ - **0** : signifie "0 occurrence"
+ - **1** : signifie "1 occurrence"
+ - **N** : signifie "n'importe quel nombre d'occurrences"
+- Cardinalités courantes : (l'entité est associée à)
+ - **0,1** : Soit aucune soit une occurrence
+ - **1,1** : Exactement 1 occurrence
+ - **0,n** : N'importe quel nombre d'occurrences
+ - **1,n** : Au moins une occurrence
+
+---
+
+#### Associations réflexives
+
+- Certaines entités peuvent être reliées à elles-mêmes par une association
+ - Ce sont des **associations réflexives**
+- **Exemple** : Genres de livres
+ - Un genre peut regouper des sous-genres plus précis
+ - On crée une association réflexive entre l'entité "Genre" et elle-même
+ - Crée une hiérarchie de genres
+
+---
+
+#### Héritage
+
+**L'héritage** va nous permettre de rassembler des propriétés identiques dans une entité commune (appelée **entitée générique**) et créer des entités plus spécialisées appelées **entitées spécialisées**
+
+
+
+---
+
+#### Dans notre exemple
+
+
+
+---
+
+
+#### Choix du discriminant
+
+- Attributs peuvent identifier de manière unique un enregistrement
+ - **Discriminant naturel**
+ - Attribut appartenant à l'objet qui identifie de manière unique
+ - ex: numéro de sécurité sociale
+ - **Discriminant synthétique**
+ - Attribut créé de toutes pièces pour identifier l'objet
+
+- Préférer un discriminant synthétique
+ - Facilite la maintenance
+ - Facilite les changements plus tard
+ - Réduit le nombre de modifications quand on change le discriminant
+
+---
+
+
+
+---
+
+### MLD - Le Modèle Logique de Données
+
+- Le MLD est la suite logique et directe du MCD
+- Il en découle directement par l'application de règles simples
+- Transforme le MCD en modèle qui peut être implémenté dans un SGBD
+- Ajoute des détails techniques
+
+---
+
+#### Convertir les entités et attributs
+
+- Les **entités** deviennent des **tables**
+- Les **attributs discriminants** (gras soulignés) deviennent des **clés primaires**
+ - Clé primaire : donnée (composée d'une ou plusieurs colonnes) qui permet d'identifier de manière unique un enregistrement dans une table
+- Les **attributs uniques** (gras) deviennent des **colonnes uniques**
+- Les autres **attributs** deviennent des **colonnes**
+
+---
+
+#### Convertir les associations
+
+Il faut se baser sur la cardinalité de chaque association.
+
+Cas possibles (x vaut 0 ou 1) :
+- (x, n) - (x, 1) : Many to One / One to Many
+- (x, n) - (x, n) : Many to Many
+- Associations réflexives
+
+---
+
+##### Many to One - (x, n) - (x, 1)
+
+!!! success La règle
+- On ajoute une **clé étrangère** dans la table du côté de la relation **One** (x, 1)
+!!!
+
+- La clé étrangère est la clé primaire de la table côté **Many**
+- L'héritage entre dans ce cas :
+ - On considère qu'une entité spécialisée peut spécialiser exactement 1 entité générique (1,1)
+ - Une entité générique peut être spécialisée par n entités spécialisées (0,n)
+ - On est dans une relation (0,n) - (1,1)
+
+---
+
+###### Exemple Many to One
+
+| MCD | MLD |
+| -------------------------------------------- | ---------------------------------------------- |
+|  |  |
+
+---
+
+###### Exemple héritage
+
+| MCD | MLD |
+| ---------------------------------------------------- | ---------------------------------------------------- |
+|  |  |
+---
+
+##### Many to Many
+
+- Dans ce cas impossible de stocker une clé étrangère dans l'une des deux tables : il faudrait pouvoir stocker des listes de clés.
+
+!!! success La règle
+On crée une **table de jointure** qui va relier les deux tables
+!!!
+
+- **Nom** : composé des deux tables qu'elle relie, avec le nom de l'association netre deux : `entity1_action_entity2`
+- **Colonnes** : Clés étrangères des deux tables qu'elle relie + autres colonnes de la relation
+
+---
+
+###### Exemple
+
+
+
+
+---
+
+##### Associations réflexives
+
+Dans ce cas on applique exactement les mêmes règles :
+- Si la relation est **Many to One** : on ajoute une **clé étrangère**
+ - qui sera la clé primaire de la même table
+- Si la relation est **Many to Many** : on ajoute une **table de jointure**
+ - qui contiendra des clés primaires de la table
+---
+###### Exemple association réflexive Many to One
+
+
+
+---
+###### Exemple association réflexive Many to Many
+
+
+
+---
+
+##### Associations avec plus de deux tables
+
+!!! success La règle
+On crée une **table de jointure** qui va relier toutes les tables
+!!!
+
+| MCD | MLD |
+| ------------------------------------------- | ----------------------------------------- |
+|||
+
+---
+
+##### Cas particuliers
+
+- (0, 1) - (1, 1) : On utilisera une clé étrangère
+ - comme relation Many to One où n = 1
+- (1, 1) - (1, 1) : Ce type de relation n'a pas de sens
+ - Si cela arrive c'est que vous avez découpé en deux entités ce qui aurait dû n'en faire qu'une
+
+---
+
+#### Dans notre exemple
+
+| MCD | MLD |
+| ------------------------------------------- | ----------------------------------------- |
+|  |  |
+
+---
+
+## MPD - Modèle Physique de données
\ No newline at end of file
diff --git a/src/slides/B1/db/images/ex-mcd2.png b/src/slides/B1/db/images/ex-mcd2.png
new file mode 100644
index 0000000..977a209
Binary files /dev/null and b/src/slides/B1/db/images/ex-mcd2.png differ
diff --git a/src/slides/B1/db/images/ex-mld.png b/src/slides/B1/db/images/ex-mld.png
new file mode 100644
index 0000000..05b8c2f
Binary files /dev/null and b/src/slides/B1/db/images/ex-mld.png differ
diff --git a/src/slides/B1/db/images/heritage-mcd.png b/src/slides/B1/db/images/heritage-mcd.png
new file mode 100644
index 0000000..78305d4
Binary files /dev/null and b/src/slides/B1/db/images/heritage-mcd.png differ
diff --git a/src/slides/B1/db/images/heritage-mld.png b/src/slides/B1/db/images/heritage-mld.png
new file mode 100644
index 0000000..db1c2fb
Binary files /dev/null and b/src/slides/B1/db/images/heritage-mld.png differ
diff --git a/src/slides/B1/db/images/heritage.png b/src/slides/B1/db/images/heritage.png
new file mode 100644
index 0000000..33207ac
Binary files /dev/null and b/src/slides/B1/db/images/heritage.png differ
diff --git a/src/slides/B1/db/images/many-to-one-mcd.png b/src/slides/B1/db/images/many-to-one-mcd.png
new file mode 100644
index 0000000..e383a8a
Binary files /dev/null and b/src/slides/B1/db/images/many-to-one-mcd.png differ
diff --git a/src/slides/B1/db/images/many-to-one-mld.png b/src/slides/B1/db/images/many-to-one-mld.png
new file mode 100644
index 0000000..1356c96
Binary files /dev/null and b/src/slides/B1/db/images/many-to-one-mld.png differ
diff --git a/src/slides/B1/db/images/manytomany-mcd.png b/src/slides/B1/db/images/manytomany-mcd.png
new file mode 100644
index 0000000..ddbf6fd
Binary files /dev/null and b/src/slides/B1/db/images/manytomany-mcd.png differ
diff --git a/src/slides/B1/db/images/manytomany-mld.png b/src/slides/B1/db/images/manytomany-mld.png
new file mode 100644
index 0000000..f2bfb5f
Binary files /dev/null and b/src/slides/B1/db/images/manytomany-mld.png differ
diff --git a/src/slides/B1/db/images/mcd-base.png b/src/slides/B1/db/images/mcd-base.png
new file mode 100644
index 0000000..c511521
Binary files /dev/null and b/src/slides/B1/db/images/mcd-base.png differ
diff --git a/src/slides/B1/db/images/mcd-id.png b/src/slides/B1/db/images/mcd-id.png
new file mode 100644
index 0000000..66c405d
Binary files /dev/null and b/src/slides/B1/db/images/mcd-id.png differ
diff --git a/src/slides/B1/db/images/mcd.png b/src/slides/B1/db/images/mcd.png
new file mode 100644
index 0000000..0b7a366
Binary files /dev/null and b/src/slides/B1/db/images/mcd.png differ
diff --git a/src/slides/B1/db/images/reflexive-many-mcd.png b/src/slides/B1/db/images/reflexive-many-mcd.png
new file mode 100644
index 0000000..5594f59
Binary files /dev/null and b/src/slides/B1/db/images/reflexive-many-mcd.png differ
diff --git a/src/slides/B1/db/images/reflexive-many-mld.png b/src/slides/B1/db/images/reflexive-many-mld.png
new file mode 100644
index 0000000..86d2648
Binary files /dev/null and b/src/slides/B1/db/images/reflexive-many-mld.png differ
diff --git a/src/slides/B1/db/images/reflexive-mcd.png b/src/slides/B1/db/images/reflexive-mcd.png
new file mode 100644
index 0000000..b03f10d
Binary files /dev/null and b/src/slides/B1/db/images/reflexive-mcd.png differ
diff --git a/src/slides/B1/db/images/reflexive-mld.png b/src/slides/B1/db/images/reflexive-mld.png
new file mode 100644
index 0000000..edb068d
Binary files /dev/null and b/src/slides/B1/db/images/reflexive-mld.png differ
diff --git a/src/slides/B1/db/images/ternaire-mcd.png b/src/slides/B1/db/images/ternaire-mcd.png
new file mode 100644
index 0000000..4f8a674
Binary files /dev/null and b/src/slides/B1/db/images/ternaire-mcd.png differ
diff --git a/src/slides/B1/db/images/ternaire-mld.png b/src/slides/B1/db/images/ternaire-mld.png
new file mode 100644
index 0000000..295a794
Binary files /dev/null and b/src/slides/B1/db/images/ternaire-mld.png differ