Sommaire 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 Peupler les tables 1 G.Louis 2 G.Louis Rappel : le modèle relationnel Rappel : les tables Structurer les données comme des «relations» (au sens des maths. En pratique : ranger les données dans des tables : table clients : numérocli nom solde ========== =========== ====== 1243 Romuald 2,5 4576 Denis 4 8901 Pascal 2,5 9902 Emmanuel 4 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 3 G.Louis 4 G.Louis
Rappel : les bases de données Des instances aux n-uplets 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. Le principe : une classe C une table TC chaque instance de la classe C une ligne de la table T C 5 G.Louis 6 G.Louis Livre titre: string editeur : string publication : date livres titre editeur publication A Little Smalltalk Addison-Wesley 1987 On To Smalltalk Addison-Wesley 1998 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 7 G.Louis 8 G.Louis
Solution Les tables et leurs clés 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 Dans une table, on peut définir des 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 9 G.Louis 10 G.Louis primaires Clés artificelles 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 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. 11 G.Louis 12 G.Louis
Enfin du SQL CREATE TABLE livres ( titre VARCHAR(50, editeur VARCHAR(50, publication DATE 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. 13 G.Louis 14 G.Louis 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» 15 G.Louis SQL CREATE TABLE editeurs ( nom VARCHAR(50 CREATE TABLE livres ( titre VARCHAR(50, editeur INTEGER REFERENCES editeurs, publication DATE L attribut «editeur» est une référence à la clé prmaire de la table «editeurs» 16 G.Louis
étrangères étrangères sont des contraintes 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» 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 17 G.Louis 18 G.Louis 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 19 G.Louis 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é. 20 G.Louis
Etudiant étudiants 1..1 1..1 Stage id stage_id (clé étrangère 1 2 2 1 CREATE TABLE étudiants (, stage_id INTEGER REFERENCES stages stages id 1 2 CREATE TABLE stages ( id INTEGER PRIMARY KEY,, 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 Créer la table «stages» AVANT la table «étudiants» 21 G.Louis 22 G.Louis les tables CREATE TABLE livres ( ; CREATE TABLE auteurs ( ; 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. 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 23 G.Louis 24 G.Louis
Peupler les tables 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 (, stage_id INTEGER NOT NULL REFERENCES stages Etudiant 1..1 1..1 Stage INSERT INTO CREATE TABLE editeurs ( id INTEGER PRIMARY KEY, nom VARCHAR(50 ; INSERT INTO editeurs (id, nom VALUES (1, Addison-Wesley ; CREATE TABLE livres ( 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 ; 25 G.Louis 26 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 ; 27 G.Louis