Compare commits
4 commits
8977622d36
...
f0cf67e015
| Author | SHA1 | Date | |
|---|---|---|---|
| f0cf67e015 | |||
| 8f130d6535 | |||
| 292da982f2 | |||
| d0221e2056 |
15
.crossnote/config.js
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
({
|
||||
katexConfig: {
|
||||
"macros": {}
|
||||
},
|
||||
|
||||
mathjaxConfig: {
|
||||
"tex": {},
|
||||
"options": {},
|
||||
"loader": {}
|
||||
},
|
||||
|
||||
mermaidConfig: {
|
||||
"startOnLoad": false
|
||||
},
|
||||
})
|
||||
6
.crossnote/head.html
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<!-- The content below will be included at the end of the <head> element. -->
|
||||
<script type="text/javascript">
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
// your code here
|
||||
});
|
||||
</script>
|
||||
12
.crossnote/parser.js
Normal file
|
|
@ -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;
|
||||
},
|
||||
})
|
||||
1
.vscode/ltex.dictionary.fr.txt
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
SGBD
|
||||
39
src/cours/CIEL1/00-ap/questions_entretiens.md
Normal file
|
|
@ -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
|
||||
|
|
@ -48,3 +48,7 @@
|
|||
## TD
|
||||
- Requêtes (2 séances)
|
||||
- Analyse de schéma, amélioration de schéma, création de petits schémas
|
||||
|
||||
|
||||
# Ressources
|
||||
[Merise](https://memento-dev.fr/docs/merise/mld)
|
||||
46
src/cours/CIEL1/07-bases-de-donnees/fiche-sequence.md
Normal file
|
|
@ -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 |
|
||||
BIN
src/cours/CIEL1/07-bases-de-donnees/loueur_mcd.loo
Normal file
|
|
@ -86,7 +86,7 @@ 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 |
|
||||
|
||||
|
|
@ -131,7 +131,7 @@ 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 |
|
||||
|
|
@ -142,5 +142,5 @@ Séquence intervenant en fin de deuxième année, peu avant les projets et néce
|
|||
### C09 - INSTALLER UN RÉSEAU INFORMATIQUE
|
||||
|
||||
| Compétence | Connaissance | Niveau taxonomique |
|
||||
| ---------- | ----------------------------------------------------------------------------- | ------------------ |
|
||||
| ---------- | ----------------------------------------------------- | ------------------ |
|
||||
| C09 | Systèmes d’exploitation Windows, UNIX, virtualisation | 3 |
|
||||
|
|
@ -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.
|
||||
```
|
||||
|
|
|
|||
155
src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.md
Normal file
|
|
@ -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.
|
||||
|
||||
BIN
src/cours/CIEL2/02-python-flask/tp/2_monitoring_app.pdf
Normal file
451
src/slides/B1/db/01_modèle_de_données.md
Normal file
|
|
@ -0,0 +1,451 @@
|
|||
---
|
||||
marp: true
|
||||
theme: catppuccin
|
||||
paginate: true
|
||||
size: 4:3
|
||||
transition: coverflow
|
||||
footer: ''
|
||||
math: katex
|
||||
lang: "fr"
|
||||
---
|
||||
|
||||
<style>
|
||||
section {
|
||||
font-size: 28px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
|
||||
# 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
|
||||
|
||||
---
|
||||
|
||||
<style scoped>
|
||||
section {
|
||||
font-size: 22px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
### 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.
|
||||
|
||||
---
|
||||
|
||||
<style scoped>
|
||||
table {
|
||||
font-size: 22px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
|
||||
#### 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 |
|
||||
|
||||
---
|
||||
<style scoped>
|
||||
table {
|
||||
font-size: 22px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
**Document** : Véhicule
|
||||
|
||||
| Nom | Format | Longueur | Contrainte |
|
||||
| --------------- | -------------- | -------- | ------------------- |
|
||||
| Immatriculation | Alphanumérique | 30 | Obligatoire, Unique |
|
||||
| Kilométrage | Numérique | - | Obligatoire |
|
||||
| Prix journalier | Numérique | - | Obligatoire |
|
||||
|
||||
---
|
||||
<style scoped>
|
||||
table {
|
||||
font-size: 22px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
**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)
|
||||
|
||||
---
|
||||
<style scoped>
|
||||
table {
|
||||
font-size: 22px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
**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
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
<style scoped>
|
||||
section {
|
||||
font-size: 22px;
|
||||
text-align: left
|
||||
}
|
||||
</style>
|
||||
#### 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
|
||||
BIN
src/slides/B1/db/images/ex-mcd2.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
src/slides/B1/db/images/ex-mld.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
src/slides/B1/db/images/heritage-mcd.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/slides/B1/db/images/heritage-mld.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
src/slides/B1/db/images/heritage.png
Normal file
|
After Width: | Height: | Size: 7 KiB |
BIN
src/slides/B1/db/images/many-to-one-mcd.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
src/slides/B1/db/images/many-to-one-mld.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/slides/B1/db/images/manytomany-mcd.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/slides/B1/db/images/manytomany-mld.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/slides/B1/db/images/mcd-base.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
src/slides/B1/db/images/mcd-id.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
src/slides/B1/db/images/mcd.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/slides/B1/db/images/reflexive-many-mcd.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
src/slides/B1/db/images/reflexive-many-mld.png
Normal file
|
After Width: | Height: | Size: 5 KiB |
BIN
src/slides/B1/db/images/reflexive-mcd.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
src/slides/B1/db/images/reflexive-mld.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
src/slides/B1/db/images/ternaire-mcd.png
Normal file
|
After Width: | Height: | Size: 7 KiB |
BIN
src/slides/B1/db/images/ternaire-mld.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |