Chapitre 2 : MODELES de BASES
DE DONNEES et GENERATIONS de SGBD
Dans le premier chapitre, nous avons précisé les caractéristiques
que devait présenter un modèle de données afin de décrire
- "modéliser" - correctement le monde réel : permettre la représentation
et la description des entités et de leurs données constitutives,
des liens qui les relient et de certaines assertions appelées contraintes
d'intégrité. Ces composants d'un modèle conceptuel
de données doivent autoriser une description de la réalité
qui soit le plus indépendante possible des capacités de définition
logique et de stockage physique des données par le système
logiciel appelé SGBD .
Il faut donc distinguer entre modèles
conceptuels, a priori indépendants des SGBD, et modèles logiques,
caractéristiques d'une génération de SGBD. Ces modèles
logiques sont eux-mêmes dépendants d'organisations physiques (placement
et méthodes d'accès) comme, par exemple, les graphes en arbres
ou en réseaux, seules structures offertes par la première génération
de SGBD, celle des modèles navigationnels, hiérarchique
et réseau.
Ces SGBD obligeaient à "voir"
- c'est à dire à traduire - une base de données comme un
ensemble d'enregistrements, reliés les uns aux autres par des ensembles
de pointeurs. Cette organisation fige les relations existant entre les différents
enregistrements de la base et impose un type de manipulation, la navigation,
qui consiste à suivre, d'enregistrement en enregistrement, les chaînes
de pointeurs. En fait, il serait préférable de parler de modèles
d'accès (physiques) plutôt que de modèles de données
(logiques) pour ces anciens SGBD. En effet leur organisation physique des données
imposait la méthode d'accès et, au delà, la nature des
langages de manipulation.
II.1. Les modèles de
conception indépendants des SGBD
Le modèle "Entité-Association"
("Entity-Relationship" ou ER), présenté au Chapitre 1, est contemporain
de ces premiers SGBD, qui seront décrits à la fin de ce chapitre.
C'est un modèle de conception, généralement utilisé
en mode graphique, indépendant des possibilités (logiques et physiques)
des SGBD. Pour cette raison il reste très populaire, d'autant que les schémas
de données qu'il permet de construire peuvent être traduits presque
automatiquement dans les modèles logiques des SGBD des différentes
générations : hiérarchique, réseau, relationnel et
même orienté objet.
Il a été au fil du
temps "enrichi" (Enhanced => EER) ou "complété" (ERC). Les nouveaux
modèles de conception orientés objet (OO) ont toutefois vocation
à le remplacer, surtout depuis leur récente unification avec l'
"Unified Modeling Language" (UML).
Le foisonnement des variantes de
l'ER et des modèles OO (OMT, Booch, OOSE...) ont entrainé une
certaine confusion chez ceux-là mêmes qui appréciaient la
clarté des schémas graphiques produits par l'ER ou ses successeurs.
Aussi tenterons-nous, en quelques courts paragraphes, de montrer que pour l'essentiel
(les concepts) ils présentent, au delà des différences
de notation, une progression continue et sans perte des acquis principaux.
II.1.1. Entités et individus
ou classes d'objets
L'entité , comme ensemble
d'individus de même type, est un concept auquel on peut facilement
substituer celui de classe d'objets ayant les mêmes types
(ou "structures") de données (et les mêmes "méthodes" pour
les manipuler). Les individus "instancient" les entités comme les objets
instancient les classes. Les individus comme les objets doivent avoir un nom commun
(celui de l'entité ou classe) et un identifiant unique et invariant
de leur naissance à leur mort, que le concept physique de clef sur un article
ne suggère qu'imparfaitement (on peut changer une clef pas un identifiant).
Ayant le même type ils sont de surcroît décrits par les mêmes
variables nommées : caractéristiques ou attributs
(synonymes). Ces variables peuvent être de structures simples ou complexes
: n-uplets (variables composites par ex. une Adresse) ou ensembles (variables
multivaluées par ex. un Prénom). Les formes graphiques représentant
entités ou classes sont différentes mais traduisibles l'une dans
l'autre comme illustré ci-dessous par l'exemple de l'entité PLAGE
:
N.B. l'attribut souligné
est un identifiant externe, il appartient au SGBD de créer le véritable
identifiant invariant (appelé pour cette raison identifiant interne ou
"surrogate")
II.1.2. Liens,
rôles et cardinalités
Entre les objets (ou les entités)
peuvent exister des liens nommés porteurs d'une sémantique commune
: le rôle. Ils peuvent lier des objets de classes différentes (comme
BAIGNEUR et PLAGE, pour exprimer le rôle AIMER ou le rôle SE_BAIGNER
ou un autre rôle) ou de même classe (comme BAIGNEUR, pour exprimer
un rôle comme PARENT_DE ou comme ENSEIGNE_A). Dans le modèle ER ces
liens sont représentés par des associations (il est interdit de
relier directement des entités entre elles), même si elles n'ont
pas d'attributs propres. Dans le modèle UML, si aucun attribut n'est associable
au lien, celui-ci se représente par une simple arc entre les classes qu'il
lie, sinon une classe association est ajoutée. Exemple :
Les cardinalités de ces liens
ou associations spécifient, pour chaque extrémité d'un
lien, c.à.d. pour chaque classe liée, le nombre d'objets pouvant
être reliés à un même objet de la classe à
l'autre extrémité. Les différentes notations ci-dessous
sont équivalentes :
On peut être plus précis
en spécifiant des cardinalités minimum et maximum, c.à.d.
au lieu de 1 l'une des paires (0,1)
ou (1,1), au lieu de n l'une des paires (0,n) ou (1,n), on peut aussi afficher
cette valeur n maximale, par exemple (0,3) ou (1,10)... Les dernières
notations de la figure précédente pour l'association - de plusieurs
à plusieurs, "n à n" - NAGEUR-aime-PLAGE pourraient être
utilisées comme ci-dessous :
(dans la 2e notation le rond est
un zéro et la barre verticale un 1)
Attention: dans le modèle
ER classique, quand les cardinalités (min,max) sont indiquées,
elles le sont généralement à l'inverse de toutes les notations
précédentes. En effet les liens directs entre entités étant
impossibles et l'association étant toujours considérée
comme une classe intermédiaire instanciable, cette inversion s'explique
pourvu que l'on passe bien par toutes les étapes de la traduction, ce
que nous illustrons ci-dessous pour l'association - de 1 à n - REGIONaffichePLAGE
:
(la raison pour laquelle
la "classe association" est notée par un double rectangle sera expliquée
plus loin)
II.1.3. Associations identifiantes
et/ou entités faibles
Les entités ou les classes s'opposent
aux associations ou aux liens en ce qu'elles sont définissables en elles-mêmes.
De même les identifiants de leurs individus ou instances sont autonomes.
Or il existe de nombreux cas dans les univers à modéliser où
certaines entités ne sont définies que relativement à
d'autres, et les identifiants de leurs individus composés d'un identifiant
d' "individu parent" suivi d'un identifiant propre en tant qu' "individu
enfant". Dans ce cas on dit que l'entité correspondante est "faible"
et que l'association parent-enfant est "identifiante". Pensez par exemple aux
différents comptes bancaires d'une même client d'une banque, aux
différentes personnes à la charge d'un même assuré
social, aux différents joueurs d'une même équipe de foot,
aux différents bureaux dans un même couloir, etc... La suppression
de l'individu parent entraine celle de tous les individus enfants liés
(suppression en "cascade"). Les différentes notations en usage sont illustrées
par l'exemple classique ci-dessous :
Dans cet exemple les COMMANDE et
PRODUIT sont des entités "fortes" par opposition à LIGNE_CDE (rectangle
doublé) qui est une entité "faible, dont le lien (trait continu)
ou l'association (lozange doublé) identifiant à gauche se distingue
du lien (trait discontinu) ou de l'association (lozange simple) non identifiant
à droite.
II.1.4. Agrégations
Les agrégations sont des associations
ou liens particuliers ayant la sémantique "composé-composant".
La suppression d'un "composé"
peut ou non entrainer celle des "composants" ("pièces détachées"
irrécupérables ou récupérables!). Réciproquement
la suppression d'un "composant" peut ou non entrainer la suppression du "composé"
(une voiture sans roue ne change pas d'identité, une voiture avec un
nouveau chassis est une autre voiture...). La notation ER classique était
insuffisante pour rendre compte de ces surcharges sémantiques. La notation
UML en rend compte assez précisement comme illustré ci-dessous
II.1.5. Généralisation
et spécialisation
C'est le couple de concepts le plus
important pour enrichir le modèle ER. C'est un des concepts fondamentaux
de l'approche orientée objet. Entre une classe, par exemple d'Employés,
et une classe plus générale, par exemple de Personnes, le lien ou
l'association est du type "EST-UN" (IS-A in english) : un Employé est une
Personne. Même si les individus de la classe spécialisée (Employés)
peuvent avoir une identification locale à cette sous-classe, il est entendu
qu'ils peuvent d'abord être identifié en tant qu'individus de la
super-classe (Personnes). Plus généralement un individu d'une sous-classe
"hérite" de tous les attributs de la super-classe. Le lien réciproque
de la généralisation est la spécialisation. Selon que les
sous-classes d'une même classe forment ou non une partition de cette classe,
on dit que la spécialisation est complète ou non. Différentes
classes se généralisant dans une classe par l'opération d'union
sont appelées des "catégories" pour cette classe. Les notations
varient un peu entre les modèles ERC, .., OMT, UML. Le principal changement
est apparu entre l'ER classique qui dessinait autant d'associations que de liens
"Est-un" et les modèles suivants qui ont cré un nouveau symbole
pour un noeud arborescent liant une super-classe à plusieurs sous-classes.
II.1.6. Autres concepts
Il est très vite apparu nécessaire
d'ajouter des contraintes à une association, comme, par exemple
pour une association parent-enfant, d'ordonner les individus liés, ou des
contraintes entre associations, comme, par exemple une contrainte d'exclusion
pour le couple d'associations "défendu_par" et "accusé_par", ou,
pour les associations de type "Est-un", une contrainte de partitionnement éventuel.
Le fait que toute association peut ou non créer une association inverse
(affirmer qu'un père "connait" ses enfants, ce n'est pas automatiquement
affirmer que chaque enfant "connait" son père...) est aussi une surcharge
que les modèles ajoutent souvent. D'autres concepts, comme celui de "qualificatif"
(dans le modèle UML) ou celui d' "assertion" (dans l'ERC) ont aussi été
ajoutés pour représenter d'autres contraintes que celles évoquées
ci-dessus. Tous les modèles actuellement utilisés buttent sur l'infinie
richesse du langage naturel pour l'expression des contraintes...
(NDLR. la fin de ce chapitre n'a qu'un intérêt historique
et pédagogique. On peut aller directement à
la conclusion)
II.2. Le modèle hiérarchique
Longtemps considéré comme
le seul modèle permettant aux SGBD d'atteindre les performances exigées
en production, le modèle hiérarchique possède effectivement
la capacité de traiter rapidement des informations organisées sous
la forme d'une hiérarchie stricte mais, par contre, interdit tout autre
type de représentation, limitant ainsi considérablement la puissance
d'expression du modèle. Le SGBD le plus connu dans cette catégorie
est IMS, produit ancien de IBM, très
répandu dans les applications de production.
II.2.1. Les objets du modèle
Les concepts de base du modèle
sont le champ, plus petite unité de données possédant
un nom, et l'article
Définition : article
suite de champs, portant un nom
et constituant l'unité d'échange entre la base de données
et les applications. Les articles sont reliés entre eux par des liens
hiérarchiques : à un article père correspondent N articles
fils.
La notion de type d'article qui
désigne le schéma d'un article (description du contenant) se distingue
ici de celle d'occurrences d'article qui représentent les différentes
valeurs stockées de la base.
Définition : arbre d'articles
collection d'articles reliés
par des associations père-enfants organisées sous forme d'une
hiérarchie.
Une base de données hiérarchique
est une base constituée d'une forêt d'articles.
On peut formuler quelques remarques
sur la structure hiérarchique :
- il y a un seul type article
racine ;
- la racine peut avoir un nombre quelconque de types d'article enfant ;
- chaque type d'article enfant de la racine peut avoir un nombre quelconque
de types d'article enfant, et ainsi de suite ;
- à une occurrence d'un type d'article donné, peuvent correspondre
0, 1 ou N occurrences de chaque type d'article enfant ;
- une occurrence d'article enfant ne peut exister sans l'occurrence d'un article
père. Détruire une occurrence d'article père, détruit
par conséquent également toutes les occurrences de ses enfants.
Exemple : représentation hiérarchique
d'une base de baigneurs
Dans cet exemple, POLLUTION
représente différentes mesures de pollution. Pour exprimer qu'une
baignade a eu lieu sur une plage et a été le fait d'un nageur,
il a fallu dupliquer l'attribut "nom de plage" (NOMP).
En fait, dans certains systèmes hiérarchiques, cette duplication
est simplement logique (pas de duplication physique) : la valeur de NOMP
n'est présente que dans une des deux hiérarchies, l'autre comportant
un simple pointeur sur la valeur.
II.2.2. Langage de manipulation
de données
Le principe de la manipulation d'une
base hiérarchique (nous prenons ici l'exemple de DL1
de IBM) consiste à parcourir en profondeur d'une structure
arborescente : on part de la racine et on visite successivement tous les fils
depuis le fils gauche jusqu'au droit.
Dans notre exemple, les Ri sont des
occurrences de régions, les Paii des occurrences de plage, les Piii des
occurrences de mesures de pollution.
DL1 utilise
des curseurs permettant de mémoriser différentes positions sur
la base de données. A un accès en recherche, est associée
une qualification de chemin constituée de différentes qualifications
d'articles, connectées par des ET ou des OU
logiques, et formant des critères élémentaires <nom_de_champ
comparateur valeur>. Ces qualifications sont déclarées préalablement
et invoquées ensuite par les programmes qui utilisent des opérations
GET UNIQUE (GU, permet de rechercher
la première occurrence satisfaisant la qualification), des opérations
GET NEXT (GN, recherche l'occurrence
suivante), des GET NEXT WITHIN PARENT (GNP,
idem GN, mais uniquement parmi des descendants du parent
courant), etc.
II.2.3. Actualité du
modèle hierarchique
Si l'on considère la représentation
traditionnelle des occurences d'articles sous forme de "fiches", on s'aperçoit
que toute solution au problème du placement physique d'un ensemble de fiches
de différents types est un partitionnement de cet ensemble suivant une
hiérarchie choisie sur ces types. Un exemple intéressant est celui
des fiches de type "Management Information Base" (MIB) associées à
chaque noeud d'un réseau gérable par le "Simple Network Management
Protocol" (SNMP). Le langage associé a de nombreux points de ressemblance
avec les langages de parcours des bases de données hierarchiques tels que
DL1.
II.3. Le modèle réseau
Ce modèle a été
introduit en 1961 par BACHMAN. Il propose une utilisation
de structures de listes afin de relier sémantiquement des entités.
Il permet ainsi une meilleure représentation de la réalité
que le modèle hierarchique. Un des intérêts du modèle
fut l'existence d'une proposition de normalisation émise par le groupe
DBTG (Data Base Task Group) du Comité CODASYL
(COnference on DAta SYstem Language). On parle ainsi souvent de modèle
CODASYL pour les systèmes réseaux qui suivent
ces recommandations. Deux niveaux de recommandations ont été émis
: l'un, en 1971, conseillait la séparation d'un niveau de schéma
externe et d'un niveau de schéma interne/conceptuel ; le second, en 1978,
préconisait les trois niveaux de schéma -interne, conceptuel, externe-.
Seul le premier niveau de recommandations a été réellement
suivi par les produits. En 1978, il était déjà tard pour
voir les produits prendre en compte ces recommandations : l'heure du relationnel
avait déjà sonné pour les investissements à long terme
; quasiment aucun SGBD réseau réellement nouveau
n'a été conçu depuis cette date. Mais à l'heure où
les SGBD relationnels sont à leur tour défiés par les nouveaux
SGBD orientés objets, il est encore intéressant de comprendre ce
que les SGBD réseau avaient apporté de plus novateur : l'expression
des requêtes sur les données dans une logique de chemin (c.à.d.
de navigation ). Parmi les SGBD construits selon ce modèle, encore
largement utilisés, on peut citer IDS2 chez
BULL, IDMS de CULLINET,
TOTAL de CINCOM, SOCRATE
.
II.3.1. Description des objets
et des associations
Les objets modélisés dans
la base de données sont déclarés comme des articles.
Définition : article
un champ est la plus petite
unité de données possédant un nom;
un agrégat est
une collection de champs rangés consécutivement et possédant
un nom;
un article est une collection
d'agrégats et de champs rangés côte à côte
dans la base; il constitue l'unité d'échange entre la base
et les applications.
Définition : ensemble
l'association entre un article
appelé propriétaire et N articles membres de même type
constitue un ensemble (SET).
Le type ensemble ainsi constitué
porte un nom ; un type ensemble permet d'associer un type d'article propriétaire
à un type d'article membre.
Il ne reste plus qu'à définir
une base de données réseau :
Définition : base de
données réseau
Une base de données réseau
est composée d'articles reliés entre eux par des ensembles.
La description de la structure des données
d'une base réseau utilise un langage de description du schéma des
données. Cette déclaration constitue la création de la structure
vide de la base, en décrivant les articles et les associations entre articles
formant des ensembles.
Le schéma d'une base de données
réseau se représente par un graphe des types, parfois appelé
diagramme de BACHMAN.
Définition : graphe des
types
une base de données réseau
se représente à l'aide d'un graphe des types où :
- les sommets représentent
les types d'articles ;
- les arcs représentent les types d'ensembles.
Chaque sommet est valué
par le nom du type d'article associé ; chaque arc est valué
par le nom du type d'ensemble qu'il représente ; chaque arc est orienté
du type propriétaire vers le type membre.
Exemple :
déclaration d'un schéma
réseau d'une base de baigneurs, dans le langage de définition
de données CODASYL
RECORD NAME
IS NAGEUR
02 NN TYPE
IS FIXED BIN 3
02 NOM TYPE IS CHAR 15
02 PRENOM TYPE IS CHAR 15
02 QUALITE TYPE IS CHAR 10
RECORD NAME IS
PLAGE
02 NP TYPE
IS FIXED BIN 3
02 NOMP TYPE IS CHAR 20
02 TYPE TYPE IS CHAR 10
02 REGION TYPE IS CHAR 20
02 POLLUTION TYPE IS CHAR 10
RECORD NAME IS BAIGNADE
02 DATE TYPE
IS CHAR 6
02 DURÉE TYPE IS DEC 3
SET NAME IS BAIN
OWNER IS NAGEUR
MEMBER IS BAIGNADE
SET NAME IS LIEU
OWNER IS
PLAGE
MEMBER IS BAIGNADE
Le graphe des types correspondant
à cette déclaration est le suivant :
Pour bien voir la notion d'ensemble,
on peut montrer une représentation du graphe au niveau des occurrences
: ici, nous avons représenté deux occurrences d'ensemble de type
BAIN (Dupond qui prend deux bains de 20 et 15 minutes,
et Durand qui prend un bain de 5 minutes), deux occurrences d'ensemble de type
LIEU (à Trégastel sont pris les bains de
20 minutes et de 5 minutes, à Nice est pris le bain de 15 minutes). Un
ensemble de pointeurs existe pour chaque occurrence d'ensemble et lie les membres
à leur propriétaire.
Cette approche impose deux limitations
: (i) un type d'article ne peut être à la fois propriétaire
et membre dans un même ensemble ; (ii) une occurrence d'article ne peut
appartenir à plusieurs occurrences du même ensemble (pour des raisons
physiques).
Remarque 1:
Une association ne peut relier
que deux types d'articles différents. La configuration suivante est,
par exemple, impossible :
La solution est de créer
deux types d'article : un type "pièce composante", un type "pièce
composée"
Cependant, dans certains cas, une
pièce est à la fois pièce composée et pièce
composante ; par exemple :
Faire figurer le moteur en pièce
composée et en pièce composante constitue une assez mauvaise solution
: cela créer une redondance.
Remarque 2 :
Le modèle impose d'autre
part qu'une occurrence d'article n'appartienne qu'à une seule occurrence
d'un même type d'ensemble. Ainsi la configuration suivante est impossible
:
En effet chaque article est déclaré
appartenir à un type d'ensemble (comme propriétaire ou comme membre)
; pour ce type d'ensemble, l'article se voit adjoindre un ensemble de pointeurs
lui permettant de se positionner dans ce type d'ensemble. Il ne peut donc appartenir
qu'à une seule occurrence de ce type d'ensemble car un seul jeu de pointeurs
est prévu par type d'ensemble d'appartenance.
II.3.2. Types
d'informations d'un schéma CODASYL
Comme nous l'avons dit en introduction,
le modèle réseau ne sépare pas clairement la description
conceptuelle et la description interne du schéma. En fait, en plus de la
structure déjà décrite par les clauses RECORD
NAME, SET NAME, OWNER, MEMBER, le schéma CODASYL
contraint l'administrateur à préciser l'organisation physique -
fichiers AREAS - et la description des chemins d'accès - clés, références
- qui seront utilisés.
Les modes de placement d'une base
CODASYL sont assez particuliers et ne seront pas précisés
ici Le chapitre 7 du polycopié présente des méthodes de
placement générales et des développements sur le hachage.
II.3.3. Schéma et sous-schéma
CODASYL
La déclaration d'un schéma,
qui crée la structure vide, est donc préalable à toute action
et manipulation d'articles de la base de données. Très statique,
cette caractéristique du modèle impose que toute modification du
schéma ne s'effectue que sur une base vide : ainsi une évolution
du schéma entraîne un déchargement , puis un rechargement
complet de la base.
On s'affranchit cependant en partie
de cette dépendance en déclarant un sous-schéma qui, en
CODASYL, correspond à la notion de schéma
externe. Un sous-schéma est le sous-ensemble du schéma vu par
un programme d'application. Le sous-schéma permet de redéfinir
l'ordre, les noms, les caractéristiques des articles. Recomposer une
vision différente de la structure de la base n'est cependant pas possible
(comme ce sera possible en relationnel, voir le chapitre 6).
Ordonnancement des articles dans
un ensemble
La déclaration de chaque ensemble,
précise l'ordre dans lequel les articles membres insérés
dans une occurrence d'ensemble. Ainsi la clause
ORDER IS
PERMANENT
INSERTION IS {FIRST | LAST | PRIOR | SORTED BY DEFINED KEY}
[KEY IS nom-de-donnée]
accompagne la déclaration d'un
type d'ensemble, pour préciser la position d'insertion des occurrences
d'articles membres dans une occurrence d'ensemble de ce type. L'insertion s'effectue
en première position (FIRST), en dernière position
(LAST) ou par rapport au pointeur courant (PRIOR
ou NEXT). Dans le cas où l'on désire qu'un
ordre soit maintenu sur l'ensemble (SORTED BY DEFINED KEY),
on ajoute la clause KEY IS nom-de-donnée.
Point d'entrée dans une
occurrence d'ensemble
Pour chaque type d'ensemble, on précise
dans le schéma comment seront accédés les articles de l'ensemble.
Il existe deux possibilités :
- en fournissant la DBK
du propriétaire de l'occurrence d'ensemble ; la clé sera alors
un paramètre des programmes qui effectueront les accès. La clause
du schéma est :
SET SELECTION
IS THRU nom-d'ensemble OWNER IDENTIFIED BY CALC KEY
- par application, ce qui signifie
que le propriétaire pur un ensemble aura été repéré
préalablement à une intervention sur un des membres. Dans
ce cas, les accès aux membres seront toujours effectués par
la navigation (voir § II.2.4) exprimée dans le programme d'application.
La clause est dans ce cas :
SET SELECTION
IS TRHU nom-d'ensemble OWNER IDENTIFIED BY APPLICATION
Exemple de schéma de placement
On donne ici un exemple de déclaration
du schéma de placement d'une base de baigneurs à quatre types
d'articles (REGION, PLAGE, BAIGNADE, NAGEUR) et trois
types d'ensembles (LOCALISATION, BAIN, LIEU).
Plutôt que de donner une écriture
déclarative du schéma, nous illustrons l'organisation dans trois
fichiers différents : F_PLA, F_NAGEUR et F_BAIGNADE.
Les articles de type RÉGION sont placés par
hachage sur un numéro de région (NR) dans
un fichier F_PLA (la clause LOCATION MODE
IS CALC USING NR WITHIN F_PLA est explicitée lors de la déclaration
du type RÉGION). Les articles de type PLAGE
sont placés par proximité dans ce même fichier (LOCATION
MODE IS VIA LOCALISATION WITHIN AREA OF OWNER). Les articles de type
NAGEUR sont stockés dans un fichier NAGEUR
par un hachage sur le nom de nageur NOM (clause LOCATION
MODE IS CALC USING NOM WITHIN NAGEUR associée à la déclaration
du type NAGEUR). Enfin, les articles de type BAIGNADE
sont placés dans un fichier F_BAIGNADE qui leur
est propre, mais avec une organisation par homothétie qui les range en
fonction des valeurs des nageurs ayant effectué ces baignades (clause
LOCATION MODE IS VIA BAIN WITHIN F_BAIGNADE). Cette organisation
favorise évidemment les questions qui évoquent, par exemple, les
baignades de "Dupond", au détriment des questions recherchant les baignades
ayant eu lieu sur la plage de "Quiberon".
II.3.4. La navigation CODASYL
La nature du langage de manipulation
de données dans un système réseau est largement déterminée
par la structure physique des informations. Pour accéder à une information,
il faut préciser le chemin utilisé pour atteindre cette information.
Le langage indique un chemin de pointeurs à suivre. On parle ainsi de langage
navigationnel, l'idée étant de naviguer dans la base de données
par une succession de déplacements. A un instant donné, on occupe
une position précise dans la base.
Ce type de manipulation impose un
accès par programmes. Une utilisation interactive n'est guère
envisageable avec un SGBD réseau : elle s'avérerait
en effet beaucoup trop lourde. Ce n'est qu'avec l'apparition de modèle
relationnel que les langages de manipulation de données deviendront réellement
interactifs.
Une fois un schéma et un sous-schéma
définis, les programmes d'application peuvent invoquer le SGBD
à l'aide de verbes-clés du langage de manipulation. Ces verbes
sont en général inclus dans un programme COBOL
(ou PL1, Pascal, C…). Il sont de quatre types :
- la recherche d'articles : FIND
;
- les échanges d'articles entre programmes d'application et SGBD
: GET et STORE ;
- les mises à jour : ERASE, MODIFY, CONNECT, DISCONNECT
;
- le contrôle : READY, FINISH.
La recherche d'article (FIND)
qui consiste à positionner le curseur courant sur un article particulier,
se distingue des échanges (GET et STORE)
qui utilisent un tampon pour charger ou récupérer un article. La
notion de curseur est donc très importante dans ce modèle.
Définition : curseur
pointeur courant contenant la
clé-base-de-données (DBK) du dernier article
manipulé dans une collection d'articles, qui permet à un programme
de se déplacer dans la base.
Afin de faciliter les déplacements,
un programme qui s'exécute dispose de plusieurs curseurs (en fait de plusieurs
positions courantes) dans des ensembles différents:
- un curseur dans chaque type
de fichier référencé ;
- un curseur dans chaque type d'ensemble référencé ;
- un curseur dans chaque type d'article référencé ;
- un curseur courant sur le dernier article lu.
Un FIND particulier
précise la position des curseurs. Cependant les échanges d'articles
s'effectuent uniquement sur l'article pointé par le curseur courant.
L'accès à un fichier
(positionnement du curseur de fichier) s'obtient par la clause :
FIND
{ FIRST | LAST | NEXT | PRIOR | Ième } nom-d'article WITHIN nom-de-fichier
De la même façon, l'accès
par un ensemble sera demandé par :
FIND
{ FIRST | LAST | NEXT | PRIOR | Ième } nom--d'article WITHIN nom-d'ensemble
Se positionner sur le propriétaire
de l'occurrence d'ensemble courante est également possible :
FIND OWNER WITHIN
nom-d'ensemble
Enfin, une recherche sur clé
est possible en connaissant la Clé-Base-de-Données :
FIND
nom-d'article DB-KEY IS paramètre
Exemple
Quelles sont les plages où
se sont baignés d'excellents nageurs pendant le mois d'août 89
?
READY
F_baignade, F_nageur
FIND FIRST nageur WITHIN F_nageur
PERFORM UNTIL fin-de-fichier
GET nageur
IF qualité IN nageur = 'excellent'
FIND FIRST
baignade WITHIN bain
PERFORM UNTIL fin-de l'ensemble
GET baignade
IF date BETWEEN 01/01/89 AND 31/08/89
FIND
OWNER WITHIN lieu
GET plage
PRINT NOMP
END_IF
FIND NEXT baignade
END_PERFORM
END_IF
FIND NEXT nageur WITHIN F_nageur
END_PERFORM
FINISH F_plage, F_baignade, F_nageur.
Remarquez que différentes méthodes
permettent de répondre à la question posée ; on aurait très
bien pu rentrer dans le fichier F_plage par les plages, et aller voir, pour chacune
des baignades de chacune de ces plages, s'il ne s'agissait pas d'un excellent
nageur.
La formulation de la question n'est
pas plus compliquée ; le lecteur réfléchira cependant au
coût potentiel de cette seconde exécution… Il s'agit là
d'un problème inhérent aux langages navigationnels, où
toute la responsabilité des performances pèse sur le programmeur.
Dans les systèmes relationnels, cette responsabilité sera, nous
le verrons, confiée au système.
II.4.
Conclusions
La modèles pour produire des
schémas de bases de données ont suivi deux histoires parallèles:
les modèles de définition conceptuelle , qui cherchent la
plus grande richesse sémantique plus que la facilité d'implémentation
sur un SGBD, ont suivi une voie propre depuis l'ER de Chen; les modèles
d'implémentation logique, liés aux structures de stockage
et aux langages de manipulation des SGBD, ont connu une histoire faite de continuités
et de ruptures (environ tous les 10 ans) du modèle hierarchique au modèle
objet, fortement contrainte par les phénomènes de diffusion et de
parc installé. A l'heure de la "convergence relationnel-objet" (et du SQL3)
on se plait à espérer une "convergence logique-conceptuel".
II.5. Références
[Bachman 73] C.
W. BACHMAN : "The Programmer as Navigator", Communications of the
ACM, Vol 16, N°11, Novembre. 1973.
[Chen 76] P. P. CHEN
: "The Entity-Relationship Model - Towards a Unified View of Data",
ACM, Vol 1, N°1, Mars. 1976.
[CODASYL 71] CODASYL
DATA BASE TASK GROUP : "Report", Avril 1971, ACM, New-York.
[CODASYL 78] CODASYL
Programming Language Committee "COBOL Journal of
Development", 1978.
[Parent et S. 85] C.
PARENT, S. SPACCAPIETRA : "An algebra for a general Entity-Relationship
model", IEEE, Transactions on Software Engineering, July 1985.
[RFC 1066 et 1213] "Management
Information Base for Network Management of TCP/IP-based internets".
[Rumbaugh et al. 91] J.
RUMBAUGH, M. BLAHA, W. PREMERLANI, F. EDDY et W. LORENSON : "Object-Oriented
Modeling and Design", Prentice Hall, Englewood Cliffs, NJ, 1991.
[UML 97] http://www.omg.org/docs/doclist-97.html,
"UML1.1 (OMG)", 1997.
Chapitre 3