Vous êtes sur la page 1sur 12

Les vues, indexes, séquences

Les vues

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.

2. La définition d'une vue est donnée par un SELECT qui indique les données de la base
qui seront vues.

3. Seule la définition de la vue est enregistrée dans la base, et pas les données de la vue.
On peut parler de table virtuelle.

4. Les utilisateurs peuvent alors voir une partie des données, soit la partie qui les
intéresse.
Les vues
Syntaxe de création

CREATE VIEW vueName [(col1, col2...)] AS SELECT ...


La spécification des noms des colonnes de la vue est facultative : par défaut, les colonnes de la
vue ont pour nom les noms des colonnes résultat du SELECT. Si certaines colonnes résultat du
SELECT sont des expressions sans nom, il faut alors obligatoirement spécifier les noms de
colonnes de la vue.

Vue constituant une restriction de la table EMP aux employés du département 10 :

CREATE VIEW EMP10 AS


SELECT * FROM EMP
WHERE deptno = 10
Les vues
Syntaxe de modification

ALTER VIEW [nomBase.]nomVue [(listecolonnes)]


AS requêteSELECT
[WITH [CASCADED | LOCAL] CHECK OPTION];

Syntaxe de suppression

DROP VIEW vueName;


Supprime la vue « vueName ».
Utilisation des vues
Consultation

Une vue est consultée comme on consulte les tables, ex:


SELECT ENAME,JOB FROM EMP10;
Les vues

Utilisation des vues


Mise à jour
Il est possible de mettre à jour (INSERT, UPDATE, DELETE) des vues sous certaines conditions:

Pour effectuer un DELETE, le SELECT qui définit la vue ne doit pas comporter de jointure, de GROUP
BY, de DISTINCT, de fonction de groupe.
DELETE FROM EMP10

Pour un UPDATE, en plus des conditions précédentes, les colonnes modifiées doivent être des colonnes
réelles de la table sous-jacente.
UPDATE EMP10 SET SAL = SAL * 1.1

Pour un INSERT, en plus des conditions précédentes, toute colonne NOT NULL de la table sous-jacente
doit être présente dans la vue.
Les vues

Une vue peut créer des données qu'elle ne pourra pas visualiser. On peut ainsi ajouter un employé du
département 20 avec la vue EMP10.
INSERT INTO EMP10 VALUES (5647,'HERNAN','SALESMAN',7782,'1982-05-
10',3000,NULL,20)

Si l'on veut éviter cela il faut ajouter WITH CHECK OPTION dans l'ordre de création de la vue après
l'interrogation définissant la vue. Il est alors interdit de créer au moyen de la vue des lignes qu'elle ne
pourrait relire. Ce dispositif fonctionne également pour les mises à jour.

CREATE VIEW EMP10


AS SELECT * FROM EMP WHERE DEPT = 10
WITH CHECK OPTION
Les index : utilité

Utilité d’un index


Afficher les employés dont le job est CLERK:
SELECT * FROM emp WHERE job='CLERK'

⁃ A l’exécution, on doit visiter chaque ligne de EMP et évaluer la condition job = 'CLERK'. Le

temps d’exécution dépendra du nombre de lignes de EMP !

⁃ Si les utilisateurs de notre base consultent fréquemment EMP avec le critère de recherche JOB, il

nous convient de créer un index sur la table EMP sur la colonne JOB.
Les index : concept de base

Un tel index inclut une liste d’indices pour chaque valeur distincte de JOB. Les indices référencent les
lignes de la table EMP.

CLERK 1,11,12,14
ANALYST 8,13
MANAGER 4,6,7
PRESIDENT 9
SALESMAN 2,3,5,10

Maintenant, pour exécuter cette requête


SELECT * FROM emp WHERE job='CLERK'
L’accès se fait directement à partir de l’index !
Les types des indexes

Types d’index : MS SQL Server manipule deux types d’index:


Les CLUSTERED INDEX :
– Un seul index par table.
– index sur la clé primaire, mais on peut choisir une autre colonne (not null et unique comme un alias)
Les non CLUSTERED INDEX
– Vous pouvez créer plusieurs index non-cluster sur une table ou une vue indexée.
– Les index non-cluster doivent, en principe, améliorer les performances des requêtes fréquemment
utilisées qui ne sont pas couvertes par l'index cluster.
Les index : création

Création d’un index


CREATE INDEX nom_ind ON tab(col1,col2,…);
Cette requête crée un index non sur la table tab sur les colonnes spécifiées entre parenthèses.
Pour les CLUSTERED
CREATE CLUSTERED INDEX nom_ind ON tab(col1,col2,…);
Exemple:
CREATE INDEX emp_job ON emp(job);
Inconvénients d’un index
Consomme de l’espace disque
Nécessite une maintenance (mise à jour) à chaque fois où la table indexée est mise à jour.
Les séquences

Utilité d’une séquence


Dans certains cas, nous avons besoin de générer des nombres séquentiels et uniques, le plus souvent
pour les insérer dans des clés primaires.
Une séquence est un objet BD qui stocke une valeur qui s’incrémente à chaque fois où on la consulte.
Création d’une séquence

CREATE SEQUENCE nom_seq


MINVALUE min_val MAXVALUE max_val
START WITH val INCREMENT BY val_inc[CYCLE|NOCYCLE]

⁃ Pour la modification en utilise ALTER SEQUENCE nom_seq …


⁃ Pour la suppression en utilise DROP SEQUENCE nom_seq
Les séquences

Exemple:

CREATE SEQUENCE emp_seq


MINVALUE 100 MAXVALUE 1000
START WITH 500
INCREMENT BY 1 CYCLE;

Pour insérer un nouvel employé, on peut utiliser la séquence emp_seq pour dériver une valeur
séquentielle et unique de la clé primaire empno. Exemple:
INSERT INTO emp(empno,ename,sal)VALUES(NEXT VALUE FOR emp_seq,'PATRICK',1200);

Vous aimerez peut-être aussi