Tutoriel de Bases de Données Relationnelles

Tutoriel de Bases de Données Relationnelles

Accueil  > Supports pédagogiques > Cours rédigé > Protection des informations > Contraintes d'intégrité

Contraintes d'intégrité

Introduction

L'objectif des contraintes d'intégrité est d'assurer la cohérence logique de la Base de Données. Une contrainte d'intégrité est une assertion vérifiée par les données de la base, à tout moment. La conception de la base de données comprend non seulement un schéma relationnel mais aussi un ensemble de Contraintes d'Intégrité (CIs).

Classification des CIs

CIs structurelles

 -> liées au modèle relationnel

-> unicité de valeur de clé, ...

CIs comportementales

-> liées aux applications

-> "La moyenne des salaires n'est pas inférieur à 10_000"

CIs intra-relation

Une CI intra-relation met en jeu une seule relation :

  • CI de domaine : "Le degré d'un vin varie entre 5 et 15 degrés"
  • CI de non nullité : "Toute valeur d'un numéro de vin est connue"
  • CI d'unicité de clé : "Tous les numéros de vin sont différents"
  • CI de dépendance donctionnelle : "Le numéro de vin détermine le cru"
  • CI temporelle : "Le degré d'un vin ne peut que décroître"
  • CI d'agrégat : "La moyenne des quantités de vin bu par tous les buveurs ne doit pas excéder 10 litres"

CIs inter-relation

Une CI inter-relation met en jeu plusieurs relations :

  • CI référentielle : notion de clé étrangère. Ce type de CI est développé ci-après.
  • CI d'inclusion : l'ensemble des valeurs d'une colonne d'une relation est inclus dans l'ensemble des valeurs d'une colonne d'une autre relation. "Toute ville de résidence d'un buveur est une ville de résidence d'un producteur" ;
  • CI générale : "La somme des quantités livrées à un buveur est inférieur ou égal à la somme des quantités commandées par ce buveur"

CI référentielle

Une CI référentielle est un attribut (ou groupe d'attrs) d'une relation apparaît comme clé dans une autre relation. Par exemple : "Une récolte doit référencer un vin et un producteur existants".

La définition d'un CI référentielle entraîne un certain nombre de vérifications :  

  1. Insertion d'une récolte -> le vin et le producteur doivent exister
  2. Suppression d'un vin -> ce vin ne doit pas être récolté

Comment sont prises en compte les CIs dans les SGBDs ?

Quand les déclarer ?

Les CIs peuvent être déclarées dès la création du schéma de la BD (lors des CREATE TABLE). Mais ce schéma peut évoluer et les contraintes sur les données aussi. Il est donc heureusement possible d'ajouter, de mofifier, de supprimer des CIs tout au long de la vie d'une BD.

Comment les exprimer ?

Le seul langage d'interaction avec un SGBD reste SQL. Les CIs sont donc elles aussi exprimées en SQL ou à l'aid ed'extension de SQL.
Certaines extensions de SQL permettent aussi d'exprimer

Qu'offrent les SGBD concrètement ?

Les SGBD prennent finalement en charge peu de CIs (unicité valeur, non nullité, ...).Toutes les autres CIs définies lors de la conception de la BD doivent alors être prises en charge dans les programmes développés au dessus de la BD.

les CIs dans les normes SQL
  • SQL 86 : unicité de valeur, non nullité, vue avec "check option"
  • SQL 89 : domaine, clé, intégrité référentielle avec "rejet"
  • SQL2 : intégrité référentielle avec "cascade delete et update"
 Ingres
  • extension de SQL
  • n'importe quelle CI mono-rel
  • n'importe quelle CI multi-relations avec les procédures BD et les règles

Exemples de CIs en SQL

SQL 86

CREATE TABLE employe (

nom CHAR(20) UNIQUE NOT NULL,

sal INTEGER,

age INTEGER,

dir CHAR(20) ) ;

SQL 89

CREATE TABLE employe (

nom CHAR(20) PRIMARY KEY,

sal INTEGER CHECK  (sal > 0),

dpt CHAR20) REFERENCES depart(nom) ) ;

 

CREATE TABLE depart (

nom CHAR(20) PRIMARY KEY,

nb_e INTEGER CHECK  (nb_e > 0) ) ;

SQL 92

CREATE TABLE employe (

nom CHAR(20) PRIMARY KEY,

sal INTEGER CHECK (sal > 0),

dpt CHAR(20) REFERENCES depart(nom) ON DELETE CASCADE ) ;

Vous pouez aussi regarder l'exemple de création de la base des vins restreinte

Exemples de CIs avec Ingres

create integrity on EMPLOYE is SAL > 10_000 and AGE >= 18 and AGE <= 60
create integrity on EMPLOYE is  SAL > 10_000  or SAL is null

range of E,M is EMPLOYE

create integrity on EMPLOYE is E.SAL <= M.SAL or E.DIR /= M.NOM

Problèmes avec les CIs

Cohérence

Les Cis ne doivent pas définir de règles contradictoires.

Redondance

Les CIs ne doivent pas être redondantes.

VIN.Degré < 15 et VIN.Degré < 14 <==> VIN.Degré < 14

Optimisation

La vérification des CIs en permanence est extrêmement lourde. Des politiques de sélection des CI à vérifier très subtils ont été définis de façon à conserver des performances intéressantes. Il s'agit de délimiter le nombre minimal de données mises en jeu pour la vérification, effectuer la vérification sur certains types de mises à jour uniquement.

Notion de transaction

Une base de données est dite cohérente si toutes les CIs sont vérifiées.

Une transaction est une unité d'exécution atomique pour le SGBD. Il s'agit d' un ensemble de requêtes SQL qui s'exécute en "tout ou rien". Cet ensemble doit faire passer la BD d'un état cohérent à un autre état cohérent.

Contexte de vérification des CIs

Les CIs doivent être vérifiées lorsqu'il s'git d'une transaction avec mise à jour.

Vérification immédiate

Dans le cas de la vérification immédiate les CIs sont évaluées avant chaque requête de mise à jour.

si les CIs sont vérifiées

alors la mise à jour est faite

sinon la mise à jour est rejetée

Les CIs "simples (mono-relation : domaine, unicité, ...) répondent à ce mécanisme.

Vérification différée

Dans le cas de la vérification différée, les mises à jour sont exécutées. Les CIs sont évaluées à la fin de la transaction : les mises à jour ne satisfaisant pas les CIs sont défaites. Les CIs complexes (CIs référentielle, générale) répondent à ce mécanisme.

Notion de trigger

Définition

Un trigger est une règle spécifiant une action à exécuter sur la BD, quand une condition est vérifiée, suite à une mise à jour ou une interrogation. Ce mécanisme est aussi nommé déclencheur. Un trigger est de la forme :

sur <événement>

si <condition>

alors <action>

Exemple

sur MAJ de la relation PRODUIT

si PRODUIT.QTE < SEUIL

alors passer une commande du produit

[fil RSS du site]
Dernière mise à jour : 28/08/2009