1 Rappels
2 Règles de transposition du MCD au MR
3 Formalisme, du MCD au modèle physique
4 Exemples
5 Exercices
6 Cas d'une spécialisation Merise "étendu" (bienvenue en Deuxième année)
7 Conclusion
>>> Retour page précédente

Le MCD exprime l'aspect conceptuel d'un système d'information.
Le Modèle Relationnel (MR) le niveau logique ou organique (dans le sens organisation).
Il contient le Séma Relationnel des Données : SRD (appelé courament MR, par abus de langage)

Pour créer le MR il existe différentes techniques :
Passer du MCD au MR avec les règles de transposition,
Utiliser les dépendances fonctionnelles (tableau ou graphe de DF) pour créer le MR

Retour index
1 Rappels

1.1 Graphe des DF

Les dépendances fonctionnelles expriment la dépendance des données entre-elles.
(Cf. document : cgo121.html : DD et GDF)
Le graphe est représenté sous la forme :
Attribut A -> attribut B
- l'attribut A défini l'attribut B
- l'attribut B dépend de l'attribut A

Exemple de DF (graphe) :
code article---->désignation (de l'article)
 ---->poids (de l'article)
 ---->type article (code du ...)---->libéllé (du type article)

1.2 SCD : Schéma conceptuel des données ou schéma entité/association (MEA)

Le schéma conceptuel représente, sous forme graphique, la totalité des données gérées et une partie des règles de gestion
(Cf. documents : cgo122.html : le MCD et cgo123.html : du GDF au MCD)
Soit l'entité Article avec les propriétés comme ci-contre, issue des DF précédentes :

1.3 SRD : Schéma Relationnel des Données

Le schéma relationnel des données expose les données et la façon dont elles sont en reliées, sous forme de relations.
A la fin de cette étape, on complète le DD en précisant le type et la longeur de chaque donnée.
Soit le SRD suivant, issu du MCD précédent
(avec ajout d'une relation fournir : un article est fourni par un ou plusieurs fournisseurs)

Relation Article(code article, désignation, poids, type article)
clé primaire : code article
clé étrangère : type article référence type article dans TypeArticle

Relation Fournir(code article, code fournisseur, prix d'achat)
clé primaire : code article et code fournisseur
clé étrangère : code article référence code article dans Article
clé étrangère : code fournisseur référence code fournisseur dans Fournisseur

1.4 MPD : modèle physique des données

Le SPD expose clairement comment sont implémentées les tables de la base de données et prépare le travail du codeur pour effectuer les requêtes SQL ou l'écriture des tables dans le SGBD.

Remarquez que nous sommes encore en langue française, mais que nous aurions pu écrire directement les requêtes de création de table. Cependant, tous les SGBDR ne nécessitent pas le SQL pour créer les tables et ont des assistants performants (MS-Access).
Article(
codeArt alphaNum 15 clé primaire,
DescArt alphaNum 30,
PoidsArt numérique 15,5 ,
TypeArt alphaNum 15 référence codeType dans Type
)
Fournir (
codeArt alphaNum 15 référence refArt dans Article,
codeFou numérique 9,0 référence numFou dans Fournisseur,
prixAchat numérique 15,5
clé primaire codeArt, codeFou
)

1.6 Identifier chaque ligne : la clé primaire

Dans une entité, nous avons une propriété qui identifie de façon unique chaque occurrence de l'entité.
Cet identifiant est transformé en attribut (champ ou "colonne" dans la table physiquement implantée dans la base).
Cet attribut joue alors un rôle particulier, il identifie chaque tuple (enregistrement ou ligne) dans la relation.
On l'appelle clé primaire.

Si la clé primaire est composée de plusieurs attributs, c'est l'ensemble qui doit être unique.
Exemple :
soit la relation suivante : ligneDeCommande(noCommande, codeArticle, quantitéCommandée)
avec (noCommande, codeArticle) comme clé primaire.
un extrait de la table résultante pourrait être celui-ci :
noCommandecodeArticlequantitéCommandée
c01A01234
c01A02567
c01A03567
c01A04890
c02A01234
c02A02234
c03A01345
c04A01456

si une commande porte sur plusieurs articles (même n° de commande, code article différent),
ou un article peut être commandé plusieurs fois (n° commande différent pour le même code Article)
il ne peut pas y avoir plusieurs fois la même commande avec le même article !!!
le couple (noCommande, codeArticle) doit être unique
c'est la définition même de la notion de clé primaire.

1.6 Clé étrangère, Ques Aquo ?

Domaine

L'ensemble des valeurs que peut prendre un attribut s'appelle le domaine (de valeurs) de cet attribut.
Ainsi, le domaine de valeurs du taux de TVA, en france, est {5.5, 19.6, 33.3}. Il n'y a pas d'autre valeur.

Référencement

Lorsqu'un attribut est clé étrangère, il fait référence à un attribut qui se trouve dans une autre table.
Son domaine de valeur n'est donc pas libre.
Exemple :
Si la relation TauxTVA contient le codeTVA et le taux. Il n'y aura donc que Trois codes :
{"T1", "T2", "T3"} correspondants aux trois taux disponibles.
Si la relation article se présente comme suit :
Article(artCode, artDesc, ..., codeTVA)
clé primaire : artCode
clé étrangère : codeTVA référence codeTVA dans TauxTVA
Le domaine du codeTVA dans Article n'est pas libre, il fait référence au domaine de codeTVA de la table TauxTVA.
Article
artCodedescArticlecodeTVA
A01article 1T1
A02article 2T2
A03article 3T1
A04article 4T3
A05article 5T2
A06article 6T1
TauxTVA
codeTVAtauxTVA
T15.5
T219.6
T333.3
Dans ce cas, on marque cette dépendance (fonctionnelle!) en ajoutant une ligne qui l'exprime :
Clé étrangère : nomAttribut référence nomAttribut dans table

Ou, dans l'ancien formalisme, en marquant l'attribut par un caractère # collé au nom : codeTVA#
(cependant, on perd l'infomation de quel champ est référencé dans quelle table)

Cas où des champs de la clé primaire sont aussi clé étrangère.
Certains de mes collègues ne demandent pas de signaler qu'un attribut soit clé étrangère si celui-ci fait partie de la clé primaire (comme dans la relation Acheter ci-dessus).
En fait, il faut le faire car sinon, on perd l'information du fait que le contenu (les valeurs autorisées, le domaine) n'est pas libre mais provient d'un attribut d'une autre table.
Les notions de clé primaire et de clé étrangère sont totalement indépendantes, même si une clé étrangère référence (presque) toujours un attribut clé primaire.

Retour index
2 Règles de transposition du MCD au MR

Le passage du MCD au MR est direct, par l'application des règles suivantes

2.1 Règles sur les entités

Règle 1 : Toute entité devient une relation
Règle 2 : Les propriétés de l'entité deviennent des attributs de la relation.
Règle 3 : L'identifiant de l'entité devient la clé primaire.

2.2 Règles sur les associations

Note : x,n représente, indifféremment, une cardinalité 0,n ou 1,n
Règle C1 C2 Règle
R4 x,1 x,n Apparition d'une clé étrangère.
  • Toute association hiérarchique (ou CIF), provenant d'une dépendance fonctionnelle entre deux entités, disparaît.
  • L'identifiant de l'entité de cardinalité 2 est ajouté à la relation de cardinalité 1 et devient une clé étrangère.
  • Ajouter la mention :
    < nomCléEtrangère > référence < nomCléPrimaireRéférencée > dans < nomTableRéférencée >
  • Les éventuelles propriétés de l'association deviennent des attributs de la relation.
  • Attention, si on a la cardinalité 0,1 spécifier que la clé étrangère peut être nulle.
    E1(id1, propr1,, id2, proprA)
    Clé primaire : id1
    Clé étrangère : id2 référence id2 dans E2
  • R5 x,n x,n Association transformée en table.
  • Toute association non hiérarchique (ou CIM) est transposée en une relation.
  • Elle est porteuse de tous les identifiants des associations participantes qui deviennent une seule clé primaire de la relation.
  • Les propriétés de l'association deviennent des attributs de la relation
    Asso(id1, id2, proprA)
    Clé primaire : id1, id2
    Clé étrangère : id1 référence id1 dans E1
    Clé étrangère : id2 référence id2 dans E2
  • R6 (Rare) x,1 0,1 Cas rare et difficile à transposer
  • Cas général : L'association est non porteuse de propriétés :
    Ce type de relation se comporte comme pour la règle 4
    E1(id1, propr1,, id2)
    Clé primaire : id1
    Clé étrangère : id2 référence id2 dans E2
  • Cas particulier : L'association est porteuse de propriétés :
    Si le nombre d'occurrences de la relation est faible, alors,
    Se reporter à la règle 5 : trois relations.
    Asso(id1, id2, proprA)
    Clé primaire : id1, id2
    Clé étrangère : id1 référence id1 dans E1
    Clé étrangère : id2 référence id2 dans E2

    Sinon,
    comme à la règle 4, on rapatrie les attributs dans la relation qui aura la clé étrangère.
    E1(id1, propr1,, id2, proprA)
    Clé primaire : id1
    Clé étrangère : id2 référence id2 dans E2
  • R7 (x,1) x,n Entité faible ou dépendante : clé étrangère qui fait partie de la clé primaire
    L'identifiant est aussi appelé identifiant relatif. pour être absolu, il faut connaître la valeur de la clé étrangère dont il dépend.
  • Clé étrangère et propriétés : idem règle 4
  • La clé étrangère devient le premier attribut de la clé primaire, composée de la clé étrangère et de l'identifiant de l'entité faible.
    E1(id2, id1, propr1,, proprA)
    Clé primaire : id2, id1
    Clé étrangère : id2 référence id2 dans E2

  • Remarque :
    Une association 1,1 <-> 1,1 est impossible, il y a une erreur dans le MCD !!!
    Les deux entités devraient fusionner

    Retour index
    3 Formalisme d'écriture du Schéma Relationnel

    3.1 Noms des attibuts

    Lors du choix du nom d'une propriété, d'un attribut ou d'un champ de base de données, ne pas utiliser de caractères spéciaux dans les noms (accent autorisés pour propriétés et attributs) et coller les mots en mettant une majuscule entre chaque mot mais pas au début. Exemples : nomClient, codArt.
    Réservez les noms commençant par une majuscule aux entités et relations.

    Dans le modèle physique, vous chasserez les accents de tout nom.

    3.2 Ecriture du SRD

    Il existe deux formalismes pour représenter les relations. Mais depuis peu, les directives imposent la représentation explicite dans le schéma relationnel.

    a) La relation est suivie de la liste des attributs, séparés par une virgule, entre parenthèse.
    Article(codeArticle, descArticle, poidsArticle, codeTypeArticle)

    b) Les attributs de la clé primaire sont (tous) indiqués dans la mention 'clé primaire', sous la relation.
    clé primaire : codeArticle

    c) Les clés étrangères sont indiquées dans une mention par 'clé étrangère', sous l'indication 'clé primaire'.
    clé étrangère : codeTypeArticle référence codeTypeArticle dans TypeArticle

    Exemples : (se reporter aussi au chapitre 1.2)
  • Formalisme explicite (en usage dans l'éducation nationale pour les sujets postérieurs à 2004)

    Client(numCli, adresseCli, typeCli) ;
    clé primaire : numCli
    clé étrangère : typeCli référence typeCli dans TypeClient

    TypeClient(typeCli, descTypeCli)
    clé primaire : typeCli

    Acheter(numCli, codeArticle, quantitéAchetée)
    clé primaire : numCli, codeArticle
    clé étrangère : numCli référence numCli dans Client
    clé étrangère : codeArticle référence codeArticle dans Article

  • Formalisme implicite (en usage avant 2004 mais encore fréquent)

    Client(numCli, adresseCli, #typeCli) ;
    -> la clé primaire est soulignée
    -> un champ qui est clé étrangère est suivi (ou précédé) d'un caractère #

    TypeClient(typeCli, descTypeCli)

    Acheter(numCli#, codeArticle#, quantitéAchetée)
    -> tous les attributs de la clé primaire sont soulignés d'un seul trait.

    Note : le # est appelé dièse en français et sharp en anglais.
    (pour la petite histoire des langues, @ est appelé arobase ou aronbase qui est une contraction de 'A rond de bas de casse', la casse étant le casier des typographes où sont rangées toutes les lettres. En anglais il s'appelle 'at' qui signifie 'chez' dans les adresses mail (toto at free.fr = toto chez free.fr) et en allemand, ce caractère s'appelle 'Klammeraffe' qui pourrait être traduit en français par ouistiti. En Alsacien, certains disent 'schnack' ... allez savoir pouquoi.)
  • Si des champs de la clé primaire qui sont aussi clé étrangère.
    Certains de mes collègues ne demandent pas de mettre de # à un attribut clé étrangère, si celui-ci fait partie de la clé primaire (comme dans la relation Acheter ci-dessus).
    En fait, il faut le mettre car, ce n'est plus un avatar d'une erreur d'interprêtation comme à l'origine, mais c'est une marque pour dire que cet attribut est une clé étrangère (il référence un attribut d'une autre relation).
    Si on ne le marque pas, on perd l'information du fait que le contenu (les valeurs autorisées, le domaine) n'est pas libre mais provient d'un attribut d'une autre table.
    Les notions de clé primaire et de clé étrangère sont indépendantes.

    Retour index
    4 Exemples

    4.1 Règle 4 : 1->n

    Article(codeArt, descA, codeType)
    clé primaire : codeArt
    clé étrangère : codeType référence codeType dans TypeArticle


    TypeArticle(codeType, descT)
    clé primaire : codeType


    Si la cardinalité est 0,1, indiquer : "avec #code… admettant des valeurs "nulles""

    4.2 Règle 5 : n->n

    Article(codeArt, desc)
    clé primaire : codeArt

    Fournisseur(codeFou, nom)
    clé primaire : codeFou

    Acheté(codeArt, codeFou, prix)
    clé primaire : codeArt, codeFou
    clé étrangère : codeArt référence codeArt dans Article
    clé étrangère : codeFou référence codeFou dans Fournisseur


    Note : dans 'acheté', codeArt et codeFou sont souliné par un seul trait (la virgule aussi).
    Cela exprime que la clé complète intègre tous les attribut soulignés.
    Le prix reste dans la nouvelle relation.

    4.3 Règle 6

    Client(numC, nomC)
    clé primaire : numC

    Place(numP, positionP, #numC)
    clé primaire : numP
    clé étrangère : numC référence numC dans Client
    avec #numC : clé candidate

    4.4 R4 bis

    Client(numC, nomC)
    clé primaire : numC

    Place(numP, positionP)
    clé primaire : numP

    Réservation(#numP, #numC, heure)
    clé primaire : numP, numC
    clé étrangère : numP référence numP dans Place
    clé étrangère : numC référence numC dans Client
    <- Si le nombre de réservation est faible par rapport au nombre de clients
    Ou
    Client(numC, nomC, #numP, heure)
    clé primaire : numC
    clé étrangère : numP référence numP dans Place
    Avec numP ET heure admettant des valeurs nulles simultanément.
    <-Si les créneaux horaires sont très différents ou si les réservations sont courantes.

    Retour index
    5 Exercices

    Elaborez les MR ou MCD suivants :
    Note : Les corrigés sont fournis. Essayez tout de même de résoudre les exo avant de voir les corrigés...

    5.1 Adjugé, Vendu !

    corrigé ici

    5.2 Horaires de trains

    corrigé ici

    5.3 Quel chantier !

    A partir du SR ci-dessous, reconstruire le SCD associé.
    Camion(camNum, camImmat, camAchatDate, CamDisponible, camTypeCam)
    Clé primaire: camNum
    Clé étrangère : camTypeCam référence typCam dans TypeCamion

    TypeCamion(typCam, typLibelle, typPermis, typPdsTotCharge, TypPdsAVide, typVolume)
    Clé primaire: typCam
    Transport(chaNum, traNum, traDate, traHDepart, traHArrivee, camNum)
    Clé primaire: chaNum, traNum
    Clé étrangère : chaNum référence chaNum dans Chantier
    Clé étrangère : camNum référence camNum dans Camion
    TraNum : n° du transport dans le chantier
    Chargement(chaNum, traNum, matCode, chrgPoids, chrgVolume)
    Clé primaire: chaNum, traNum, matCode
    Clé étrangère : chaNum référence chaNum dans Chantier
    Clé étrangère : traNum référence traNum dans Transport
    Clé étrangère : matCode référence matCode dans Matériau
    Matériau(matCode, matDesc, matUnite, matPoids, matVolume)
    Clé primaire: matCode
    Chantier(chaNum, chaAdresse, chaDebutDate, chaConducteur)
    Clé primaire: chaNum
    corrigé ici

    On n'a pas dit que c'est facile ...

    Retour index
    6 Cas d'une spécialisation Merise "étendu" (bienvenue en Deuxième année)

    Soit la spécialisation suivante :
    L'entreprise gère deux types d'articles, ceux qui sont achetés et ceux qui sont vendus.
    Les articles sont définis par un code, une description, un poids.
    Les articles achetés ont en plus un prix d'achat.
    Les articles fabriqués ont une matière de base.

    Le modèle étendu (merise 2) nous donne :
    Rappel des contraintes de spécialisation :
    X=exclusion : une occurrence appartenant a l'une des deux entité spécialisée ne peut appartenir à l'autre.

    T=totalité : la somme des occurrences des entités spécialisées représente toutes les occurrences de l'ensemble des entités.

    Ici : un article acheté ne peut pas être produit, tout article est soit acheté, soit produit
    Comment transformer ceci en modèle relationnel ?

    Deux méthodes :

    a) théorique merise 1

    La spécialisation se traduit par la codification d'un type effectuant la spécialisation :
    Article(codeArticle, Desc, poids, codeTypeArticle, prixAchat, baseMatière)
    Clé primaire : codeArticle
    Clé étrangère : codeTypeArticle référence codeTypeArticle dans TypeArticle
    avec soit prixAchat, soit baseMatière pouvant prendre la valeur nulle, jamais simultanément (prixAchat XOR baseMatière = NULL)

    TypeArticle(codeTypeArticle, typLibelle)
    Clé primaire : codeTypeArticle
    c'est un peu bancal car il faut indiquer explicitement qu'un article acheté n'a pas de matière de base et vis versa.

    b) théorique merise 2

    La spécialisation donne lieu à trois tables (selon la contrainte de spécialisation, ici XT=exclusion et Totalité : un article est soit acheté soit fabriqué, mais pas les deux en même temps ni aucun des deux).
    Article(codeArticle, Desc, poids)
    Clé primaire: codeArticle

    ArtAcheté(codeArticle, prixAchat)
    Clé primaire: codeArticle
    Clé étrangère : codeArticle référence codeArticle dans Article

    ArtProduit(codeArticle, baseMatière)
    Clé primaire: codeArticle
    Clé étrangère : codeArticle référence codeArticle dans Article
    Ici, plus de problème de modélisation, il restera une légère complication pour l'implémentation, celle de garder en cohérence les tables spécialisées avec la table générique.

    Retour index
    7 Conclusion

    Passer du SCD au schéma relationnel de base doit être une formalité, à ceci près qu'il faut, en toute circonstances effectuer un retour au texte descriptif de l'organisation (le sujet), pour vérifier que notre SR est toujours cohérent.

    Le cours sur l'analyse se poursuit en seconde année par les extensions au modèle conceptuel (voir ce cours).
    En prmière année, le cours se poursuit par l'extraction des données de la base à l'aide de langages structurés (algèbre relationnelle, SQL)

    En attendant, allez donc voir l'exercice d'application associé à ce dossier : cliquez ici

    Retour index page - Retour index général