Ajoute le cours bases de données

This commit is contained in:
Alexis Fourmaux 2025-11-26 23:43:54 +01:00
parent 8977622d36
commit d0221e2056
23 changed files with 503 additions and 1 deletions

1
.vscode/ltex.dictionary.fr.txt vendored Normal file
View file

@ -0,0 +1 @@
SGBD

View file

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

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