Databázové pohledy

Database Design

Lis Sulmont

Curriculum Manager

Databázové pohledy

V databázi je pohled výsledková sada uloženého dotazu nad daty, kterou mohou uživatelé dotazovat stejně jako trvalý objekt databáze (Wikipedia)

Virtuální tabulka, která není součástí fyzického schématu

  • V paměti je uložen dotaz, nikoli data
  • Data jsou agregována z tabulek
  • Lze dotazovat jako běžnou databázovou tabulku
  • Není třeba opakovat časté dotazy ani měnit schémata
1 https://en.wikipedia.org/wiki/View_(SQL)
Database Design

Vytvoření pohledu (syntaxe)

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

Vytvoření pohledu (příklad)

Dimenze knih ve schématu sněhové vločky

$$

Cíl: Vrátit názvy a autory knih žánru science fiction

Database Design

Vytvoření pohledu (příklad)

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';
Database Design

Dotazování pohledu (příklad)

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 |
| ...                           | ...               | ...             |
Database Design

Co se děje na pozadí

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');
Database Design

Zobrazení pohledů

(v PostgreSQL)

$$

SELECT * FROM INFORMATION_SCHEMA.views;

Včetně systémových pohledů

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

Bez systémových pohledů

Database Design

Výhody pohledů

  • Nezabírá úložný prostor
  • Forma řízení přístupu
    • Skrývá citlivé sloupce a omezuje viditelnost dat
  • Skrývá složitost dotazů
    • Užitečné pro silně normalizovaná schémata
Database Design

$$ Schéma databáze recenzí Pitchfork

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

Lass uns üben!

Database Design

Preparing Video For Download...