Marta Rukoz Université Paris X - Nanterre

Slides:



Advertisements
Présentations similaires
Bases de Données Avancées: Bases de Données Relationnelles
Advertisements

Structures de données avancées : Principales structures de fichiers
Les Systèmes de Gestion de Bases de Données (SGBD) Les vues.
Access Frédéric Gava (MCF)
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Introduction Pour concrétiser l’enseignement assisté par ordinateur
SQL - Subtilités.
Fonctionnalités des SGBD
Le Modèle Logique de Données
Algèbre relationnelle
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Les fonctions.
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
Initiation au système d’information et aux bases de données
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Initiation au système d’information et aux bases de données
LMD: Langage de Manipulation de Données
Développement d’applications web
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Contrôles d'accès aux données
Gérer les tablespaces et les fichiers de données
Initiation aux bases de données et à la programmation événementielle
Chap 4 Les bases de données et le modèle relationnel
Les fonctions de groupes Gestion des transactions
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
L’utilisation des bases de données
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
SQL Partie 3 : (LID : Langage d'interrogation de données)
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
Les concepts et les méthodes des bases de données
Manipulation des données Requêtes simples
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Les transactions.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Limiter et trier des données
Introduction Le SQL (Structured  Query Language) est un langage universel de gestion des bases de données. Il a une triple fonction : LDD Langage de Définition.
Cours 4b: Introduction au SQL, le langage des SGBD Relationnels
Introduction.
Chapitre 5 : Le langage SQL
SQL partie 4. SQL est un langage de protections d'accès Il est possible avec SQL de définir des permissions au niveau des utilisateurs d'une base de données.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Transac SQL Intégrité des données.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Créer des packages.
Optimisation de requêtes
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
PostgreSQL – Présentation
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Sélection de colonnes (la projection)
Module 13 : Implémentation de déclencheurs. Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances.
Les Contraintes.
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Les vues Une vue: c’est une relation virtuelle. Définie par:
Cours Access TuanLoc NGUYEN. Contact Nguyen TuanLoc Tél: Web:
06/04/06 LES BASES DE DONNEES INTRODUCTION CogniTIC – Bruxelles Formation - Cepegra.
Les bases de données Séance 8 Jointures.
Le langage SQL.
Séance /10/2004 SGBD - Approches & Principes.
Initiation aux bases de données et à la programmation événementielle
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Op é rateurs ensemblistes Module 4. 2 La clause GROUP BY La clause GROUP BY est nécessaire dès que l'on utilise des fonctions de calculs statistiques.
Les vues, indexes, séquences.  Qu’est ce qu’une vue 1. Une vue est une vision partielle ou particulière des données d'une ou plusieurs tables de la base.
Les bases de données Séance 4 Construction du Modèle Physique (la BDD)
Bases de données : modèlisation et SGBD Séance 3.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Marta Rukoz Université Paris X - Nanterre Cours n°9 Confidentialité et sécurité Mise en œuvre d'un SGBD - Performances Marta Rukoz Université Paris X - Nanterre

Plan La notion de vues : Création - Destruction - Manipulation de vues Le problème de la mise à jour des tables au travers des vues Le contrôle de l'accès à la base et aux données Philosophie générale Les privilèges Les instructions GRANT et REVOKE La clause WITH GRANT OPTION III. Performances Introduction Indexation de fichiers Arbre-B Hachage Index bitmap Indexation dans Oracle

Création d´une vue Il existe deux catégories de tables : les table dérivées et les tables permanentes. Les vues sont des tables dérivées ou virtuelles . Création d'une vue (table virtuelle) : CREATE VIEW nom_de_vue [(liste de colonnes)] AS table_expression [WITH [CASCADED | LOCAL] CHECK OPTION]; table_expression est une requête pouvant comporter des opérateurs ensemblistes. Absence de ORDER BY. La création d'une vue n'extrait aucune ligne de la base. Elle inscrit juste la définition de la vue dans les tables de la méta-base.

Création d´une vue (exemple) CREATE VIEW etudiants_MIAGE (numero, nom, prenom, date_de_naissance, filiere, année) AS SELECT * FROM etudiants WHERE filiere = 'MIAGE' and année = 'licence'; Attributs de etudiants : num_etu, nom_etu, pre_etu, ddn, filiere, année ou bien CREATE VIEW etudiants_MIAGE AS SELECT * FROM etudiants WHERE filiere = 'MIAGE' and année = 'licence';

Création d´une vue (exemple) CREATE VIEW ca_clients (reference, chiffres_affaire) AS SELECT num_cli, SUM(qte_lcd * pu_lcd) FROM commande, ligne_commande WHERE num_cd = cmd_lcd GROUP BY num_cli; équivalent à : CREATE VIEW ca_clients AS SELECT num_cli AS reference, SUM(qte_lcd * pu_lcd) AS chiffres_affaire FROM commande, ligne_commande WHERE num_cd = cmd_lcd GROUP BY num_cli;

La destruction d´une vue DROP VIEW nom_de_vue [RESTRICT | CASCADE] RESTRICT : si la vue intervient dans la définition d'une autre vue ou dans une contrainte d'intégrité, la commande sera rejetée. CASCADE : suppression de la vue et de toutes les vues ou contraintes où la vue intervient.

Manipulation de vues Dès qu'une vue est définie, on peut l'utiliser comme une table de base. On peut alors définir des requêtes de recherche. SELECT * FROM etudiants_MIAGE WHERE nom LIKE 'D%'; sera traduite en : SELECT * FROM etudiants WHERE filiere = 'MIAGE4 and annee = 'licence' AND nom_etu LIKE 'D%'; Une vue est une fenêtre dynamique sur la base. Les modifications apportées sur la ou les tables sources sont automatiquement reportées au travers de la vue.

Raisons d'être des vues Faciliter l'accès à la base Une vue peut être utile pour masquer la complexité du schéma de la base de données Augmenter l'indépendance logique Objectif : augmenter l'indépendance de l'utilisateur vis-à-vis de l'organisation logique globale des données. Création de vues correspondant à des tables utilisées dans des applications mais ne faisant pas partie du schéma logique de la base.

Préserver la confidentialité et personnalisation Raisons d'être des vues Préserver la confidentialité et personnalisation Soit la table EMPLOYE = (numero, nom, prenom, adresse, num_service, salaire, performance) On peut vouloir effectuer un contrôle sur ce que font les utilisateurs en fonction du contexte Ex : on peut permettre à un utilisateur de ne visualiser QUE le tuple qui le concerne CREATE VIEW information_me_concernant AS SELECT * FROM EMPLOYE WHERE nom = USER; puis : GRANT SELECT ON information_me_concernant TO PUBLIC;

Préserver la confidentialité et personnalisation Raisons d'être des vues Préserver la confidentialité et personnalisation On peut vouloir effectuer un contrôle sur les types de données auxquelles les utilisateurs ont accès Ex : on peut permettre à Mme Michu de lire les colonnes numero, nom, prenom, adresse, num_service et modifier le contenu des adresses ou numero de service CREATE VIEW liste_des_employes AS SELECT numero, nom, prenom, adresse, num_service FROM EMPLOYE; puis : GRANT SELECT, UPDATE (adresse, num_service) ON liste_des_employés TO Michu; Partie de ce document a été pris du cours SBD- Chantal Reynaud Université Paris Nanterre

Préserver la confidentialité et personnalisation Raisons d'être des vues Préserver la confidentialité et personnalisation On peut vouloir effectuer un contrôle sur les types de données auxquelles les utilisateurs ont accès et également un contrôle fonction des valeurs prises par certains attributs Ex : on ne permet pas à Mme Michu de lire les colonnes nom, prenom, adresse, des employés dont le salaire est supérieur à 11500 euros; CREATE VIEW employes_riches AS SELECT numero, salaire, performance FROM EMPLOYE WHERE salaire > 11500; puis : GRANT SELECT ON employés_riches TO Michu;

Permettre d'introduire des contraintes d'intégrité Raisons d'être des vues Permettre d'introduire des contraintes d'intégrité A défaut de contraintes centralisées dans le dictionnaire, le concept de vue peut pallier cette lacune. Ex : CREATE VIEW lignes_commandes_validées AS SELECT * FROM lig_cmd WHERE lcd_qte >= 0 AND lcd_liv >= 0 AND lcd_liv <= lcd_qte AND lcd_pu >= 0.8 * (SELECT art_pv FROM articles WHERE art_num = lcd_art) AND lcd_cmd IN (SELECT cmd_num FROM commandes) WITH CHECK OPTION. Grâce à CHECK OPTION, le système vérifie la validité des données introduites ou modifiées par rapport aux critères spécifiées dans la vue.

Le problème de la mise à jour des tables au travers des vues Quelques cas posant problème La vue est une projection sans la colonne de la clé primaire : IMPOSSIBLE La vue est une projection incluant la colonne de la clé primaire : POSSIBLE, SAUF SI des colonnes non présentes dans la vue ne peuvent être à NULL et n'ont pas de valeurs par défaut. L'expression définissant la vue fait intervenir une fonction de calcul ou une fonction de groupe : IMPOSSIBLE La vue est définie à partir de plusieurs tables : PAS TOUJOURS POSSIBLE

Le problème de la mise à jour des tables au travers des vues Règles à respecter pour qu'une vue soit modifiable La définition d'une vue ne peut pas contenir les mots réservés JOIN, UNION, INTERSECT, EXCEPT. La vue doit être définie à partir d'une seule table source. La clause SELECT ne doit pas contenir de DISTINCT La clause SELECT ne doit pas contenir de références aux colonnes de la table source (pas de SUM, COUNT) La clause FROM contient exactement une table ou une vue modifiable La clause WHERE ne peut pas contenir une sous-question telle que la clause FROM de la requête imbriquée possède une référence à la même table que celle de la clause FROM du niveau englobant. La définition d'une vue ne doit pas contenir de GROUP BY ou de HAVING Une vue qui ne satisfait pas ces conditions est en lecture seule.

Le problème de la mise à jour des tables au travers des vues Possibilités d'Oracle CREATE [FORCE | NO FORCE] VIEW nom_vue [(liste_colonnes)] AS expression_de_selection [WITH READ ONLY] [WITH CHECK OPTION CONSTRAINT nom_contrainte]; FORCE : pour créer la vue même si les tables de base n'existent pas encore ou que l'on n'a pas les privilèges nécessaires. WITH READ ONLY : interdit les mises à jour sur les vues. Pour Oracle, les modifications dans une vue sont possibles si elles ne comportent pas de : DISTINCT, fonctions de calcul (AVG, COUNT, UNION, ALL, INTERSECT, MINUS), GROUP BY, HAVING, CONNECT BY.

Le contrôle de l'accès à la base et aux données : Philosophie générale Oracle permet à plusieurs utilisateurs de travailler en toute sécurité sur la même base. Chaque donnée peut être confidentielle et accessible à un seul utilisateur, ou partageable entre plusieurs utilisateurs. Un utilisateur ne peut effectuer une opération quelconque que s'il détient le privilège approprié pour réaliser cette opération. Le créateur d'une table en est le propriétaire. Pour qu'un utilisateur puisse accéder à une table, il doit recevoir, du propriétaire de la table, les droits nécessaires pour l'exécution des manipulations envisagées. GRANT et REVOKE permettent de distribuer et retirer ces privilèges. L'opérateur USER désigne l'utilisateur courant et peut être utilisé dans toute requête.

Les privilèges SELECT : privilège donnant accès à toutes les colonnes d'une table. INSERT, INSERT(colonnes) : permet l'insertion dans toutes les colonnes d'une table. UPDATE, UPDATE(colonnes) : permet la modification de toutes les colonnes d'une table. DELETE : permet la suppression des lignes d'une table. REFERENCES, REFERENCES(colonnes) : permet d'utiliser toutes les colonnes d'une table dans une contrainte d'intégrité. USAGE : privilège nécessaire à l'utilisation d'un domaine. etc. Dans Oracle, existe la notion de rôle qui réunit un ensemble de privilèges sous un nom logique

Les instructions GRANT et REVOKE L'instruction GRANT permet à un utilisateur de distribuer des privilèges à d'autres : GRANT liste_privilèges ON nom_objet TO {nom_utilisateur, nom_rôle, PUBLIC}; Exemples : GRANT UPDATE, SELECT ON magasins TO Yvan; GRANT UPDATE(att1, att2) ON nom_table TO pierre, paul; GRANT INSERT(col1, col2, col3) ON nom_table TO edouard; GRANT SELECT ON fournisseurs TO PUBLIC; L'instruction REVOKE permet de retirer des privilèges. REVOKE liste_privilèges ON nom_objet FROM {nom_utilisateur, nom_rôle, PUBLIC}; Exemple : REVOKE UPDATE ON magasins FROM Yvan;

La clause WITH GRANT OPTION Par défaut, ceux qui reçoivent un privilège ne peuvent le céder à d'autres sauf si l'option WITH GRANT OPTION est spécifiée Cette facilité se retire de la façon suivante : REVOKE GRANT OPTION FOR SELECT ON clients FROM ferdinand;

Performances : Introduction La norme SQL ne spécifie rien quant à la manière d'assurer des performances suffisantes dans les applications. Le contrôle des performances est du ressort de l'administrateur des structures de données , il échappe totalement à l'utilisateur. Tous les SGBD proposent de construire et maintenir des index sur les données. Un index sur une table est semblable à l'index à la fin d'un livre. Il permet de répondre aux requêtes beaucoup plus rapidement en créant des chemins d'accès aux enregistrements beaucoup plus directs. Un index est formé de clés qui permettent ensuite de lire directement les données correspondantes. La présence d'index n'est pas du tout nécessaire pour manipuler les informations d'une base de données en SQL. Les requêtes SQL sont transparentes au fait qu'il existe ou non un index.

Indexation de fichiers Table à indexer

Indexation de fichiers Index non dense L'index ne comprend qu'un enregistrement par bloc. Il est trié. On peut donc y accéder par dichotomie. - Très efficace pour les recherches - Problèmes : maintien de l'ordre suite à des insertions, destructions, maintien de la correspondance avec l'index.

Indexation de fichiers Index dense

Indexation de fichiers Index multi-niveaux

Arbre-B I N D E X D O N E S

Hachage : Principes de base Le SGBD applique une fonction mathématique, appelée fonction de hachage, sur une clé. Le résultat est un numéro de bloc ou adresse. Le tuple correspondant à la clé est stocké dans ce bloc. En théorie, cette technique permet d'accéder à un tuple en une entrée-sortie. Problèmes : l'application de la fonction de hachage à deux clés différentes donnant le même résultat. Solutions : chaînage des collisions ou application d'une fonction secondaire. La répartition des tuples dans les blocs est d'autant meilleure que le nombre de clés différentes est élevé. Le hachage à partir d'une colonne contenant beaucoup de valeurs NULL est déconseillé.

Hachage (Exemple) Blocs Entrées Répertoire

Hachage : Recherche - Mise à jour Si le répertoire tient en mémoire principale, on peut effectuer une recherche en ne lisant qu'un bloc. Avantages : cette structure n'occupe aucun espace disque, il permet des recherches par clé par accès direct (calculé) au bloc susceptible de contenir l'enregistrement. Impossible d'optimiser les recherches par intervalle car l'organisation des enregistrements ne s'appuie pas sur l'ordre des clés. Mise à jour : Mal adapté. L'espace alloué risque d'être insuffisant s'il y a des insertions. On chaîne alors les blocs.

Index bitmap Un index bitmap considère toutes les valeurs possibles pour un attribut. Pour chaque valeur, on stocke un tableau de bits (dit bitmap) avec autant de bits qu'il y a de lignes dans la table. Très utile pour les colonnes qui ne possèdent que quelques valeurs distinctes.

Comparaison Les arbres-B sont très souples et offrent des recherches rapides en fonction d'une valeur de la clé ou d'une plage de valeurs. En général, on crée un tel index pour les colonnes ayant un très grand nombre de valeurs différentes ou qui interviennent dans des critères de recherche ou de jointure. C'est ainsi qu'en pratique, on en définit toujours pour les clés primaires et étrangères. Les index hachés permettent en une seule E/S de retrouver un tuple dont on donne la valeur de la clé. Les index à matrices binaires (bitmap) peuvent être utiles pour les requêtes de comptage en fonction de critères portant sur plusieurs colonnes comportant que peu de valeurs différentes. En pratique, ces index sont utilisés pour de grandes tables. La maintenance d'un index représente toujours une surcharge de travail pour le SGBD. Dès lors, on évite de créer des index sur les colonnes fortement modifiées.

Indexation dans Oracle Oracle propose plusieurs techniques d'indexation : arbres-B, arbres-B+ (par défaut), tables de hachage. Oracle maintient automatiquement les index, de manière transparente pour l'utilisateur. Par défaut, un arbre-B+ est créé sur la clé primaire de chaque table. Si l'utilisateur effectue des recherches sur des critères qui ne font pas partie de la clé, les recherches peuvent être optimisées en créant un nouvel index. CREATE [UNIQUE] INDEX nom_index ON nom_table (nom_colonne [ASC | DESC] [, nom_colonne …]; UNIQUE : une seule valeur de champ de clé Exemples : CREATE INDEX nomcli_ind ON client(nomcli); CREATE INDEX com_ind ON commandes (datecom DESC, numcli ASC);

Indexation dans Oracle Pour créer une table en arbre-B, il faut l'indiquer à la création : CREATE TABLE nom_table (Att1 typeAtt1, … PRIMARY KEY (Att1), ORGANIZATION INDEX); Tables de hachage : CREATE CLUSTER HashFilms (id INTEGER) SIZE 500 HASHKEYS 500; CREATE TABLE Film (idFilm INTEGER, …) CLUSTER HashFilms (idFilm);

Règles à respecter Ne pas créer d'index pour des tables de moins de 200-300 lignes, l'accès séquentiel est plus rapide. Ne pas créer d'index sur une colonne qui ne possède que quelques valeurs différentes. Indexer les colonnes qui interviennent souvent dans les clauses WHERE et ORDER BY Indexer les colonnes de jointure.

B+ Tree Estructura jerárquica, donde cada nodo: Apunt. 1 Clave1 Apunt. 2 Clave2 .... Apunt. n-1 Claven-1 Apunt n Registros con claves menores a Clave1 Registros con clave mayores o igual a Clave1 y menores o iguales a Clave2 Registros con clave mayores a Claven-1 El grado de un B+ tree (n) es el numero máximo de nodos hijos que posee cada nodo

B Tree En B+ trees algunas claves son repetidas en muchos nodos B tree es similar a B+ tree pero sin repetición de clave Ap11 Ap12 Clave1 Ap21 Ap22 Clave2 .... Claven Apn Al registro con clave1 Registros con claves menores que Clave1 Registros con clave mayores a Clave1 y menores a Clave2 Registros con clave Clave n