Conception Et Réalisation (SQL Server) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Les vues

On peut définir une vue comme étant une table dite virtuelle, qui a la même utilisation qu’une

table, simplement une vue ne prend pas d’espace sur le disque, puisqu’elle ne stocke pas les

données comme une table. Elle ne stocke que la requête d’extraction des données (SELECT).

Les vues sont un grand avantage quant à la gestion des données, vis-à-vis de l’utilisateur

final. En effet, elles permettent tout d’abord de simplifier la structure des tables, qui peuvent

parfois comporter une multitude de colonnes. On pourra alors choisir, en fonction de

l’utilisateur, les colonnes dont il aura besoin, et n’inclure que ces colonnes dans notre vue.

Une vue peut aussi permettre la réutilisation des requêtes. En effet, lorsque certaines

requêtes sont souvent utilisées, une vue permettra de stocker cette requête et de l’utiliser

plus facilement.

Une vue partitionnée est définie par une opération UNION ALL portant sur des tables

membres structurées de façon identique, que ce soit sur une seule instance de SQL Server ou

dans un groupe d'instances autonomes SQL Server.

Pour un partitionnement local des données, la méthode recommandée consiste à recourir à

des tables partitionnées.

Si les tables d’une vue partitionnée se trouvent sur des serveurs différents, toutes les tables

impliquées dans la requête peuvent être analysées en parallèle, ce qui accroît les

performances pour cette requête.

Création d’une vue

Une vue permet de stocker une requête prédéfinie sous forme d’objet de base de données,

pour une utilisation ultérieure. Nous allons voir les deux possibilités existantes pour créer une

vue.

96

index-97_1.png

index-97_2.jpg

Avec l’interface

Il est très intuitif de créer une vue grâce à SSMS. Pour de faire, de manière graphique, il vous

suffit de cliquer droit sur le sous dossier « Vues » dans votre base de données, affichée dans

l’explorateur d’objet. Après avoir cliqué droit, sélectionnez « Nouvelle vue… »

Après avoir cliqué sur « Nouvelle vue… », les deux fenêtres suivantes apparaissent au sein

même de SSMS. La première vous aidera à sélectionner des tables sur lesquelles la vue

portera. La seconde vous permet de sélectionner les colonnes à utiliser et construire votre

requête.

Pour ajouter une table, cliquez sur le nom de la table voulue, et sélectionnez « Ajouter ».

97

index-98_1.png

index-98_2.png

index-98_3.png

Vous pouvez en ajouter plusieurs par simple cliquez droit puis « Ajouter une table… ».

On remarquera que les tables, aussitôt sélectionnées, sont modélisées dans la partie

supérieure de la seconde fenêtre.

98

index-99_1.jpg

index-99_2.png

index-99_3.png

Pour sélectionner les colonnes à mettre dans votre vue, cochez les cases correspondant à vos

colonnes dans les tables modélisées dans la partie supérieure de la fenêtre. Lorsque l’on

coche des cases, on peut remarquer que le nom de ses colonnes est ajouté dans la partie

centrale de la fenêtre.

On peut alors modifier le type de tri, l’ordre, ou encore le filtre de cette vue en changeant les

caractéristiques dans la même partie. Toutes les actions effectuées permettront de générer le

code de la vue. Voici un exemple :

Lorsque vous avez fini de concevoir votre vue, faites cliquer droit sur l’onglet de la fenêtre

dans SSMS, et choisissez « Enregistrer ». Donnez-lui un nom. Vous venez de créer votre

vue.

Après actualisation, vous pourrez alors retrouver votre vue dans le sous-dossier de votre

explorateur d’objet, comme présenté dans l’image ci-dessous :

Création d’une vue avec du code T-SQL

La syntaxe de création d’une vue avec du code T-SQL est simple. On utilisera l’instruction

CREATE, comme pour toute création d’objets dans une base de données.

99

CREATE VIEW Nom_Vue

[options1]

AS requête [options2]

Nous utilisons l’instruction CREATE VIEW, auquel nous associons le nom que nous voulons

lui donner. Le mot clé AS indique que nous allons spécifier la requête SELECT qui va nous

permettre de sélectionner les colonnes d’une ou plusieurs tables, afin d’en copier les

propriétés dans la vue que nous créons. Il est bon de préciser que des clauses existantes pour

une instruction SELECT classique ne conviendra pas pour une instruction SELECT servant à

créer nos vues. Ces instructions ne doivent pas être autres que l’instruction SELECT, et les

clauses FROM et WHERE. Concernant les options 1 et 2 : L’option 1 correspond aux options

suivantes : WITH ENCRYPTION, WITH SCHEMABINDING, WITH VIEW_METADATA ; et

l’option 2 correspond à l’option suivant : WITH CHECK OPTION. Découvrons les actions de

chacune de ces options sur notre vue.

WITH ENCRYPTION : Permet de crypter le code dans les tables système. Attention :

personne ne peut consulter le code de la vue, même pas son créateur. Lors de la modification

de la vue avec l’instruction ALTER VIEW, il sera nécessaire de préciser de nouveau cette

option pour continuer à protéger le code de la vue.

WITH SCHEMABINDING : Permet de lier la vue au schéma. Avec cette option, il est

impératif de nommer nos objets de la façon suivante : schéma.objet.

WITH VIEW_METADATA : Permet de demander à SQL Server de renvoyer les métadonnées

correspondantes à la vue, et non celles qui composent la vue.

WITH CHECK OPTION : Permet de ne pas autoriser l’insertion ni la modification des

données ne correspondant pas aux critères de la requête.

Voici un exemple :

CREATE VIEW Ma_Premiere_Vue

WITH ENCRYPTION

AS SELECT Id_Client, Nom_Client

FROM dbo.Client

Cet exemple permet de créer une vue dont le nom est Ma_Première_Vue, avec l’option WITH

ENCRYPTION, et cette vue contiendra les colonnes Id_Client_archive et Id_Commande_

archive de la table Archive.

Exemple 1 : Créez la vue VentesI100 correspondant à la requête : « Afficher les ventes dont

le code produit est le I100 » (Affichage de toutes les colonnes de la table Vente)

-- VentesI100

CREATE VIEW VentesI100

-- Affichage de toutes les colonnes de la table Vente

AS SELECT *

-- Afficher les ventes (donc de la table Vente)

FROM vente.VENDRE

-- Où le code produit est I100

WHERE CODART = 'I100';

100

index-101_1.jpg

Exemple 2 : À partir de VentesI100, créer la vue VentesI100Grobrigan (toutes les ventes

concernant le produit I100 et le fournisseur 00120).

-- VentesI100Grobrigan

CREATE VIEW VentesI100Grobrigan

AS SELECT *

FROM VentesI100

WHERE NUMFOU = 00120;

Suppression d’une vue

Pour supprimer une vue, nous pouvons le faire via l’interface ou par le code.

Suppression d’une avec l’interface

Avec SSMS, il vous suffit de cliquer droit sur la vue dans l’explorateur d’objet et de

sélectionner « Supprimer » et de cliquer sur « Ok » dans la nouvelle fenêtre qui apparaît.

Grâce au bouton, « Afficher les Dépendances… », Il est possible de mettre en évidence les

dépendances existantes entre les objets de la base et la vue sélectionnée. Une nouvelle

fenêtre s’affiche à l’écran, dans laquelle vous pourrez choisir les différents types de

dépendances.

101

index-102_1.png

Il vous suffit juste de savoir si vous voulez afficher les objets dépendants de la vue ou ceux

dont dépend la vue en question.

Avec du code T-SQL

La structure de suppression d’une vue est la même que pour tout objet de la base de

données. Elle est la suivante :

DROP VIEW nom_vue

Les vues indexées

Les vues indexées ont un unique objectif, comme tout autre objet indexé dans la base de

données : améliorer les performances de nos requêtes. Celles-ci sont sûrement les objets de

la base offrant le plus de gain de performance dans SQL Server. On se sert le plus souvent de

ce type de vues, sur des bases de données OLAP, c'est-à-dire pour des données qui vont être

le plus souvent en lecture, et très peu mises à jour. Ces index sont en particulier pratiques

pour des requêtes nécessitant des jointures et des agrégations. La vue indexée a pour effet

de matérialiser les données. On prend le résultat de la requête et on le stocke dans l’index.

On met ensuite à jour l’index en fonction des modifications sur la table de base. La création

d’un index sur une vue se fait de la même manière que pour une table, simplement, un index

sur une vue présente de caractères propres de fonctionnement et de comportement que nous

avons commencé à présenter. Pour une version Entreprise de SQL Server, dès lors que votre

index est créé, le moteur de base de données utilisera celui-ci. En revanche, pour les autres

versions de SQL Server, il faut préciser si l’on veut utiliser l’index. La méthode est :

SELECT * FROM vue_Client WITH(NOEXPAND)

102

La clause WITH(NOEXPAND) spécifie qu’aucune vue indexée n’est étendue pour permettre

d’accéder aux tables sous-jacentes lorsque l’optimiseur de requête traite la requête.

L’optimiseur de requête traite la vue comme une table avec un index cluster. NOEXPAND

s’applique uniquement aux vues indexées. Des contraintes sont à noter. En effet, il n’est

possible de créer un index sur une vue que si les conditions suivantes sont rassemblées :

- Lors de la création de la vue, les options ANSI_NULLS et QUOTED IDENTIFIER doivent

être sur ON.

- ANSI_NULL doit être ON lors de la création de toutes les tables référencées dans la vue

sur laquelle sera créé l’index.

- La vue ne doit pas faire référence à d’autres vues.

- Toutes les tables référencées doivent appartenir à la même base et au même propriétaire.

- La vue doit être créée avec l’option WITH SCHEMABINDING.

Le premier index créé sur une vue doit être de type cluster unique. Par la suite il est possible

de construire des index non cluster.

Pour faire un résumé rapide, les vues indexées sont pratiques et efficaces dans le cas où une

vue possède une quantité remarquable de jointures et d’agrégations, et que ces données sont

surtout en lecture sur la base. Enfin, pour une création sans erreurs de l’index, certaines

conditions doivent être respectées.

Des index peuvent être créés sur des vues. Une vue indexée stocke l’ensemble des résultats

d’une vue dans la base de données. En raison de leur faible temps d’extraction, les vues

indexées peuvent être utilisées pour améliorer les performances d’une requête.

Une vue indexée est créée en implémentant un index UNIQUE CLUSTERED sur la vue.

D’autres index peuvent être créés.

Une vie indexée renvoie les modifications effectuées sur les données dans les tables de base.

L’index UNIQUE CLUSTERED est mis à jour à mesure que les données sont modifiées.

Une vue peut être modifiée par ALTER VIEW, et supprimée par DROP VIEW.

Gestion des schémas

Un schéma est un ensemble logique d’objets à l’intérieur des bases de données sur le serveur.

Leur but est de faciliter, entre autres, l’échange de données entre les utilisateurs, sans pour

autant affecter la sécurité. Concrètement, les schémas permettent une gestion plus aisée des

privilèges d’utilisation des objets. Comme nous l’avons vu précédemment, un utilisateur est

mappé sur un schéma dès sa création, obligatoirement. Si toutefois, aucun nom de schéma

n’est précisé, alors l’utilisateur sera mappé sur dbo par défaut. Pour expliquer simplement le

fonctionnement des schémas, prenons un exemple : un utilisateur est mappé sur un schéma

nommé RU. Pour requêter sur les objets de la base, il pourra écrire directement le nom seul

de cet objet si celui-ci est compris dans le schéma sur lequel il est mappé. Dans le cas

contraire, l’utilisateur devra préciser le schéma de l’objet, le nom de l’objet et à ce moment-

là, SQL Server cherchera si ledit utilisateur possède les droits d’utiliser l’objet auquel il tente

d’accéder. On peut retenir que les schémas servent essentiellement à faciliter le partage

d’information entre les utilisateurs mappés sur ce schéma.

103

index-104_1.png

index-104_2.jpg

Créer un schéma

Vous pouvez créer un schéma directement à partir de l’interface où simplement à partir du

code.

Avec l’interface

Pour créer un schéma grâce à SSMS, il vous suffit de déployer tous les nœuds jusqu’à

sécurité, d’afficher le menu contextuel (cliquez droit) du nœud schéma et de sélectionner

« Nouveau schéma ». Une nouvelle fenêtre apparaît.

Donnez un nom à votre schéma et configurez à votre guise.

Avec du code T-SQL

Voici la syntaxe de création d’un schéma de base de données :

CREATE SCHEMA nomschema

104

index-105_1.png

AUTHORIZATION nomproprietaire

options

Pour créer un schéma de base de données, nous nous servons de l’instruction CREATE

SCHEMA. Comme tout objet dans une base de données, un schéma doit avoir un nom unique

dans la famille des schémas. Il est donc nécessaire de préciser un nom derrière cette

instruction. La clause instruction va nous permettre en revanche de préciser l’utilisateur de

base de données qui sera propriétaire du schéma. Pour finir, ce que nous avons représenté

par option représente l’espace dans lequel nous pouvons directement faire la définition de nos

tables, vues et privilèges rattachés à nos tables.

Ici nous créons un schéma vente.

CREATE SCHEMA vente

Nous appliquons ce schéma vente au tables suivantes :

ALTER SCHEMA vente TRANSFER dbo.ENTCOM

ALTER SCHEMA vente TRANSFER dbo.FOURNISSEUR

ALTER SCHEMA vente TRANSFER dbo.LIGCOM

ALTER SCHEMA vente TRANSFER dbo.PRODUIT

ALTER SCHEMA vente TRANSFER dbo.VENDRE

Après actualisation :

Modification d’un schéma

Vous pouvez modifier un schéma directement à partir de l’interface où à partir du code T-SQL.

Avec l’interface

Avec l’interface graphique, la manipulation est la même que pour la création d’un schéma.

Cependant, il faudra veiller à ne pas créer un nouveau schéma, mais à se rendre dans les

propriétés du schéma que nous voulons modifier. Il faut en revanche prendre en compte que

l’on ne peut pas changer le nom du schéma, seulement les tables, vue qui y sont contenues,

les autorisations et le propriétaire du schéma.

Par exemple, nous souhaitons désigner l’utilisateur « Util5 » comme propriétaire du schéma

vente : Cliquez droit sur le schéma vente puis « Propriétés ».

105

index-106_1.png

index-106_2.jpg

index-106_3.jpg

Cliquez sur « Rechercher… »

Puis cliquez sur « Parcourir ».

Sélectionnez l’utilisateur concerné puis cliquez sur « Ok ».

106

index-107_1.png

index-107_2.jpg

index-107_3.jpg

Cliquez de nouveau sur « Ok ».

« Util 5 » est maintenant propriétaire du schéma.

107