Ceci est une ancienne révision du document !
Retour à la page précédente.
Du modèle conceptuel à la base de données
Un exemple de modèle conceptuel
Sur ce graphique représentant le modèle conceptuel, on reconnaît des classes avec leurs propriétés, des relations (orientées) entre les classes et leurs cardinalités.
Le modèle logique ou relationnel
Dans le cours d'introduction aux bases de données, Laurent Audibert présente les
règles de passage du modèle conceptuel au modèle logique ou relationnel.
A noter que une classe (UML) correspond à une entité-type (Merise).
Les principales règles:
on crée une table ou relation pour chaque classe
on attribue un identifiant unique à chaque classe
cet identifiant s'appelle clé primaire, primary key
par convention nous choisissons de nommer cet identifiant avec le nom de la table, précédé de 'pk_', par ex. pk_person pour la table ou relation person.
les relations de '1 à n' sont exprimées par un report de la clé primaire de la table/classe du côté '1' vers la table/classe du côté 'n'
la clé primaire (primary key) de la table du côté '1' de vient une clé étrangère (foreign key) dans la table du côté 'n'
par convention, les clés primaires sont préfixées par 'fk_'
les relations de 'n à n' sont exprimées par la création d'une nouvelle table ou relation.
cette table établit le lien entre les deux classes et exprime leur relation de 'n à n'
les clés primaires (primary key) de chaque table sont reportées et deviennent des clés étrangères (foreign key) dans la table relation
la table relation a le nom de la relation – celui-ci doit donc être unique dans le modèle conceptuel
pour des raisons pratiques nous ajoutons une clé primaire spécifique pour la table relation sous la forme 'pk_' + nom de la table, par ex. pk_specializes_tag pour la table specializes_tag.
Si on applique ces réglès au modèle conceptuel de l'exemple, on obient ces relations (les clés primaires sont en italique, les clés étrangères sont soulignées):
person(pk_person, name, definition, death_date)
appellation(pk_appellation, pk_person, name)
tag(pk_tag, name, definition)
tags(pk_tags, fk_person, fk_tag)
specializes_tag(pk_specializes_tag, fk_specializes_tag)
pursuit(pk_pursuit, fk_person, fk_occupation, begin_date, end_date)
occupation(pk_occupation, name, definition)
specializes_occupation(pk_specializes_occupation, fk_parent_occupation, fk_child_occupation)