[Next] [Previous] [Top]

7 Règles d'intégrité

7.1 Introduction

Définition 28

Une règle d'intégrité est une condition (prédicat) qui peut être verifié de manière algorithmique.

Terminologie: on dit d'une règle d'intégrité qu'elle est:

validée

validée par un traitement

transgressée

violée

7.1.1 Problématique



a) Observation, analyse
Une ri fait partie de la modelisation. Elle exprime une règle de cohérence. On dira qu'une BD est cohérente si elle valide toutes les ri qui ont été défini ( c-à-d celles retenues pour l'implémentation).

Exemple:

VOITURE (NoVoiture Date1erecirc Daterev)

On a la ri: Daterev doit être postérieure à Date1erecirc)

Chaque création de Voiture doit être accompagnée d'un bout de programme qui valide cette RI.

Constatation
b) Implémentation des règles d'intégrité

7.1.2 Nouveaux rôles des règles d'intégrité

a) Observation, analyse.
Problème: quel est le degré d'intervention que peut se permettre un analyste dans son travail? Il faut faire attention de ne pas prendre ses desirs pour des réalités.

C'est à partir des invariants (ceux-ci constituent un domaine fermé, on n'y touche pas) que l'analyste va poser des questions précises et pertinentes à ses interlocuteurs.

b) Implémentation des règles d'intégrité.

7.2 Spécification d'une règle d'intégrité

La spécification d'une ri comporte les étapes suivantes:

  1. Description de la ri éventuellement en français

  2. Expression de la riri de manière formelle (relationnel). Cette expression doit être indépendante des actions (créer, modifier, mise à jour)

  3. Définir le contexte de la ri. Le contexte est l'ensemble des relations qui sont concernées (R1...R1).

  4. Définition de la portée de la ri. La portée indique les opérations qui risquent d'entrainer une non validation d'une ri.On définit la portée sans considérer les autres règles d'intégrité, exceptés les dépendances existentielles supposées validées.Solution en cas d'echec: que faire quand la ri est transgressée.



Exemple: Soit la base de données formée sur les relations suivantes:

OUVRIER (NOV, NOMOV)

MACHINE (NMH, TYPEMH)

COMPETENCE (NOV, TYPEMH)

AFFECTATION (NH, NP, NLOT, NOV, NMH)



Spécification d'une règle d'intégrité:

  1. Description: un ouvrier ne peut être affecté à une machine que s'il a la compétence de conduire des machines de ce type.

  2. Expression formelle:

(AFFECTATION * MACHINE) [NOV, TYPEMH]Õ COMPETENCE [NOV, TYPEMH]

  1. Contexte: Affectation Machine TypeMH Ouvrier Compétence.

  2. Portée:

Raisonnement:

On part d'un état cohérent de la base, on applique une primitive (création, m-à-j, suppression) et on regarde si on peut obtenir un état incohérent de la base. Pour la création et la suppression, on marque oui si la ri risque d'être transgressée par la primitive et on marque non sinon. Concernant la mise à jour, on inscrit dans le tableau les attributs dont la modification risque de transgresser la ri.

7.3 Implantation des règles d'intégrité.

Autour d'une relation on va construire un ensemble de primitives qui sont des opérations élémentaires et atomiques de modification de la base. Ces primitives sont également constistantes.

Exemple:

Soit R (ABC) et une entité abc de R et soit l'opération modifier abc en abc'.

Question: est-ce-que cette opération est élémentaire?

Il ya deux manières de faire cette opération:

abc --> abc'

abc --> xc6

xc6 --> abc'

Du point de vue physique, puisque on supprime d'abord abc, il faudra chercher une place libre pour abc'

Du point de vue logique, on supprime l'entité abc, ce qui n'est pas conforme à la réalité puisque seule la valeur c de l'entité change en c'.

Du point de vue conceptuel, quand on supprime l'entité abc il ya un certain nombre de ri qui vont être verifiés ce qui peut entrainer une serie de suppressions. Il peut en résulter une perte d'informations car quand on recrée l'entité abc' on ne gère pas ces suppressions. On a une opération élémentaire; en la transformant en plusieurs opérations on n'a pas le même résultat.

Nous avons vu qu'il existait trois types de primitives qui peuvent occasionner une modification de l'état de la base de données:

  1. créer une entité d'une relation.

  2. supprimer une entité d'une relation.

  3. mettre à jour un attribut d'une entité d'une relation.

A ces primitives, on va ajouter les trois suivantes (mais ceci ne change rien au tableau de portée défini précédemment):

  1. créer un ensemble d'entités d'une relation.

  2. mettre à jour un ensemble d'entités d'une relation.

  3. supprimer un ensemble d'entités d'une relation.

Il faut noter que la spécification d'une ri dépendra du fait qu'on a une primitive faisant passer d'une valeur claire à une valeur obscure, d'une valeure claire à une valeur claire, d'une valeur obscure à une valeur claire.

Implantation.
On entoure la relation R des six primitives.

Intérêt de l'approche:

Inconvénients de l'approche:

7.4 Typologie des règles d'intégrité

7.4.1 Règle d'intégrité de nature unitaire et règle d'intégrité ensembliste

Une règle d'intégrité de nature unitaire s'applique à chaque entité d'une instance de relation.

Une règle d'intégrité ensembliste s'applique à une instance d'une relation.

Exemple:

Soit une relation R (ABC), la dépendance fonctionnelle A-->B est une ri ensembliste parceque elle doit être validée par toutes les entités d'une instance de R.

Pour une personne dont l'état civil est célibataire, la date de mariage est une valeur impossible. On a ici une ri de type unitaire (individuelle).

7.4.2 Règle d'intégrité statique et règle d'intégrité dynamique

Une ri statique est une règle qui s'applique à tout état de la base.

Une ri dynamique est une règle qui doit être validée pour tout changement d'une base de données.

Exemple:

Soit la relation PERSONNE( Noavs Nom Etat_civil Adresse)

La ri "l'état-civil ne peut pas passer de célibataire à divorcé" est une ri dynamique. Elle doit être validée pendant le traitement qui fait passer la base de donnée de l'état E1 à l'état E2.

Il est intéressant de transformer une ri dynamique en une ri de nature statique pour pouvoir faire des contrôles facilement. Pour cela, il est possible qu'il faille changer la modélisation. Par exemple la relation Personne plus haut serait décomposée en deux relations:

- P ERSONNE ( Noavs nom Adresse)

- ETATCIVIL_PERS( Noavs Datedeb Etat_civil)

7.5 Mise en évidence de règles d'intégrité

On essaie pour une base de données d'avoir la complétude et la fiabilité.

7.5.1 Etats

Exemple1: CDE (nocde noclient état)

domaine de état:{livré, pas-livré}

Exemple2: Etat-civil

Ex. Pour passer de marié à célibataire, il faut un traitement d'annulation de mariage. Ce passage n'est pas possible autrement.

7.5.2 Capacité, quantité, date, durée

Le plus souvent, il y a derrière ce type d'attributs une règle d'intégrité.

Exemple:

CDE (nocde, nblcde, prix, datecom)

LCDE (nocde, nolcde, noprod, nbprod, pxunit)

LIVR (nolivr, nocde, datelivr)

ri1: nblcde = somme des lcde telsque cde.nocde=lcde.nocde

ri2: datelivr est postérieure à datecom

7.5.3 Cycles dans une modélisation

Dès qu'on a un cycle il faut se poser la question de savoir s'il n'y a pas de ri derrière.

Exemple: Soit la base de données formée sur les relations suivantes:

OUVRIER (NOV, NOMOV)

MACHINE (NMH, TYPEMH)

COMPETENCE (NOV, TYPEMH)

AFFECTATION (NH, NP, NLOT, NOV, NMH DATE)

On a la ri:

(Affectation * Machine) [Typemh] ÕCompétence [Typemh]

7.6 Validation d'un ensemble de règles d'intégrité

a) On a un ensemble de ri I={i1, i2, ...in} et pour chaque ri, sa portée.

Exemple: R(AB) S(AC) T(AD) U(DE)

ri1 R[A] Õ (S*T*U)[A]

ri2 R[A] Õ S[A]

ri3 T[d] Õ U[D]

De ri1 et ri2 on peut déduire R[A] Õ (S*T) [A], on obtient ainsi une ri qui permet d'exprimer à la fois ri1 et ri2 et plus facile à valider. Ce type d'opération permet d'avoir un ensemble de ri irredondant et élémentaire.

b) Soit la base de données formée sur les relations suivantes:

EMP (Noemp, Nodept)

PROJET (Noproj, Nodept)

AFF (Noproj, Noemp)

et soit un ensemble de ri irredondants et élémentaires:

ri1 : Noemp -->Nodept

ri2 : Noproj -->Nodept

ri3 : Aff[Noemp] Õ Emp[Noemp]

ri4 : (Aff *Emp) [Nopr, Nodept] Õ Projet

Il faut valider ri4

Pour cette primitive, la règle ri4 peut être simplifiée en:

" E xce Noemp, il n'existe pas Aff(Nopr,E)

valider ri3 : $ exce Emp

ri4 : " d xce Nodept tq (noe, d)xce Emp alors (noproj,d) xce Projet

on a: (noproj, e.nodept) xce Projet

La simplification des ri entraîne un gain de temps considérable.

Implantation des ri(2): approche orientée objet


Ici il s'agit des trois primitives traditionnelles: créer, mise à jour, supprimer et de tous les autres traitements.

Inconvénient de la méthode: il faut connaître toutes ces primitives.


[Next]
[Previous] [Top]

©1994 - Michel Léonard, CUI-Université de Genève

Generated with CERN WebMaker