Bases de données et Systèmes transactionnels



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

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

Bases de données relationnelles

1 Introduction et installation

SQL Historique

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

Langage SQL : créer et interroger une base

Bases de données avancées Introduction

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

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

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

Le langage SQL Rappels

Bases de Données. Plan

Le Langage SQL version Oracle

Les bases de données

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

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

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

Introduction aux Bases de Données

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

Information utiles. webpage : Google+ : digiusto/

Rappel sur les bases de données

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Le Langage De Description De Données(LDD)

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

16H Cours / 18H TD / 20H TP

Bases de données relationnelles : Introduction

Olivier Mondet

TP Contraintes - Triggers

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

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

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

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

TP3 : Creation de tables 1 seance

Introduction aux bases de données

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

A QUOI SERVENT LES BASES DE DONNÉES?

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

INTRODUCTION AUX BASES de DONNEES

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

Bases de Données Avancées

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

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

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

CREATION WEB DYNAMIQUE

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

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

I4 : Bases de Données

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Bases de données et sites WEB

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

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

LE LANGAGE SQL2 1. INTRODUCTION

Cours Bases de données

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

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

Création et Gestion des tables

Systèmes de Gestion de 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)

Vincent Augusto

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

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

Intégrité des données

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

Master Exploration Informatique des données DataWareHouse

MySQL / SQL EXEMPLES

Compétences Business Objects

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

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

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

Bases de données élémentaires Maude Manouvrier

I. MySQL : Serveur et SGBD

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

IFT3030 Base de données. Chapitre 1 Introduction

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

OpenPaaS Le réseau social d'entreprise

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

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

Cours 4 : Agrégats et GROUP BY

Bases de données. Chapitre 1. Introduction

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

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

Optimisations des SGBDR. Étude de cas : MySQL

Bases de données relationnelles & SQL

Bases de données Cours 4 : Le langage SQL pour ORACLE

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

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Gestion de base de données

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

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

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

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

Transcription:

Bases de données et Systèmes transactionnels Dominique Laurent dominique.laurent@u-cergy.fr Tao-Yan Jen jen@u-cergy.fr

Plan du cours Introduction Modèle Entité/Association Langage SQL - ORACLE Architectures des SGBD relationnels Notion de transaction et problématique de la concurrence d'accès Contrôle

Bibliographie Georges Gardarin : Bases de données (Eyrolles 2003) Claude Delobel, Michel Adiba : Bases de données et systèmes relationnels (Dunod 1982) Garcia-Molina Hector, Jeff Ulmann, Jenifer Widom : Database Systems:The complete book (Prentice Hall 2008) Dominique Laurent : Relational Databases Wiley Encyclopedia of Electrical and Electronics Engineering (2004) http://depinfo.u-cergy.fr/~dlaurent/ressources/publi/ RELATIONAL%20DATABASES.pdf

Introduction Pourquoi les bases de données? Stocker l'information de manière persistante Permettre un accès aux données Facile : ne pas écrire de programmes compliqués Efficace : réponses aux requêtes rapides Sûr : persistance des données et confidentialité des données Multi-utilisateurs : gérer les accès concurrents aux données

Bref historique Constat : les systèmes de gestion de fichiers ne sont pas capables de répondre aux besoins Manque de visibilité globale des données Interrogation difficile Gestion de la confidentialité et de la concurrence d'accès insuffisante Années 60 : Méthodes de conception ou d'analyse Premiers logiciels Systèmes de Gestion de Bases de Données (SGBD ou DBMS)

Bref historique Premiers modèles de SGBD Hiérarchique : données organisées sous forme arborescente (DL1, IBM) Réseau : données organisées sous forme de graphes (TOTAL, IBM) Avantages / Inconvénients PLUS : Vision globale des données, efficacité, persistance MOINS : interrogation difficile, confidentialité et concurrence d'accès insuffisantes

Bref historique Modèle relationnel (Edgard Frank Codd, 1970) Basé sur la notion mathématique de relation Permet une étude théorique Avantages / Inconvénients PLUS : Vision globale des données, facilité d'interrogation, possibilité d'optimisation, meilleure confidentialité MOINS : implémentation difficile (les premiers SGBD relationnels datent des années 80, ce problème est maintenant résolu : ORACLE, MySQL, DB2, SQL Server,...)

Modèle Entité/Association Problème Etant donné une application décrite en langue naturelle par les futurs utilisateurs, comment déduire l'organisation des données? Procéder en deux étapes: Organisation logique (indépendamment de tout système ou langage informatique) Organisation physique (en termes du type de logiciel utilisé)

Modèle Entité/Association Modélise les données en utilisant deux concepts Les entités : une entité se réfère à un ensemble d' «objets» ayant les mêmes caractéristiques Les associations (ou relations) : expriment des liens entre les entités

Exemple Modéliser les données concernant les inscriptions des étudiants aux cours auxquels ils doivent assister et les enseignants assurant ces cours Trois entités : cours, étudiant, prof Deux liens décrivant Les inscriptions des étudiants Les enseignements assurés par les enseignants

Exemple (entités) Chaque entité a donc trois attributs : Entité étudiant : num_et, nom_et, adr_et Entité prof : num_p, nom_p, adr_p Entité cours : num_c, nom_c, niveau Les attributs soulignés sont les clés : Chaque étudiant individuel est reconnu par trois valeurs Deux étudiants distincts ne peuvent avoir le même numéro

Représentation des entités etudiant Num_et Nom_et Adr_et Nom de l entité Liste des attributs etudiant 123456 Dupont Cergy Un étudiant particulier caractérisé par ses valeurs sur les attributs

Exemples (liens) Lien etudiant-cours : plusieurs-plusieurs Un étudiant peut être inscrit à plusieurs cours Un cours a plusieurs étudiants Lien cours-prof : un-plusieurs Si un cours donné ne peut être assuré par deux enseignants distincts lien un-plusieurs (car un enseignant assure plusieurs cours) Lien un-un : modélise l'héritage

Représentation des liens etudiant prof Num_et Nom_et Adr_et Num_p Nom_p Adr_p m cours n inscrit n Num_c Nom_c Niveau 1 enseigne

Au niveau des données etudiant 123456 Dupont Cergy etudiant 134567 Durand Pontoise prof 234567 Durand Paris inscrit cours enseigne inscrit inscrit 00010 info DESS cours 00020 math DEUG enseigne

Lien un-un (is_a) Notion d'étudiant salarié pour lesquels on ajoute les attributs : salaire et horaires On crée une nouvelle entité etudiant-salarie ayant les trois attributs num_sal, salaire et horaire Un étudiant salarié hérite des attributs de l'entité étudiant possède en plus les trois attributs de l'entité etudiant-salarie

Représentation des liens is_a etudiant etudiantsalarie prof Num_et Nom_et Adr_et Is-a num_sal salaire horaire Num_p Nom_p Adr_p m cours n inscrit n Num_c Nom_c Niveau 1 enseigne

Au niveau des données etudiant 123456 Dupont Cergy etudiant 134567 Durand Pontoise Is-a etudiantsalarie 8910 1000 19h-23h prof 234567 Durand Paris inscrit cours enseigne inscrit inscrit 00010 info DESS cours 00020 math DEUG enseigne

Modèle relationnel Les seuls objets sont les relations ou tables Une table est définie par Un nom Un schéma (liste d'attributs) Des n-uplets (données) Exemple : les étudiants sont représentés par Nom de la table : etudiant Attributs : [num_et, nom_et, adr_et] N-uplets : (123456, Dupont, Cergy), (134567, Durand, Pontoise),...

Représentation d'une table etudiant nom Num_et Nom_et Adr_et schéma 123456 134567 Dupond Durand Cergy Pontoise n-uplets

Théorie du modèle relationnel Etude théorique des opérations permettant de manipuler les tables Niveau logique (pouvoir d'expression) Niveau algébrique (efficacité) Niveau pratique : le standard est SQL (Structured Query Language) Etude théorique de la conception du schéma d'une base (non abordé dans le cours)

Du modèle E/A aux tables Règles générales Toute entité donne lieu à une table ayant le même nom et les mêmes attributs Tout lien entre les entitités E1 et E2 est traduit par une table de même nom et dont les attributs sont Les attributs (éventuels) du lien Les clés des entités E1 et E2

Exemple Le schéma E/A se traduit par les tables etudiant[num_et, nom_et, adr_et] prof[num_p, nom_p, adr_p] cours[num_c, nom_c, niveau] inscrit[num_et, num_c] enseigne[num_c, num_p] Remarque : la table enseigne n'est pas nécessaire cours[num_c, nom_c, niveau, num_p]

Manipulation de tables : Algèbre relationnelle Opérations ensemblistes : union, intersection, différence Opérations relationnelles : Projection permet de restreindre les colonnes Sélection permet de restreindre les lignes Jointure permet de combiner deux tables Renommage permet de changer le nom d'un attribut

Exemples Noms et adresses des étudiants qui habitent Cergy Sélectionner sur l'adresse Projeter sur les attributs nom_et et adr_et Noms des enseignants qui enseignent les cours de bases de données Sélectionner dans la table cours tous les n-uplets tels que nom_c = 'bases de données' Joindre le résultat avec la table prof Projeter sur l'attribut nom_p

Langage SQL Conçu sur la base des opérations de l'algèbre relationnelle Offre des fonctionnalités supplémentaires Devenu le langage de définition des données et d'interrogation dans tous les SGBD relationnels Fait l'objet de standardisations SQL1 86 version minimale SQL1 89 addendum (intégrité) SQL2 (92) langage complet

SQL1 86 Langage de définition des données CREATE TABLE CREATE VIEW Langage de manipulation des données SELECT INSERT UPDATE DELETE Langage de contrôle des données GRANT et REVOKE BEGIN et END TRANSACTION COMMIT et ROLLBACK

Manipulation des données : requêtes Projection, sélection, jointure : SELECT [DISTINCT] <attributs de projection> FROM <relations à joindre> [WHERE <condition de sélection> [AND < conditions de jointure>]] DISTINCT élimine les répétitions La condition de jointure spécifie comment les tables sont jointes (sans condition, on effectue un produit cartésien)

Exemples de projection-sélection Noms et adresses de tous les étudiants SELECT nom_et, adr_et FROM etudiant Noms et adresses des étudiants qui habitent Cergy SELECT nom_et, adr_et FROM etudiant WHERE adr_et = 'Cergy'

Exemple de projection-sélection-jointure Noms des enseignants qui enseignent les cours de bases de données cours[num_c, nom_c, niveau, num_p] prof[num_p, nom_p, adr_p] La jointure doit être effectuée sur l'attribut num_p SELECT DISTINCT nom_p FROM cours, prof WHERE nom_c = 'bases de données' AND cours.num_p = prof.num_p

Exemple de projection-sélection-jointure Noms des enseignants qui enseignent les cours de bases de données Autre écriture en imbriquant deux SELECT SELECT DISTINCT nom_p FROM prof WHERE num_p IN (SELECT num_p FROM cours WHERE nom_c = 'bases de données')

Opérations ensemblistes Renvoie l'union/intersection/différence des résultats de deux requêtes Syntaxe (SELECT... FROM... WHERE...) UNION / INTERSECT / MINUS (SELECT... FROM... WHERE...) Les deux SELECT doivent porter sur les mêmes attributs

Exemple : Union Numéros des étudiants inscrits au cours 10 ou au cours 20 (SELECT num_et FROM inscrit WHERE num_c = 10) UNION (SELECT num_et FROM inscrit WHERE num_c = 20)

Exemple : Union Numéros des étudiants inscrits au cours 10 ou au cours 20 SELECT DISTINCT num_et FROM inscrit WHERE num_c = 10 OR num_c = 20 SELECT DISTINCT num_et FROM inscrit WHERE num_c IN (10, 20)

Exemple : Intersection Numéros des étudiants inscrits au cours 10 et au cours 20 (SELECT DISTINCT num_et FROM inscrit WHERE num_c = 10) INTERSECT (SELECT DISTINCT num_et FROM inscrit WHERE num_c = 20)

Exemple : Intersection Numéros des étudiants inscrits au cours 10 et au cours 20 : NE PAS ECRIRE SELECT DISTINCT num_et FROM inscrit WHERE num_c = 10 AND num_c = 20 La réponse à cette requête est VIDE Car aucun n-uplet ne peut avoir deux valeurs sur le même attribut!

Exemple : Différence Numéros des étudiants non inscrits au cours 10 (SELECT num_et on peut remplacer FROM inscrit) MINUS (SELECT num_et FROM inscrit WHERE num_c = 10) inscrit par etudiant

Exemple : Différence Numéros des étudiants non inscrits au cours 10 NE PAS ECRIRE SELECT num_et FROM inscrit WHERE num_c <> 10 Le résultat est les numéros des étudiants inscrits à un cours autre que le cours 10

Exemple : Différence Numéros des étudiants non inscrits au cours 10 SELECT num_et FROM etudiant WHERE num_et NOT IN (SELECT num_et FROM inscrit WHERE num_c = 10)

Pourquoi le renommage? Pouvoir considérer deux versions de la même table Exemple : numéros des étudiants inscrits à au moins deux cours distincts La méthode est : Joindre la table inscrit avec elle-même selon l'attribut num_et Sélectionner dans la jointure les n-uplets où le numéro d'étudiant est associé à deux cours distincts Projeter sur l'attribut num_et

Renommage en SQL : exemple Numéros des étudiants inscrits à au moins deux cours distincts SELECT DISTINCT i.num_et FROM inscrit, inscrit i WHERE inscrit.num_et = i.num_et AND inscrit.num_et <> i.num_et inscrit : version d'origine, i : 'copie' de inscrit inscrit.num_et = i.num_et : condition de jointure inscrit.num_et <> i.num_et : condition de sélection

Autres prédicats de sélection LIKE : chaînes de caractères (avec % ou _) BETWEEN : spécifie un intervalle de valeurs IN : teste l 'appartenance à un ensemble ou un intervalle EXISTS : teste si l'argument est vide ou non ANY : est vrai si au moins une comparaison avec les éléments de l'argument est vraie ALL : est vrai si toutes les comparaisons avec les éléments de l'argument sont vraies

Exemples Noms des cours commençant par 'Bases', de numéros entre 10 et 50, auxquels au moins un étudiant est inscrit SELECT nom_c FROM cours WHERE nom_c LIKE 'Bases%' AND EXISTS (SELECT * FROM inscrit WHERE num_c BETWEEN 10 AND 50 AND num_c = cours.num_c)

Exemples Nouvelle table resultat[num_et, num_c, note] Numéros des étudiants ayant la meilleure note au cours de numéro 10 SELECT num_c FROM resultat WHERE note >= ALL (SELECT note FROM resultat WHERE num_c = 10)

Exemples Nouvelle table resultat[num_et, num_c, note] Numéros des étudiants ayant une note supérieure à une des notes de l'étudiant numéro 100 SELECT num_c FROM resultat WHERE note >= ANY (SELECT note FROM resultat WHERE num_et = 100)

Fonctions en SQL Sur les chaînes de caractères (dépendent du logiciel) Sur les dates (dépendent du logiciel) Sur les nombres Opérations +, -, / Somme (SUM), minimum (MIN), maximum (MAX), moyenne (AVG) Comptage (COUNT)

Exemples Avec resultat[num_et, num_c, note] Afficher la table resultat en mettant les notes sur 10 (au lieu de sur 20) SELECT num_et, num_c, note/2 FROM resultat

Exemples Avec resultat[num_et, num_c, note] Meilleure note, note minimale et note moyenne du cours de numéro 10 SELECT MAX(note), MIN(note), AVG(note) FROM resultat WHERE num_c = 10

Exemples Avec resultat[num_et, num_c, note] Numéros des étudiants ayant la meilleure note au cours de numéro 10 SELECT num_c FROM resultat WHERE note = (SELECT MAX(note) FROM resultat WHERE num_c = 10)

Exemples Avec inscrit[num_et, num_c] Nombre d'étudiants inscrits au cours 10 SELECT COUNT(num_et) FROM inscrit WHERE num_c = 10 Nombre de cours auxquels au moins un étudiant est inscrit SELECT COUNT(DISTINCT num_c) FROM inscrit

Groupement en SQL Problème : comment généraliser les requêtes précédentes? Par exemple : calculer les moyennes de tous les cours Partitionner la table resultat cours par cours Pour chaque cours calculer la moyenne En SQL : GROUP BY [HAVING condition] A la suite de SELECT... FROM... WHERE HAVING sélectionne certains groupes

Exemples Numéros des cours et moyennes associées SELECT num_c, AVG(note) FROM resultat GROUP BY num_c Numéros et moyennes des cours dont toutes les notes sont strictement inférieures à 10 SELECT num_c, AVG(note) FROM resultat GROUP BY num_c HAVING MIN(note) < 10

Manipulation des données : mise à jour des tables Insertion, en spécifiant les valeurs du n-uplet à insérer une requête dont le résultat est ajouté à la table Suppression Les n-uplets à supprimer sont caractérisés par une condition (clause WHERE) Modification Les n-uplets à modifier sont caractérisés par une condition (clause WHERE) Les attributs à modifier sont listés avec les modifications

Insertion INSERT INTO <table> [( attribut [,attribut] )] {VALUES <valeur> [, <valeur>] <requête>} Insérer (10, 'Jules', 'Paris') dans etudiant INSERT INTO etudiant VALUES (10, 'Jules', 'Paris') Insérer dans resultat les numéros de cours et d'étudiants de inscrit INSERT INTO result (num_et, num_c) SELECT num_et, num_c FROM inscrit

Suppression DELETE FROM <table> [WHERE <condition>] Supprimer de resultat toutes les notes de l'étudiant de numéro 100 DELETE FROM resultat WHERE num_et = 100 Sans condition, la table est vidée DELETE FROM prof Supprime tous les enseignants de la table prof

Modification UPDATE <table> SET <attribut> = {expression NULL} [<attribut> = {expression NULL}] [WHERE <condition>] Ajouter un point à toutes les notes inférieures ou égales à 7 UPDATE resultat SET note = note +1 WHERE note <= 7

Définition des données Création d'une table : CREATE TABLE <table> (<attribut> = type [contrainte [contrainte]...], [<attribut> = type [contrainte [contrainte]...],...]) Types (http://www.ss64.com/orasyntax/datatypes.html) Numérique : INT, NUMBER[(x,y)],... Caractères : CHAR(x), VARCHAR(x),... Date...

Définition des données Contraintes élémentaires Valeur par défaut : DEFAULT Clé primaire : PRIMARY KEY interdit les répétitions et la valeur NULL, facilite l'accès par un index Unique : UNIQUE interdit les répétitions Clé étrangère : FOREIGN KEY réfère une clé primaire d'une autre table et oblige les valeurs dans la table courante à être parmi les valeurs des clés primaires

Exemple Création de la table etudiant CREATE TABLE etudiant ( num_et INT PRIMARY KEY, nom_et varchar(10) NOT NULL, adr_et varchar(20)) Création de la table cours CREATE TABLE cours ( num_c INT PRIMARY KEY, nom_c varchar(10), niveau varchar(10) NOT NULL)

Exemple Création de la table resultat CREATE TABLE inscrit ( num_et INT REFERENCES etudiant(num_et), num_c INT REFERENCES cours(num_c), note INT DEFAULT 10 CONSTRAINT note_range CHECK (note BETWEEN 0 AND 20), CONSTRAINT note_unique UNIQUE(num_et, num_c))