Professional Documents
Culture Documents
Rechercher
Recherche avance Accueil > L'institut > Units de recherche & units de service
I-1 Introduction * I-2 La modlisation relationnelle * I-3 Normalisation du modle : les formes normales d'un modle relationnel * o I-3-1 Premire forme normale * o I-3-2 Deuxime forme normale * o I-3-3 Troisime forme normale : * o I-3-4 Quatrime forme normale * o I-3-5 Conclusion de la normalisation * I-4 Les contraintes d'intgrit * I-5 Algbre relationnelle et langage SQL * o I-5-1 Oprations ensemblistes * I-5-1-1 Union * I-5-1-2 Intersection * I-5-1-3 Diffrence * I-5-1-4 Produit cartsien * o I-5-2 Oprations relationnelles * I-5-2-1 Projection * I-5-2-2 Restriction ou slection * I-5-2-3 Composition ou jointure * I-5-2-4 Jointures internes et externes * o I-5-3 criture des oprations relationnelles en SQL * I-5-3-1 la projection : * I-5-3-2 la restriction : * I-5-3-3 la jointure (par dfaut elle est interne) : * I-5-3-4 les jointures externes * I-5-3-5 oprateur union * I-5-3-6 agrgats * o I-5-4 Autres fonctions de SQL * I-5-4-1 fonctions de mise jour : * I-5-4-2 fonctions de gestions de la base : * o I-5-5 Exemples d'oprations * I-5-5-1 sur les relations "tudiants" et tudes" * I-5-5-2 sur les relations "individus", "vehicules", "modele" * I-6 Les extensions du modle relationnel et les modles objets *
Masson 1981
Donnes Thorie et pratique Bases de donnes et systmes relationnels Bases de donnes : Les Systmes et leurs langages Relational Databases and Knowledge Bases C.Delobel M.Adiba Dunod 1982
G.Gardarin
Eyrolles 1983
G.Gardarin P.Valduriez
SGBD avancs G.Gardarin Bases de P.Valduriez donnes objets, dductives, rparties Les bases de donnes avances. Du modle relationnel au modle orient objet
Eyrolles 1991
I-1 Introduction
Le modle relationnel a t dfini par E.F Codd dans les annes 70 et de nombreux chercheurs ont contribu son dveloppement. Les premiers systmes de gestion de base de donnes (SGBD ou DBMS en anglais) btis sur ce modle ont t SQL/DS et DB2 de IBM, d'o est n le langage de manipulation de bases relationnelles, SQL (Structured Query Language). Bien d'autres implmentations ont suivi et, actuellement, la plupart des SGBD commercialiss, aussi bien sur micros que sur grands systmes, se rclament du modle relationnel. L'explication d'un tel succs tient dans les avantages que ce modle apporte, par rapport ses prdcesseurs de type "hirarchique", "rseau" ou Codasyl et C.J Date, un des spcialistes fondateurs du relationnel en donne un rsum en un seul mot : "la simplicit". Simplicit tout d'abord pour l'utilisateur dans la conception, la dfinition, l'installation de la base de donnes. En reprenant la dmonstration de Date sur la "simplicit" du modle relationnel, on peut mettre en vidence la simplicit de la structure des donnes, la simplicit
Une base relationnelle est compose de tables et est perue par l'utilisateur comme un ensemble de tables et rien d'autre. Il faut prendre table au sens de tableau deux dimensions et, effectivement, le concept de rangement de donnes dans de tels tableaux est aussi simple et comprhensible que suffisant pour reprsenter toutes les formes de donnes ! Dans une table, une ligne (ou range) correspond un enregistrement et une colonne un champ de cet enregistrement.1
Toute opration relationnelle sur une table gnre une nouvelle table, c'est--dire fonctionne sur un ensemble de donnes sans que l'on ait se proccuper de traiter successivement chacune des donnes rcupres par l'opration. Les oprateurs relationnels, ceux du langage SQL, permettent de dcrire le rsultat que l'on veut obtenir sans avoir dcrire la procdure ncessaire pour arriver au rsultat : on dit que le langage relationnel est "non procdural". Par exemple, la slection de l'ensemble de lignes d'une table dont les valeurs rpondent un critre donn se traduit par une seule opration, en utilisant l'oprateur "select...from...where..." L'utilisateur disposera donc en relationnel d'un langage de manipulation des donnes simple, d'apprentissage facile.
Indpendance des applications vis vis de l'implantation physique des donnes, grce la sparation entre le niveau logique et le niveau physique de la base : la description logique de la base par son modle relationnel suffit dfinir les applications qui l'utiliseront, sans avoir connatre son implantation et sa structure physique.
Pour terminer cette introduction au modle relationnel, nous rappellerons la dfinition et les caractristiques d'un SGBD. Un SGBD est un outil logiciel qui permet, selon un modle de base de donnes particulier, de grer ces donnes en offrant les fonctionnalits suivantes :
un langage de dfinition des donnes (LDD), c'est--dire un langage de dfinition du modle, la dcomposition en tables pour le modle relationnel et la structure de ces tables, avec, selon les systmes, des outils supplmentaires d'organisation physique des donnes pour les rglages de performances; un langage de manipulation des donnes (LMD) pour ajouter, modifier, retrouver, supprimer des donnes; la gestion des rgles assurant l'intgrit des donnes; la gestion de la confidentialit des donnes; la gestion des conflits d'accs simultans aux donnes; la scurit de fonctionnement, avec des outils de sauvegardes et reprises de
la base. L'administrateur de la base, c'est--dire celui qui la cre, la gre et la maintient fera appel toutes ces fonctionnalits du SGBD. L'utilisateur final n'accdera gnralement qu'au langage de manipulation des donnes, soit directement en utilisant le langage standard SQL, soit au travers d'outils plus volus offerts par le SGBD lui-mme ou dvelopps par l'administrateur. Classiquement, une base de donnes peut tre reprsente en trois niveaux :
le niveau externe, qui offre l'utilisateur final un schma externe particulier, travers lequel il voit la base, le niveau conceptuel, celui o le monde rel a t traduit par le crateur de la base en un schma conceptuel, ou modle, le niveau interne, celui du schma physique gr par le SGBD.
L'administrateur aura pour rle la conception du modle partir du monde rel reprsenter, le rglage du schma physique pour certaines optimisations de performances, le maintien de la base de donnes physique, enfin la description des schmas externes l'usage des utilisateurs finaux.
D1 d1,1 d2,1
D2 d1,2 d2,2
D3 d1,3 d2,3
Le modle relationnel consiste reprsenter par une relation, ou table, chaque type d'objet ou entit du monde rel, en prenant pour colonnes les constituants caractristiques de l'objet. Chaque colonne de la table a un identificateur, ou nom de colonne, ou "attribut", qui reprsente un des constituants de l'entit.
Par exemple, pour modliser l'entit "personne", on prendra comme constituants son nom, son prnom, sa date de naissance, sa ville, son dpartement et on dfinira la table "personne" avec ses colonnes : personne (nom , prnom , date-naissance , ville , dpartement). Les domaines correspondant aux identificateurs de colonnes peuvent tre dfinis par les ensembles de valeurs suivants : nom : chane de 1 30 caractres alphabtiques prnom : chane de 1 30 caractres alphabtiques date-naissance : ensemble des dates depuis le 1er janvier 1900 jusqu'au 1er janvier 1994 ville : ensemble des noms de villes (ou chane de 1 40 caractres) dpartement : entier compris entre 1 et 98 Les personnes relles que nous voudrons introduire dans cette table seront constitues chacune par une ligne de la table, par exemple :
Dupont Hache
Jean Arthur
27/2/49 13/8/68
Pontoise Paris
78 75
Les noms de colonnes (columns en anglais), constituants de l'objet, sont encore appels attributs (attributes en anglais). Les lignes de la tables, ou ranges, (rows en anglais), sont encore appeles n-uplets (ou tuples en anglais), selon la terminologie relationnelle. Pour dfinir une table du modle, il faut :
donner un nom de table, donner le nom des colonnes et leurs domaines de valeurs.
Exemple de cration de table en langage SQL : create table personne (nom char(30), prenom char(30), date-naissance date, ville char(40), departement integer);
Dans la table "personne", on pourrait dire que le couple (nom, prnom) forme la cl, condition que l'on ne puisse avoir deux personnes ayant mme nom et mme prnom. C'est cette cl de la table personne qui doit tre rappele dans la table "voiture-possde" pour faire l'association entre les deux tables. On dit que le couple (nom, prnom) dans la table "voiture-possde" est une cl trangre (foreign key en anglais), lie la cl primaire (nom, prnom) de la table "personne". Dans la table "voiture-possde", la cl primaire peut tre constitue par les trois colonnes nom, prnom, type ( condition qu'une personne ne puisse possder plus d'une voiture d'un type donn). Il est parfois ncessaire de redfinir la structure d'une table pour assurer qu'elle contient une cl primaire : par exemple, dans le cas de la table "personne", il est sans doute prfrable d'avoir une colonne d'identification de la personne dont on est sr qu'elle est unique, par exemple son code INSEE, pour viter le cas o nom et prnom ne seraient pas discriminants. De mme, on peut ajouter une colonne "rang" la table "voiture-possde" pour tre sr de constituer une cl unique. Ce qui donne le schma suivant : personne (insee, nom, prenom, date-naissance, ville, departement) voiture-possde (insee, rang, type, date-achat, marque, couleur) nb : les colonnes cls sont soulignes. La dsignation de la cl de la relation, ou cl primaire est obligatoire dans certains SGBD relationnels. Elle ne l'est pas dans INGRES mais la dfinition de cette cl doit tre prsente l'esprit de celui qui conoit le modle car elle conditionne, comme on va le voir, la normalisation des tables. Les tapes suivantes de normalisation des relations vont consister en une dcomposition des tables de faon respecter certaines rgles de dpendances entre les colonnes cls et les colonnes non cls, ce qui permettra d'liminer les redondances de donnes et les problmes de mise jour.
elle est en premire forme normale, toute colonne qui n'appartient pas une cl dpend pleinement de la cl et ne peut se dduire d'un sous-ensemble de cette cl.
Considrons par exemple la table "commande" suivante : commande (nom-fournisseur, adresse-fournisseur, article, quantit, prix) La cl primaire est constitue par le couple (nom-fournisseur, article). Or, l'adresse du fournisseur ne dpend que de son nom. Cette table n'est donc pas en 2FN (2me forme normale) et devra tre dcompose en deux tables : fournisseur (nom-fournisseur, adresse) commande (nom-fournisseur, article, quantit, prix) On vite ainsi des redondances et des problmes de mise jour si l'adresse du fournisseur change.
elle est en deuxime forme normale, une valeur de colonne n'appartenant pas la cl ne dpend pas d'une colonne non cl.
La table "voiture-possde" ne rpond pas cette rgle, car la marque de la voiture ne dpend que de son type. Pour respecter la troisime forme normale, il faudra dcomposer cette relation en deux nouvelles relations : voiture-possde (insee, rang, type, date-achat, couleur) marque-voiture (type, marque) On voit l encore l'intrt de la normalisation pour les mises jour et l'limination des redondances : on peut mettre jour les voitures possdes sans toucher la relation marque-voiture, la marque de voiture n'est pas rpte dans chaque ligne de voiture-possde ayant mme type.
un type R18 a un modle en version normale et un modle en version break, un type AX a un modle en version normale et un modle en version dcapotable; le type R18 existe en couleur rouge et bleu, le type AX existe en couleur rouge et vert. On pourrait constituer une table "choix_modle" de la faon suivante : choix_modle( type, couleur, version) La table choix-modle contiendrait les lignes suivantes :
Pour une valeur de type, on a toutes les valeurs possibles de couleur et, pour chacune de ces valeurs, toutes les valeurs possibles de version, mais couleur et version sont indpendantes entre elles : on dit que l'on a une dpendance multivalue entre la colonne "type" et la colonne "couleur" et une dpendance multivalue entre la colonne "type" et la colonne "version". On voit l'inconvnient de cette forme puisque, si l'on supprime une valeur possible de la colonne "version", par exemple dcapotable pour le type AX, il faut supprimer toutes les lignes o apparaissent AX et dcapotable. Pour viter ce genre de problmes, il faut passer la quatrime forme normale, qui se dfinit thoriquement ainsi : Une relation est en quatrime forme normale si et seulement si les seules dpendances multivalues lmentaires sont celles dans lesquelles une cl dtermine la valeur d'une colonne. Ici, les colonnes sur lesquelles portent des dpendances multivalues font partie de la cl, donc la table n'est pas en 4FN et il faut la dcomposer en deux tables : choix_couleur( type, couleur) choix_version( type, version)
Plus le degr d'une forme normale est lev, moins les anomalies lies aux oprations de mises jour se produisent, ceci parce que les constituants lmentaires du schma se trouvent tre de plus en plus indpendants les uns des autres. Toutefois, il arrive que l'on ne poursuive pas au maximum la normalisation du modle car elle peut dgrader les performances l'interrogation. En effet, la dcomposition d'une table en plusieurs autres peut conduire scruter plusieurs tables pour une recherche donne (on dit faire une jointure), ce qui peut tre pnalisant en temps de recherche.
entier long, entier court, rel long, rel court, rel virgule fixe,
numeric) char(n) varchar(n) date byte chane de n caractres, chane de n caractres maximum, de longueur variable, date donnes binaires
Une autre contrainte d'intgrit sur les donnes peut tre ajoute pour spcifier une condition que doit respecter la valeur d'une colonne. Ce qui signifiera qu'une mise jour de la colonne ne respectant pas cette contrainte sera rejete. exemple : create integrity on employe is salaire >= 6000 ; La dfinition de contraintes d'intgrit rfrentielles n'est pas prise en compte dans le standard SQL, ni dans INGRES de faon directe. Elle est possible dans INGRES par le biais de rgles de gestion (ou triggers). La contrainte d'intgrit rfrentielle est, par exemple, de dire qu'une ligne d'une table voiture-possde ne peut exister si la personne laquelle elle se rapporte n'existe pas. Avec INGRES et son extension base de connaissances, on peut dfinir des rgles qui sont des mcanismes par lesquels on invoque une procdure spcifique chaque fois qu'une condition est vraie : par exemple, on fera en sorte de supprimer toutes les lignes de voiture-possde se rfrant une personne si cette personne est enleve de la base : create rule maj afterdeletefrom personne execute procedure del_voitures (insee = old.insee);
I-5-1-1 Union l'union (R U S) de deux tables R et S ayant mme schma, c'est--dire mmes lignes, est une table T contenant l'ensemble des lignes appartenant R et des lignes appartenant S I-5-1-2 Intersection l'intersection (R n S) de deux tables R et S de mme schma est une table T contenant les lignes communes R et S I-5-1-3 Diffrence la diffrence (R - S) de deux tables R et S de mme schma est une table T contenant les lignes de R n'appartenant pas S I-5-1-4 Produit cartsien On dfinit le produit cartsien (T = R * S) de deux tables R et S par la table T constitue par la concatnation une par une de chaque ligne de S chaque ligne de R. exemple : R= tudiant ( nom, prenom) S= tudes (bac, filire) R
bac A B C D
nom
prenom
bac
filire
Dupont Dupont Dupont Dupont Perec Perec Perec Perec Fort Fort Fort Fort
Alain Alain Alain Alain Georges Georges Georges Georges Paul Paul Paul Paul
A B C D A B C D A B C D
littraire conomie sciences sciences littraire conomie sciences sciences littraire conomie sciences sciences
nom Dupont Perec Fort I-5-2-2 Restriction ou slection la restriction consiste slectionner les lignes d'une table R pour lesquelles une colonne vrifie une certaine proprit. exemple : la restriction de R pour la condition "prnom de plus de 4 lettres" donne les 2 premires lignes. R
nom prenom Dupont Alain Perec Georges I-5-2-3 Composition ou jointure Cette opration, essentielle en relationnel, consiste combiner 2 (ou plus) tables pour obtenir une table rsultat, en concatnant 2 2 les lignes des deux tables
initiales (c'est le produit cartsien) et en ne gardant (restriction) que les lignes dont 2 colonnes (ou plus) dans les tables initiales vrifient une certaine proprit. exemple : le produit cartsien vu ci-dessus donne toutes les possibilits d'tudes pour chacun des tudiants; supposons maintenant que les tudiants enregistrs aient pass leur bac et que l'on ait l'attribut "bac" dans la relation "tudiants", ce qui donnerait : R2
bac C A A
On peut crer la table T2 donnant les filires possibles pour chaque tudiant en fonction du bac, en faisant la jointure de la table R2 avec la table S, sur la proprit : le bac de l'tudiant est le mme que le bac de la table "tudes". Donc, du produit cartsien prcdent, on ne garde que les lignes suivantes : T2
nom prenom bac filire Dupont Alain C sciences Perec Georges A littraire Fort Paul A littraire I-5-2-4 Jointures internes et externes On peut dfinir des types de jointures dits internes et externes correspondant diffrentes faons de faire la slection du produit cartsien. La jointure interne est la jointure classique vue ci-dessus : on combine toutes les lignes de R toutes les lignes de S pour lesquelles la valeur de l'attribut "bac" est identique dans les deux tables. Si la table R contenaient des lignes dont la valeur de l'attribut "bac" n'existait pas dans la table S, ces lignes n'apparatraient pas dans la jointure interne. De mme si la table S contenaient des lignes dont la valeur de l'attribut "bac" n'existait pas dans la table R, ces lignes n'apparatraient pas dans la jointure interne.
exemple : R3 nom Dupont Perec Truche Fort S3 bac A B C D E rsultat de la jointure interne : T3-interne prenom Alain Georges Paul
prenom Alain Georges Jacques Paul filire littraire conomie sciences sciences conomie
bac C A X A
bac C A A
La jointure externe donne une table rsultat comprenant des lignes qui ne sont pas en correspondance entre les deux tables origines. Elle est dite "externe gauche" si on prend toutes les lignes de la table de gauche de l'opration de jointure, par exemple T3-gauche = R3*S3
bac C A X A
Elle est dite "externe droite" si on prend toutes les lignes de la table de droite de l'opration de jointure, par exemple T3-droite = R3*S3
bac C A
Fort
Paul
A E
littraire conomie
Elle est dite "externe complte" si on prend toutes les lignes des deux tables de l'opration de jointure, par exemple T3-externe-complte = R3*S3
bac C A X A E
[-------------------] qualification multi-colonnes t1 et t2 sont des abrviations, synonymes de table_1 et table_2. autre forme de jointure : select col_1,... from table_1 where col_i in (select col_j from table2) Dans cet exemple de jointure, comme dans la plupart des cas, les deux colonnes mises en correspondance doivent tre gales : on dit que l'on fait une qui-jointure. On peut galement envisager tout type d'oprateur de comparaison entre les colonnes mises en jointure. On peut aussi faire une jointure sur plus de deux colonnes appartenant aux deux tables. Enfin, on est parfois amen faire la jointure d'une table sur elle-mme (autojointure). I-5-3-4 les jointures externes select t1.col_1, t1.col_n, t2.col_1, t2.col_n from table_1 t1 left join table_2 t2 on t1.col_i = t2.col_j ; ou select t1.col_1, t1.col_n, t2.col_1, t2.col_n from table_1 t1 right join table_2 t2 on t1.col_i = t2.col_j ; ou select t1.col_1, t1.col_n, t2.col_1, t2.col_n from table_1 t1 full join table_2 t2 on t1.col_i = t2.col_j ; I-5-3-5 oprateur union l'oprateur union permet de faire l'union de deux tables rsultats dont les schmas sont identiques :
exemple : select nom from personne union select nom from employe I-5-3-6 agrgats Dans un ordre select, on peut utiliser des fonctions de calculs d'agrgats qui s'appliquent, sur une colonne, un ensemble ou des sous-ensembles de lignes : count comptage de lignes rsultats sum avg max min somme de valeurs moyenne maximum minimum
exemple : on fait le calcul des moyennes de salaires, par catgorie : select categorie, avg(salaire) from employe group by categorie
"78" and v.type = m.type ; recherche des deux types de vhicules de rang 1 et 2 appartenant au mme individu : (il s'agit ici de faire une auto-jointure de la relation "vehicules") select v1.type, v2.type from vehicules v1, vehicules v2 where v1.insee = v2.insee and v1.rang = 1 and v2.rang = 2 ;
oprations que l'on peut leur appliquer, c'est le concept d' "encapsulation" des objets. A ces nouvelles fonctionnalits il faut adjoindre des extensions du langage de requtes. INGRES, dans sa dernire version offre des fonctionnalits tendues aux objets. L'autre approche, celle des SGBD-OO, consiste proposer un nouveau modle de base "orient objet" qui puisse tre gr par un systme de type SGBD. Plusieurs systmes sont d'ores et dj sur le march (O2, ONTOS, VERSANT, GEMSTONE,...). Il n'existe pas, contrairement au modle relationnel, de fondement formel et thorique permettant de donner une dfinition universelle du modle objet et chaque systme offre une solution spcifique. Toutefois, il existe des concepts communs que l'on doit retrouver dans tout modle orient objet, que l'on peut rsumer ainsi :
un objet est une collection d'lments de donnes structurs identifi par une rfrence unique : cette rfrence est l'"OID" (Object IDentifier); elle assure la possibilit de partage entre composants d'objets diffrents; les objets sont caractriss par des "proprits" : une proprit est une caractristique d'un objet dsigne par un nom, pouvant correspondre un attribut, une fonction ou un sous-objet composant; l'encapsulation fait que les donnes et les oprations, ou mthodes, portant sur elles sont modlises en mme temps; les types ou classes permettent de dfinir des ensembles d'objets ayant mmes caractristiques (le type tant utilis la compilation, pour la dfinition a priori des objets, alors que la classe est utilise l'excution pour l'instanciation des objets); les types et classes peuvent tre dfinis de faon hirarchique; l'hritage permet une classe d'objets de partager des oprations communes aux objets de la classe suprieure; une proprit d'un objet, hrite de la classe suprieure peut tre "surcharge" par la redfinition de cette proprit pour la classe de l'objet.
Les SGBD-OO apportent sans aucun doute de nombreux avantages par rapport aux SGBD relationnels classiques : facilits de manipulation d'objets complexes, extensibilit des types de donnes, mme formalisme de stockage des donnes et des programmes, hirarchie des classes d'objets et mcanisme d'hritage. En revanche, ils n'ont plus la simplicit du modle relationnel, le principe de la manipulation non procdurale des donnes, et l'avantage de la standardisation. C'est pourquoi, dans la grande majorit des applications actuelles, le relationnel reste la meilleure solution et les extensions "objets" du relationnel sont un bon palliatif ses lacunes. La migration vers un SGBD-OO ne s'impose que pour des applications
particulires o les performances du relationnel, aussi bien en temps machine qu'en temps de dveloppement seraient inacceptables