Aller au contenu
M06 · A. Concevoir une base de données

Passer du MCD au MLD normalisé

Appliquer les règles de passage pour transformer entités et associations en tables, avec clés primaires et clés étrangères, puis écrire le script SQL.

1Situer

Le MCD de Souk Atlas est validé par la présidente. Mais MySQL ne connaît ni les « entités » ni les « associations » : il ne connaît que des tables avec des colonnes. Le Modèle Logique de Données (MLD) fait le pont. Avec trois règles simples, le dessin devient une liste de tables qu'on peut créer en SQL.

2Comprendre

Du MCD au MLD : les règles de passage
MLD CLIENTid_client, nom COMMANDEid_commande, date PRODUITid_produit, prix + #id_client 1,1 → clé étrangère du côté 1,1 LIGNE_COMMANDE n,n → nouvelle table #id_commande, #id_produit quantite, prix_unitaire

Chaque entité devient une table ; son identifiant devient la clé primaire.

1 / 4

Le Modèle Logique de Données

Les règles de passage

Dans le MCDDans le MLD
Une entitéUne table ; l’identifiant devient la clé primaire
Association avec 1,1 (ou 0,1) d’un côtéLa table du côté 1,1 reçoit une clé étrangère vers l’autre
Association n,n (0,n ou 1,n des deux côtés)Une nouvelle table ; sa clé primaire = les deux clés étrangères ; elle garde les attributs de l’association

Vérifier et écrire le script SQL

Avant d’écrire le SQL, on vérifie :

  1. chaque table a une clé primaire ;
  2. chaque clé étrangère pointe vers une clé primaire qui existe ;
  3. les tables sont en 3FN (aucune donnée recopiée inutilement).

On crée ensuite les tables dans le bon ordre : d’abord celles qui ne dépendent de personne (VILLE, CATEGORIE), puis celles qui ont des clés étrangères vers elles.

Exemple simple

La flèche du 1,1

Une commande a exactement un client : on écrit le numéro du client sur la commande, comme on écrit le nom de l'élève sur sa copie. Le numéro du client devient une clé étrangère dans COMMANDE.

COMMANDE(id_commande, date_commande, #id_client)
Exemple simple

Le n,n devient une table

Un produit est dans plusieurs commandes, une commande a plusieurs produits : on ne peut pas mettre une seule clé étrangère d'un côté. On crée une table au milieu, comme le registre qui note qui a emprunté quel livre.

LIGNE_COMMANDE(#id_commande, #id_produit, quantite)

3Manipuler

Voici le MLD de la bibliothèque du quartier : ADHERENT(id_adherent, nom), LIVRE(id_livre, titre), EMPRUNT(#id_adherent, #id_livre, date_emprunt). La table ADHERENT est déjà écrite. Créez les deux autres, puis exécutez.
Pas à pas dans le lab ↗ La base de départ se crée dans votre navigateur (moteur SQL d’environ 700 Ko, chargé une fois).
Résultat

Le résultat de chaque requête s'affichera ici.

Consignes 0 / 4

  1. La table livre existe avec une clé primaire id_livre
  2. La table emprunt a une clé primaire composée de deux colonnes
  3. emprunt.id_adherent est une clé étrangère vers adherent
  4. emprunt.id_livre est une clé étrangère vers livre

4Pratiquer

Exercice 1 · Appliquer les règles

MCD : STAGIAIRE 1,1 —(APPARTENIR)— 0,n GROUPE ; STAGIAIRE 0,n —(PASSER : note)— 0,n EXAMEN. Écrivez le MLD.

Voir le corrigé
GROUPE   (id_groupe, nom_groupe)
STAGIAIRE(id_stagiaire, nom, #id_groupe)
EXAMEN   (id_examen, intitule, date_examen)
PASSER   (#id_stagiaire, #id_examen, note)

Exercice 2 · Du MLD au SQL

Écrivez le CREATE TABLE de STAGIAIRE(id_stagiaire, nom, #id_groupe).

Voir le corrigé
CREATE TABLE stagiaire (
  id_stagiaire INT AUTO_INCREMENT PRIMARY KEY,
  nom VARCHAR(60) NOT NULL,
  id_groupe INT NOT NULL,
  FOREIGN KEY (id_groupe) REFERENCES groupe(id_groupe)
);

Exercice 3 · Le 0,1

CLIENT 0,1 —(HABITER)— 0,n VILLE. Où va la clé étrangère ? Peut-elle être vide ?

Voir le corrigé
Dans CLIENT : CLIENT(id_client, nom, #id_ville).
Le minimum 0 veut dire « pas obligatoire » :
id_ville peut être NULL (pas de NOT NULL).

5Vérifier

1. Une association avec 1,1 d'un côté et 0,n de l'autre devient...
2. Une association n,n (plusieurs des deux côtés) devient...
3. Dans un MLD, le symbole # devant une colonne signifie...