Les bases de données par M. Deividson : les vues.

Version française de l'article Deividson on Databases: Views, paru dans la Gazette Linux numéro 149 d'Avril 2008

Adaptation française: Florence Cousin

Relecture de la version française: Guillaume Lelarge

Version : 1.0

Conditions de distribution : cet article est distribué selon les conditions de la licence Open Publication License, version 1.0, du 8 juin 1999. Pour plus d'informations, consultez : http://linuxgazette.net/copying.html.

6 septembre 2008

Historique des versions
Version 1.02008-09-14FC, GL
Première traduction française.
2008-04LOD
1.0

Table des matières

Introduction
Les vues
Les vues temporaires.
Conclusion

Introduction

PostgreSQL—« La base de données Open Source la plus sophistiquée au monde », comme il est dit sur le site web officiel (http://www.postgresql.org/)—propose des fonctionnalités qui peuvent vous aider énormément lors du développement de vos applications. Dans cette série, nous allons voir trois fonctionnalités importantes, mais souvent sous-utilisées, qui ont un large spectre d'utilisation. Ce sont les vues (Views), les procédures stockées (Stored Procedures), les déclencheurs (Triggers).

Nous utiliserons des exemples réels, avec beaucoup de code pour vous aider à bien comprendre ces fonctionnalités.

Les vues

Une vue est une présélection de données qui peut être interrogée par une requête SQL. Elle réduit le besoin d'écrire du code SQL complexe (parfois très complexe) dans votre application et est souvent utilisée pour récupérer des données pour des comptes-rendus standard ou d'autres ensembles de données interrogés régulièrement.

Dans notre exemple, supposons que vous ayez les tables suivantes dans votre base (vous pouvez utiliser les commandes SQL suivantes pour faire votre propre suite de tests) :

create table cpu (
cpu_id serial primary key, 
cpu_type text );
	
create table video (
video_id serial primary key, 
video_type text );
	
create table computer (
computer_id serial primary key,
computer_ram integer,
cpu_id integer references cpu(cpu_id),
video_id integer references video(video_id)
);
    

Et les données suivantes dans les tables :

insert into cpu(cpu_type) values('Intel P4 Dual Core D');
insert into cpu(cpu_type) values('AMD Athlon');

insert into video(video_type) values('Geforce 8600GT'); 
insert into video(video_type) values('Radeon 9550'); 

insert into computer values (0, 512, 1, 2);
insert into computer values (1, 1024, 2, 1);
insert into computer values (2, 512, 2, 2);
    

C'est une base de données toute simple avec trois tables - CPU, cartes vidéo et ordinateurs, liées par des clés étrangères. Maintenant, supposons que vous ayez besoin de récupérer les données sur les ordinateurs - mais vous ne voulez pas les identifiants des CPU et des cartes vidéo, juste leur description. Vous pouvez utiliser le code SQL suivant :

select a.computer_id, a.computer_ram, b.cpu_type, c.video_type 
from computer a, cpu b, video c 
where (a.cpu_id=b.cpu_id) AND (a.video_id=c.video_id);
    

Qui vous renvoie les informations suivantes :

0     512     "Intel P4 Dual Core D"     "Radeon 9550"
1    1024     "AMD Athlon"               "Geforce 8600GT"
2     512     "AMD Athlon"               "Radeon 9550"
    

Maintenant, si vous utilisez beaucoup ce même code SQL, vous pouvez le simplifier en définissant une vue, comme ceci :

    create or replace view computer_full(computer_id, computer_ram, cpu_type, video_type) as (
select a.computer_id, a.computer_ram, b.cpu_type, c.video_type 
from computer a, cpu b, video c 
where (a.cpu_id=b.cpu_id) AND (a.video_id=c.video_id)
);
    

Cela correspond à l'ordre « create [or replace] view (nom de la vue) [(alias des champs retournés)] as (sql) ». Le « or replace » est utile pour faire des tests. Il remplace la vue si elle existe déjà. Ainsi, vous n'avez pas besoin de la supprimer (instruction « DROP ») avant de la recréer. Les alias des champs sont facultatifs. Si vous les omettez, la vue renvoie le nom des champs.

Maintenant, chaque fois que vous avez besoin des mêmes données, vous pouvez les obtenir en exécutant l'ordre :

    select * from computer_full;
    

Le résultat est le même que celui obtenu ci-dessus. Vous pouvez également utiliser des clauses WHERE, comme ceci :

Select * from computer_full where computer_id=1
    

Le résultat est :

    1     1024     "AMD Athlon"     "Geforce 8600GT"
    

C'est utile, non seulement parce que cela simplifie vos requêtes, mais aussi parce que cela facilite la correction d'un bogue trouvé dans votre code ou la simple amélioration de votre code. Vous modifiez simplement la vue et, partout où vous l'invoquiez, le nouveau code est exécuté. Changeons notre vue pour une façon plus professionnelle de sélectionner les données : les jointures. Les jointures sont un meilleur moyen pour sélectionner les données de plusieurs tables ; cette méthode est plus rapide que celles de l'étiquetage des tables, que nous avons utilisée ci-dessus. Il y a plusieurs méthodes pour faire des jointures, et pour notre exemple, nous pouvons choisir parmi deux d'entre elles :

create or replace view computer_full as (
select computer_id, computer_ram, cpu_type, video_type from computer a
right join cpu b on (a.cpu_id=b.cpu_id)
right join video c on (a.video_id=c.video_id)
);
    

et :

create or replace view computer_full as (
select computer_id, computer_ram, cpu_type, video_type from computer
natural right join cpu
natural right join video
);
    

La première option, qui utilise la clause « ON », est utilisée quand les noms des colonnes que vous utilisez pour joindre les deux tables sont différents (« on computer_cpu_id=cpu_id »), et la seconde (jointure naturelle) est utilisée quand les noms des deux colonnes sont identiques. C'est pourquoi nous avons dû étiqueter nos tables (computer a, cpu b, video c) dans le premier exemple - utiliser « on cpu_id=cpu_id » aurait été ambigu. Essayez de toujours utiliser les jointures naturelles quand c'est possible. Elles sont plus faciles à comprendre, et habituellement plus rapides.

Les vues temporaires.

Les vues temporaires sont, comme leur nom l'indique, des vues temporaires. Vous pouvez les utiliser exactement comme des vues, mais elles ne sont pas statiques (c'est-à-dire en permanence dans votre base de données). Un exemple rapide de vue temporaire :

  create temp view products (model, price) as
select model, price from pc union
select model, price from laptop union
select model, price from printer
  

Vous la supprimez ainsi :

drop view test
  

Les vues temporaires peuvent être utiles pour stocker le code de rapports dynamiques, ou autres tâches similaires.

Conclusion

Les vues n'améliorent pas les performances. Elles sont là uniquement pour vous faciliter la vie, pour vous rendre service lors du développement de systèmes.

Un petit fichier .sql est attaché à cet article. Si vous l'ouvrez dans pgAdmin, vous verrez qu'il contient du code pour créer des données de test pour nos tables d'exemple (50000 CPU et vidéos, 500000 ordinateurs). Vous pouvez les utiliser pour voir - rapidement—comment les vues et les commandes SQL se comportent avec un gros volume de données.

Bon, c'est tout pour aujourd'hui, j'espère que cela vous sera utile. Le mois prochain, nous parlerons des procédures stockées !

Remerciements particuliers au professeur Saulo Benvenutti, un grand professeur de bases de données. C'était un plaisir d'être dans votre classe.

L. Deividson est né à União da Vitória, au Brésil, le 14 avril 1984. Il a commencé à s'intéresser aux ordinateurs dès son enfance, et a commencé à coder à 12 ans. Il est diplômé en systèmes d'information et termine sa spécialité en réseaux et développement Web. Il programme en plusieurs langages, entre autres C/C++/C#, PHP, Visual Basic, Object Pascal et d'autres. Il travaille à la mairie de Porto União comme technicien informatique, et il est spécialisé dans le développement Web et poste de travail, et dans la maintenance en base de données et réseaux.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.