Décrire les objets de base de données

Effectué

En plus des tables, une base de données relationnelle peut contenir d’autres structures qui aident à optimiser l’organisation des données, à encapsuler les actions programmatiques et à améliorer la vitesse d’accès. Dans cette unité, vous allez découvrir trois de ces structures plus en détail : vues, procédures stockées et index.

Qu’est-ce qu’une vue ?

Une vue est une table virtuelle basée sur les résultats d’une requête SELECT. On peut considérer une vue comme une fenêtre sur des lignes spécifiques dans une ou plusieurs tables sous-jacentes. Par exemple, vous pouvez créer une vue sur les tables Commande et Client, qui récupère les données de commande et de client pour fournir un objet unique qui facilite la détermination des adresses de livraison pour les commandes:

CREATE VIEW Deliveries
AS
SELECT o.OrderNo, o.OrderDate,
       c.FirstName, c.LastName, c.Address, c.City
FROM Order AS o JOIN Customer AS c
ON o.Customer = c.ID;

Vous pouvez interroger la vue et filtrer les données quasiment de la même façon qu’une table. La requête suivante recherche les détails des commandes pour les clients qui vivent à Seattle :

SELECT OrderNo, OrderDate, LastName, Address
FROM Deliveries
WHERE City = 'Seattle';

Qu'est-ce qu'une procédure stockée ?

Une procédure stockée définit les instructions SQL qui peuvent être exécutées sur commande. Les procédures stockées sont utilisées pour encapsuler la logique programmatique dans une base de données pour les actions que les applications doivent effectuer lors de l’utilisation de données.

Vous pouvez définir une procédure stockée avec des paramètres pour créer une solution flexible pour les actions courantes qui risquent de devoir être appliquées aux données en fonction d’une clé ou d’un critère spécifique. Par exemple, la procédure stockée suivante peut être définie pour changer le nom d’un produit en fonction de l’ID de produit spécifié.

CREATE PROCEDURE RenameProduct
	@ProductID INT,
	@NewName VARCHAR(20)
AS
UPDATE Product
SET Name = @NewName
WHERE ID = @ProductID;

Lorsqu’un produit doit être renommé, vous pouvez exécuter la procédure stockée, en passant l’ID du produit et le nouveau nom à affecter :

EXEC RenameProduct 201, 'Spanner';

Qu’est-ce qu’un index ?

Un index aide à rechercher des données dans une table. Pensez à l’index d’une table comme à un index dans les dernières pages d’un livre. L’index d’un livre contient un ensemble trié de références, avec les pages sur lesquelles chaque référence apparaît. Lorsque vous voulez trouver une référence à un élément du livre, vous le cherchez dans l’index. Vous pouvez utiliser les numéros de page dans l’index pour accéder directement aux pages appropriées dans le livre. Sans un index, vous pourriez devoir lire tout le livre pour trouver les références que vous cherchez.

Lorsque vous créez un index dans une base de données, vous spécifiez une colonne de la table et l’index contient une copie de ces données dans un ordre trié, avec des pointeurs vers les lignes correspondantes dans la table. Lorsque l’utilisateur exécute une requête qui spécifie cette colonne dans la clause WHERE, le système de gestion de base de données peut utiliser cet index pour extraire les données plus rapidement que s’il devait analyser la totalité de la table ligne par ligne.

Par exemple, vous pouvez utiliser le code suivant pour créer un index sur la colonne Nom de la table Produit :

CREATE INDEX idx_ProductName
ON Product(Name);

L’index crée une structure basée sur une arborescence que l’optimiseur de requête du système de base de données peut utiliser pour trouver rapidement les lignes dans la table Produit en fonction d’un nom spécifié.

Capture d’écran d’un exemple d’index qui crée une structure basée sur une arborescence.

Pour une table contenant peu de lignes, l’utilisation de l’index n’est probablement pas plus efficace que la simple lecture de la table entière et la recherche des lignes demandées par la requête (dans ce cas, l’optimiseur de requêtes ignorera l’index). Toutefois, lorsqu’une table contient de nombreuses lignes, les index peuvent améliorer considérablement les performances des requêtes.

Vous pouvez créer de nombreux index sur une table. Par conséquent, si vous souhaitez également rechercher des produits en fonction du prix, il peut être utile de créer un autre index sur la colonne Prix de la table Produit. Toutefois, les index ont un coût. Un index consomme de l’espace de stockage et vous devez en assurer la maintenance chaque fois que vous insérez, mettez à jour ou supprimez des données dans une table. Ce travail supplémentaire peut ralentir les opérations d’insertion, de mise à jour et de suppression. Vous devez trouver un équilibre entre avoir des indexes qui accélèrent vos requêtes et le coût des autres opérations à effectuer.