I4 : Bases de Données Passage de UML au modèle relationnel Georges LOUIS Département Réseaux et Télécommunications Université de La Rochelle Module I4 2008-2009 1 G.Louis
Sommaire 1 Des classes aux tables 2 Les clés 3 Représentation des liens 4 Les différents types d association, et leur traduction 5 Peupler les tables 2 G.Louis
Des classes aux tables Sommaire 1 Des classes aux tables 2 Les clés 3 Représentation des liens 4 Les différents types d association, et leur traduction 5 Peupler les tables 3 G.Louis
Des classes aux tables Rappel : le modèle relationnel Structurer les données comme des «relations» (au sens des maths). En pratique : ranger les données dans des tables Exemple : table clients : numérocli nom solde ========== =========== ====== 1243 Romuald 2,5 4576 Denis 4 8901 Pascal 2,5 9902 Emmanuel 4 4 G.Louis
Des classes aux tables Rappel : les tables Les en-têtes de colonnes sont les nom des «attributs» Une ligne est un «tuple» ou «n-uplet» Les attributs possèdent un type, qui sera celui de chacune des données enregistrées dans la colonne correspondante. Les cases de la table ne contiennent que des données simples nombres, chaînes, dates,... Mais pas de tableaux, de structures... Toute la structuration des données passera par les tables 5 G.Louis
Des classes aux tables Rappel : les bases de données Une «base de données» est un ensemble de tables Le «schéma relationnel» d une base de donnée comprend les noms des tables, les noms des attributs, avec leurs types respectifs, des contraintes qui imposent des règles pour le contenu des tables. (On ne peut pas enregistrer n importe quel n-uplet dans une table). 6 G.Louis
Des classes aux tables Des instances aux n-uplets Le principe : une classe C une table T C chaque instance de la classe C une ligne de la table T C 7 G.Louis
Des classes aux tables Exemple Livre titre: string editeur : string publication : date livres titre editeur publication A Little Smalltalk Addison-Wesley 1987 On To Smalltalk Addison-Wesley 1998 8 G.Louis
Des classes aux tables Problème Si je possède deux fois le même livre, cela donnera deux instances de la classes qui ont des attributs identiques Le même titre, le même éditeur, la même date de publication Pas de problème dans le modèle à objets Dans la table : deux fois la même ligne CE QUI N EST PAS PERMIS Les tables sont des ensembles de n-uplets Un ensemble ne peut pas contenir deux éléments identiques l un à l autre 9 G.Louis
Des classes aux tables Solution Dans le modèle à objets, chaque instance a une IDENTITÉ indépendante de la valeur des attributs (Chaque objet a implicitement un identifiant (OID Object identifier)) Dans le modèle relationnel, l identité est donnée par la valeur des attributs (L identification par les valeurs) Il faut être sûr que les instances auront dans la table des valeurs différentes pour au moins un attribut Au besoin, on introduit un attribut supplémentaire, qui sera différent pour chaque instance 10 G.Louis
Les clés Sommaire 1 Des classes aux tables 2 Les clés 3 Représentation des liens 4 Les différents types d association, et leur traduction 5 Peupler les tables 11 G.Louis
Les clés Les tables et leurs clés Dans une table, on peut définir des clés Les clés sont des ensembles d attributs Si les attributs (a 1, a 2, a 3 ) pris ensemble forment une clé, alors il n y a pas deux lignes de la table, disons L 1 et L 2 où L 1.a 1 = L 2.a 1 et L 1.a 2 = L 2.a 2 et L 1.a 3 = L 2.a 3 Toutes les lignes ont des valeurs 2 à 2 différentes pour les colonnes (a 1, a 2, a 3 ) L ensemble des attributs d une table forment toujours une clé, puisqu aucune table ne peut contenir deux lignes identiques 12 G.Louis
Les clés Les clés primaires Parmi les clés possibles, on en choisit une comme clé primaire Comme on va le voir, il est très important de choisir une clé primaire qui soit : courte (pas trop de bits pour la représenter) absolument invariable dans le temps 13 G.Louis
Les clés Clés artificelles Il est très rare qu une donnée soit une bonne clé. Les gens changent de nom Les entreprises fusionnent, et les clients changent de numéro etc... (Peut-être le numéro de chassis d une voiture, mais ce n est pas très compact) Je recommande donc d introduire une clé artificielle de type entier (dans les tables qui correspondent à des classes) Ces clés artificielles jouent le rôle d OID. Ces clés doivent absolument être cachées aux utilisateurs. 14 G.Louis
Les clés Enfin du SQL CREATE TABLE livres ( id INTEGER PRIMARY KEY, titre VARCHAR(50), editeur VARCHAR(50), publication DATE ) 15 G.Louis
Représentation des liens Sommaire 1 Des classes aux tables 2 Les clés 3 Représentation des liens 4 Les différents types d association, et leur traduction 5 Peupler les tables 16 G.Louis
Représentation des liens Exemple Livre titre: string publication : date 0..* 1..1 Editeur nom: string L éditeur peut publier plusieurs livres : on ne peut pas représenter l ensemble des liens par un attribut de la table des éditeurs. En revanche, les livres ont un et un seul éditeur : on va représenter le lien par un attribut. Une «référence» des livres vers les éditeurs. 17 G.Louis
Représentation des liens Les tables livres id titre editeur publication 1 A Little Smalltalk 1 1987 2 On To Smalltalk 1 1998 3 Guide To Better Smalltalk 2 1999 éditeurs id nom 1 Addison-Wesley 2 Cambridge University Press L attribut «editeur» de la table «livres» fait référence à la clé primaire «id» de la table «éditeurs» 18 G.Louis
Représentation des liens SQL CREATE TABLE editeurs ( id INTEGER PRIMARY KEY, nom VARCHAR(50) ) CREATE TABLE livres ( id INTEGER PRIMARY KEY, titre VARCHAR(50), editeur INTEGER REFERENCES editeurs, publication DATE ) L attribut «editeur» est une référence à la clé prmaire de la table «editeurs» 19 G.Louis
Représentation des liens Les clés étrangères On dit que l attribut «editeur» est une clé étrangère (foreign key) dans la table «livres» Une clé étrangère est une référence à la clé primaire d une autre table («editeurs») Les valeurs dans la colonne «editeur» DOIVENT être des clés QUI EXISTENT dans la table «editeurs» 20 G.Louis
Représentation des liens Les clés étrangères sont des contraintes Le SGBD refuserait ceci (en vous empêchant de créer un tel n-uplet dans la table «livres») livres id titre editeur publication 1 A Little Smalltalk 1 1987 2 Guide To Better Smalltalk 3 1999 éditeurs id nom 1 Addison-Wesley 2 Cambridge University Press 21 G.Louis
Les différents types d association, et leur traduction Sommaire 1 Des classes aux tables 2 Les clés 3 Représentation des liens 4 Les différents types d association, et leur traduction 5 Peupler les tables 22 G.Louis
Les différents types d association, et leur traduction Les 10 cas d associations binaires G m..m n..n D m M n N Commentaire =1 =1 =1 =1 G D, au choix =0 =1 =1 =1 G D, au choix =0 >1 =1 =1 G D >0 >1 =1 =1 G D =0 =1 =0 =1 G D, au choix =0 >1 =0 =1 G D >0 >1 =0 =1 G D =0 >1 =0 >1 Une table pour l association >0 >1 =0 >1 Une table pour l association >0 >1 >0 >1 Une table pour l association 23 G.Louis
Les différents types d association, et leur traduction Les règles qui s appliquent aux multiplicités maximum G m..m n..n D Si M = 1, on peut mettre une clé étrangère dans la table pour D Si N = 1, on peut mettre une clé étrangère dans la table pour G Si M > 1 et N > 1 il faut créer une table pour l association. Cette table possède 2 colonnes : une clé étrangère qui référence G et une autre clé étrangère qui référence D. Pas besoin de clé primaire pour cette table, le SGBD rendra les 2 colonnes ensemble pour former la clé. 24 G.Louis
Les différents types d association, et leur traduction Exemple Etudiant... étudiants 1..1 1..1 Stage... id... stage_id (clé étrangère) 1... 2 2... 1 CREATE TABLE étudiants ( id INTEGER PRIMARY KEY,..., stage_id INTEGER REFERENCES stages ) stages id... 1... 2... CREATE TABLE stages ( id INTEGER PRIMARY KEY,..., ) Créer la table «stages» AVANT la table «étudiants» 25 G.Louis
Les différents types d association, et leur traduction Exemple Livre... 1..* 1..* Auteur... On ne peut plus implémenter les liens par une clé étrangère dans une des deux tables associées. (On ne peut pas mettre un enemble de clés comme attribut) On crée une table pour représenter l association (Une table de jointure) 26 G.Louis
Les différents types d association, et leur traduction Exemple les tables CREATE TABLE livres ( id INTEGER PRIMARY KEY,... ) ; CREATE TABLE auteurs ( id INTEGER PRIMARY KEY,... ) ; CREATE TABLE auteurs_livres ( livre_id INTEGER REFERENCES livres, auteur_id INTEGER REFERENCES auteurs ) Pas besoin de clé primaire : le SGBD en formera une avec les 2 attributs. 27 G.Louis
Les différents types d association, et leur traduction Absence de lien et valeur nulle Etudiant... 0..1 0..1 Stage... Pendant la recherche de stage, il y a des étudiants qui n ont pas encore de stage, et des stages pour lesquels il n y a pas encore d étudiants. Pour indiquer l absence de lien, on utilise la «valeur nulle» étudiants id... stage_id (clé étrangère) 1... NULL 2... 1 stages id... 1... 2... 28 G.Louis
Les différents types d association, et leur traduction Règle pour la multiplicité minimale et contrainte NOT NULL Si on met une clé étrangère dans une table, et si la multiplicité minimale correspondante est 1, alors il faut mettre une contrainte «NOT NULL» sur la clé étrangère. Pour indiquer qu il y a toujours un lien. CREATE TABLE étudiants ( id INTEGER PRIMARY KEY,..., stage_id INTEGER NOT NULL REFERENCES stages ) Etudiant... 1..1 1..1 Stage... 29 G.Louis
Peupler les tables Sommaire 1 Des classes aux tables 2 Les clés 3 Représentation des liens 4 Les différents types d association, et leur traduction 5 Peupler les tables 30 G.Louis
Peupler les tables INSERT INTO CREATE TABLE editeurs ( id INTEGER PRIMARY KEY, nom VARCHAR(50) ) ; INSERT INTO editeurs (id, nom) VALUES (1, Addison-Wesley ) ; CREATE TABLE livres ( id INTEGER PRIMARY KEY, titre VARCHAR(50), editeur INTEGER NOT NULL REFERENCES editeur_id ) ; INSERT INTO livres (id, titre, editeur_id) VALUES (1, A Little Smalltalk, 1), (2, On To Smalltalk, 1) ; 31 G.Louis
Peupler les tables Commentaires Il faut gérer les «id» et les clés étrangères «à la main» Mais je vous montrerai plus tard comment le faire «automagiquement». Pour afficher tout le contenu d une table : SELECT * FROM livres ; 32 G.Louis