Vous êtes sur la page 1sur 58

BASES DE DONNEES AVANCEES

Lotfi NAJDI
Année Universitaire 2020 / 2021
Licence Professionnelle Génie Informatique
Faculté Polydisciplinaire de Taroudant
Utilisateur et Schéma

 L’accès à la base de données s’effectue via une procédure d’identification sous le nom d’un

utilisateur qui a été déclaré dans la base par l’administrateur.

 Un schéma est un ensemble d’objets regroupés pour le compte d’un seul utilisateur de la base de

données.

 Le schéma porte le même nom que l’utilisateur auquel il est associé.

 Le schéma fait partie des propriétés attribuées à un utilisateur ainsi que le TABLESPACE par

défaut dans lequel seront stockés implicitement les objets qui seront créés par l’utilisateur et les

privilèges (systèmes et objets) attribués pour la sécurité d’exécution.


Qu'est-ce qu'un schéma?

 Permet de gérer l’appartenance des objets

 Peut contenir plusieurs types d’objet (tables, vues, index…)

 Un utilisateur est propriétaire des objets de son schéma

 Pour accéder à un objet d’un autre schéma : SELECT * FROM schema.objet

Schéma de Jean

Tables
Vues

Jean
Index …
Objets de la base de données

En plus des tables, une base de données contient plusieurs autres types d’objets.

Object Description

Table Stocke physiquement les données


View Représente logiquement des sous-ensembles de
données provenant d'une ou de plusieurs tables

Sequence Génère des valeurs numériques


Index Améliore la performance de certaines requêtes

Synonym Donne un nom alternatif à un objet


Objets de la base de données

• Avec les vues, vous pouvez montrer ou masquer les données contenues dans les tables.

• Vous pouvez utiliser les séquences pour générer des nombres uniques.

• Si vous souhaitez améliorer la performance des requêtes d'interrogation des données, vous

devriez envisager la création des index.

• Avec les synonymes , vous pouvez fournir des noms alternatifs pour les objets afin de

faciliter leurs utilisations.


Les vues
Qu'est-ce qu'une vue ?

Table EMPLOYEES
Qu'est-ce qu'une vue ?

 Représentation logique basée sur une table , plusieurs tables ou bien autres vues.

 Une vue ne contient pas de données, mais peut être considérée comme une fenêtre à travers

laquelle les données des tables peuvent être visualisées ou modifiées.

 Les tables sur lesquelles une vue est basée sont appelées tables de base.

 La vue est stockée sous la forme d'une instruction SELECT dans le dictionnaire de données

d’Oracle.
Intérêt des vues

• Restreindre l’accès aux données: les vues limitent l'accès aux données car elles affichent les

colonnes sélectionnées à partir d’une table. Par exemple cela permet de cacher certaines colonnes

à un ou à plusieurs utilisateurs.

• Simplifier les requêtes complexes : Les vues peuvent être utilisées pour stocker des requêtes qui

sont plus ou moins complexes afin qu’ils soient utilisées comme s'il s'agissait d'une table.

• Par exemple, les vues peuvent être utilisées pour interroger des données provenant de plusieurs

tables sans que l'utilisateur ne sache comment écrire une requête de jointure.
Intérêt des vues

• Permettre l’indépendance des données : les vues assurent l'indépendance logique des données

pour les utilisateurs et les programmes. Si on apporte des modifications à la requête qui a donné

lieu à la vue, l’interface d’accès (dans ce cas, la vue ne sera pas affectée) .

• Présenter des vues différentes pour les mêmes données: les vues permettent à des groupes

d'utilisateurs d'accéder aux données en fonction de leurs critères spécifiques.


Vues simples et vues complexes

La différence fondamentale entre ces deux types de vues réside dans la possibilité d’utilisation des

opérations DML (INSERT, UPDATE, and DELETE).

 Une vue simple :

• extrait les données à partir d'une seule table

• ne contient pas de fonctions ou des groupements sur les données

• les instructions DML peuvent être opérer sur ce type de vues.

 Une vue complexe :

 extrait les données depuis plusieurs tables

 contient des fonctions ou des groupements sur les données

 instructions DML ne sont pas toujours autorisés sur les vues complexes.
Créer une vue

Pour créer une vue , on va incorporer une sous requête dans l’instruction CREATE VIEW :

CREATE VIEW view

AS subquery ;

La sous-requête peut contenir une requête d’interrogation SELECT complexe.


Créer une vue

Création de la vue EMPVU80 contenant le détail des employées du departement 80

CREATE VIEW empvu80


AS SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 80;

Examiner le structure de la vue avec l’instruction Describe

DESCRIBE empvu80
Créer une vue

Création de vue en utilisant les alias de colonne

CREATE VIEW salvu50

AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY

FROM employees

WHERE department_id = 50;

Sélectionner les colonnes de la vue à l’aide des alias utilisés


Interroger une vue

SELECT *

FROM salvu50;
Créer une vue
syntaxe générale

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];


Modifier une vue

On va modifier la vue EMPVU80 en utilisant une clause CREATE OR REPLACE VIEW.


On va également Ajouter un alias pour chaque nom de colonne :

CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id)


AS SELECT employee_id, first_name || ' ' || last_name,
salary, department_id
FROM employees
WHERE department_id = 80;

Les alias des colonnes de la clause CREATE OR REPLACE VIEW, sont spécifiés dans le même ordre que les
colonnes de la sous-requête.
Créer une vue complexe

Exemple de vue complexe qui contient des fonctions de groupement et qui affiche les données issues
de plus d’une table.

CREATE OR REPLACE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)

AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary)

FROM employees e JOIN departments d ON (e.department_id = d.department_id)

GROUP BY d.department_name;
Interroger une vue complexe

L’affichage du contenu de la vue se fait à travers une instruction SELECT de manière très simplifiée .

SELECT * FROM dept_sum_vu;


Règles sur les instructions DML et les vues

 les instructions DML peuvent être généralement effectuée sur des vues simples.

 La suppression d’une ligne à travers une vue n’est pas permise dans les cas suivants :

• Fonctions de groupement

• Clause GROUP BY clause

• Mot-clé DISTINCT

• Pseudo-colonne ROWNUM
Règles sur les instructions DML et les vues

La modification des données d’une vue n’est pas permise si la vue contient :

• Fonctions de groupement

• Clause GROUP BY clause

• Mot-clé DISTINCT

• Pseudo-colonne ROWNUM

• Colonnes définies par des expressions


Règles sur les instructions DML et les vues

L’insertion des données par le biais d'une vue, n’est pas autorisée si celle-ci comprend :

• Fonctions de groupement

• Clause GROUP BY clause

• Mot-clé DISTINCT

• Pseudo-colonne ROWNUM

• Colonnes définies par des expressions

• Colonnes NOT NULL contenues dans les tables de base qui ne sont pas sélectionnées par la vue
OPTION WITH CHECK
Cette option permet de s’assurer que les opérations DML effectuées soient conformes au domaine
de la vue.
CREATE OR REPLACE VIEW empvu20 AS SELECT *

FROM employees

WHERE department_id = 20

WITH CHECK OPTION CONSTRAINT empvu20_ck ;

Toute tentative d’insertion de nouvel ’enregistrement avec un department_id différent de la valeur


20, ou bien de mise à jour du numéro de département pour n'importe quelle ligne de la vue échoue
car elle constitue une violation de la contrainte définie avec l’option WITH CHECK .
Interdiction d’instructions DML

• Les instructions DML sur les vues peuvent être interdites, en spécifiant l’option WITH READ ONLY

dans la définition de la vue.

• Dans ce cas le serveur oracle refuse toute tentative d'effectuer une opération DML sur une ligne

quelconque de la vue et affiche une erreur.


Interdiction d’instructions DML

CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title)


AS SELECT employee_id, last_name, job_id
FROM employees
WHERE department_id = 10
WITH READ ONLY;

update empvu10 set employee_name ='toto' ;


Interdiction d’instructions DML

Exemple de tentative de suppression dune ligne à partir de la vue avec une contrainte WITH READ ONLY

DELETE FROM empvu10

WHERE employee_number = 200;

La tentative d'insertion ou de modification d’une ligne en utilisant la vue entraîne la même erreur.
Suppression d'une vue
La suppression d’une vue n’entraine pas la suppression des données au niveau des tables de bases.

Syntaxe: DROP VIEW view;

Exemple : DROP VIEW empvu80;


Les séquences
Les séquences

 la création d’une séquence permet la définition d’une suite de nombres entiers.

 Les valeurs générées par la séquence dépendent des paramètres spécifiés lors de la création de la

séquence.

 Les séquences sont des objets de base de données Oracle, au même titre que les tables, les vues ..etc.

 Une séquence appartient à un utilisateur, on peut la manipuler, l’interroger et la modifier, à condition

d'avoir les droits nécessaires.


Intérêts des séquences

 Avoir automatiquement une suite de numéros uniques

 Peut être utilisé pour :

• Générer les valeurs d’une clé primaire (utilisation la plus commune des séquences )

• Créer un compteur, qu’on peut utiliser et incrémenter en cas de besoin

 Réduire le code nécessaire pour écrire des fonctions générant une séquence au niveau des

applications

 Accélérer l'efficacité de l'accès aux valeurs des séquences lorsqu'elles sont mises en cache dans

la mémoire

 Possibilité d’utiliser la même séquence au niveau de plusieurs tables (objet partageable)


Créer une séquence

Syntaxe CREATE SEQUENCE sequence


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

Cette Expression SQL permet de définir une séquence qui va générer automatiquement une suite de
nombres.
Créer une séquence

Créer une séquence appelée DEPT_DEPTID_SEQ à utiliser pour la clé primaire de la table DEPARTMENTS .

CREATE SEQUENCE dept_deptid_seq


INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;

Dans ce cas, il faut choir l’option NOCYCLE


Utilisation d'une séquence

Après la création d’une séquence , on peut l'interroger à travers l'utilisation des deux pseudo-colonnes

NEXTVAL and CURRVAL (les pseudo-colonnes sont manipulées comme les colonnes de table, mais ils ne le

sont pas).

• CURRVAL renvoie la valeur courante de la séquence.

• NEXTVAL renvoie la prochaine valeur disponible de la séquence (après incrémentation ) . Elle renvoie

une valeur unique chaque fois qu'elle est utilisée.

• NEXTVAL doit être appelée lors de la première utilisation d'une séquence afin de l’initialiser, il faut

utiliser NEXTVAL pour l'initialiser.


Utilisation d'une séquence

Exemple d’utilisation d’une sequence pour insertion d’un nouveau département appelé "Support"
avec location_id égale à 2500 :

INSERT INTO dep2 (department_id,


department_name, location_id) VALUES
(dept_deptid_seq.NEXTVAL,
'Support', 2500);

Consulter la valeur actuelle de la sequence DEPT_DEPTID_SEQ :

Select dept_deptid_seq.CURRVAL
FROM dual;
Utilisation d'une séquence

Exemple d’utilisation d’une séquence pour l’insertion de plusieurs lignes à l’aide de l’instruction
INSERT (par exemple les nouveaux recrus pour le nouveau département )

INSERT INTO employees (employee_id, department_id, ...)

VALUES (employees_seq.NEXTVAL, dept_deptid_seq .CURRVAL, ...);

EMPLOYEE_SEQ est une séquence créée pour générer de nouveaux numéros pour
employee_id .
Mettre les valeurs en mémoire cache

• Consiste à demander au serveur Oracle de placer en mémoire cache un certain nombre de valeurs de la

séquence.

• La mise en cache des valeurs des séquences en mémoire permet d'optimiser l'utilisation des séquences

et permet un accès plus rapide à ces valeurs.

• Par défaut, Oracle maintient 20 valeurs en mémoire cache.

CREATE SEQUENCE dept_deptid_seq


CACHE 100;
Modifier une séquence

Pour modifier le pas d'incrémentation, la valeur maximale, la valeur minimale, l'option de cycle ou l'option de
cache :

ALTER SEQUENCE dept_deptid_seq

INCREMENT BY 20

MAXVALUE 999999

NOCACHE NOCYCLE;

Si la limite MAXVALUE de la séquence est atteinte , aucune valeur supplémentaire de la séquence ne peut être
attribuée et erreur sera renvoyée.
Pour continuer à utiliser la séquence, on peut la modifier en utilisant l'instruction ALTER SEQUENCE.
Modifier une séquence

 La sequence peut être modifiée par le propriétaire de la séquence ou par tout utilisateur possédant le
privilège ALTER pour la séquence.

 Seuls les futurs numéros générés par la séquence seront concernés par la modification de la séquence.

 La séquence doit être supprimée et recréée pour recommencer la séquence à partir d’un autre numéro.

 Certaines validations sont effectuées lors de la modification des séquences. Par exemple, une nouvelle
MAXVALUE qui est inférieure au numéro de séquence actuel ne peut pas être attribuée.

Pour supprimer une séquence, on fait appel à l'instruction DROP SEQUENCE :

DROP SEQUENCE dept_deptid_seq;


Les index
Les index

 Un index est un objet de base de données.

 Les indexes sont utilisés sans réécrire les requêtes, dans ce cas les résultats demeurent les mêmes, mais

les performances peuvent être améliorées

 Les indexes sont utilisées et maintenus automatiquement par Oracle

 Les index sont logiquement et physiquement indépendants des tables qu'ils permettent d’indexer.

C.-à-d. qu'ils peuvent être créés ou supprimés à tout moment, et n'ont aucun effet sur les tables

associées.
Intérêt des index

 Améliorer le temps de réponse des requêtes

 Permettre un accès direct et rapide aux lignes d'une table.

 Réduire les I/O des disques en utilisant une méthode d'accès par chemin rapide pour localiser rapidement
les données

 Si aucun index n’est défini sur la colonne, alors un balayage complet (Full scan ) de la table est nécessaire
avant de renvoyer les résultats .
Types d’index

Unique index : le serveur Oracle crée automatiquement cet index lorsque vous définissez une

colonne dans un tableau qui correspond à une CLÉ PRIMAIRE PRIMARY KEY ou une contrainte

UNIQUE. Dans ce cas l’indexe porte le même nom qui a été donné à la contrainte.

Nonunique index : Il s'agit d'un index que l’utilisateur peut définir sur les colonnes, de manière

explicite afin d'accélérer l'accès aux lignes.


Création d’index
CREATE INDEX avec CREATE TABLE

L'exemple suivant illustre la création de l’index au moment de la création de la clé primaire de

manière à ce qu'ils soient différents du nom de la contrainte PRIMARY KEY.

CREATE TABLE NEW_EMP (

employee_id NUMBER(6) PRIMARY KEY USING INDEX

(CREATE INDEX emp_id_idx ON NEW_EMP(employee_id)),

first_name VARCHAR2(20), last_name VARCHAR2(25));


Création d’index
CREATE INDEX avec CREATE TABLE

On va interroger la vue du dictionnaire de données USER_INDEXES pour obtenir des informations

sur l’index créé .

SELECT INDEX_NAME, TABLE_NAME


FROM USER_INDEXES

WHERE TABLE_NAME = 'NEW_EMP';


Création d’index avec l’instruction
CREATE TABLE

L'exemple suivant illustre le cas ou l'index n'est pas explicitement nommé :

CREATE TABLE EMP_UNNAMED_INDEX

(employee_id NUMBER(6) PRIMARY KEY , first_name VARCHAR2(20),

last_name VARCHAR2(25));

SELECT INDEX_NAME, TABLE_NAME

FROM USER_INDEXES
WHERE TABLE_NAME = 'EMP_UNNAMED_INDEX';
Les types d’index

Oracle propose plusieurs schémas d'indexation, qui offrent des fonctionnalités de performance

complémentaires.

1. B-trees : abréviation de balanced trees

• type d'index de base de données le plus courant (Index par défaut dans oracle)

• Un index B-tree est une liste ordonnée de valeurs divisée en plages de valeurs.

• En associant une clé à une ligne ou à une plage de lignes, les arbres B-trees fournissent

d'excellentes performances de recherche pour un large éventail de requêtes, y compris les

recherches de correspondance exacte et de plage de valeur.

• B-tree est recommandé dans le cas des colonnes avec high-cardinality (nombreuses valeurs

distinctes ) et volumes relativement faibles.


Les types d’index

Oracle propose plusieurs schémas d'indexation, qui offrent des fonctionnalités de performance

complémentaires. Les types d’index les plus utilisés sont :

2. Bitmap :

• recommandé pour environnements d'entrepôt de données (data warehouse) avec des colonnes à

faible cardinalité low-cardinality

• Volumes importants, peu de valeurs distinctes, peu d’updates

• Bitmap n’est pas approprié pour les bases de données transactionnelles (OLTP) où les lignes sont

mises à jour avec une grande fréquence


Création d’index
Créez un index sur une ou plusieurs colonnes en utilisant l’instruction CREATE INDEX :

CREATE [UNIQUE][BITMAP]INDEX index

ON table (column[, column]...);

• index : est le nom attribué à l’index qu’on va créer


• table : est le nom de la table
• column : est le nom de la colonne à indexer
• UNIQUE : pour indiquer que la valeur de la colonne (ou des colonnes) sur laquelle (lesquelles) l'indice est basé doit être unique.
Création d’index

Pour améliorer la vitesse d'accès à la colonne LAST_NAME de la table EMPLOYEES :

CREATE INDEX emp_last_name_idx

ON employees(last_name);

SELECT INDEX_NAME, TABLE_NAME

FROM USER_INDEXES

WHERE TABLE_NAME = 'EMPLOYEES';


Supprimer un index

Supprimez un index en utilisant l’instruction:

DROP INDEX index;

Pour supprimer l’index emp_last_name_idx :

DROP INDEX emp_last_name_idx;

La modification d’indexes n’et pas permises , pour modifier un index, on doit le supprimer puis le recréer.
Pour supprimer un index, vous devez être le propriétaire de l'index ou avoir le privilège DROP ANY INDEX.
Recommandations pour la création d'un index

 Avoir beaucoup d'index sur une table ne permet pas forcément d'obtenir des requêtes plus rapides.

 Chaque opération DML validée sur une table avec des index signifie que les index doivent être mis à
jour.

 Par conséquent, la création d'index est recommandée dans les cas suivants :

• Une colonne contient un large éventail de valeurs ou bien un grand nombre de valeurs NULL

• Une ou plusieurs colonnes sont fréquemment utilisées ensemble dans une clause WHERE ou bien une
condition de jointure .

• La table est large et la plupart des requêtes devraient permettre de retourner moins de 2 à 4 % des
lignes.

 Ne pas créer d'index pour les colonnes qui ne sont pas souvent utilisées pour définir une condition dans
la requête
Les synonymes
Les synonymes

 Un synonyme est un alias ou un nom convivial pour les objets de base de données (tables, vues..

etc.)

 Les synonymes sont des objets de base de données.

 Par exemple, la création d’un synonyme permet de donner un autre nom à une table et pouvoir

l’appeler à l’aide de ce nom.


Intérêts des synonymes

 La création d’ un synonyme pour un objet dans un schéma facilite l’accès à cet objet en utilisant le
synonyme au niveau des instructions SQL.

 L’utilisation des synonymes constitue un moyen pratique permettant de réduire la complexité des
instructions SQL pour les utilisateurs de bases de données.

 Les synonymes permettent de renommer ou de déplacer les objets sous-jacents. Dans ce cas, seul le
synonyme doit être redéfini et les applications basées sur le synonyme continuent à fonctionner sans
aucune modification.

 Les synonymes peuvent fournir un niveau de sécurité en masquant le nom et le propriétaire d'un
objet.
Créer un synonyme

Simplifier l'accès aux objets en créant un synonyme (un autre nom pour un objet).

• Créer une référence plus facile à une table qui appartient à un autre utilisateur

• Abréger les noms d’objets longs

CREATE [PUBLIC] SYNONYM synonym

FOR object;

PUBLIC : Crée un synonyme accessible à tous les utilisateurs

synonym : Le nom du synonyme à créer

OBJECT Identifie l'objet pour lequel le synonyme sera créé


Types de synonymes

 Nous avons la possibilité de créer des synonymes publics et privés.

 Un synonyme public est la propriété du groupe spécial d'utilisateurs nommé PUBLIC et est

accessible à tous les utilisateurs d’une base de données.

 Un synonyme privé est contenu dans le schéma d'un utilisateur spécifique et n'est accessible

que par cet 'utilisateur et par les utilisateurs ayant droit d’accès pour l'objet sous-jacent.

 Lorsqu’on accorde des privilèges sur un synonyme, on accorde en réalité des privilèges sur

l'objet sous-jacent, et le synonyme agit juste comme un alias de l'objet dans une instruction

GRANT.
Créer et supprimer un synonyme

L'administrateur de la base de données (DBA) peut créer un synonyme public qui est accessible à
tous les utilisateurs.

L'exemple suivant permet de crée un synonyme public nommé DEPT pour la table DEPARTMENTS de HR:

CREATE PUBLIC SYNONYM dept

FOR HR.departments;

select * from dept;

Pour supprimer le synonyme:

DROP SYNONYM dept ;

Vous aimerez peut-être aussi