La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

6. PRODUCTION DU CODE DE LA BASE DE DONNEES

Présentations similaires


Présentation au sujet: "6. PRODUCTION DU CODE DE LA BASE DE DONNEES"— Transcription de la présentation:

1 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.

2 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

3 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

4 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.

5 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)

6 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)

7 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

8 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

9 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)

10 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"

11 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

12 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.

13 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;

14 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;

15 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

16 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

17 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

18 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 

19 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 

20 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

21   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);

22   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);

23  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

24  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

25 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

26  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"

27 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

28  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

29 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

30 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;

31 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

32 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

33 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é

34 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

35 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

36 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;

37 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

38 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

39 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 >= ' '; if I > 0 then abort(); end if; end;

40 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

41  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

42 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

43 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 ?

44 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')

45 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;

46 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;

47 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

48 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;

49 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 ...

50 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 !

51 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';

52 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;

53 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') );

54 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

55 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

56 Fin du module 6

57


Télécharger ppt "6. PRODUCTION DU CODE DE LA BASE DE DONNEES"

Présentations similaires


Annonces Google