Thứ Năm, 27 tháng 7, 2023

Postgresql: View và Materialized View (Phần 1)

Series này gồm 2 bài trình bày về View và Materialized View

Trong bài đầu tiên này, xin phép trình bày về View trước.

Trước tiên xin bắt đầu với một database model đơn giản với 3 bảng: post, category và author

 

Như các bạn thấy, quan hệ giữa 2 bảng post-category và post-author đều là quan hệ 1:nhiều

Sau khi đã có database model, ta tiến hành insert dữ liệu bằng cách sử dụng Mockaroo.

Để cho đơn giản, trong bảng post, author_id và category_id sẽ chỉ giới hạn trong 5 giá trị: 1,2,3,4,5, tương ứng với 5 bản ghi trong bảng author và category

Sau khi insert dữ liệu mẫu, các bảng post, author và category của tôi sẽ có dạng như sau:

Bảng post với 1000 bản ghi

 

Bảng author gồm 5 bản ghi. Toàn những cái tên khét tiếng !!!

 

 

Bảng category gồm 5 bản ghi

 

 

OK, các bảng đã được setup xong !!! Bây giờ, tôi muốn lấy đầy đủ thông tin của 1 bài viết, bao gồm:

  • Tiêu đề và nội dung bài viết
  • Tên đầy đủ và email của tác giả
  • Tiêu đề và mô tả của category mà bài viết thuộc về

Để đáp ứng yêu cầu trên, câu lệnh SQL của chúng ta sẽ là như này:

SELECT post.title, post.content, author.first_name || ‘ ‘ || author.last_name AS author_name,
author.email AS author_email, category.title AS category_title, category.description AS category_description
FROM post, category, author
WHERE post.author_id = author.id
AND post.category_id = category.id

 

và đây là kết quả trả về:

Đầy đủ thông tin về một bài viết. Cool !!!

 

Hmmm, thế bây giờ cứ khi nào tôi cần lấy đầy đủ thông tin về một bài viết, tôi sẽ lại phải tìm và copy&paste đoạn code dài ngoằng kia vào à ? Liệu có cách nào nhanh hơn không ? Liệu tôi có thể "đóng gói" đoạn SQL kia vào trong một "object" kiểu như một function để đến khi nào cần tôi chỉ cần "gọi" phát là xong ?

Well, Postgresql View chính xác là những gì bạn cần !

Với View, bạn có thể viết một lần và tái sử dụng một đoạn code SQL

Hãy "đóng gói" đoạn SQL dài ngoẵng bên trên vào trong 1 View với câu lệnh sau:

CREATE VIEW full_post AS
SELECT post.title, post.content, author.first_name || ‘ ‘ || author.last_name AS author_name,
author.email AS author_email, category.title AS category_title, category.description AS category_description
FROM post, category, author
WHERE post.author_id = author.id
AND post.category_id = category.id

 

Cú pháp rất đơn giản:

  • CREATE VIEW full_post: Tạo một View với tên là full_post
  • Theo sau là từ khóa AS
  • Sau từ khóa AS là đoạn code SQL mà ta muốn tái sử dụng

Tạo View full_post thành công !!!

 

Với view full_post vừa tạo, ta có thể tái sử dụng đoạn SQL phức tạp ở trên với 1 câu lệnh đơn giản:

SELECT *
FROM full_post

Kết quả y hệt chỉ với 2 dòng code. Cool !!!

 

Một lưu ý nho nhỏ: View chỉ lưu trữ câu lệnh SQL  không lưu trữ kết quả của câu lệnh. Do đó, cùng một View, mỗi lần sử dụng có thể cho ra kết quả khác nhau vì dữ liệu ở các bảng được query đã thay đổi

Nếu như bạn vừa muốn lưu trữ câu lệnh SQL, vừa muốn lưu trữ kết quả cuả câu lệnh, xin hãy đón đọc phần 2 của series bài viết, trình bày về Postgres Materialized View

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master