6. PRODUCTION DU CODE DE LA BASE DE DONNEES

Slides:



Advertisements
Présentations similaires
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
Advertisements

10 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux déclencheurs.
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
SQL: Contraintes et Triggers
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Contraintes et Triggers Chapitre 5,
Module 4 : Implémentation de l'intégrité des données.
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Le langage SQL.
Cours n°2 Implémentation et exploitation
Bases de données : modèlisation et SGBD Séance 3.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Les ORMs ● Faire coexister le monde relationnel et objet.
SQL partie 5 1 LMD create – update – primary key secondary key.
Le langage de définition de données B.T.S. S.I.O – SI3 –
SQL : 4 fonctions d'exploitation de SGBD SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage informatique ayant pour.
1- phpMyAdmin 3ème partie : Manipulation des données Le langage SQL 2- Gérer les tables 3- Gérer les données.
SQL partie 1 Langage de Définition de Données. SQL est un langage de définition de données  SQL est un langage de définition de données (LDD), c'est-à-dire.
Chapitre 3: SQL-ORACLE. Concepts de SQL SQL est un langage d’interrogation de base de données relationnelles pour  Définir les données (LDD)  Interroger.
Environnement du développement de BD ORACLE REPORTS 10g
Structured Query Language SQL DDL
LE LANGAGE DE REQUETES SQL
Langage de manipulation de données (LMD)
Table passage en caisse
Les Bases de données Définition Architecture d’un SGBD
Structured Query Language
MOT Éditeur de modèles de connaissances par objets typés
Initiation aux bases de données et à la programmation événementielle
AMUE – SIFAC Les concepts de SIFAC WEB HISTORIQUE DES MISES A JOUR
Généralité sur les bases de données
JAVA et POO : Notion d'héritage
Langage de Manipulation des Données LMD
Technologies d’intelligence d’affaires
JMerise.
D3 – Produire, traiter, exploiter et diffuser des documents numériques
Notion De Gestion De Bases De Données
Création Et Modification De La Structure De La Base De Données
SQL LMD FICHE 4.6.
Manipulation D’Une Base De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
4. LE LANGAGE SQL AVANCE 1re partie
I Copyright © 2004, Oracle. Tous droits réservés. Introduction.
Integrated Business intelligence
2. CONCEPTS DES BASES DE DONNEES
6. CONCEPTION PHYSIQUE RELATIONNELLE
3. LE LANGAGE SQL DML (2) Version 2 - Janvier 2012
5 Analyse avec Designer d'Oracle
1. LE LANGAGE SQL DDL Version 2 - Janvier Le langage SQL-DDL
2. LE LANGAGE SQL DML (1) Version 2 - Janvier 2012
7 Contraintes d’intégrité en SQL
5 Introduction au modèle relationnel 5.1 Concepts de base
Semaine 3 Retour sur la semaine 2 Plan de séance
5 Interface entre SQL et un programme
4. IMPLEMENTATION DES STRUCTURES DE DONNEES
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
4. LE LANGAGE SQL AVANCE 2e partie
1. Méthodologie des bases de données
Info Bases de données avancées
Chapitre V La Procédure Comptable
Définition des contraintes Vérification des contraintes Triggers
9 Méthodes multidimentionnelles et représentation d'associations
2. CONCEPTS DES BASES DE DONNEES
TP1 - DBMAIN BFSH Lausanne - Switzerland - Tel Université de Lausanne.
Design, innovation et créativité
SQL Structured Query Language
SQL: Contraintes et Triggers
1. LE LANGAGE SQL DDL Version 1 - Mai 2009 corrigé le 11/2/2011
Modélisation des SI et de la connaissance
MOT Éditeur de modèles de connaissances par objets typés
Transcription de la présentation:

6. PRODUCTION DU CODE DE LA BASE DE DONNEES Version 2 - Avril 2014 Support du chapitre 20, Production du code d'une base de données de l'ouvrage Bases de données, J-L Hainaut, Dunod 2012.

6. PRODUCTION DU CODE DE LA BASE DE DONNEES Contenu 6.1 Introduction 6.2 Expression déclarative 6.3 Comportements non standard 6.4 Contraintes d'intégrité de base et additionnelles 6.5 Contraintes dérivées du modèle Entité-association 6.6 Contraintes d'intégrité dynamiques 6.7 Traduction des relations is-a 6.8 Traduction des vues

6.1 INTRODUCTION 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.1 INTRODUCTION

6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.1 Introduction La production du code consiste à traduire les structures du schéma physique et des vues dans un code exécutable propre à un SGBD. Observation : il n'est pas possible de traduire explicitement toutes les structures et toutes les contraintes dans le DDL du SGD.  recours à diverses techniques internes ou externes au SGD, plus ou moins élégantes, plus ou moins faciles à maintenir.

6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.1 Introduction schéma physique code DDL code additionnel vues Production de code SGBD Donc, le code comporte deux parties (pour une BD relationnelle) : code SQL-DDL : structures et contraintes natives déclarables directement en SQL code additionnel : tout le reste; expression en SQL générique ou selon d'autres techniques (= code additionnel)

Les concepts SQL d’expression de contraintes 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.1 Introduction Les concepts SQL d’expression de contraintes Les déclarations natives Les prédicats de colonne et de table (check) Les vues filtrantes (view with check option) Les déclencheurs (trigger) Les procédures SQL (stored procedures)

Modules d’accès (wrappers) Méthodes des tables typées (SQL3) 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.1 Introduction Autres techniques Modules d’accès (wrappers) Méthodes des tables typées (SQL3) Interfaces Object-Relational Mapping ou ORM

6.2 Expression déclarative 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.2 Expression déclarative

6.2 Expression déclarative 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.2 Expression déclarative Règles de base (SQL2)

6.2 Expression déclarative 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.2 Expression déclarative Un exemple (rappel) Voir "Methodologie-des-BD-(court)-(Production-sch-BD).ppt", section "Traduction des structures en SQL"

6.3 Comportements non standard 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.3 Comportements non standard

6.3 Comportements non standard 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.3 Comportements non standard On peut exiger d'une construction native un comportement non standard. Exemple : gestion atypique de l'intégrité référentielle.

6.3 Comportements non standard 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.3 Comportements non standard Mode cascade lors d'une insertion create trigger TRG_COMMANDE_CLI_MANQUANT before insert on COMMANDE for each row declare I number begin select count(*) into :I from CLIENT where NCLI = new.NCLI; if I = 0 then insert into CLIENT (NCLI,NOM,ADRESSE,LOCALITE,COMPTE) values (new.NCLI,'?','?','?',0); end if; end;

6.3 Comportements non standard 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.3 Comportements non standard Mode cascade inversé create trigger TRG_DETAIL_SUPP_DERNIER after delete on DETAIL for each row declare I number begin select count(*) into :I from DETAIL where NCOM = old.NCOM; if I = 0 then delete from COMMANDE where NCOM = old.NCOM; end if; end;

6.4 Contraintes d'intégrité de base et additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité de base et additionnelles

6.4 Contraintes d'intégrité de base et additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité de base et additionnelles Contraintes d'intégrité de base Contrainte de domaine Contrainte inter-valeurs Contrainte d'existence Contraintes d'intégrité additionnelles Contraintes cycliques Contraintes sur le graphe des instances Contraintes de redondance facile à traduire difficile à traduire

6.4 Contraintes d'intégrité de base 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité de base CI de base : contraintes de domaine alter table EMPLOYE add constraint CHECK_DOM_EMP_SEXE check(SEXE in ('M','m','F','f')); ensemble stable de petite taille create table MP(MODE_PAIEMENT char(5) not null primary key); create table FACTURE(..., MODE char(5), ..., foreign key (MODE) references MP on delete no action on update cascade); ensemble évolutif ou de grande taille

6.4 Contraintes d'intégrité de base 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité de base CI de base : contraintes d'existence facile ... alter table T add constraint CHECK_T_COEX_AB check( (A is not null and B is not null) or (A is null and B is null) ); coex: A,B 

6.4 Contraintes d'intégrité de base 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité de base CI de base : contraintes d'existence plus difficile : trouver une loi de formation ... alter table T add constraint CHECK_T_COEX_AB check( (A is not null and B is not null and C is not null) or (A is null and B is null and C is null) ); coex: A,B,C 

6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : cycliques Règle générale difficile à trouver. Raisonnement au cas par cas

  6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : cycliques SECTION.StationDepart  SECTION.StationArrivée  SECTION.départ.STATION  SECTION.arrivée.STATION alter table SECTION add constraint CHECK_SECTION_STATIONS check(STATIONDEPART <> STATIONARRIVEE); 

  6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : cycliques VEHICULE.SIGNATAIRE = VEHICULE.NUMCLIENT  VEHICULE.couvre.CONTRAT.signe.CLIENT = VEHICULE.appartient.CLIENT une seule colonne mieux : alter table VEHICULE add constraint CHECK_VEHICULE_CLIENT check(SIGNATAIRE = NUMCLIENT); 

 6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : cycliques  un emprunteur qui emprunte un exemplaire d'un ouverage ne peut en même temps réserver ce dernier pour tout EMPRUNT E, il n'existe pas (RESERVATION R where E.ID-Doc = R.ID-Doc and E.NumPers = R.NumPers) EMPRUNTEUR.emprunte.EXEMPLAIRE.de.DOCUMENT  EMPRUNTEUR.réserve.DOCUMENT

 6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : cycliques create trigger TRG_EMPRUNT_NON_RESERVE before insert on EMPRUNT for each row declare I number begin select count(*) into :I from RESERVATION R where new.ID_Doc = R.ID_Doc and new.NumPers = R.NumPers; if I > 0 then abort(); end if; end;  pour tout EMPRUNT E, il n'existe pas (RESERVATION R where E.ID-Doc = R.ID-Doc and E.NumEmprunteur = R.NumPers) + autres triggers

6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : graphe des instances Raisonnement au cas par cas. En général procédures récursives

 6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : graphe des instances la contrainte ne peut être violée que par un update  le graphe des instances de supervise est acyclique create trigger TRG_SUPERVISE_ACYCLIQUE before update of RESPONSABLE on PERSONNE for each row declare S char(4) begin S := new.RESPONSABLE; while S is not null if S = new.NPERS then abort(); end if; select RESPONSABLE into :S from PERSONNE where NPERS = :S; end while; end; = "tail recursion"

6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : redondances Gestion de la redondance le plus souvent par triggers Méthodologie sommaire : 1. identifier les événements susceptible d'affecter l'état de l'objet redondant C 2. définir pour chacun une réaction de mise à jour de C 3. coder cette réaction

 6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : redondances  " cli  CLIENT, cli.Total = S com.Montant " cli  CLIENT, cli.Total = S com.Montant com  cli.passe.COMMANDE com  COMMANDE  com.NumCli = cli.NumCli

6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : redondances

6.4 Contraintes d'intégrité additionnelles 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.4 Contraintes d'intégrité additionnelles CI additionnelles : redondances create trigger TRG_COMMANDE_UPDATE_NumCli after update of NumCli on COMMANDE for each row begin update CLIENT set Total = Total - old.Montant where NumCli = old.NumCli; update CLIENT set Total = Total + new.Montant where NumCli = new.NumCli; end;

6.5 Contraintes dérivées du modèle Entité-association 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.5 Contraintes dérivées du modèle Entité-association

6.5 Contraintes dérivées du modèle Entité-association 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.5 Contraintes dérivées du modèle Entité-association Contraintes complexes dérivant du modèle Entité-association mais pour lesquelles il n'existe pas de traduction immédiate en SQL contrainte référentielle totale : equ cardinalités spéciales : [0-10] contraintes de sous-types :  section 7.7

6.5 Contraintes dérivées du modèle Entité-association 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.5 Contraintes dérivées du modèle Entité-association Contrainte référentielle totale : equ pour créer une ligne d'ACCIDENT, une ligne d'IMPLICATION doit exister au préalable pour créer une ligne d'IMPLICATION, une ligne d'ACCIDENT doit exister au préalable  les deux lignes doivent être créées en même temps Mécanisme des FK et triggers insuffisants. Résolution par transactions, par procédures SQL, par méthodes SQL3. déconseillé car pas centralisé

6.5 Contraintes dérivées du modèle Entité-association 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.5 Contraintes dérivées du modèle Entité-association Contrainte référentielle totale : equ

6.5 Contraintes dérivées du modèle Entité-association 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.5 Contraintes dérivées du modèle Entité-association Contrainte référentielle totale : equ objet complexe ACCIDENT Observation : objet complexe ACCIDENT = 1 ACCIDENT + n IMPLICATION 1. Jeux de procédures SQL gérant les instances de cet objet 2. Méthodes de la table typée ACCIDENT (en SQL3) 3. Egalement via un ORM, mais prudence ! voir tutoriel Legacy and Future of Database Reverse Engineering, site LIBD accès au tutoriel

6.5 Contraintes dérivées du modèle Entité-association 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.5 Contraintes dérivées du modèle Entité-association Cardinalités spéciales : [0-10] pas plus de 10 mots clés par document = pas plus de 10 instances de MOTCLE_DE_DOC pour une même valeur de ID_Doc create trigger TRG_MOTCLE_DE_DOC_MAX_10 before insert or update of ID_Doc on MOTCLE_DE_DOC for each row declare I number begin select COUNT(*) in :I from MOTCLE_DE_DOC where ID_Doc = new.ID_Doc; if I = 10 then abort(); end if; end;

6.6 Contraintes d'intégrité dynamiques 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.6 Contraintes d'intégrité dynamiques

6.6 Contraintes d'intégrité dynamiques 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.6 Contraintes d'intégrité dynamiques Une contrainte dynamique 1. exige la comparaison des états des données avant et après la modification 2. ou impose des préconditions à la modification  utilisation de triggers ou de procédures SQL

6.6 Contraintes d'intégrité dynamiques 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.6 Contraintes d'intégrité dynamiques Exemple on n’autorise la suppression d’un client que s’il n’a plus envoyé de commandes depuis le 1er janvier 2009 create trigger TRG_CLIENT_OBSOLETE before delete on CLIENT for each row declare I number begin select count(*) into :I from COMMANDE where NCLI = old.NCLI and DATECOM >= '1-1-2009'; if I > 0 then abort(); end if; end;

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a

 6.7 Traduction des relations is-a Technique privilégiée  ??? 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Technique privilégiée  ???  excl: RAPPORT, OUVRAGE at-lst-1: RAPPORT, OUVRAGE exact-1: RAPPORT, OUVRAGE

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL Deux cas distincts : 1. pas de contrainte de totalité : D ou libre 2. contrainte de totalité : T ou P facile plus difficile

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : pas de contrainte de totalité via le programmeur : comment programmer ? via le SGBD : comment gérer ?

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : pas de contrainte de totalité Programmeur : comment programmer ? création d’un rapport insert into DOCUMENT(ID_Doc,Titre) values('12','Etude finale'); insert into RAPPORT(ID_Doc,Code_rapport,Projet) values('12','R0177','BIOGEN'); suppression d’un rapport delete from DOCUMENT where ID_Doc='12'; un document n’est plus un rapport delete from RAPPORT where ID_Doc='12'; un document devient un rapport insert into RAPPORT(ID_Doc,Code_rapport,Projet) values('12','R0177','BIOGEN')

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : pas de contrainte de totalité SGBD : comment gérer ? 1. Initialisation des indicateurs de sous-types à la création d’un document create trigger TRG_DOCUMENT_INSERT_SURTYPE before insert on DOCUMENT for each row begin new.RAPPORT = null; new.OUVRAGE = null; end; pas de manipulation directe des indicateurs de type revoke update (RAPPORT, DOCUMENT) on DOCUMENT from public; revoke update (ID_Doc) on RAPPORT from public;

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : pas de contrainte de totalité SGBD : comment gérer ? 2. Clés étrangères alter table RAPPORT add constraint FK_RAPPORT_DOC foreign key (ID_Doc) references DOCUMENT on delete cascade on update cascade;

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : pas de contrainte de totalité SGBD : comment gérer ? 3. A la création d'un rapport (DOCUMENT existant) create trigger TRG_RAPPORT_INSERT_ISA_DOC before insert on RAPPORT for each row declare I number begin select COUNT(*) in :I from DOCUMENT where ID_Doc = new.ID_Doc and (RAPPORT is not null or OUVRAGE is not null); if I = 1 then abort(); end if; update DOCUMENT set RAPPORT = '*' where ID_Doc = new.ID_Doc; end; si disjonction

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : pas de contrainte de totalité SGBD : comment gérer ? 4. A la suppression d'un rapport (DOCUMENT subsistant) create trigger TRG_RAPPORT_DELETE_ISA_DOC after delete on RAPPORT for each row begin update DOCUMENT set RAPPORT = null where ID_Doc = new.ID_Doc; end;

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : contrainte de totalité (T ou P) Créer un rapport = insertion simultanée de 1 ligne de DOCUMENT + 1 ligne de RAPPORT Problème similaire à la contrainte référentielle totale equ ...

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : contrainte de totalité (T ou P) 1. Jeux de procédures SQL (RAPPORT_CREER, etc.) 2. Tables typées RAPPORT et OUVRAGE avec héritage (en SQL3) 3. ORM (prudence) Mais : Procédures et O/RM interdisent SQL !

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : contrainte de totalité (T ou P) Deux approches plus légères en SQL2 1. Via une vue (si vue modifiable) create view DOC_RAPPORT(ID_Doc, Titre, Code_Rapport, Projet) as select D.ID_Doc, Titre, Code_Rapport, Projet from DOCUMENT D, RAPPORT S where D.ID_Doc = R.ID_Doc; création d’un rapport insert into DOC_RAPPORT(ID_Doc, Titre, Code_Rapport, Projet) values ('12','Etude finale','R0177','BIOGEN'); suppression d’un rapport delete from DOC_RAPPORT where ID_Doc='12'; modification d’un rapport update DOC_RAPPORT set Titre='Etude finale', Projet='BIOSTAT' where ID_Doc='12';

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Traduction en SQL : contrainte de totalité (T ou P) Deux approches plus légères en SQL2 2. Via une vue (si vue non modifiable et si "triggers instead of" autorisés) create view DOC_RAPPORT(ID_Doc, Titre, Code_Rapport, Projet) as select D.ID_Doc, Titre, Code_Rapport, Projet from DOCUMENT D, RAPPORT S where D.ID_Doc = R.ID_Doc; création d’un rapport create trigger TRG_INSERT_DOC_RAPPORT instead of insert on DOC_RAPPORT for each row begin insert into DOCUMENT(ID_Doc,Titre,RAPPORT) values(new.ID_Doc,new.Titre,'*'); insert into RAPPORT (ID_Doc,Code_rapport,Projet) values(new.ID_Doc,new.Code_Rapport,new.Projet); end;

6.7 Traduction des relations is-a 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.7 Traduction des relations is-a Piste à explorer create table DOCUMENT( ID_DOC char(20) not null, Subtype char(1) not null default '', ..., primary key (ID_DOC), unique (ID_DOC,Subtype), check(Subtype in ('R','O','') ); create table RAPPORT( Subtype char(1) default 'R' not null, foreign key (ID_DOC,Subtype) references DOCUMENT(ID_DOC,Subtype) on delete cascade on update cascade, check(Subtype = 'R') ); create table OUVRAGE( Subtype char(1) default 'O' not null, check(Subtype = 'O') );

6.8 Traduction des vues 6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.8 Traduction des vues

6.1 Introduction 6.5 CI dérivées du modèle EA 6.2 Expression déclarative 6.6 CI dynamiques 6.3 Comportements non standard 6.7 Traduction des relations is-a 6.4 CI de base et additionnelles 6.8 Traduction des vues 6.8 Traduction des vues 1. Vues traduisant les sous-schémas conceptuels 2. Hiérarchies is-a : vues matérialisant l'héritage descendant 3. Hiérarchies is-a : vues matérialisant l'héritage ascendant Utilisation des O/RM

Fin du module 6