データベースビュー

データベース設計

Lis Sulmont

Curriculum Manager

データベースビュー

データベースでは、ビューはデータに対する保存済みクエリの結果セットであり、データベースのユーザーは永続的なデータベースコレクションオブジェクトと同じようにクエリが可能である (Wikipedia)

物理スキーマの一部ではない仮想テーブル

  • クエリはデータではなく、メモリに保存される
  • データはテーブル内のデータから集計される
  • 通常のデータベーステーブルのようにクエリできる
  • よく使うクエリの再入力やスキーマ変更の必要がない
1 https://en.wikipedia.org/wiki/View_(SQL)
データベース設計

ビューの作成(構文)

CREATE VIEW view_name AS
SELECT col1, col2 
FROM table_name 
WHERE condition;
データベース設計

ビューの作成(例)

Book dimension of the snowflake schema

$$

目標: 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');

システムビューを除く

データベース設計

ビューのメリット

  • ストレージを消費しない
  • アクセス制御の一種
    • 機密列を非表示にし、ユーザーが閲覧できる内容を制限する
  • クエリの複雑さを隠す
    • 正規化されたスキーマに有用
データベース設計

$$ Schema of Pitchfork Reviews Database

1 https://www.kaggle.com/nolanbconaway/pitchfork-data
データベース設計

練習しましょう!

データベース設計

Preparing Video For Download...