CONTRAINTES D INTÉGRITÉ EN SQL

Documents pareils
Intégrité des données

Bases de Données relationnelles et leurs systèmes de Gestion

TP Contraintes - Triggers

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Le Langage De Description De Données(LDD)

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Intégrité sémantique dans les bases de données relationnelles

Langage SQL : créer et interroger une base

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

INTEGRITE ET BD ACTIVES

Le langage SQL (première partie) c Olivier Caron

TP3 : Creation de tables 1 seance

Cours Bases de données 2ème année IUT

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Les bases de données

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Compétences Business Objects

Création et Gestion des tables

Olivier Mondet

Gestion de base de données

Administration des bases de données. Jean-Yves Antoine

BTS/CGO P10 SYSTEME INFORMATION Année

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Introduction au Système de Gestion de Base de Données et aux Base de Données

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Cours Bases de données 2ème année IUT

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

CREATION WEB DYNAMIQUE

SQL Historique

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

PHP 5. La base de données MySql. A. Belaïd 1

Bases de données avancées

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

A QUOI SERVENT LES BASES DE DONNÉES?

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Pour les débutants. langage de définition des données

Notes de cours : bases de données distribuées et repliquées

Historisation des données

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Gestion des transactions et accès concurrents dans les bases de données relationnelles

MySQL / SQL EXEMPLES

FileMaker 13. Guide de référence SQL

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Mysql. Les requêtes préparées Prepared statements

Bases de données et sites WEB

Corrigés détaillés des exercices

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

OpenPaaS Le réseau social d'entreprise

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Bases de données relationnelles

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

I4 : Bases de Données

Java DataBaseConnectivity

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Cours SQL. Base du langage SQL et des bases de données

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Installation d'un serveur FTP géré par une base de données MySQL

Encryptions, compression et partitionnement des données

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de Données Relationnelles. Le Modèle Relationnel

Systèmes de Gestion de Bases de Données

Modélisation et Gestion des bases de données avec mysql workbench

Bases de Données Réparties

Les BASES de DONNEES dans WampServer

Devoir Data WareHouse

Introduction au PL/SQL Oracle. Alexandre Meslé

Auto-évaluation Oracle: cours de base

Université de Nice Sophia-Antipolis. Langage SQL. version 5.7 du polycopié. Richard Grin

TP Bases de données réparties

1. Base de données SQLite

1 Position du problème

Chapitre 10. Architectures des systèmes de gestion de bases de données

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Le Langage SQL version Oracle

IFT3030 Base de données. Chapitre 1 Introduction

16H Cours / 18H TD / 20H TP

Introduction aux Bases de Données 2004/2005

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Bases de données. PTSI Lycée Eiffel. 28 février 2014

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Bases de données et sites WEB Licence d informatique LI345

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Partie II Cours 3 (suite) : Sécurité de bases de données

Gestion des utilisateurs et de leurs droits

Support de Cours REQUÊTES TRANSACT-SQL DANS MICROSOFT SQL SERVER Stéphane N GUESSAN Groupe Pigier Abidjan Version 1.

La présente publication est protégée par les droits d auteur. Tous droits réservés.

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

Mejdi BLAGHGI & Anis ASSÈS

Transcription:

CONTRAINTES D INTÉGRITÉ EN SQL 1/32 Classes de contraintes Contraintes structurelles (rappel Domaine Unicité Référence Contraintes applicatives Conditions que doit vérifier un sous ensemble de la BD pour maintenir la cohérence des informations 2/32 1

Contraintes générales, contraintes de tables Contraintes générales Portent sur une ou plusieurs colonnes de plusieurs tables Opérations coûteuses Vérifiées après chaque mise à jour Contraintes attachées à une table Ne peut exister sans table!! Disparaissent avec la table Une nouvelle contrainte est rejetée si elle n est pas en accord avec les valeurs déjà présentes dans la base 3/32 Assertion: syntaxe creer_contrainte_generale ::= CREATE ASSERTION nom_contrainte CHECK (condition Supprimer_contrainte_generale ::= DROP ASSERTION nom_contrainte ; 4/32 2

Assertion: syntaxe contrainte_table ::= [CONSTRAINT nom] type_contrainte_table mode_contrainte type_contrainte_table ::= PRIMARY KEY (nom_colonne + NOT NULL (nom_colonne + UNIQUE (nom_colonne + CHECK (condition FOREIGN KEY (nom_colonne + REFERENCES nom_table (nom_colonne + mode_contrainte ::= [NOT] DEFERRABLE Evaluée au moment de la MAJ Evaluée au moment du COMMIT 5/32 Assertion: exemples Contrainte générale CREATE ASSERTION a_salaire CHECK ( NOT EXISTS (SELECT * FROM employe WHERE SALAIRE > 4000 AND e.num_service <> (SELECT num_service FROM service WHERE nom= direction Il ne doit pas exister de salaire > 4000 ailleurs que dans le service direction 6/32 3

Assertion: exemples Contrainte de table CREATE TABLE employe ( numero d_numero primary key, nom d_nom NOT NULL, prenom d_prenom, adresse d_adressse, num_service d_numero, salaire d_salaire, taxe d_taxe, constraint salaire_taxe check (salaire>taxe not deferrable Contrainte horizontale salaire et taxe appartiennent au même tuple 7/32 Assertion: exemples Contrainte de table (suite CREATE TABLE employe ( numero d_numero primary key, nom d_nom NOT NULL, prenom d_prenom, adresse d_adressse, num_service d_numero, salaire d_salaire, taxe d_taxe, constraint salaire_coherent check (salaire < 2 * (select avg(salaire from employe e where e.num_service= employe.num_service not deferrable Contrainte verticale le salaire est contrôléen fonction de ses valeurs sur les autres tuples 9/32 4

Assertion: exemples Contrainte de table (suite CREATE TABLE employe ( numero d_numero primary key, nom d_nom NOT NULL, prenom d_prenom, adresse d_adressse, num_service d_numero, salaire d_salaire, taxe d_taxe, constraint salaire_informaticien check (2500 <= 2 * (select avg(salaire from employe where num_service = (select num_service from service where nom= informatique not deferrable Contrainte en référence à une autre table Attention à l ordre de création et de chargement des tables 11/32 Assertion: exemples Contrainte de table (suite CREATE TABLE qualification ( numero d_numero_qualif primary key, nom d_qualification CREATE TABLE possede_qualif ( numero_qualif d_numero_qualif, numero_employe d_numero, primary key (numero_qualif, numero_employe, foreign key (numero_qualif references qualification (numero, foreign key (numero_employe references employe (numero 13/32 5

Assertion: exemples Contrainte de table (suite CREATE TABLE employe ( numero d_numero primary key, nom d_nom NOT NULL, prenom d_prenom, adresse d_adressse, num_service d_numero, salaire d_salaire, taxe d_taxe, constraint nombre_qualification check (1<= (select count (* from employe, possede_qualif where numero = numero_employe deferrable Contrainte en référence à une autre table Attention à l ordre de création et de chargement des tables 14/32 Assertion: exemples Contrainte de table (suite CREATE TABLE comptable ( numero_employe d_numero_qualif primary key, prime d_prime CREATE TABLE commercial ( numero_employe d_numero_qualif primary key, pourcentage_vente d_pourcentage 16/32 6

Assertion: exemples Contrainte de table (suite CREATE TABLE employe ( numero d_numero primary key, nom d_nom NOT NULL, prenom d_prenom, adresse d_adressse, num_service d_numero, salaire d_salaire, taxe d_taxe, constraint nombre_qualification check (1 = (select count (* from employe, comptable cp, commercial cm where numero = cp.numero_employe or numero = cm.numero_employe deferrable Contrainte en référence à une autre table Attention à l ordre de création et de chargement des tables 17/32 Déclencheurs Déclencheur (trigger Un déclencheur est une règle, dite active, de la forme : événement - condition action L action est déclenchée à la suite de l événement ET si la condition est vérifiée. Une action peut être: une vérification une mise àjour. Un événement est une mise àjour 19/32 7

Déclencheurs Définition d un déclencheur Evénement: INSERT, UPDATE, DELETE nom de la relation [, nom des attributs mis àjour] moment de l action: avant, aprèsou àla place de la mise àjour nommer l ancien (suppression et le nouveau tuple (insertion condition booléenne optionnelle qui déclenche l événement: placée dans le WHEN action àréaliser sous la forme requête SQL ; action réalisée pour chaque tuple mis àjour ou une seule fois pour la requête. 20/32 Déclencheurs commande ::= CREATE TRIGGER nominstant_de_déclenchementévénement [nommage][condition] action ; instant_de_déclenchement ::= BEFORE AFTER INSTEAD OF événement ::= (INSERT DELETE UPDATE [OF liste de nom_de_colonne] ON nom_de_table nommage ::= REFERENCING (OLD AS nom NEW AS nom condition ::= WHEN expression_booléenne action ::= (liste de commande [FOR EACH (ROW STATEMENT] 21/32 8

Déclencheurs: exemples CREATE TRIGGER incr_nb_employe AFTER INSERT ON employe (UPDATE service SET nb_emp = nb_emp +1 WHERE num_service = employe.num_service CREATE TRIGGER dec_nb_employe BEFORE DELETE ON employe (UPDATE service SET nb_emp = nb_emp - 1 WHERE num_service = employe.num_service 22/32 Déclencheurs: exemples CREATE TRIGGER maj_nb_employe BEFORE UPDATE OF num_service ON employe REFERENCING OLD AS old_emp NEW AS new_emp (UPDATE service SET nb_emp = nb_emp + 1 WHERE num_service = new_emp.num_service, UPDATE service SET nb_emp = nb_emp - 1 WHERE num_service = old_emp.num_service 24/32 9

Déclencheurs: exemples CREATE TRIGGER big_brother_ins AFTER INSERT ON employe (INSERT INTO journal SELECT USER, CURRENT_TIMESTAMP, insert, e.numero, e.nom,, e.taxe FROM employe e WHERE e.numero = employe.numero 26/32 Déclencheurs: exemples CREATE TRIGGER big_brother_del BEFORE DELETE ON employe (INSERT INTO journal SELECT USER, CURRENT_TIMESTAMP, delete, e.numero, e.nom,, e.taxe FROM employe e WHERE e.numero = employe.numero 28/32 10

Déclencheurs: exemples CREATE TRIGGER big_brother_upd BEFORE UPDATE ON employe REFERENCING OLD AS old_emp NEW AS new_emp (INSERT INTO journal SELECT USER, CURRENT_TIMESTAMP, old, e.numero, e.nom,, e.taxe FROM employe e WHERE e.numero = old_emp.numero, INSERT INTO journal SELECT USER, CURRENT_TIMESTAMP, new, e.numero, e.nom,, e.taxe FROM employe e WHERE e.numero = new_emp.numero 30/32 Déclencheurs: exemples CREATE TRIGGER maj_salaire AFTER UPDATE OF salaire ON employe REFERENCING OLD AS ancien NEW AS nouveau WHEN USER <> BIG_BOSS AND nouveau.salaire > ancien.salaire * 1.2 (ERROR 31/32 11