* OBJECTIF
assurer la cohérence logique de la Base de Données
* DEFINITION
assertion vérifiée par les données de la base, à tout moment
* CONCEPTION D'UNE BD RELAT.
-> un schéma relationnel
-> un ensemble de Contraintes d'Intégrité (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
-> met en jeu une seule relation
-> non nullité d'un attribut
* CIs INTER-RELATION
-> met en jeu plusieurs relations
-> intégrité référentielle
* CI DOMAINE
"Le degré d'un vin varie entre 5 et 15 degrés"
* CI NON NULLITE
"Toute valeur d'un numéro de vin est connue"
* CI UNICITE DE CLE
"Tous les numéros de vin sont différents"
* CI DEPENDANCE FONCTION.
"Le numéro de vin détermine le cru"
* CI TEMPORELLE
"Le degré d'un vin ne peut que décroître"
* CI AGREGAT
"La moyenne des quantités de vin bu par tous les buveurs ne doit pas excéder 10 litres"
* DEFINITION
un attribut (ou groupe d'attrs) d'une relation apparaît comme clé dans une autre relation
=> contrainte inter-relation
* EXEMPLE
"Une récolte doit référencer un vin et un producteur existants"
* VERIFICATION DE CETTE CI
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é
* CI REFERENTIELLE
-> notion de clé étrangère
* CI 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 GENERALE
"La somme des quantités livrées à un buveur est inférieur ou égal à la somme des quantités commandées par ce buveur"
* QUAND LES DECLARER ?
-> à la création du schéma BD
-> au cours de la vie de la BD
* COMMENT LES EXPRIMER ?
-> à l'aide de SQL
-> via une extension de SQL
* QU'OFFRENT LES SGBDs ?
-> peu de CIs en général
(unicité valeur, non nullité, ...)
-> les autres CIs sont vérifiées
dans les programmes
* NORME 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"
* SGBD Ingres
-> extension de SQL
-> n'importe quelle CI mono-rel.
-> n'importe quelle CI multi-rels
avec les procédures BD et les règles
* 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 Char(20) references DEPART )
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
on delete cascade )
* Ex1
create integrity on EMPLOYE is
SAL > 10_000
and AGE >= 18 and AGE <= 60
* Ex2
create integrity on EMPLOYE is
SAL > 10_000
or SAL is null
* Ex3
range of E,M is EMPLOYE
create integrity on EMPLOYE is
E.SAL <= M.SAL
or E.DIR /= M.NOM
* BD COHERENTE
-> toutes les CIs sont vérifiées
* TRANSACTION
-> unité d'exécution atomique pour le SGBD
-> un ensemble de requêtes SQL qui s'exécute en "tout ou rien"
-> fait passer la BD d'un état cohérent à un autre état cohérent
* CONTEXTE DE VERIFICATION CIs
-> une transaction avec mise à jour
* VERIFICATION IMMEDIATE
-> 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
-> CIs : domaine, unicité, ...
* VERIFICATION DIFFEREE
-> 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
-> CIs : référentielle, générale
* COHERENCE
-> pas de règles contradictoires
* REDONDANCE
VIN.Degré < 15
et VIN.Degré < 14
<==>
VIN.Degré < 14
* OPTIMISATION
-> nombre minimal de données mises en jeu pour la vérification
-> vérification sur certains types de mises à jour uniquement
* DEFINITION
règle spécifiant
une action à exécuter sur la BD,
quand une condition est vérifiée, suite à une MAJ ou une interro
sur <événement>
si <condition>
alors <action>
* EXEMPLE
sur MAJ de la relation PRODUIT
si PRODUIT.QTE < SEUIL
alors
passer une commande du produit