Ajoute le cours bases de données
1
.vscode/ltex.dictionary.fr.txt
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
SGBD
|
||||
|
|
@ -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)
|
||||
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
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 |