Compare commits

...

4 commits

31 changed files with 746 additions and 17 deletions

15
.crossnote/config.js Normal file
View file

@ -0,0 +1,15 @@
({
katexConfig: {
"macros": {}
},
mathjaxConfig: {
"tex": {},
"options": {},
"loader": {}
},
mermaidConfig: {
"startOnLoad": false
},
})

6
.crossnote/head.html Normal file
View 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
View 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
View file

@ -0,0 +1 @@
SGBD

View 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

View file

@ -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)

View 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 |

Binary file not shown.

View 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 dAPI et IDE associés | 4 |
| C08 | Spécificités des environnements de développement, test, production | 2 |
| C08 | Chaînes dinté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 dexploitation Windows, UNIX, virtualisation | 3 |

View file

@ -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.
```

View 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 lenvironnement
**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`
- À linté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 linstallation globale de Python ni dautres 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 denvironnement](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.

View 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
![MCD base](images/mcd-base.png)
---
#### 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**
![heritage](images/heritage.png)
---
#### Dans notre exemple
![mcd height:600px](images/mcd.png)
---
<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
---
![mcd height:600px](images/mcd-id.png)
---
### 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 |
| -------------------------------------------- | ---------------------------------------------- |
| ![manytoone_mcd](images/many-to-one-mcd.png) | ![many to one mld](images/many-to-one-mld.png) |
---
###### Exemple héritage
| MCD | MLD |
| ---------------------------------------------------- | ---------------------------------------------------- |
| ![heritage mcd width:400px](images/heritage-mcd.png) | ![heritage mld width:400px](images/heritage-mld.png) |
---
##### 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
![Many to Many width:800px](images/manytomany-mcd.png)
![Many to Many MLD width:800px](images/manytomany-mld.png)
---
##### 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
![reflexive-mcd](images/reflexive-mcd.png)
![reflexive-mld](images/reflexive-mld.png)
---
###### Exemple association réflexive Many to Many
![reflexive-many-mcd](images/reflexive-many-mcd.png)
![relflexive-many-mld](images/reflexive-many-mld.png)
---
##### 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 |
| ------------------------------------------- | ----------------------------------------- |
|![ternaire-mcd width:400px](images/ternaire-mcd.png)|![ternaire-mld width:400px](images/ternaire-mld.png)|
---
##### 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 |
| ------------------------------------------- | ----------------------------------------- |
| ![ex-mcd2 height:550px](images/ex-mcd2.png) | ![ex-mld height:550px](images/ex-mld.png) |
---
## MPD - Modèle Physique de données

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB