Les vues, indexes, séquences

Eyrolles
1/11
100%

<!-- Slide number: 1 -->

Les vues, indexes, séquences

Notes:

<!-- Slide number: 2 -->

Les vues

Qu’est ce qu’une vue

Une vue est une vision partielle ou particulière des données d'une ou plusieurs tables de la base.

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

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.

Les utilisateurs peuvent alors voir une partie des données, soit la partie qui les intéresse.

Notes:

<!-- Slide number: 3 -->

Les vues

Syntaxe de création

CREATE VIEW vue [(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

Publicité

WHERE deptno = 10

Notes:

<!-- Slide number: 4 -->

Les vues

Syntaxe de suppression

DROP VIEW vue;

Supprime la vue « vue ».

Utilisation des vues

Consultation

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

SELECT ENAME,JOB FROM EMP10;

Mise à jour

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

Notes:

<!-- Slide number: 5 -->

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.

Publicité

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.

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.

Notes:

<!-- Slide number: 6 -->

Les index : utilité

Utilité d’un index

Afficher les emplyoés dont le job est CLERK:

SELECT * FROM empWHERE 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.

Notes:

<!-- Slide number: 7 -->

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.

Maintenant, pour exécuter cette requête

SELECT * FROM empWHERE job=‘CLERK’;

L’accès se fait directement à partir de l’index !

| CLERK | 1,11,12,14 |

| --- | --- |

Publicité

| ANALYST | 8,13 |

| MANAGER | 4,6,7 |

| PRESIDENT | 9 |

| SALESMAN | 2,3,5,10 |

Notes:

<!-- Slide number: 8 -->

Les index : création

Création d’un index

CREATE INDEX nom_ind ON tab(col1,col2,…);

Cette requête crée un indexe sur la table tab sur les colonnes spécifiées entre parenthèses.

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.

Notes:

<!-- Slide number: 9 -->

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.

Publicité

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_seqMINVALUE min_val MAXVALUE max_valSTART WITH val INCREMENT BY val_inc[CYCLE|NOCYCLE]

Notes:

<!-- Slide number: 10 -->

Les séquences

Exemple:

CREATE SEQUENCE emp_seqMINVALUE 100 MAXVALUE 1000START WITH 500 INCREMENT BY 1 CYCLE;

Pour utiliser une séquence, on utilise les pseudo-colonnes nom_seq.curval (renvoie la valeur courante de la séquence), et nom_seq.nextval (valeur suivante de la séquence).

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(emp_seq.nextval,’PATRICK’,1200);

Notes:

<!-- Slide number: 11 -->

Bibliographie

[1] Gilles Roy. «Conception de bases de données avec UML». Presses de l’Université du Québec, 2009.

[2] Christian Soutou. «UML2 pour les bases de données». Eyrolles, 2007.

[3] Giovanni Camponovo. « Bases de Données Avancées». Université de Lausanne, HEC, 2006.

[4] Georges Gardarin. « Bases de Données ». Eyrolles, 6è édition, 2005.

Notes:

Les vues, indexes, séquences

Database Management, SQL · course

Voir tous les documents en bases de données

<!-- Slide number: 1 -->

Les vues, indexes, séquences

Notes:

<!-- Slide number: 2 -->

Les vues

Qu’est ce qu’une vue

Une vue est une vision partielle ou particulière des données d'une ou plusieurs tables de la base.

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

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.

Les utilisateurs peuvent alors voir une partie des données, soit la partie qui les intéresse.

Notes:

<!-- Slide number: 3 -->

Les vues

Syntaxe de création

CREATE VIEW vue [(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

Publicité

WHERE deptno = 10

Notes:

<!-- Slide number: 4 -->

Les vues

Syntaxe de suppression

DROP VIEW vue;

Supprime la vue « vue ».

Utilisation des vues

Consultation

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

SELECT ENAME,JOB FROM EMP10;

Mise à jour

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

Notes:

<!-- Slide number: 5 -->

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.

Publicité

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.

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.

Notes:

<!-- Slide number: 6 -->

Les index : utilité

Utilité d’un index

Afficher les emplyoés dont le job est CLERK:

SELECT * FROM empWHERE 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.

Notes:

<!-- Slide number: 7 -->

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.

Maintenant, pour exécuter cette requête

SELECT * FROM empWHERE job=‘CLERK’;

L’accès se fait directement à partir de l’index !

| CLERK | 1,11,12,14 |

| --- | --- |

Publicité

| ANALYST | 8,13 |

| MANAGER | 4,6,7 |

| PRESIDENT | 9 |

| SALESMAN | 2,3,5,10 |

Notes:

<!-- Slide number: 8 -->

Les index : création

Création d’un index

CREATE INDEX nom_ind ON tab(col1,col2,…);

Cette requête crée un indexe sur la table tab sur les colonnes spécifiées entre parenthèses.

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.

Notes:

<!-- Slide number: 9 -->

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.

Publicité

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_seqMINVALUE min_val MAXVALUE max_valSTART WITH val INCREMENT BY val_inc[CYCLE|NOCYCLE]

Notes:

<!-- Slide number: 10 -->

Les séquences

Exemple:

CREATE SEQUENCE emp_seqMINVALUE 100 MAXVALUE 1000START WITH 500 INCREMENT BY 1 CYCLE;

Pour utiliser une séquence, on utilise les pseudo-colonnes nom_seq.curval (renvoie la valeur courante de la séquence), et nom_seq.nextval (valeur suivante de la séquence).

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(emp_seq.nextval,’PATRICK’,1200);

Notes:

<!-- Slide number: 11 -->

Bibliographie

[1] Gilles Roy. «Conception de bases de données avec UML». Presses de l’Université du Québec, 2009.

[2] Christian Soutou. «UML2 pour les bases de données». Eyrolles, 2007.

[3] Giovanni Camponovo. « Bases de Données Avancées». Université de Lausanne, HEC, 2006.

[4] Georges Gardarin. « Bases de Données ». Eyrolles, 6è édition, 2005.

Notes: