M1 MSI 2015-2016. Source des diapositives : Maude Manouvrier Université Paris-Dauphine



Documents pareils
Bases de données relationnelles Maude Manouvrier

BASES DE DONNEES TP POSTGRESQL

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

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

SQL Historique

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

Bases de données relationnelles

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

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

Information utiles. webpage : Google+ : digiusto/

Langage SQL : créer et interroger une base

TP Contraintes - Triggers

1 Introduction et installation

Bases de données élémentaires Maude Manouvrier

Bases de Données. Plan

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

Bases de données avancées Introduction

Intégrité des données

Les bases de données

Bases de données - Modèle relationnel

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Bases de Données Avancées

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

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

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

Le Langage SQL version Oracle

Bases de données relationnelles : Introduction

OpenPaaS Le réseau social d'entreprise

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

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

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

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

CREATION WEB DYNAMIQUE

INTRODUCTION AUX BASES de DONNEES

A QUOI SERVENT LES BASES DE DONNÉES?

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

IT203 : Systèmes de gestion de bases de données. A. Zemmari zemmari@labri.fr

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

Rappel sur les bases de données

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

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

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

Présentation du module Base de données spatio-temporelles

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

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

Le langage SQL Rappels

Cours Bases de données

A QUOI SERVENT LES BASES DE DONNÉES?

Vincent Augusto

Programmation d application Bases de données avec Java

16H Cours / 18H TD / 20H TP

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

Bases de données. Chapitre 1. Introduction

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

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

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

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Olivier Mondet

Le Langage De Description De Données(LDD)

UML et les Bases de Données

Gestion de base de données

I4 : Bases de Données

Historisation des données

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

Application web de gestion de comptes en banques

Patrice BOURSIER. Professeur, Univ. de La Rochelle. Bases de Données. Notes de cours

TP3 : Creation de tables 1 seance

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Java DataBaseConnectivity

Modélisation de bases de données : Le modèle relationnel

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

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Bases de données et sites WEB

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

LE LANGAGE SQL2 1. INTRODUCTION

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

Les bases de données Page 1 / 8

Java et les bases de données

MySQL / SQL EXEMPLES

MySQL avec Mac OS X. Quelques manipulations avec le terminal sont nécessaires si une version de MySQL est déjà lancée:

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

TP Programmation Java / JDBC / Oracle

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Bases de données avancées

Introduction aux Bases de Données 2004/2005

Mejdi BLAGHGI & Anis ASSÈS

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Systèmes de Gestion de Bases de Données (SGBD) relationnels Maude Manouvrier

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

FileMaker 13. Guide de référence SQL

Systèmes d information et bases de données (niveau 1)

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

INTRODUCTION : Données structurées et accès simplifié

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

Les BASES de DONNEES dans WampServer

Devoir Data WareHouse

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

Transcription:

M1 MSI 2015-2016 Source des diapositives : Maude Manouvrier Université Paris-Dauphine

Base de données : Introduction collection d'informations ou de données qui existent sur une longue période de temps [UW97] et qui décrivent les activités d'une ou plusieurs organisations [RG00] ensemble de données modélisant les objets d'une partie du monde réel et servant de support à une application informatique [Gar99] SGBD : Systèmes de Gestion de Bases de Données (DataBase Management Systems - DBMS) ensemble de logiciels systèmes permettant aux utilisateurs d'insérer, de modifier, et de rechercher efficacement des données spécifiques dans une grande masse d'informations (pouvant atteindre plusieurs milliards d'octets) partagée par de multiples utilisateurs [Gar99] 2

Principaux composants : SGBD Système de gestion de fichiers Gestionnaire de requêtes Gestionnaire de transactions Principales fonctionnalités : Contrôle de la redondance d information Partage des données (car plusieurs utilisateurs en même temps) Gestion des autorisations d accès Vérifications des contraintes d intégrité Sécurité et reprise sur panne 3

Abstraction des données (3 niveaux) Niveau interne ou physique : plus bas niveau indique comment (avec quelles structures de données) sont stockées physiquement les données Niveau logique ou conceptuel : décrit par un schéma conceptuel ou logique indique quelles sont les données stockées et quelles sont leurs relations indépendamment de l implantation physique Niveau externe ou vue : propre à chaque utilisateur décrit par un ou plusieurs schémas externes 4

Source : IUT Nice Cours SGBD1 5

Instances et schéma Instances de base de données : données de la base à un instant donné manipulées par un langage de manipulation de données (DML - Data Manipulation Language) Schéma de base de données : description de la structure des données ensemble de définitions exprimées en langage de description de données (DDL - Data Definition Language) 6

Petit historique 1960 : systèmes de gestion de fichiers 1970 : début des SGBD réseaux et hiérarchiques proches des systèmes de gestion de fichiers pas d interrogation sans savoir où est l'information recherchée ("navigation") et sans écrire de programmes 1970 : papier fondateur de CODD sur la théorie des relations fondement de la théorie des bases de données relationnelles INGRES à Berkeley - langage QUEL System R IBM à San Jose - langages SEQUEL et QBE 1980 : Apparition des SGBD relationnels sur le marché (Oracle, Ingres, Informix, Sybase, DB2 ) 1990 : début des SBGD orientés objet (Gemstone, O 2, Orion, Objectstore, Versant, Matisse...). Aujourd hui : relationnel-objet, semi-structuré, multimédia... 7

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 8

BIBLIOGRAPHIE Ouvrages de référence utilisés pour le cours : T. Connoly, C. Begg et A. Strachan, Database Systems A Pratical Approach to Desigh, Implementation and Management, 1998, ISBN: 0-201-34287-1, G. Gardarin, Bases de Données - objet/relationnel, Eyrolles, 1999, ISBN: 2-212-09060-9, disponible à la BU 005.74 GAR R. Ramakrishnan et J. Gehrke, Database Management Systems, Second Edition; McGraw-Hill, 2000, ISBN: 0-07-232206-3, disponible à la BU 055.7 RAM A. Silberschatz, H.F. Korth et S. Sudarshan, Database System Concepts, McGraw-Hill, 1996, ISBN: 0-07-114810-8, disponible à la BU 005.7 DAT J.D. Ullman et J. Widom, A first Course in Database Systems, Prentice Hall, 1997, ISBN: 0-13-887647-9, disponible à la BU 005.7 ULL F. Brouad, R. Bruchez, C. Soutou, SQL, Syntex Informatique, Pearson, 2012, ISBN: 978-2-7440-7630-5, disponible à la BU 005.72 SQL 9

BIBLIOGRAPHIE Autres ouvrages de référence, disponibles à la BU : C.J. Date, An Introduction to Database Systems, Addison Wesley C.J. Date, A Guide to SQL Standard, Addison Wesley R.A. El Masri et S.B. Navathe, Fundamentals of Database Systems, Prentice Hall Ouvrages pédagogiques contenant des exercices corrigés : Philip J. Pratt, Initiation à SQL - Cours et Exercices corrigés, Eyrolles, 2001 BU : 005.72 SQL Christian Soutou, De UML à SQL - Conception de bases de données, Eyrolles, 2002 BU : 005.72 SOU F. Brouard, C. Soutou, SQL (Synthèse de cours et exercices corrigés). Pearson Education 2005 BU : 005.72 SQL Christian Soutou, SQL Pour Oracle (avec exercices corrigés), Eyrolles, 2005 BU 005.72 SOU Nicolas Larousse, Création de bases de données, Coll. Synthex, Pearson Education, 2006 10

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 11

Modélisation Modélisation Méthodologie à suivre pour modéliser un problème Déterminer les entités/classes et attributs : entité/instance de classe = objet décrit par de l information objet caractérisé uniquement par un identifiant = attribut attribut multi-valué ou avec une association 1:N = entité ou instance attacher les attributs aux ensemble d entités/classes qu'ils décrivent le plus directement éviter au maximum les identificateurs composites Identifier les généralisations-spécialisations/héritage Définir les associations éliminer les associations redondantes éviter les associations n-aires calculer les cardinalités de chaque association 12

Modélisation Modèlisation Entité/Association (Format Merise) Un automobiliste possède entre zéro et N voitures Une voiture a un et un seul propriétaire 13

Modélisation Modèlisation UML Un automobiliste possède entre zéro et N voitures Une voiture a un et un seul propriétaire Attention : petite liberté prise avec UML, les attributs soulignés ici ne correspondent pas à des attributs dérivés mais aux identificateurs (pour ne pas les oublier lors du passage au relationnel!!) 14

Modélisation Généralisation/Spécialisation (E/A - Merise) Ensemble d entités généralisantes Ensemble d entités spécialisées 15

Modélisation Héritage (UML) Classe mère / Sur-classe Classes dérivées ou filles / sous-classes 16

Modélisation Agrégat (E/A - Merise) 17

Modélisation Classe-Association (UML) 18

Modélisation Entité Faible (E/A - Merise) Chaque salle a un numéro unique dans un bâtiment donné Appartie nt Ex. Salle 1 du bâtiment A et Salle 1 du bâtiment C Pour distinguer une salle d une autre, il faut connaître le bâtiment auquel elle est rattachée 19

Modélisation Association qualifiée (UML) 1 Appartient Chaque salle a un numéro unique dans un bâtiment donné Ex. Salle 1 du bâtiment A et Salle 1 du bâtiment C Pour distinguer une salle d une autre, il faut connaître le bâtiment auquel elle est rattachée 20

Modélisation Composition (UML) 21

Modélisation Contraintes Contraintes d intégrité : toutes règles implicites ou explicites que doivent suivre les données [Gar99] Contraintes d'entité: toute entité doit posséder un identificateur Contraintes de domaine : les valeurs de certains attributs doivent être prises dans un ensemble donné Contraintes d'unicité : une valeur d'attribut ne peut pas être affectée deux fois à deux entités différentes Contraintes générales : règle permettant de conserver la cohérence de la base de manière générale 22

Modélisation Exemples de contraintes Contraintes de domaine : "La fonction d un enseignant à l Université prend sa valeur dans l ensemble {vacataire, moniteur, ATER, MCF, Prof., PRAG, PAST}." Contraintes d'unicité : "Un département, identifié par son numéro, a un nom unique (il n y a pas deux départements de même nom)." Contraintes générales : "Un même examen ne peut pas avoir lieu dans deux salles différentes à la même date et à la même heure. " 23

Modélisation Dépendances fonctionnelles Un attribut (ou un groupe d'attributs) Y dépend fonctionnellement d'un attribut (ou groupe d'attributs) X si : étant donné une valeur de X, il lui correspond une valeur unique de Y ( l'instant considéré) X Y : Y dépend fonctionnellement de X ou X détermine Y Déclaration des dépendances au niveau du schéma conceptuel 24

Modélisation Exemple de dépendances fonctionnelles identificateur Tous les autres attributs Immatriculation Marque, Type, Puissance, Année Marque, Type, Puissance, Année Immatriculation Type Marque Ex. Le type "Twingo" sera toujours associé, dans la base de données, à la marque "Renault". EnseignantID Nom, Prénom, Position Nom, Prénom, Position, Enseignant_ID Si un numéro de téléphone est associé à un seul enseignant : Telephone Enseignant_ID 25

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 26

Modèle Relationnel Modèle relationnel Domaine : ensemble de valeurs caractérisé par un nom Relation : sous-ensemble du produit cartésien d'une liste de domaines caractérisé par un nom unique représentée sous forme de table à deux dimensions colonne = un domaine du produit cartésien un même domaine peut apparaître plusieurs fois ensemble de nuplets sans doublon Attribut : une colonne dans une relation caractérisé par un nom et dont les valeurs appartiennent à un domaine les valeurs sont atomiques Nuplet : une ligne d'une relation correspondant à un enregistrement, c-à-d une entité/instance de classe les nuplets d'une relation sont tous différents 27

Modèle Relationnel Exemple de relation Nom d attribut NSS Nom Prénom Fonction 273 Manouvrier Maude MCF La relation Enseignant Nuplets ou tuples 28

Modèle Relationnel Instances et schéma Instances de base de données : les nuplets (les valeurs) contenus dans la base à un instant donné Schéma de base de données : ensemble de schémas de relation modélisation logique de la base de données à l aide du modèle relationnel Schéma de relation : liste d attributs et leurs domaines 29

Modèle Relationnel Passage au relationnel Transformation des ensembles d entités : chaque ensemble d'entités/classes E une relation R dont le schéma est celui de l'ensemble d'entités/classe l'identificateur de E devient la clé de R chaque ensemble d'entités faibles/association qualifiée E une relation R qui comprend tous les attributs de E + l'identificateur de l'ensemble d'entités fortes/classe associé(e) généralisation-spécialisation/héritage l'ensemble d'entités généralisante/classe mère E une relation R chaque ensemble d'entités E i spécialisé/classe fille une relation R i dans laquelle l'identifiant est de même domaine que l'identifiant de E 30

Modèle Relationnel Transformation des ensembles d associations E/A Accidente lors de la location Automobiliste ( Auto_ID, Nom, Prénom, Adresse) Accident ( Auto_ID, Nom, Prénom, Adresse, Immatriculation, Marque, Type, Puissance, Année ) Voiture (Immatriculation, Marque, Type, Puissance, Année ) Comment faire le lien? 31

Modèle Relationnel Transformation des ensembles d associations UML Accidente lors de la location Accidente ( Auto_ID, Nom, Prénom, Adresse, Immatriculation, Marque, Type, Puissance, Année ) On peut choisir l un ou l autre comme clé 32

Modèle Relationnel Transformation des ensembles d associations E/A ou 1:N ou 0:1 Automobiliste ( Auto_ID, Nom, Prénom, Adresse ) Voiture ( Immatriculation, Marque, Puissance, Type, Année, #Auto_ID ) NB : #Auto_ID fait référence à Auto_ID de Automobiliste, 33

Modèle Relationnel Transformation des ensembles d associations UML ou 1..* ou 0..1 Automobiliste ( Auto_ID, Nom, Prénom, Adresse ) Voiture ( Immatriculation, Marque, Puissance, Type, Année, #Auto_ID ) NB : #Auto_ID fait référence à Auto_ID de Automobiliste 34

Modèle Relationnel Transformation des ensembles d associations E/A ou 1:N ou 0:1 ou 1:M ou 0:1 Automobiliste ( Auto_ID, Nom, Prénom, Adresse ) Voiture ( Immatriculation, Marque, Puissance, Type, Année ) Location ( #Auto_ID, #Immatriculation, Date ) ou Location ( Loc_ID, #Auto_ID, #Immatriculation, Date ) 35

Modèle Relationnel Transformation des ensembles d associations UML ou 1..* ou 0..1 ou 1..* ou 0..1 Automobiliste ( Auto_ID, Nom, Prénom, Adresse ) Voiture ( Immatriculation, Marque, Puissance, Type, Année ) Location ( #Auto_ID, #Immatriculation, Date ) ou Location ( Loc_ID, #Auto_ID, #Immatriculation, Date ) 36

Modèle Relationnel Transformation des concepts Généralisation-Spécialisation / Héritage Personne ( Personne_ID, Nom,Prénom, Téléphone... ) Enseignant ( #Personne_ID, Position ) Etudiant ( #Personne_ID, Adresse, Ville...) NB : #Personne_ID dans Enseignant et Etudiant font référence à Personne_ID dans Personne 37

Modèle Relationnel Transformation des entités faibles E/A Bâtiment ( Bâtiment_ID,... ) Salle ( Numéro, #Bâtiment_ID, Capacité) NB : Une salle est identifiée par le couple (Numéro,#Bâtiment_ID) #Bâtiment_ID fait référence à Bâtiment_ID de Bâtiment 38

Modèle Relationnel Transformation des associations qualifiées UML Bâtiment ( Bâtiment_ID,... ) Salle ( Numéro, #Bâtiment_ID, Capacité) NB : Une salle est identifiée par le couple (Numéro,#Bâtiment_ID) ; #Bâtiment_ID fait référence à Bâtiment_ID de Bâtiment 39

Modèle Relationnel Transformation de la composition UML Voiture ( Immatriculation, Marque, Puissance, Type, Année ) Voi Moteur (Numéro, #Immatriculation, Chevaux) PotEchappement (Num_Série, #Immatriculation, DateInstallation) 40

Modèle Relationnel Dépendances fonctionnelles Ne pas oublier de définir les DF : Accidente ( Auto_ID, Nom, Prénom, Adresse, Immatriculation, Marque, Type, Puissance, Année ) Auto_ID Nom, Prénom, Adresse Immatriculation Marque, Type, Puissance, Année Type Marque Auto_ID Immatriculation et Immatriculation Auto_ID Voiture ( Immatriculation, Marque, Puissance, Type, Année, #Auto_ID ) Immatriculation Auto_ID + les Dépendances fonctionnelles de Voiture Location ( #Auto_ID, #Immatriculation, Date ) Pas de dépendance non triviale Auto_ID Immatriculation 41

Modèle Relationnel Intégrité structurelle Unicité des clés ensemble minimal d'attributs dont la connaissance des valeurs permet d'identifier un nuplet unique de la relation considérée R a pour clé K si : t 1, t 2 nuplets d une instance de R t 1.K t 2.K Contraintes de référence contrainte référentielle : contrainte d'intégrité portant sur une relation R qui consiste à imposer que la valeur d'un groupe d'attributs apparaissent comme valeur de clé dans une autre relation clé étrangère : un groupe d'attributs qui doit apparaître comme clé dans une autre relation 42

Modèle Relationnel Clé /Clé minimale /Surclé Accident ( Auto_ID, Nom, Prénom, Adresse, Immatriculation, Marque, Type, Puissance, Année ) Clés primaires possibles : Auto_ID ou Immatriculation Surclé : (Auto_ID, Immatriculation) + d autres attributs Voiture ( Immatriculation, Marque, Puissance, Type, Année, #Auto_ID ) Clé primaire : Immatriculation Surclé : (Immatriculation, Marque, Puissance, Type, Année,Auto_ID) Location ( Auto_ID, Immatriculation, Date ) Clé primaire : (#Auto_ID, #Immatriculation, Date) 43

Modèle Relationnel Intégrité structurelle Valeur nulle valeur conventionnelle introduite dans une relation pour représenter une information inconnue ou inapplicable tout attribut peut prendre une valeur nulle excepté les attributs de la clé primaire (contrainte d entité) Contraintes de domaine contrainte d'intégrité qui impose qu'une colonne d'une relation doit comporter des valeurs vérifiant une assertion logique 44

Modèle Relationnel Langages d interrogation Algèbre relationnelle a inspiré le langage SQL Calcul relationnel à variable nuplet a inspiré le langage QUEL du SGBD Ingres Calcul relationnel à variable domaine a inspiré le langage QBE (Query By Example) d IBM SQL (Structured Query Langage) Ces langages sont équivalents : ils permettent de désigner les mêmes ensembles de données 45

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 46

Algèbre relationnelle Algèbre relationnelle Opérations unaires : sélection des nuplets satisfaisant un certain prédicat Etudiant(Etudiant_ID, Nom, Prénom, Rue, Ville, Code-Postal, Téléphone, Fax, Email, NumAnnées) (Ville= Paris ) (Etudiant) (Ville= Paris ) (NumAnnées 2) (Etudiant) projection : élimination de certains attributs d une relation Nom,Prénom (Etudiant) Nom,Prénom ( (Ville= Paris ) (Etudiant) ) 47

Algèbre relationnelle Exemples de résultats d opérations unaires Relation Enseignant : Résultat de la sélection (grade= MCF ) (Enseignant) : Résultat de la projection Nom,Prénom (Enseignant) : Résultat de la requête Nom,Prénom ( (grade= MCF ) (Enseignant)) : 48

Algèbre relationnelle Opérations binaires Union : rassemblement des nuplets de 2 relations compatibles Enseignant( Enseignant_ID, Département_ID, Nom, Prénom, Grade, Téléphone, Fax, Email ) Nom,Prénom (Etudiant) Nom,Prénom (Enseignant) Différence : des nuplets de 2 relations compatibles Nom,Prénom (Enseignant) - Nom,Prénom (Etudiant) Produit cartésien : combinaison des nuplets de 2 relations Département(Département_ID, Nom_Département) Produit cartésien de Enseignant Departement a pour schéma : (Enseignant_ID, Enseignant.Département_ID, Nom, Prénom, Grade, Téléphone, Fax, Email, Département.Département_ID, Nom_Département) 49

Algèbre relationnelle Exemple d union Nom,Prénom (Etudiant) Nom,Prénom (Enseignant) : Source : IUT Nice Cours SGBD1

Algèbre relationnelle Exemple de différence Nom,Prénom (Enseignant) - Nom,Prénom (Etudiant) : Source : IUT Nice Cours SGBD1 51

Algèbre relationnelle Produit cartésien NSS Nom Prénom Grade Dept 12345 Manouvrier Maude MCF 1 45678 Toto Titi Prof 2 La relation Enseignant Dept_ID Nom_Dept_ 1 Info 2 Math La relation Département NSS Nom Prénom Grade Dept Dept_ID Nom_Dept 12345 Manouvrier Maude MCF 1 1 Info 45678 Toto Titi Prof 2 1 Info 12345 Manouvrier Maude MCF 1 2 Math 45678 Toto Titi Prof 2 2 Math La relation Enseignant Département 52

Algèbre relationnelle Autres opérations Renommage : A,B, (r A A, B B, ) Intersection : r s = r - (r - s) Théta-jointure : r s = (r s) Jointure naturelle : r(r) et s(s) avec R S = {A 1,A 2,, A n } r s = R S ( (r.a1=s.a1) (r.a2=s.a2) (r.an=s.an) (r s)) 53

Algèbre relationnelle Exemple de renommage et d intersection Last_Name,First_Name (Enseignant Nom Last_Name, Prénom First_Name ) : Nom,Prénom (Enseignant) Nom,Prénom (Etudiant) : Source : IUT Nice Cours SGBD1 54

Algèbre relationnelle La relation Enseignant : Exemple de produit cartésien La relation Departement : Enseignement Departement : 55

Algèbre relationnelle La relation Enseignant : Exemple de jointure La relation Departement : Enseignement Departement_ID Departement : 56

Algèbre relationnelle Exemple de jointure (2) Source : IUT Nice Cours SGBD1 57

Algèbre relationnelle Division Requête qui contient le terme «pour tous» Soient r(r) et s(s) avec S R la relation r s a pour schéma R - S un nuplet t appartient à r s si : t R - S (r) t s nuplet de s, t r dans r qui satisfait : t r (S) = t s (S) t r (R-S) = t r s = R - S (r) - R - S [ ( R - S (r) s ) - R - S, S (r) ] 58

Algèbre relationnelle La relation Enseignement : Exemple de Division La relation Inscription : Etudiant_ID, Enseignement_ID, Departement_ID (Inscription) Enseignement_ID, Departement_ID (Enseignement) : 59

Algèbre relationnelle Exemple de Division (2) Source : IUT Nice Cours SGBD1 60

Algèbre relationnelle Contraintes et DF Expressions des contraintes d intégrité référentielle : Département_ID (Enseignant) Département_ID (Département) Expressions des contraintes : «pas de dept. sans enseignants» Département_ID (Département) - Département_ID (Enseignant) = Expressions des dépendances fonctionnelles : X Y r et t 1, t 2 r on a : x (t 1 ) = x (t 2 ) Y (t 1 ) = Y (t 2 ) 61

Calcul relationnel Calcul relationnel Langage déclaratif (ou non-procédural): le quoi Algèbre relationnelle (procédural) : le comment Calcul à variable nuplet : { t P(t) } avec P(t) tel que : r(t) : t est un nuplet de r t.att 1 = valeur 1 t.att 1 > s.att 2... {t Etudiant(t) (t.ville= Paris ) (t.numannées 2)} {t.nom, t.prénom Etudiant(t) (t.ville= Paris) } 62

Calcul relationnel Quantificateurs t (Q(t)) : il existe un nuplet dans la base qui vérifie Q(t) t (Q(t)) : pour tous les nuplets, Q(t) est vrai Variable liée Variable libre 63

Calcul relationnel Division Division : Livre(ISBN, Titre, Editeur) Emprunt(EmpruntID, ISBN, DateEmprunt,EtudiantID) Etudiant(EtudiantID, Nom, Prenom) «Quels sont les noms et prénoms des étudiants ayant emprunté tous les livres?» La requête retourne les valeurs des att. Nom et Prenom des nuplets t de la relation Etudiant tq : { t.nom, t.prenom / Etudiant(t) [ u ( Livre(u) ) v { t.nom, t.prenom / Etudiant(t) [ u Livre(u) (v.isbn=u.isbn ) ] } ( v Emprunt(v) (v.etudiant_id=t.etudiant_id) ( v Emprunt(v) (v.isbn=u.isbn ) ) ] (v.etudiant_id=t.etudiant_id) ) Il existe un nuplet v dans Emprunt associant le livre u à l étudiant t Quel que soit u, u n est pas dans Livre ou (u est dans Livre et ) il existe v 64

Calcul relationnel Division Division : Livre(ISBN, Titre, Editeur) Emprunt(EmpruntID, ISBN, DateEmprunt,EtudiantID) Etudiant(EtudiantID, Nom, Prenom) «Quels sont les titres des livres empruntés par tous les étudiants?» La requête retourne les valeurs des att. Titre des nuplets t de la relation Livre tq : {t.titre { t.titre/ / Livre(t) [ [ u u ( Etudiant(u) ) v (v.isbn=t.isbn ) } ] Quel que soit u, u n est pas dans Etudiant ou (u est dans Etudiant et ) il existe v ( v Emprunt(v) ( v Emprunt(v) (v.etudiant_id=u.etudiant_id) (v.isbn=.isbn ) ) ] ) Il existe un nuplet v dans Emprunt associant le livre t à l étudiant u 65

Calcul relationnel Calcul à variable domaine {<x 1,x 2, x n > P( x 1,x 2,, x n )} avec x 1,x 2, x n variable domaine et P formule Exemples : Marin(MiD, Nom, Grade, Date-Nais) Bateau(Bid, Bnom,Couleur) Reservation(Mid,Bid,Date) Nom et grade des marins : { < n, g > \ id, dn Marin(id,n,g,dn) } Marins ayant réservé tous les bateaux : { < i, n, g, dn > \ Marin(i,n,g,dn) [ b, bn, c Bateau(b,bn,c) v ( m, br, d Reservation(m,br,d) (m = i) (br = b) ) ] } 66

Calcul relationnel Query By Exemple : QBE langage de requête graphique mise en œuvre du calcul à variable domaine Oracle Query Builder Etape 1 : sélection des relations de la requête 67

Calcul relationnel QBE Etape 2 : sélection des attributs de la requête 68

Calcul relationnel QBE Etape 3 : possibilité d appliquer des fonction d agrégation sur les nuplets résultats 69

Calcul relationnel Expression des contraintes en logique des prédicats Agence(nom_banque,ville...) Emprunt(num_emprunt,nom_banque,num_client, montant...) Compte(nom_banque,num_client,num_compte,solde...) «Chaque emprunteur possède un compte en banque dans l'agence dont le solde est au minimum égal à la moitié de son emprunt» ( e Emprunt(e) ( c Compte(c) ) ) (c.num_client=e.num_client) (c.nom_banque = e.nom_banque) ( c.solde (e.montant / 2) 70

Algèbre relationnelle étendue Algèbre relationnelle étendue Projection généralisée : ajout d expressions arithmétiques dans une projection Nom_Client, (Crédit - Débit) (Compte_en_Banque ) Jointure externe (outer-join) : jointure externe à gauche : ] jointure externe à droite : [ jointure externe : ] [ R ] S R S et conservation des attributs des nuplets de R qui ne joignent avec aucun nuplet de S (les valeurs des attributs de S sont mises à NULL) 71

Algèbre relationnelle étendue Nom_Employé Tom Jerry Alex Marthe Personnel Ville Marseille Paris Limoges Perpignan Employé Nom_Employé Filiale Salaire Tom SUD_EST 10000 Jerry IDF 25000 Sophie IDF 15000 Marthe SUD_OUEST 12000 Personnel ] Employé (externe gauche) Personnel [ Employé (externe droite) Nom_Employé Ville Filiale Salaire Tom Marseille SUD_EST 10000 Jerry Paris IDF 25000 Alex Limoges NULL NULL Marthe Perpignan SUD_OUEST 12000 Nom_Employé Ville Filiale Salaire Tom Marseille SUD_EST 10000 Jerry Paris IDF 25000 Sophie NULL IDF 15000 Marthe Perpignan SUD_OUEST 12000 72

Algèbre relationnelle étendue Fonction d agrégation Somme des places disponibles dans l Université Sum Capacité (Salle ) Nombre moyen de places disponibles dans les salles de l Université Avg Capacité (Salle) Nombre d étudiants à l Université Count Etudiant_ID (Etudiant) Capacité de la plus petite salle Min Capacité (Salle) Nombre d enseignants par départements : Nom_Département Count Enseignant_ID (Enseignant Département) 73

Algèbre relationnelle étendue Insertion Mise à jour de la base Salle Salle {(«B», «038», 15)} Suppression Salle Salle - Salle 10 (Salle) Mise à jour : utilisation de la projection généralisée n Etudiant_ID [ (Nom= Dupont ) (Prénom= Jacques ) (Etudiant)] Etudiant (Etudiant.Etudiant_ID < > n.etudiant_id) (Etudiant) Etudiant_ID, Nom, Prénom, Rue, Ville, Code-Postal, Mise à jour du téléphone Téléphone «01 45 12 45 86», Fax, Email, NumAnnées [ (Etudiant.Etudiant_ID =n.etudiant_id) (Etudiant) ] 74

Algèbre relationnelle étendue Vue Table virtuelle dont le schéma et les instances sont dérivés de la base réelle par une requête et qui est utilisée pour : Cacher certaines informations à un groupe d utilisateurs Faciliter l accès à certaines données create view nom_vue as < requête > Exemple : create view Info_Non_Confidentielle_Etudiant as Etudiant_ID, Nom, Prénom, Email (Etudiant) 75

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 76

SQL SQL Structured Query Language (normalisé en 1986) SQL2/SQL92 : standard adopté en 1992 SQL3/SQL99 : extension de SQL2 avec "gestion" d objets, déclencheurs SQL2003: auto-incrémentation des clés, colonne calculée, prise en compte de XML, SQL2008: correction de certains défauts et manques (fonctions, types, curseurs ) SQL : Langage de Manipulation de Données (DML) : interroger et modifier les données de la base Langage de Définition de Données (DDL) : définir le schéma de la base de données Langage de contrôle d accès aux données (DCL) : pour définir les privilèges d accès des utilisateurs Langage de contrôle des transactions (TCL) : pour gérer les transactions. 77

SQL Bibliographie SQL2 - Application à Oracle, Access et RDB Pierre DELMAL, 2ème Edition, De Boeck Université, 1998 BU: 005.74 SQL SQL Pour Oracle (avec exercices corrigés) Christian Soutou, Eyrolles, 2005 BU: 005.72 SOU Initiation à SQL (cours et exercices corrigés) Philip J. Pratt, Eyrolles,2001 BU : 005.72 SQL SQL (cours et exercices corrigés) Frédéric Brouad et Christian Soutou, Coll. Synthex, Pearson Education, 2012 BU : 005.72 SQL Oracle PL/SQL - Précis & concis Steven Feuerstein, Bill Pribyl et Chip Dawes, O Reilly, 2000 78

SQL DML (Langage de Manipulation des Données) SELECT [DISTINCT] * FROM table_1 [var_nuplet_1], table_2 [var_nuplet_1], [WHERE prédicat_1 AND [ou OR] prédicat_2 ] SELECT [DISTINCT] exp_1 [AS nom_1], exp_2... FROM table_1 [var_nuplet_1], table_2 [var_nuplet_1], [WHERE prédicat_1 AND [ou OR] prédicat_2 ] 79

SQL DML SELECT Nom, Prénom FROM Etudiant WHERE Ville = Paris ; SELECT Nom, Prénom FROM Etudiant WHERE Ville = Paris AND Nom LIKE _AR% ; SELECT Nom, Prénom FROM Etudiant WHERE Fax IS NULL; SELECT Intitulé, (NbSeances*3) AS NbHeures FROM Cours WHERE (NbSeances*3) BETWEEN 24 AND 27 ; SELECT Nom, Prénom FROM Enseignant WHERE Nom_Département IN ( INFO, MATH, ECO ) 80

SQL DML Prédicats du WHERE de la forme : exp1 = exp2 exp op ANY/SOME (SELECT ) exp1!= exp2 exp op ALL (SELECT ) exp1 > exp2 avec op tel que =,!=, <, >... exp1 < exp2 exp1 <= exp2 exp IN (SELECT ) exp1 >= exp2 exp NOT IN (SELECT ) exp1 BETWEEN exp2 AND exp3 exp1 LIKE exp2 exp1 IN (exp2, exp3, ) SELECT Intitulé, exp1 NOT IN (exp2, exp3, ) FROM Cours exp1 IS NULL WHERE NbSeances <= exp1 IS NOT NULL ( SELECT AVG(NbSeances) FROM Cours); 81

SQL Exemples de résultats d opérations unaires Relation Enseignant : Résultat de la sélection SELECT * FROM Enseignant WHERE Grade= MCF : Résultat de la projection SELECT Nom, Prenom FROM Enseignant : Résultat de la requête SELECT Nom, Prenom FROM Enseignant WHERE Grade= MCF : 82

SQL DML Clause EXISTS : Retourne VRAI si au moins un nuplet est renvoyé par la requête FAUX si aucun nuplet n est retourné. La valeur NULL n a aucun effet sur le booléen résultat SELECT Nom, Prénom FROM Enseignant E WHERE NOT EXISTS ( SELECT * FROM Reservation_Salle S WHERE S.Enseignant_ID = E.Enseignant_ID ); 83

SQL DML Fonctions statistique et de groupage : COUNT, MIN, MAX, AVG, SUM, EVERY, ORDER BY, GROUP BY SELECT COUNT(*) FROM Etudiant ; SELECT AVG(Capacité), SUM(Capacité) FROM Salle ; SELECT Département_ID, Nom, Prénom FROM Enseignant ORDER BY Département_ID DESC, Nom, Prénom ; SELECT Département_ID, COUNT(*) FROM Réservation_Salle GROUP BY Département_ID HAVING COUNT(*) >=4 ; 84

SQL DML Fonctions statistique et de groupage : EVERY retourne un booléen qui est vrai si toutes les occurrences sont vraies SELECT date_resa, COUNT(*) FROM Reservation GROUP BY date_resa HAVING EVERY(date_resa <= CURRENT_DATE) SELECT date_resa, COUNT(*) FROM Reservation GROUP BY date_resa HAVING EVERY(date_resa >= CURRENT_DATE) SELECT EVERY(date_resa >= CURRENT_DATE) FROM Reservation SELECT EVERY(date_resa <= CURRENT_DATE) FROM Reservation 85

SQL DML Jointure : forme générale SELECT Nom, Prénom, Nom_Departement FROM Enseignant E, Departement D WHERE E.Departement_ID = D.Departement_ID ; Jointure interne : SELECT Nom, Prénom, Nom_Département FROM Enseignant INNER JOIN Département ON Enseignant.Departement_ID = Derpartement.Departement_ID ; 86

SQL DML Jointure externe : SELECT Nom, Prénom, Nom_Département FROM Enseignant LEFT OUTER JOIN Departement ON Enseignant.Departement_ID = Derpartement.Departement_ID ; S il existe des enseignants attaché à aucun département, la valeur de Département_ID sera NULL. En SQL2 : [RIGHT LEFT FULL] OUTER JOIN Jointure naturelle : SELECT Nom, Prénom, Nom_Département FROM Enseignant NATURAL JOIN Département Produit cartésien: SELECT Nom, Prénom, Nom_Département FROM Enseignant CROSS JOIN Département 87

SQL Exemple de jointure La relation Enseignant : La relation Departement : SELECT * FROM Enseignant e, Departement d WHERE e.departement_id=d.departement_id : 88

SQL Nom_Employé Tom Jerry Alex Marthe Personnel Ville Marseille Paris Limoges Perpignan Employé Nom_Employé Filiale Salaire Tom SUD_EST 10000 Jerry IDF 25000 Sophie IDF 15000 Marthe SUD_OUEST 12000 Personnel ] Employé Personnel [ Employé Nom_Employé Ville Filiale Salaire Tom Marseille SUD_EST 10000 Jerry Paris IDF 25000 Alex Limoges NULL NULL Marthe Perpignan SUD_OUEST 12000 Nom_Employé Ville Filiale Salaire Tom Marseille SUD_EST 10000 Jerry Paris IDF 25000 Sophie NULL IDF 15000 Marthe Perpignan SUD_OUEST 12000 89

SQL DML Opérateurs ensemblistes : SELECT Nom,Prénom FROM Enseignant WHERE Département_ID = INFO INTERSECT SELECT Nom,Prénom FROM Enseignant WHERE Département_ID = MATH SELECT Nom,Prénom FROM Enseignant WHERE Département_ID = INFO UNION SELECT Nom,Prénom FROM Etudiant WHERE Département_ID = MATH ORDER BY Nom,Prénom SELECT Nom,Prénom FROM Enseignant WHERE Département_ID = INFO MINUS SELECT Nom,Prénom FROM Enseignant WHERE Département_ID = MATH MINUS = EXCEPT en standard SQL2 90

SQL Exemple d union et de différence SELECT Nom, Prenom FROM Enseignant UNION SELECT Nom, Prenom FROM Etudiant : SELECT Nom, Prenom FROM Enseignant EXCEPT SELECT Nom, Prenom FROM Etudiant : 91

SQL Exemple de renommage et d intersection SELECT Nom AS Last_name, Prenom AS First_name FROM ENSEIGNANT : SELECT Nom, Prenom FROM Enseignant INTERSECT SELECT Nom, Prenom FROM Etudiant 92

SQL DML Division : Livre(ISBN, Titre, Editeur) Emprunt(EmpruntID,ISBN, DateEmprunt,EtudiantID) Etudiant(EtudiantID,Nom, Prenom) «Quels livres ont été empruntés par tous les étudiants?» {t.titre / / Livre(t) [ [ u Etudiant ( Etudiant (u) (u) ) v ( ( v v Emprunt(v) (v.etudiant_id=u.etudiant_id) (v.isbn=t.isbn ) ) )) ] ] }} Il n y a pas de mot-clé "quel que soit " en SQL2 SELECT t.titre FROM Livre t WHERE NOT EXISTS ( SELECT * FROM Etudiant u WHERE NOT EXISTS ( SELECT * FROM Emprunt v WHERE u.etudiantid=v.etudiantid AND v.isbn=t.isbn ) ) ; 93

SQL Division La relation Enseignement : La relation Inscription : Etudiant_ID, Enseignement_ID, Departement_ID (Inscription) Enseignement_ID, Departement_ID (Enseignement) : 94

SQL DML Insertion INSERT INTO table(col1, col2, coln) VALUES (val1, val2, valn) INSERT INTO table(col1, col2, coln) SELECT Sous Oracle Suppression DELETE FROM table WHERE prédicat Mise à jour UPDATE table SET col1 = exp1, col2 = exp2 WHERE prédicat Transactions : COMMIT, ROLLBACK [TO], SAVE POINT 95

SQL DDL (Langage de Définition des Données) CREATE TABLE table (col1 type 1 [NOT NULL], col2 type2 [NOT NULL] ) Contraintes : CONSTRAINT nom_contrainte PRIMARY KEY (liste attributs de la clé primaire) NOT NULL immédiatement après la déclaration de l attribut CHECK (condition) après la déclaration de l attribut UNIQUE après la déclaration de l attribut FOREIGN KEY (clé étrangère) REFERENCES nom_table_referencée (liste_colonnes) [ MATCH SIMPLE PARTIAL FULL ] si plusieurs colonnes [ ON UPDATE RESTRICT NO ACTION CASCADE SET NULL SET DEFAULT] [ ON DELETE RESTRICT NO ACTION CASCADE SET NULL SET DEFAULT] CREATE TABLE table AS SELECT... 96

SQL DDL CREATE TABLE Enseignant ( Enseignant_ID Departement_ID Nom Prenom Grade integer, integer NOT NULL, varchar(25) NOT NULL, varchar(25) NOT NULL, varchar(25) CONSTRAINT CK_Enseignant_Grade CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF')), Telephone Fax Email varchar(10) DEFAULT NULL, varchar(10) DEFAULT NULL, varchar(100) DEFAULT NULL, CONSTRAINT PK_Enseignant PRIMARY KEY (Enseignant_ID), CONSTRAINT "FK_Enseignant_Departement_ID" ); FOREIGN KEY (Departement_ID) REFERENCES Departement (Departement_ID) ON UPDATE RESTRICT ON DELETE RESTRICT Contrainte de domaine Définition de la clé primaire Définition d une clé étrangère 97

SQL CREATE TABLE Reservation ( Reservation_ID Batiment Numero_Salle Enseignement_ID Departement_ID Enseignant_ID Date_Resa Heure_Debut integer, varchar(1) NOT NULL, varchar(10) NOT NULL, integer NOT NULL, integer NOT NULL, integer NOT NULL, date NOT NULL DEFAULT CURRENT_DATE, time NOT NULL DEFAULT CURRENT_TIME, Heure_Fin time NOT NULL DEFAULT '23:00:00', Nombre_Heures integer NOT NULL, CONSTRAINT PK_Reservation PRIMARY KEY (Reservation_ID), CONSTRAINT "FK_Reservation_Salle" FOREIGN KEY (Batiment,Numero_Salle) REFERENCES Salle (Batiment,Numero_Salle) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT "FK_Reservation_Enseignement" FOREIGN KEY (Enseignement_ID,Departement_ID) REFERENCES Enseignement (Enseignement_ID,Departement_ID) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT "FK_Reservation_Enseignant" FOREIGN KEY (Enseignant_ID) REFERENCES Enseignant (Enseignant_ID) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT CK_Reservation_Nombre_Heures CHECK (Nombre_Heures >=1), CONSTRAINT CK_Reservation_HeureDebFin ); CHECK (Heure_Debut < Heure_Fin) 98

SQL DDL MATCH SIMPLE/PARTIAL/FULL: CREATE TABLE inscription( inscription_id serial NOT NULL, etudiant_id integer, enseignement_id integer, master_id integer, CONSTRAINT pk_inscription PRIMARY KEY (inscription_id ), CONSTRAINT "FK_Inscription_Enseignement" FOREIGN KEY (enseignement_id, master_id) REFERENCES enseignement (enseignement_id, master_id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT "FK_Inscription_Etudiant" FOREIGN KEY (etudiant_id) REFERENCES etudiant (etudiant_id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT "UN_Inscription" UNIQUE (etudiant_id, enseignement_id, master_id ) ) 99

SQL DDL MATCH SIMPLE/PARTIAL/FULL : MATCH SIMPLE (par défaut) : violation si toutes les valeurs sont à la fois divergentes et renseignées INSERT INTO INSCRIPTION VALUES (3,2,NULL,NULL) OK INSERT INTO INSCRIPTION VALUES (4,2,3,NULL) OK même si pas d enseignement_id 3 dans la table enseignement INSERT INTO INSCRIPTION VALUES (5,2,NULL,1) OK INSERT INTO INSCRIPTION VALUES (6,2,3,4) KO car la clé (enseignement_id, master_id)=(3, 4) n'est pas présente dans la table enseignement MATCH PARTIAL : violation si une seule des valeurs divergent INSERT INTO INSCRIPTION VALUES (4,2,3,NULL) KO car pas d enseignement_id 3 dans la table enseignement MATCH FULL : violation si toutes les valeurs divergent ou si une colonne est renseignée et l autre non INSERT INTO INSCRIPTION VALUES (3,2,NULL,NULL) OK INSERT INTO INSCRIPTION VALUES (4,2,1,NULL) KO même si enseignement_id 1 existe dans la table enseignement 100

SQL DDL Héritage de table (norme SQL99) : CREATE TABLE Personne ( PID Integer, Nom varchar(25) NOT NULL, Prenom varchar(25) NOT NULL, CONSTRAINT PK_Personne PRIMARY KEY (PID), ) Tables héritées de Personne : CREATE TABLE Etudiant UNDER Personne ( NumCarte varchar(25) NOT NULL) CREATE TABLE Enseignant UNDER Personne ( Grade varchar(25) CONSTRAINT CK_Enseignant_Grade CHECK (Grade IN ('Vacataire', 'Moniteur','ATER', 'MCF', 'PROF')) ) 101

SQL DDL Colonne calculée (norme SQL2003) : CREATE TABLE Etudiant ( Etudiant_ID integer, Ville varchar(25), Nom varchar(25) NOT NULL, Prenom varchar(25) NOT NULL, Date_Naissance date NOT NULL, Rue varchar(50) DEFAULT NULL, CP varchar(9) DEFAULT NULL, Adresse GENERATED ALWAYS AS (rue CP Ville) Telephone varchar(10) DEFAULT NULL, Fax varchar(10) DEFAULT NULL, Email varchar(100) DEFAULT NULL, CONSTRAINT PK_Etudiant PRIMARY KEY (Etudiant_ID) ); 102

SQL DDL CREATE [OR REPLACE] TRIGGER nom {BEFORE AFTER} événement_déclencheur ON nom_table [FOR EACH ROW] [WHEN (condition) ] bloc PL/SQL sous Oracle inst_de_suppr inst_de_modif instr_d_ajout ERROR en SQL2 événement_déclencheur = INSERT, UPDATE, DELETE Déclencheur de niveau instruction : pas de clause FOR EACH ROW Déclencheur de niveau ligne : variables liens :new et :old INSERT : valeurs à insérer dans :new.nom_colonne UPDATE : valeur originale dans :old.nom_colonne, nouvelle valeur dans :new.nom_colonne DELETE : valeur en cours de suppression :old.nom_colonne 103

SQL DDL CREATE OR REPLACE TRIGGER Enseignant_Actif BEFORE DELETE ON Enseignant FOR EACH ROW declare counter number; begin SELECT count(*) INTO counter FROM Enseignements WHERE Enseignant_ID = :old.enseignant_id; if counter > 0 then raise_application_error (-20800, Enseignant actif ne pouvant être supprimé'); end if; end; 104

SQL DDL CREATE OR REPLACE TRIGGER UPD_salaire_personnel BEFORE UPDATE salaire ON Personnel FOR EACH ROW WHEN (:old.salaire > :new.salaire) declare salaire_diminution EXCEPTION; begin raise salaire_diminution ; when salaire_diminution then raise_application_error(-20001, Le salaire ne peut pas diminuer ) end; 105

SQL DDL ALTER TABLE table ADD (col1 type1, col2 type2 ) MODIFY (col1 type1, col2 type2 ) DROP PRIMARY KEY DROP CONSTRAINT nom_contrainte DROP TABLE table CREATE VIEW vue (col1, col2) AS SELECT DROP VIEW vue CREATE [UNIQUE] INDEX nom_index ON table (col1,col ) 106

SQL Architecture Type : Client-Serveur Source : IUT Nice Cours SGBD1 107

SQL Middleware d accès aux bases de données Architecture logicielle définissant une interface standard d accès aux SGBD qui va assurer les dialogues entre clients et serveurs souvent hétérogènes A chaque SGBD correspond un pilote (driver) Indépendance vis à vis du SGBD par simple configuration du pilote Possibilité pour un même programme d interroger différentes bases de données dans différents SGBD 1. Java DataBase Connectivity (JDBC) 2. Open DataBase Connectivity (ODBC) - Middleware propriétaire (Windows) 108

SQL JDBC/ODBC Code source : Langage hôte + appels de fonctions propres à l API Librairie de l API Compilateur Exécutable Exécutable pouvant s exécuter au dessus de plusieurs SGBD Pilote Pilote Pilote PostgreSQL SQLServ er Oracle 109

SQL JDBC/ODBC Appel des fonctions de l API : lien entre l application et le gestionnaire de pilotes Pilote = librairie qui contient les appels JDBC/ODBC et traduit les requêtes en requêtes propres au SGBD Gestionnaire de pilotes (ODBC) = librairie qui charge les pilotes associés à chaque source de données (BD + SGBD) 110

SQL JDBC Exemple de programme Java sur la base exemple : import java.sql.*; // Tout ce qui est nécessaire pour JDBC import java.text.*; // Pour formater les dates import java.util.*; public class TestJDBCPostgresql { Connection db=null; // Variable de connexion Statement sql=null; // Variable pour un ordre SQL DatabaseMetaData dbmd; // Méta-données nécessaires // au pilote. 111

SQL JDBC public TestJDBCPostgresql(String argv[]) throws ClassNotFoundException, SQLException, java.io.ioexception { String database = argv[0]; String username = argv[1]; String password = argv[2]; // Récupération du pilote du SGBD (ici PostgreSQL) Class.forName("org.postgresql.Driver"); // Connexion à la base de données db = DriverManager.getConnection("jdbc:postgresql:" +database, username, password); // Si AUTOCOMMIT=true => le SGBD exécute COMMIT // après chaque requête // Si AUTOCOMMIT= false => le SGBD attend un COMMIT // explicite db.setautocommit(false); 112

SQL JDBC dbmd = db.getmetadata(); // Récuparation des méta-données // Pour tester que la connexion est OK System.out.println("Connection to SGBD «+ dbmd.getdatabaseproductname()+ " version «+ dbmd.getdatabaseproductversion()+ " database " + dbmd.geturl()+ " \nusing " + dbmd.getdrivername() + " version "+ dbmd.getdriverversion()+ " " + "successful.\n"); // Création d un ordre SQL pour créer une relation sql = db.createstatement(); String sqltext = "CREATE TABLE "; System.out.println("Executing this command: "+sqltext+"\n"); sql.executeupdate(sqltext); // Ne pas oublier le COMMIT si AUTOCOMMIT = false db.commit(); // Code équivalent pour un INSERT, UPDATE, DELETE 113

SQL JDBC // Exemple de requête de sélection ResultSet rset = sql.executequery("select Capacité FROM Reservation " + "WHERE Batiment='B' " + "AND Numero_Salle='022'"); // Parcours des nuplets résultat while (rset.next()) { System.out.println("Nom de la table : (généralement vide bug du driver)" + rset.getmetadata().gettablename(1)); System.out.println("Type de la colonne : " + rset.getmetadata().getcolumntypename(1)); System.out.println("Nom de la colonne : " + rset.getmetadata().getcolumnname(1) + "\n"; //Numérotation des colonnes à partir de 1 (et non de 0!!) System.out.println("Capacité de la salle B020 : " + rset.getint(1) + "\n"); 114

SQL JDBC // Création d un ordre SQL paramétré // Code SQL de la requête sqltext = "INSERT INTO Salle VALUES (?,?,?)"; // Préparation de l ordre SQL non encore exécuté //car il manque des paramètres PreparedStatement ps = db.preparestatement(sqltext); String [] NumBatiment = {"A", "B", "C", "P", "D"}; String [] NumSalle = {"208", "026", "405", "340", "120"}; int lennb = NumBatiment.length; for (int i=0, c=30 ; (i<lennb) && (c<35) ;c++,i++) {ps.setstring(1,numbatiment[i]); // Paramètre 1 ps.setstring(2,numsalle[i]); // Paramètre 2 ps.setint(3,c); // Paramètre 3 ps.executeupdate(); // Exécution de l ordre SQL } // Ne pas oublier le COMMIT!! db.commit(); ps.close(); // Fermeture de la préparation de l ordre 115

SQL ODBC Appel des fonctions de l API ODBC : lien entre l application et le gestionnaire de pilotes Gestionnaire de pilotes = DLL qui charge les pilotes associés à chaque source de données (BD + SGBD) Pilote = DLL qui contient les appels ODBC et traduit les requêtes en requêtes propres au SGBD 116

SQL ODBC 117

SQL ODBC Exemple de programme en C sous Visual C++ : #include <stdio.h> #include <conio.h> #include <afxdb.h> // MFC ODBC database classes char *cbase ; /* Nom de la source de données */ char *clogin ; /* Login utilisateur */ char *cpasswd ; /* Mot de passe utilisateur */ void main() { HENV d_env; /* Descripteur d'environnement */ HDBC d_connex; /* Descripteur de connexion */ HSTMT curseur; /* Curseur */ RETCODE retcode; /* Code de retour de fonction */ 118

SQL ODBC UCHAR uclastname[20],uccity[20]; SDWORD celastname,cecity; char *crequetesql; /* Variable recevant une requête SQL */ /* Saisie du nom de la source de données */ cbase=(char*)malloc(20); printf("nom de la base de donnees :"); scanf("%s",cbase); /* Saisie du login */ clogin=(char*)malloc(20); printf("login :"); scanf("%s",clogin); /* Saisie du password */ cpasswd=(char*)malloc(20); printf("mot de passe : "); /* Pour ne pas afficher le mot de passe à l'écran */ int iposcaractere=0; fflush(stdin); do { if((cpasswd[iposcaractere]=_getch())!='\r') printf("*"); } while(cpasswd[iposcaractere++]!='\r' && iposcaractere <20); cpasswd[--iposcaractere]='\0'; 119

SQL ODBC /* Création d'un environnement ODBC */ retcode = SQLAllocEnv(&d_env); /* Si la création d'un environnement ODBC est correcte */ if (retcode == SQL_SUCCESS) { /* Création d'une connexion ODBC */ retcode = SQLAllocConnect(d_env, &d_connex); /* Si la connexion ODBC s'est bien passée */ if (retcode == SQL_SUCCESS) { /* Initialisation du temps de connexion à 5 secondes. */ SQLSetConnectOption(d_connex, SQL_LOGIN_TIMEOUT, 5); /* Connexion à une source de données */ retcode = SQLConnect(d_connex,(unsigned char*)cbase,sql_nts,(unsigned char*)clogin,sql_nts,(unsigned char*)cpasswd,sql_nts); Longueur de la chaîne ou on indique que la chaîne se termine par le code NULL 120

SQL ODBC /* Si la connexion à la source de données s'est bien passée */ if (retcode == SQL_SUCCESS retcode == SQL_SUCCESS_WITH_INFO) { printf("connection a la base (source de données).\n"); /* Pause dans l'affichage */ printf("taper une touche pour continuer \n"); getchar(); /* Allocation mémoire du curseur et association du curseur à la source de données identifiée par d_connex. */ retcode = SQLAllocStmt(d_connex, &curseur); /* Si l'allocation mémoire du curseur est correcte */ if (retcode == SQL_SUCCESS) { /* Création de la requête SQL */ crequetesql = "SELECT Nom, Ville FROM Etudiant"; /* Execution directe de la requête sur la base */ retcode = SQLExecDirect(curseur, (unsigned char*)crequetesql, SQL_NTS); printf("execution DE LA REQUETE, CODE ERREUR %d, CODE DE SUCCES %d \n",retcode,sql_success); 121

SQL ODBC /* Tant le parcours du curseur est valide */ while (retcode == SQL_SUCCESS) { /* Parcourt de l'enregistrement résultat de la requête */ retcode = SQLFetch(curseur); /* Si le parcourt est incorrect */ if (retcode == SQL_ERROR retcode == SQL_SUCCESS_WITH_INFO) { printf("erreur %d\n",sql_error); } /* Si le parcourt des enregistrements est correct */ if (retcode == SQL_SUCCESS retcode == SQL_SUCCESS_WITH_INFO) { /* récupération des données des colonnes 1 et 2 de la table résultat */ SQLGetData(curseur, 1, SQL_C_CHAR, uclastname, 30, &celastname); SQLGetData(curseur, 2, SQL_C_CHAR, uccity, 30, &cecity); /* Affichage du résultat */ printf("etudiant : %s %s\n",uclastname,uccity); 122

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 123

Dépendances fonctionnelles Dépendances fonctionnelles Dépendance fonctionnelle sur R A 1, A 2,, A n B "Si deux nuplets de R ont mêmes valeurs pour les attributs de A 1, A 2,, A n alors ils ont même valeur pour les attributs de B.» Une dépendance A 1, A 2,, A n B 1, B 2,, B m est : triviale : si l ensemble B 1, B 2,, B m est sous-ensemble de A 1, A 2,, A n non triviale : si au moins un B i n appartient pas à l ensemble de A 1, A 2,, A n complètement non triviale : si aucun des B i n appartient à l ensemble de A 1, A 2,, A n 124

Dépendances fonctionnelles Règles Axiomes de Amstrong : Réflexivité : si Y X alors X Y Augmentation : Si X Y alors Z XZ YZ Transitivité : Si A B et B C alors A C On déduit : Union : {X Y, X Z} = {X YZ} Pseudo-transitivité : {X Y,WY Z} = {XW Z} Décomposition : Si X Y et Z Y alors X Z 125

Dépendances fonctionnelles Fermeture Fermeture d une famille de dépendances fonctionnelles F + = {X Y \ F = X Y } Fermeture d un ensemble d attributs X par rapport à une famille de dépendances fonctionnelles F Lemme [X] + = {A \ F = X A} La dépendance fonctionnelle X Y peut être déduite des axiomes d Amstrong si Y [X] + 126

Dépendances fonctionnelles Equivalence et Couverture Deux familles de dépendances fonctionnelles F et G sont équivalentes si F + = G + Si F + G + alors G est une couverture de F Une famille de dépendances fonctionnelles F est minimale si : 1. En partie droite de toute dépendance de F, il n y a qu un seul attribut 2. Il n y a pas de dépendance fonctionnelle X A dans F telle que (F \ {X A }) soit équivalente à F 3. Il n y a pas de dépendance fonctionnelle X A et Z X tels que (F \ {X A }) {Z A } soit équivalente à F Attention: pas d unicité des couvertures minimales 127

Dépendances fonctionnelles Clé Soit R(A 1, A 2,, A n ) et F une famille de DF sur R Un sous-ensemble X de {A 1, A 2,, A n } est une clé minimale de R si La dépendance fonctionnelle X A 1, A 2,, A n F + Y X, on a pas Y A 1, A 2,, A n Si X n est pas un ensemble minimal alors X est une surclé Les dépendances fonctionnelles permettent de déduire les clés des relations 128

Dépendances fonctionnelles Graphe de dépendances fonctionnelles Source : B. Defude 129

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 130

Décomposition de schéma Décomposition de schéma Décomposition sans perte d information (Lossless jointure) La décomposition de R en R 1, R 2,.., R n est sans perte d information si et seulement si r, instance de R : r = R1 (r) R2 (r)... Rn (r) Décomposition sans perte de dépendances La décomposition de R, munie d une famille de dépendances F, en R 1, R 2,.., R n est sans perte de dépendance si et seulement si : F + = F + R 1 F + R 2... F + R n avec F Ri = {X Y, XY R i et X Y F+} 131

Décomposition de schéma Décomposition de schéma - Exemple 132

Partie I : les SGBD vus du coté Utilisateur/Programmeur Modélisation Entité/Association et UML Modèle relationnel et passage au modèle relationnel Algèbre relationnelle SQL / ODBC /JDBC Dépendances fonctionnelles Décomposition de schéma Formes normales 133

Formes Normales 1ère, 2ème et 3ème formes normales Un schéma de relation R est 1NF si : attribut de R, il contient une valeur atomique (ni multivalué, ni composé) Un schéma de relation R est 2NF si et seulement si : le schéma est en 1NF A, attribut une clé, A ne dépend pas d une partie de clé c- à-d ( une dépendance fonctionnelle partielle ) Un schéma de relation R est 3NF si : le schéma est 2NF ( une dépendance fonctionnelle transitive) (pas de DF entre attributs non clé) 134

Formes Normales 3ème forme normale Un schéma de relation est 3NF si : A, attribut une clé, A ne dépend pas d un ensemble d attributs qui n est pas une clé (i.e. pas de dépendance transitive ni de dépendance partielle) X A est partielle si X est une partie de clé et A ne l est pas X A est transitive si ni X ni A ne sont des parties de clé Si K est clé alors K X A est une chaîne non triviale Un schéma R, munie d une famille F de DF, est 3NF si : X A, DF non triviale de F : X est une surclé ou A appartient à une clé 135

Formes Normales Forme normale de Boyce-Codd (BCNF) Un schéma de relation est BCNF si et seulement si : DF élémentaires telles que une clé détermine un attribut Un schéma de relation est BCNF si : X A DF non triviale, A X : X est une (sur)clé et A n est pas un attribut de clé La forme normale BCNF évite la redondance d information La décomposition de schéma BCNF sans perte d information ne préserve pas les dépendances fonctionnelles 136

Formes Normales Formes normales La 3NF n élimine pas le redondance d information Objectif principaux de la décomposition de schéma : BCNF Non perte d information Non perte de dépendance On préférera sacrifier la forme normale BCNF et avoir une 3NF SPI-SPD 137

Partie II : les SGBD vus du coté Administrateur de Bases de Données Architecture générale d un SGBD Organisation des données Évaluation et optimisation de requêtes Gestion de la concurrence / transactions Reprise sur pannes 138

BIBLIOGRAPHIE Ouvrages de référence utilisés pour le cours : R. Ramakrishnan et J. Gehrke, Database Management Systems, Second Edition; McGraw-Hill, 2000, disponible à la BU 055.7 RAM H. Garcia Molina, J.D. Ullman et J. Widom, Database System Implementation, Prentice Hall, 2000, disponible à la BU 005.7 GAR H. Garcia Molina, J.D. Ullman et J. Widom, Database Systems - The Complete Book, Prentice Hall, 2002 T. Connoly, C. Begg et A. Strachan, Database Systems A Pratical Approach to Desigh, Implementation and Management, 1998, disponible à la BU 055.7 CON A. Silberschatz, H.F. Korth et S. Sudarshan, Database System Concepts, McGraw-Hill, 2002, version de 1996 disponible à la BU 005.7 DAT C.J. Date, An Introduction aux bases de données, 6ème édition, Thomson publishing, 1998, disponible à la BU 005.7 DAT R.A. El Masri et S.B. Navathe, Fundamentals of Database Systems, Prentice Hall, disponible à la BU 005.7 ELM G. Gardarin, Bases de Données - objet/relationnel, Eyrolles, 1999, disponible à la BU 005.74 GAR + Le client - serveur, Eyrolles, 1996004.21 GAR 139

Optimisation de requêtes Gestionnaire de fichiers Architecture d un SGBD Gestion de la concurrence Reprise après panne Organisation des données 140

Partie II : les SGBD vus du coté Administrateur de Bases de Données Architecture générale d un SGBD Organisation des données Évaluation et optimisation de requêtes Gestion de la concurrence / transactions Reprise sur pannes 141

Architecture d un SGBD Architecture d un SGBD Vision des données par le SGBD : un ensemble d enregistrements mémoire Vision des données par le gestionnaire de fichiers : un ensemble de pages mémoire Vision des données par le gestionnaire de disque : un ensemble de pages disque Rôle du gestionnaire de buffer : passage des pages du disque vers la mémoire (et inversement) 142

Architecture d un SGBD Gestionnaire de buffer Rôle : placer, au moment voulu, une page du disque vers la mémoire et inversement Politique de remplacement Gestion des pages mises à jour Partition de la mémoire Vérification des droits sur les pages 143

Architecture d un SGBD Gestionnaire de buffer Page non accédée depuis longtemps (LRU) Page non accédée depuis longtemps (LRU) Mémoire Date de montée Date de dernier accès Page mémoire libre Disque Page de données Page de données modifiées 144

Architecture d un SGBD Système de fichiers Intégration ou non des fonctionnalités du SGF du système d exploitation : A chaque relation correspond un fichier liaison forte du SGBD et du SGF Stockage de toute la base de données dans un seul fichier le SGF donne accès aux différentes pages le SGBD contrôle tout Les pages doivent être connues du SGBD 145

Partie II : les SGBD vus du coté Administrateur de Bases de Données Architecture générale d un SGBD Organisation des données Évaluation et optimisation de requêtes Gestion de la concurrence / transactions Reprise sur pannes 146

Organisation des données Organisation des données Stockage des données Conservation Accès Structuration des données Moyens de manipulation des données 147

Organisation des données Gestion des fichiers Relation : collection de pages ou blocs disque ou mémoire champ : séquences d octets de taille fixe ou variable représentant la valeur d un attribut de nuplet sur le disque ou en mémoire enregistrement : collection de taille fixe ou variable de champs 148

Organisation des données Identification des enregistrements 149

Organisation des données Placement des enregistrements de taille fixe segn seg 2 seg 1 150

Organisation des données Placement des enregistrements de taille variable 151

Organisation des données Organisation des fichiers Trois organisations de fichier : aléatoire (Heap File) ordonné (Sorted File) hachage (Hash File) Plusieurs opérations : Lecture complète du fichier Recherche par égalité Recherche par intervalle Insertion Suppression 152

Organisation des données Fichier de hachage Fonction de hachage : calcule la page où doit être stocké l enregistrement en fonction de la valeur d un ou plusieurs de ses champs Regroupement de pages d un fichier de hachage en buckets composés de segments Gestion de pages d overflow Placement des enregistrements par ordre d arrivée dans le bucket Pas de garantie d adresse unique Gestion des collisions 153

Organisation des données Hachage statique 154

Organisation des données Index (1/4) 3 alternatives Les entrées de clé de recherche k sont les enregistrements mêmes Les entrées sont des couples (k,rid) Les entrées sont des couples (k,liste_rid) Index primaire Clé de recherche = clé primaire de la relation Index secondaire (clé de recherche, valeur(s) de clé primaire) (clé de recherche, pointeur(s) vers les pages du fichier) l index primaire doit être lu après l index secondaire 155

Organisation des données Index (2/4) Clustered index 156

Organisation des données Index (3/4) Unclustered index 157

Organisation des données Index (4/4) Index dense / non dense (sparce) 158

Organisation des données Index basé sur les structures arborescentes : Arbre B+ (1/3) 159

Organisation des données 160

Organisation des données Arbre B+ (exemple 1) n0 GAMOTTE PABIEN f1 f2 f3 (DEBECE, 24) (GAMOTTE, 1) (PABIEN, 23) (DENT,47) (HIBULAIRE,2) (PAN, 46) Pages de la relation (1, GAMOTTE, Albert, ) (23, PABIEN, Yvon, ) (46, PAN, Amédée, ) (2, HIBULAIRE, Pat, ) (24, DEBECE, Aude, ) (47, DENT, Malo, ) 161

Organisation des données Arbre B+ (exemple 2) HIBULAIRE FRICE PAN f1 f2 f3 f4 (DEBECE, 24) (FRICE, 70) (HIBULAIRE,2) (PAN, 46) (DENT,47) (GAMOTTE, 1) (PABIEN, 23) (ZEN, 98) 162

Organisation des données ISAM (Indexed Sequential Acces Method d'ibm) Les articles sont rangés dans des paquets de taille fixe par ordre croissant des clés Source : IUT Nice Cours SGBD1

Partie II : les SGBD vus du coté Administrateur de Bases de Données Architecture générale d un SGBD Organisation des données Évaluation et optimisation de requêtes Gestion de la concurrence / transactions Reprise sur pannes 164

Optimisation de requêtes Optimisation de requêtes Optimisation de requête : activité permettant de choisir la meilleure stratégie d exécution d une requête Exécution de requête : séries d opérations permettant d extraire des données de la base 165

Optimisation de requêtes Source : S. Abitboul 166

Optimisation de requêtes Phases d exécution d une requête 167

Optimisation de requêtes Exemple "Quels sont les noms de commerciaux basés dans les filiales de Londres?» SELECT e.nom FROM Employe e, Filiale f WHERE e.#filiale=f.#filiale AND e.position = Commercial AND f.ville= Londres Employe contient 1000 nuplets, Filiale en contient 50 Il y a 50 commerciaux et 5 filiales à Londres Trois requêtes possibles en algèbre relationnelle Calcul du coût de chaque requête en terme E/S 168

Optimisation de requêtes Source : S. Abitboul 169

Optimisation de requêtes Catalogue du système (1/2) Appelé également dictionnaire de données Contient la description des données de la base Pour chaque relation : nom de la relation, identificateur du fichier et structure du fichier nom et domaine de chaque attribut nom des index contraintes d intégrité Pour chaque index : nom et structure de l index attribut appartenant à la clé de recherche Pour chaque vue : nom de la vue définition de la vue 170

Optimisation de requêtes Catalogue du système (2/2) Contient également des données statistiques Cardinalité de chaque relation Nombre de pages de chaque relation Nombre de valeurs distinctes de clé de recherche pour chaque index Hauteur des index de structures arborescente Valeur minimum et valeur maximum de chaque clé de recherche dans chaque index Exemple sous Oracle8 : USER_ALL_TABLES, USER_CONSTRAINTS etc. 171

Optimisation de requêtes Statistiques (1/2) Pour chaque relation R [CBS98] : NTuples(R) : nombre de nuplets Bfactor(R) : nombre de nuplets par bloc NBlocks(R) : nombre de blocs pour la relation NBlocks(R) = Pour chaque attribut A de R : NDistinct A (R) : nombre de valeurs distinctes de A Min A (R) et Max A (R) : valeurs min et max de A SC A (R) : nombre moyen de nuplets satisfaisant un prédicat sur A 172

Optimisation de requêtes Statistiques (2/2) SC A (R) dépend du prédicat Egalité : A > c A < c A {c 1,, c n } A B A B Pour index I de R sur un attribut A : NLevels A (I) : nombre de niveaux pour I NLBlocks A (I) : nombre de blocs utilisés pour I 173

Partie II : les SGBD vus du coté Administrateur de Bases de Données Architecture générale d un SGBD Organisation des données Évaluation et optimisation de requêtes Gestion de la concurrence / transactions Reprise sur pannes 174

Concurrence Gestion de la concurrence Transaction : action ou série d actions d un utilisateur ou d une application, qui accède(nt) ou modifie(nt) les données de la base [BEGIN TRANSACTION] COMMIT / ROLLBACK Lecture Placement des pages en mémoire + Copies éventuelles de valeurs dans les variables de programme Ecriture Mise à jour des données en mémoire + Ecriture des pages sur le disque APRES validation 175

Concurrence Propriétés des transactions Atomicité : Tout ou rien Une transaction effectue toutes ses actions ou aucune. En cas d annulation, les modifications engagées doivent être défaites. Cohérence : Intégrité des données Passage d un état cohérent de la base à un autre état cohérent de la base de données Isolation : Pas d interférence entre transactions Les résultats d une transaction ne sont visibles par les autres transactions qu après sa validation Durabilité : Journalisation des mises à jour Les modifications effectuées sont garanties même en cas de panne 176

Concurrence Exemple de transaction Virement bancaire sans transaction Virement = 2 opérations atomiques Que se passe-t-il si le Dépôt échoue? Op. 1. Retrait - 100 Op. 2. Dépôt Compte courant 500 100 = 400 Compte courant = 400 CODEVI = 110 Appelez la banque!!! + 100 CODEVI 110 110 + 100 = 210 177

Concurrence Exemple de transaction Virement bancaire dans une transaction (1/2) Virement = 1 transaction de 2 opérations atomiques Begin transaction 1. Retrait - 100 Compte courant 500-100 2. Dépôt = 400 + 100 Commit transaction CODEVI 110 + 100 = 210 500 100 = 400 110 + 100 = 210 178

Concurrence Exemple de transaction Virement bancaire dans une transaction (2/2) Que se passe-t-il si le Dépôt échoue? Compte courant = 500 CODEVI = 110 Recommencez! Begin transaction 1. Retrait - 100 Compte courant 2. Dépôt + 100 Rollback transaction CODEVI 500 110 500 100 = 400 110 179

Concurrence Architecture du système de transactions Missions du système de transactions Gérer les transactions, maintenir la cohérence, gérer les pannes Gestionnaire de transactions : Coordination des actions des différentes transactions En communication avec l ordonnanceur Ordonnanceur (scheduler): Maintien de la cohérence Gestion des verrous (gestionnaire de verrous) Gestionnaire de pannes (recovery manager) Remise de la base de données dans un état cohérent après panne 180

Concurrence Ordonnancement Opération d une transaction T R T (i) : lecture de l item i par T W T (i) : modification de la valeur de l item i par T Commit T : validation de T Abort T : annulation de T Ordonnancement de transactions Liste d actions de plusieurs transactions T 1,, T n telle que chaque opération de T i apparaisse dans le même ordre dans T i et dans l ordonnancement Ordonnancement séquentiel Pas d entrelacement des actions des différentes transactions 181

Concurrence Concurrence Transactions concurrentes Deux transactions accédant en même temps aux mêmes items Ordonnancement sérialisable Résultat équivalent au résultat d un ordonnancement séquentiel Les items voient passer toutes les transactions dans le même ordre Anomalies dues à l entrelacement des transactions Pas de conflit si accès simultanés à un même item en lecture par deux transactions différentes Pas de conflit si accès simultanés à deux items différents en lecture ou écriture par deux transactions 182

Concurrence Ecriture - Lecture : Conflits Lecture impropre ou parasite (dirty read) Placement momentanée de la base dans un état incohérent Annulation en cascade de transactions Lecture - Ecriture : Lecture non reproductible (unrepeatable read) Incohérence Ecriture- Ecriture : Perte de mises à jour (blind write) 183

Concurrence Conflits (2) ANSI SQL92 définit 3 types d'anomalies d'isolation Lectures sales ou impropres Une transaction T1 lit des modifications non validées d items effectuées par T2. En cas de annulation de T2, T1 a lu des valeurs invalides Lecture non reproductibles T1 lit un item, T2 modifie ce même item, T1 relit ce item et obtient une valeur différente Lectures fantômes T1 lit un ensemble de nuplets, T2 ajoute/supprime des nuplets, T1 relit l ensemble de nuplets et obtient un ensemble différent comme résultat 184

Partie II : les SGBD vus du coté Administrateur de Bases de Données Architecture générale d un SGBD Organisation des données Évaluation et optimisation de requêtes Gestion de la concurrence / transactions Reprise sur pannes 185

Pannes Reprise après panne Types de panne dans les SGBD Journaux des mises à jour Validation des transactions Procédures de reprise Algorithme ARIES 186

Pannes Pannes Fonctions du gestionnaire de pannes Atomicité Durabilité Différents types de panne [Gar99] Panne d action Panne de transaction Panne du système Panne de la mémoire secondaire 187

Pannes Exemple Source : IUT Nice Cours SGBD1 188

Pannes Journaux Journal ou log Historique des modifications effectuées sur la base Journal des images avant (rollback segment) Valeurs des pages avant modifications Pour défaire (undo) les mises à jour d une transaction Journal des images après (redo log) Valeurs des pages après modifications Pour refaire (redo) les mises à jour d une transaction Points de reprise 189

Pannes Gestion du journal Ecriture des pages du journal dans un buffer en mémoire Sauvegarde du journal lorsque le buffer est plein Sauvegarde du journal lorsqu il y a validation d une transaction ou d un groupe de transactions Ecriture du journal sur le disque avant l écriture des pages de données modifiées Structures des enregistrements Numéro de transaction Type d enregistrement (start, update, commit, abort ) Adresse de la page modifiée Image avant Image après 190

Pannes Modification immédiate Etapes Insertion d un enregistrement de début de transaction dans le journal A chaque opération d écriture, insertion d un enregistrement de modification dans le journal Une fois les enregistrements de modifications inscrits dans le journal, modification des pages de données du buffer Report des mises à jour sur le disque quand le buffer est plein ou quand la transaction valide Insertion d un enregistrement de validation dans le journal Opérations undo et redo Lecture du journal en sens inverse pour annuler une transaction 191

Pannes Modification différée Etapes Insertion d un enregistrement de début de transaction dans le journal A chaque opération d écriture, insertion d un enregistrement de modification dans le journal Insertion d un enregistrement de validation dans le journal Après la validation de la transaction, mise à jour des pages du buffer en fonction du contenu du journal Pas d opérations undo Opération redo 192

Pannes Procédures de reprise Objectif Reconstruire, à partir du journal et éventuellement de sauvegarde, un état proche de l état cohérent de la base avant la panne, en perdant le minimum de travail Reprise à chaud Perte de la mémoire mais pas de la mémoire secondaire Reprise à froid Perte de tout ou partie de la mémoire secondaire 193

Pannes Algorithme ARIES Algorithm for Recovery and Isolation Exploiting Semantics base des algorithmes de reprise après panne des SGBD actuels. 194