Databaseviews

Databaseontwerp

Lis Sulmont

Curriculum Manager

Databaseviews

In een database is een view de resultset van een opgeslagen query op de data, die gebruikers kunnen bevragen alsof het een persistente tabel is (Wikipedia)

Virtuele tabel die niet in het fysieke schema zit

  • Query, geen data, wordt opgeslagen in geheugen
  • Data wordt samengevoegd uit tabellen
  • Te bevragen als een normale tabel
  • Veelgebruikte queries niet herhalen of schema’s wijzigen
1 https://en.wikipedia.org/wiki/View_(SQL)
Databaseontwerp

Een view maken (syntaxis)

CREATE VIEW view_name AS
SELECT col1, col2 
FROM table_name 
WHERE condition;
Databaseontwerp

Een view maken (voorbeeld)

Boekdimension van het snowflake-schema

$$

Doel: Geef titels en auteurs van het genre science fiction terug

Databaseontwerp

Een view maken (voorbeeld)

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';
Databaseontwerp

Een view bevragen (voorbeeld)

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 |
| ...                           | ...               | ...             |
Databaseontwerp

Achter de schermen

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');
Databaseontwerp

Views bekijken

(in PostgreSQL)

$$

SELECT * FROM INFORMATION_SCHEMA.views;

Inclusief systeemviews

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

Exclusief systeemviews

Databaseontwerp

Voordelen van views

  • Neemt geen opslagruimte in
  • Een vorm van toegangsbeheer
    • Verberg gevoelige kolommen en beperk wat een gebruiker ziet
  • Maskeert querycomplexiteit
    • Handig bij sterk genormaliseerde schema's
Databaseontwerp

$$ Schema van de Pitchfork Reviews-database

1 https://www.kaggle.com/nolanbconaway/pitchfork-data
Databaseontwerp

Laten we oefenen!

Databaseontwerp

Preparing Video For Download...