Vues de base de données

Conception de bases de données

Lis Sulmont

Curriculum Manager

Vues de base de données

Dans une base de données, une vue est l'ensemble de résultats d'une requête stockée sur les données, que les utilisateurs peuvent interroger comme un objet de collection persistant (Wikipédia)

Table virtuelle qui ne fait pas partie du schéma physique

  • La requête, pas les données, est stockée en mémoire
  • Données agrégées à partir des tables
  • Interrogeable comme une table régulière
  • Évite de retaper des requêtes courantes ou de modifier des schémas
1 https://en.wikipedia.org/wiki/View_(SQL)
Conception de bases de données

Créer une vue (syntaxe)

CREATE VIEW view_name AS
SELECT col1, col2 
FROM table_name 
WHERE condition;
Conception de bases de données

Créer une vue (exemple)

Dimension Livre du schéma en flocon

$$

Objectif : retourner les titres et auteurs du genre science fiction

Conception de bases de données

Créer une vue (exemple)

CREATE VIEW scifi_books AS
SELECT title,  author, genre
FROM dim_book_sf
JOIN dim_genre_sf ON dim_genre_sf.genre_id = dim_book_sf.genre_id
JOIN dim_author_sf ON dim_author_sf.author_id = dim_book_sf.author_id
WHERE dim_genre_sf.genre = 'science fiction';
Conception de bases de données

Interroger une vue (exemple)

SELECT * FROM scifi_books
| title                         | author            | genre           |
|-------------------------------|-------------------|-----------------|
| The Naked Sun                 | Isaac Asimov      | science fiction |
| The Robots of Dawn            | Isaac Asimov      | science fiction |
| The Time Machine              | H.G. Wells        | science fiction |
| The Invisible Man             | H.G. Wells        | science fiction |
| The War of the Worlds         | H.G. Wells        | science fiction |
| Wild Seed (Patternmaster, #1) | Octavia E. Butler | science fiction |
| ...                           | ...               | ...             |
Conception de bases de données

En arrière-plan

SELECT * FROM scifi_books

=

SELECT * FROM 
(SELECT title,  author, genre
FROM dim_book_sf
JOIN dim_genre_sf ON dim_genre_sf.genre_id = dim_book_sf.genre_id
JOIN dim_author_sf ON dim_author_sf.author_id = dim_book_sf.author_id
WHERE dim_genre_sf.genre = 'science fiction');
Conception de bases de données

Afficher les vues

(dans PostgreSQL)

$$

SELECT * FROM INFORMATION_SCHEMA.views;

Inclut les vues système

SELECT * FROM information_schema.views
WHERE table_schema NOT IN ('pg_catalog', 'information_schema');

Exclut les vues système

Conception de bases de données

Avantages des vues

  • N'occupe pas d'espace de stockage
  • Forme de contrôle d'accès
    • Masquer des colonnes sensibles et limiter ce que l'utilisateur voit
  • Masque la complexité des requêtes
    • Utile pour les schémas très normalisés
Conception de bases de données

$$ Schéma de la base de données Pitchfork Reviews

1 https://www.kaggle.com/nolanbconaway/pitchfork-data
Conception de bases de données

Passons à la pratique !

Conception de bases de données

Preparing Video For Download...