Chuyển đến nội dung chính
Mô-đun 9 · Bài học 4 trong tổng số 436/57 trong khóa học~12 min
Bài học theo mô-đun (4/4)

Lượt xem và trừu tượng hóa dữ liệu

Trong suốt các bài học của chúng tôi, bạn sẽ nhận thấy rằng các truy vấn (đặc biệt là JOIN phức tạp hoặc các tập hợp như GROUP BY) bắt đầu dài dòng và chứa đầy các quy tắc và tính toán.

Điều gì sẽ xảy ra nếu có một cách lưu truy vấn đã hoàn thành về mặt tinh thần và ẩn nó khỏi chế độ xem, giả vờ từ đó về sau rằng, theo mọi ý định và mục đích, nó là một "bảng" bình thường của DB?

Chào mừng đến với thế giới của Chế độ xem.

TẠO CHẾ ĐỘ XEM

Về cơ bản, một khung nhìn là một truy vấn SQL được đặt tên và ổn định, nhưng nó hoạt động giống như một bảng "ảo"!

SQL
CREATE VIEW user_spending AS
SELECT
  c.id,
  c.first_name,
  SUM(o.amount) as total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id;

Xong! Bây giờ, thay vì luôn phải làm lại JOIN và GROUP BY đó, bạn chỉ cần viết các truy vấn hoàn toàn bình thường:

SQL
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.

Lượt xem và "dữ liệu thời gian thực"

Một lầm tưởng rất phổ biến là cho rằng Lượt xem lấy dữ liệu, tính toán các tổng như giá cả hoặc thứ hạng và tạo ra một ảnh chụp nhanh đáng buồn nào đó dai dẳng, giống như một bức ảnh. Sai (hầu như luôn luôn)! Theo mặc định, Chế độ xem là ảo: mỗi khi bạn đặt tên của Chế độ xem trong CHỌN của mình, Postgres hậu trường sẽ hợp nhất yêu cầu của bạn bằng cách chạy tính toán thời gian thực dựa trên trạng thái của DB ở chính xác một phần nghìn giây đó. Vì vậy, bạn sẽ không bao giờ đọc dữ liệu cũ.

Chúng dùng để làm gì?

  • Đơn giản: chế độ xem bảo vệ các ứng dụng bên ngoài khỏi những thay đổi. Nếu nhóm giao diện người dùng biết rằng họ phải đọc dữ liệu từ chế độ xem top_selling, thì họ không phải lo lắng nếu ngày mai chúng tôi sửa đổi cơ sở dữ liệu bằng cách thêm ba mối quan hệ trung gian để chọn ra những sản phẩm bán chạy nhất!
  • Bảo mật và tách biệt: trong các cơ sở dữ liệu lớn, một chế độ xem có thể chọn trước và ẩn một phần dữ liệu người dùng khỏi các nhà phát triển bên ngoài, chỉ cấp cho họ quyền truy cập (ví dụ) vào một chế độ xem phụ của phân tích đã được loại bỏ tên thật.

Bỏ chế độ xem

Cũng giống như bảng, khi không còn cần thiết, bạn tiếp tục bằng lệnh DROP:

SQL
DROP VIEW user_spending;

Hãy thử nó

tập thể dục#sql.m9.l4.e1
Nỗ lực: 0Đang tải…

Tạo chế độ xem (XEM) có tên là 'high_value_products'. Nó phải hoạt động như một vùng chứa chọn tất cả 3 trường thiết yếu (`id`, `name`, `price`) từ bảng 'sản phẩm', NHƯNG chỉ và luôn dành cho những sản phẩm có 'giá' lớn hơn 50,00.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Viết TẠO VIEW view_name NHƯ CHỌN ... TỪ ... Ở ĐÂU ...

Giải pháp khả dụng sau 3 lần thử

Gọi một chế độ xem

tập thể dục#sql.m9.l4.e2
Nỗ lực: 0Đang tải…

Vì mọi bài tập trên nền tảng đều được chạy trong môi trường biệt lập (và sạch sẽ), nên chế độ xem trước đó không còn tồn tại ở bước này. Tạo lại chế độ xem 'high_value_products' (vẫn với các sản phẩm có giá > 50) và sau đó, trên dòng ngay sau đó, chạy CHỌN tất cả nội dung của nó được sắp xếp theo giá giảm dần (DESC) để xác minh rằng nó hoạt động.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Đừng quên ; giữa các câu lệnh SQL (đặt nó ở cuối dòng đầu tiên)! Điều này cho phép Postgres thực hiện 2 nhiệm vụ theo trình tự.

Giải pháp khả dụng sau 3 lần thử