Подання бази даних

Проєктування баз даних

Lis Sulmont

Curriculum Manager

Подання бази даних

У базі даних подання — це набір результатів збереженого запиту до даних, який користувачі можуть запитувати так само, як і постійну колекцію об'єктів бази даних (Вікіпедія)

Віртуальна таблиця, якої немає у фізичній схемі

  • У пам'яті зберігається запит, а не дані
  • Дані агрегуються з таблиць
  • Можна запитувати як звичайну таблицю
  • Не потрібно щоразу набирати типові запити чи змінювати схеми
1 https://en.wikipedia.org/wiki/View_(SQL)
Проєктування баз даних

Створення подання (синтаксис)

CREATE VIEW view_name AS
SELECT col1, col2 
FROM table_name 
WHERE condition;
Проєктування баз даних

Створення подання (приклад)

Вимір «Книга» у схемі сніжинки

$$

Мета: повернути назви та авторів жанру science fiction

Проєктування баз даних

Створення подання (приклад)

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';
Проєктування баз даних

Запит до подання (приклад)

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 |
| ...                           | ...               | ...             |
Проєктування баз даних

Як це працює «за лаштунками»

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');
Проєктування баз даних

Перегляд подань

(у PostgreSQL)

$$

SELECT * FROM INFORMATION_SCHEMA.views;

Містить системні подання

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

Виключає системні подання

Проєктування баз даних

Переваги подань

  • Не займає сховище
  • Форма контролю доступу
    • Приховує чутливі стовпці та обмежує видиме користувачу
  • Маскує складність запитів
    • Корисно для сильно нормалізованих схем
Проєктування баз даних

$$ Схема бази даних Pitchfork Reviews

1 https://www.kaggle.com/nolanbconaway/pitchfork-data
Проєктування баз даних

Давайте потренуємось!

Проєктування баз даних

Preparing Video For Download...