CM1_BDR_Les contraintes-2014.pdf

32
1 Cours OMGL-Bases de Données SQL - Les contraintes DUT Informatique Aymen Abedmouleh [email protected] Cours de Claudine Piau-Toffolon

Transcript of CM1_BDR_Les contraintes-2014.pdf

  • 1

    Cours OMGL-Bases de Donnes

    SQL - Les contraintes

    DUT Informatique

    Aymen Abedmouleh

    [email protected]

    Cours de Claudine Piau-Toffolon

  • 2

    CONTRAINTES : Exemples

    Chaque tudiant a un nom et un prnom:

    Le champ Etu_Nom ne doit pas tre vide

    Le champ Etu_Prenom ne doit pas tre vide

    Chaque tudiant a un numro de scurit

    sociale qui est unique :

    Le champ Etu_NumSecu :

    Ne doit pas tre vide

    Sa valeur doit tre unique

  • 3

    Introduction

    L'une des ides fortes de la conception des BDR

    repose sur la notion de contrainte.

    Une contrainte n'est autre qu'une rgle

    imprative ne devant en aucun cas tre

    viole.

    Une bonne BD se doit de possder de

    nombreuses contraintes Frdric BROUARD

    Architecte de Donnes, Enseignant CNAM, Ecoles dingnieurs,,

  • 4

    Rappel

  • 5

    Les contraintes

    Travail de programmation allg

    En cas de violation d'une contrainte, le SGBDR envoie un

    vnement ou un message derreur lapplication

    Lapplication peut grer lerreur par un traitement

    appropri

    Si plusieurs applications crites par des quipes

    partageant les mmes donnes: la gestion des erreurs sera

    unique et facilitera lintgration des applications

    Il existe diffrentes faons de spcifier les contraintes (CREATE TABLE, ALTER TABLE, CREATE DOMAIN,)

  • 6

    Les contraintes

    Contraintes dclaratives

    Contraintes algorithmiques :

    Lorsquun attribut de tel tuple de la table A est mj, il faut mj tel attribut de tel tuple de la table B et tel attribut dans tel tuple de la table C et ajouter un tuple dcrivant la modification prcdente dans la table D.

    SOLUTION ??

  • 7

    Les contraintes dclaratives Contraintes de domaine

    Contraintes dintgrit dentit

    Contraintes dintgrit rfrentielle

    Les assertions

  • 8

    EXEMPLE [Maree et al., 1998]

    Table Magasins

    Table Clients

    Table Articles

    Table Fournisseurs

    Table Commandes

    Table Lig_Cmd

    Table_Livraisons

    Table Lig_Liv

    Table Assemblage

  • 9

    Les contraintes: Clause CONSTRAINT

    Le nom de la contrainte est spcifie par la clause CONSTRAINT suivi du nom de la contrainte

    Si on ne le fait pas ??????

  • 10

    1- Contraintes de domaine ou de colonne

    [CONSTRAINT ] contrainte de nullit | contrainte dunicit | contrainte de cl trangre | contrainte check

    contrainte de nullit [NOT] NULL

    contrainte d unicit [UNIQUE|PRIMARY KEY]

    contrainte de cl trangre

    REFERENCES (col1[,col2])[ON DELETE

    CASCADE]

    contrainte check

    CHECK (condition)

  • 11

    1- Contraintes de domaine: La clause CHECK

    Spcifie une contrainte qui doit tre vrifie

    tout moment par les tuples de la table

    On peut placer un nombre qcq de clauses

    CHECK dans la dfinition des tables

    La clause peut se placer aprs la dfinition de

    tous les attributs, spare de la dfinition par

    une virgule

    Exemples

  • 12

    Exemples Clause CHECK

    Table Clients

    Table Assemblage :

    le produit fini ne doit pas se contenir lui-mme

    Table Lig_cmd:

    qt livre 20% prix catalogue

    Table Article: expliquez !

    Table Lig_cmd: Ajouter la contrainte:

    Pour une qt commande >= 100 articles, la remise est au moins de 10%

    On peut ajouter autant de contraintes que lon souhaite

  • 13

    Exemples Clause CHECK

    La clause CHECK peut comporter une

    expression de condition qcq:

    Ex: Table Clients:

    CHECK (clt_nom IS NOT NULL)

    CONSTRAINT Nom_Clients;

    CHECK (clt_type BETWEEN 1 AND 4)

    CONSTRAINT Type_Clients;

  • 14

    1- Contraintes de domaine: Dclaration dun domaine

    Utile quand plusieurs attributs dun schma sont construits sur le mme domaine

    Ex: CREATE DOMAIN Qte INTEGER DEFAULT 0 CHECK (VALUE >=0);

    Vrifiera que art_stock, lcd_qte, lcd_liv, llv_qte sont des valeurs entires >=0 ou par dfaut =0.

    On redfinira ces attributs dans leurs tables respectives:

    art_stock qte

    lcd_qte qte

    lcd_liv qte CHECK (lcd_liv

  • 15

    2- Contraintes dintgrit

    Un attribut doit toujours avoir une valeur

    Un attribut (ou ensemble dattributs) constitu(en)t la cl de la relation

    Un attribut dans une table est li la cl primaire dune autre table (intgrit rfrentielle)

    Rgle sappliquant la valeur dun attribut (min et max par exemple) : clause CHECK

    NB: les contraintes sur les cls doivent tjs tre spcifies

  • 16

    2- Contraintes dintgrit:

    Contraintes dentit

    Spcifie la cl primaire dune table:

    doit toujours avoir une valeur dtermine et unique pour la table

    choisie parmi les cls candidates

    Clause: PRIMARY KEY

    Exemples

  • 17

    3- Contraintes dIntgrit Rfrentielle

    Concrtise les liens entre 2 tables

    Notion de cl trangre:= Attribut ou groupe dattribut dans une table T1

    dont les valeurs doivent exister comme valeurs de la cl candidate dans une table T2; T1 et T2 ne sont ncessairement distincte.

    T1 Table rfrence: contient la cl candidate laquelle la cl trangre fait rfrence

    T2 Table qui rfrence: contient la cl trangre

  • 18

    3- Contr. dIntgrit Rfrentielle

    Exemples

    En gnral: cl trangre rfrence directement la cl

    primaire de la table rfrence

    Table Articles:

    art_frs : cl trangre fait rfrence la cl

    primaire frs_num de la table Fournisseurs

    Tables Lig_liv et Lig_cmd

  • 19

    Gestion de la contrainte IR

    Sans intervention de lutilisateur: il faut

    vrifier que la nouvelle valeur de la cl

    trangre existe bien dans la table

    rfrence

    Il existe diffrentes manires de vrifier: 1. Par une fonction crite par le programmeur

    2. Par le SGBD

    3. Excution automatique dun Trigger appropri

  • 20

    Gestion de la contrainte IR

    Sol 1: Fonction crite par le programmeur

    Solution la plus souple mais la plus

    fastidieuse:

    la fonction doit tre prvue, dans chaque

    application, chaque fois quune valeur dune cl

    trangre risque dtre ajoute/modifie :

    => Risque derreur ou doubli

  • 21

    Gestion de la contrainte IR

    Sol 2: Vrification automatique par le SGBD

    Solution idale:

    la contrainte est dclare explicitement dans le

    dictionnaire et valable pour tous les

    programmes et les utilisateurs

    Solution adopte par la plupart des SGBD

  • 22

    Gestion de la contrainte IR

    Sol 3: Trigger

    Fonction compile, crite une fois pour

    toute, excute automatiquement chaque

    fois quune modification particulire a lieu

    dans une table

  • 23

    Gestion de la contrainte IR Mise en uvre de la solution 2

    Ajout de la clause REFERENCES la

    dfinition de la cl trangre:

    REFERENCES nom_table_rfrence

    (Cl_candidate)

    Cl_candidate: nom explicite de la cl candidate

    facultatif (inutile quand il sagit de la cl primaire

    connue par le systme)

  • 24

    Gestion de la contrainte IR Mise en uvre de la solution 2: Exemple

    Table Commandes

    2 cls trangres

    cmd_clt: rfrence la cl primaire clt_num de la table

    Clients

    cmd_mag: rfrence la table Magasins

    =>Si on veut ajouter ou modifier la valeur dune de ces cls trangres et

    que cette valeur nexiste pas comme valeur de cl primaire

    correspondante: moteur relationnel refusera la mj et enverra un

    message derreur

  • 25

    Gestion de la contrainte IR Mise en uvre de la solution 2: Exemple

    Si la cl trangre est constitue de plusieurs attributs:

    Clause FOREIGN KEY

    Exemple:

    Table Lig_liv: on ne peut livrer que ce que lon a command!

    FOREIGN KEY (llv_cmd, llv_art) REFERENCES Lig_cmd

    Rfrence la Cl

    primaire de Commandes

    Rfrence la cl

    primaire de Articles

  • 26

    Gestion de la contrainte IR Clauses ON UPDATE, ON DELETE

    Modifier ou supprimer la valeur dune cl primaire

    rfrence dans dautres tables

    Quadvient-il des lignes o apparat la valeur

    supprimer ou modifier?

    Si on supprime un client: quadvient-il des

    commandes quil a passes? Des commandes en cours?

    Bon sens: Ne pas permettre la suppression de la

    valeur de clt_num tant quil existe des commandes

    pour ce client

  • 27

    Gestion de la contrainte IR Clauses ON UPDATE, ON DELETE

    Reprsentation de cette contrainte dans la table Commandes:

    On complte la clause REFERENCES par les

    clauses:

    ON UPDATE, ON DELETE

    Exemple: Table Articles

  • 28

    Gestion de la contrainte IR Clauses ON UPDATE, ON DELETE

    En cas de modification ou suppression dune valeur de la cl rfrence, si cette valeur existe en tant que cl trangre dans la table qui fait rfrence:

    4 actions : RESTRICT

    CASCADE

    SET NULL

    SET DEFAULT

  • 29

    Gestion de la contrainte IR Clause ON DELETE

    RESTRICT: donne un chec si la valeur efface correspond la cl de la table rfrence

    CASCADE: effacement en cascade des lignes correspondantes en cas deffacement dune ligne de la table rfrence

    SET NULL place une valeur nulle dans la ligne de la table en cas deffacement dune ligne de la table rfrence

    DEFAULT: place la valeur par dfaut

  • 30

    Gestion de la contrainte IR Clause ON UPDATE

    RESTRICT: donne un chec si la valeur modifie correspond la cl de table rfrence

    CASCADE: modification des lignes correspondantes en cascade en cas de modification dune ligne de la table rfrence

    SET NULL: place une valeur nulle dans la ligne de la table en cas de modification dune ligne de la table rfrence

    DEFAULT: place la valeur par dfaut

  • 31

    Gestion de la contrainte IR Clause ON DELETE, ON UPDATE

    RESTRICT: option par dfaut

    Valeur NULL: accepte dans les colonnes

    qui constituent la cl trangre

    Contraintes de rfrence ne sont vrifies

    que pour un tuple quand toutes les valeurs

    qui constituent la cl trangre sont

    diffrentes de NULL

  • 32

    Contraintes dclaratives ? 1. Contrainte de domaine

    2. Contrainte de table

    3. Contrainte de cl

    4. Contrainte dassertion

    Utilisation de la clause CONSTRAINT 1. Obligatoire

    2. Non obligatoire

    Est une contrainte dintgrit ? 1. Contrainte de cls

    2. Contrainte de table

    3. Contrainte de domaine