Database Views

การออกแบบฐานข้อมูล

Lis Sulmont

Curriculum Manager

Database Views

ใน database view คือชุดผลลัพธ์ของ query ที่จัดเก็บไว้ ซึ่งผู้ใช้สามารถ query ได้เหมือนกับ object ถาวรใน database (Wikipedia)

ตารางเสมือนที่ไม่ได้อยู่ใน physical schema

  • จัดเก็บ query ไว้ในหน่วยความจำ ไม่ใช่ข้อมูล
  • ข้อมูลรวบรวมจากตารางต่างๆ
  • Query ได้เหมือนตารางปกติ
  • ไม่ต้องพิมพ์ query ซ้ำหรือแก้ไข schema
1 https://en.wikipedia.org/wiki/View_(SQL)
การออกแบบฐานข้อมูล

การสร้าง view (syntax)

CREATE VIEW view_name AS
SELECT col1, col2 
FROM table_name 
WHERE condition;
การออกแบบฐานข้อมูล

การสร้าง view (ตัวอย่าง)

มิติ Book ของ snowflake schema

$$

เป้าหมาย: ดึงชื่อเรื่องและผู้แต่งของหนังสือแนว science fiction

การออกแบบฐานข้อมูล

การสร้าง view (ตัวอย่าง)

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';
การออกแบบฐานข้อมูล

การ query view (ตัวอย่าง)

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');
การออกแบบฐานข้อมูล

การดู views

(ใน PostgreSQL)

$$

SELECT * FROM INFORMATION_SCHEMA.views;

รวม system views

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

ไม่รวม system views

การออกแบบฐานข้อมูล

ประโยชน์ของ views

  • ไม่ใช้พื้นที่จัดเก็บข้อมูล
  • รูปแบบหนึ่งของการควบคุมการเข้าถึง
    • ซ่อนคอลัมน์ที่ละเอียดอ่อนและจำกัดสิทธิ์การมองเห็น
  • ลดความซับซ้อนของ query
    • มีประโยชน์สำหรับ schema ที่ normalize ในระดับสูง
การออกแบบฐานข้อมูล

$$ Schema ของฐานข้อมูล Pitchfork Reviews

1 https://www.kaggle.com/nolanbconaway/pitchfork-data
การออกแบบฐานข้อมูล

มาฝึกกันเถอะ!

การออกแบบฐานข้อมูล

Preparing Video For Download...