Tối ưu hoá công việc quản trị với view và bảng tạm

Hiểu, dùng, và tối ưu hóa VIEW và CTE (bảng tạm)

trong bối cảnh nghiệp vụ quản trị dữ liệu.

Tuyệt vời — đây là phần cốt lõi khi chuyển từ làm “truy vấn thuần” sang làm “quản trị dữ liệu thông minh”.
Chúng ta sẽ nói đúng trọng tâm: hiểu, dùng, và tối ưu hóa VIEW và CTE (bảng tạm) trong bối cảnh nghiệp vụ quản trị dữ liệu.

🎯 MỤC TIÊU

  • Hiểu viewCTE là gì, khi nào nên dùng.
  • Ứng dụng vào nghiệp vụ quản trị dữ liệu bán hàng (theo ERD bạn đã có).
  • Xây dựng ví dụ thực tế giúp tối ưu công việc quản trị, phân tích và giám sát dữ liệu.

🧩 1. VIEW – BẢNG ẢO DÙNG ĐỂ QUẢN TRỊ VÀ PHÂN TÍCH LẶP LẠI

🔹 Khái niệm

VIEWbảng ảo sinh ra từ kết quả truy vấn SQL.
Không chứa dữ liệu thật — mà chứa công thức lấy dữ liệu, MySQL sẽ chạy lại mỗi khi gọi.

✅ Mục tiêu trong quản trị:

  • Chuẩn hóa và tái sử dụng các truy vấn phức tạp
  • Tạo lớp bảo mật logic (ẩn cấu trúc thật của bảng)
  • Giảm lỗi thao tác truy vấn trực tiếp lên dữ liệu gốc

🔹 Ví dụ 1 – Tạo View quản lý doanh thu tổng hợp theo khách hàng

CREATE VIEW v_customer_revenue AS
SELECT 
    c.customerNumber,
    c.customerName,
    ROUND(SUM(od.quantityOrdered * od.priceEach), 2) AS totalRevenue
FROM customers c
JOIN orders o ON c.customerNumber = o.customerNumber
JOIN orderdetails od ON o.orderNumber = od.orderNumber
GROUP BY c.customerNumber, c.customerName;

➡️ Ý nghĩa quản trị:

  • Dùng để nhanh chóng kiểm tra doanh thu mỗi khách hàng.
  • Các nhà quản trị chỉ cần SELECT * FROM v_customer_revenue;
    → Không phải nhớ cấu trúc join 3 bảng.

🔹 Ví dụ 2 – View theo dõi chất lượng dữ liệu khách hàng

CREATE VIEW v_data_quality_customers AS
SELECT 
    customerNumber,
    customerName,
    CASE WHEN phone IS NULL OR phone='' THEN 'Thiếu' ELSE 'Đầy đủ' END AS phoneStatus,
    CASE WHEN addressLine1 IS NULL OR addressLine1='' THEN 'Thiếu' ELSE 'Đầy đủ' END AS addressStatus
FROM customers;

➡️ Ý nghĩa quản trị:
Giúp người quản trị đánh giá nhanh độ đầy đủ thông tin khách hàng, không cần chạy lại truy vấn dài.


=🔹 Ví dụ 3 – View giám sát hiệu suất bán hàng theo nhân viên

CREATE VIEW v_sales_by_employee AS
SELECT 
    e.employeeNumber,
    CONCAT(e.firstName, ' ', e.lastName) AS employeeName,
    ROUND(SUM(od.quantityOrdered * od.priceEach), 2) AS totalSales
FROM employees e
JOIN customers c ON e.employeeNumber = c.salesRepEmployeeNumber
JOIN orders o ON c.customerNumber = o.customerNumber
JOIN orderdetails od ON o.orderNumber = od.orderNumber
GROUP BY e.employeeNumber;

➡️ Ứng dụng quản trị:

  • Gắn view này vào dashboard BI (Power BI / Tableau).
  • Không cần cho user truy cập trực tiếp vào orders hay orderdetails.

🧠 2. CTE (Common Table Expression) – BẢNG TẠM LINH HOẠT, DỄ ĐỌC, DỄ BẢO TRÌ

🔹 Khái niệm

CTE (bắt đầu bằng WITH) là bảng tạm trong phạm vi một truy vấn,
giúp chia nhỏ logic phức tạp, dễ hiểu, dễ bảo trì hơn subquery.

✅ Trong quản trị dữ liệu, CTE rất hữu ích để:

  • Làm báo cáo nhiều tầng (step-by-step)
  • Tạm tổng hợp dữ liệu trước khi đối chiếu, kiểm tra chất lượng, hoặc phân loại rủi ro
  • Dễ dàng debug & đọc lại logic truy vấn

=🔹 Ví dụ 1 – Kiểm tra tính toàn vẹn đơn hàng

Giả sử bạn cần phát hiện đơn hàng không có dòng chi tiết (orderdetails).

WITH order_summary AS (
    SELECT orderNumber FROM orders
),
order_has_detail AS (
    SELECT DISTINCT orderNumber FROM orderdetails
)
SELECT s.orderNumber
FROM order_summary s
LEFT JOIN order_has_detail d ON s.orderNumber = d.orderNumber
WHERE d.orderNumber IS NULL;

➡️ Ý nghĩa quản trị:

  • Phát hiện dữ liệu sai lệch giữa bảng master–detail.
  • Tránh tình trạng “đơn hàng rỗng” trong hệ thống.

🔹 Ví dụ 2 – Tính xếp hạng doanh thu khách hàng theo quốc gia

WITH revenue_by_customer AS (
    SELECT 
        c.country,
        c.customerName,
        SUM(od.quantityOrdered * od.priceEach) AS revenue
    FROM customers c
    JOIN orders o ON c.customerNumber = o.customerNumber
    JOIN orderdetails od ON o.orderNumber = od.orderNumber
    GROUP BY c.country, c.customerName
)
SELECT *,
       RANK() OVER (PARTITION BY country ORDER BY revenue DESC) AS rank_in_country
FROM revenue_by_customer;

➡️ Ứng dụng quản trị:
Xếp hạng khách hàng trong từng quốc gia → phục vụ quản trị thị trường hoặc thiết lập KPI khu vực.

🔹 Ví dụ 3 – Báo cáo chất lượng dữ liệu tổng hợp nhiều tiêu chí

WITH null_check AS (
    SELECT 
        COUNT(*) AS totalCustomers,
        SUM(CASE WHEN phone IS NULL OR phone='' THEN 1 ELSE 0 END) AS missingPhone,
        SUM(CASE WHEN addressLine1 IS NULL OR addressLine1='' THEN 1 ELSE 0 END) AS missingAddress
    FROM customers
)
SELECT 
    totalCustomers,
    missingPhone,
    missingAddress,
    ROUND((1 - (missingPhone + missingAddress) / (totalCustomers * 2)) * 100, 2) AS dataQualityPercent
FROM null_check;

➡️ Ứng dụng quản trị:
Tự động tính chỉ số chất lượng dữ liệu (Data Quality Index) mà không cần tạo bảng trung gian.

⚙️ 3. SO SÁNH VIEW vs. CTE TRONG NGHIỆP VỤ QUẢN TRỊ

Tiêu chí VIEW CTE
Mục đích Tạo bảng ảo, tái sử dụng lâu dài Tạo bảng tạm trong phạm vi 1 truy vấn
Hiệu suất Có thể được cache, phụ thuộc engine Chạy lại mỗi lần gọi
Phạm vi sử dụng Toàn hệ thống Cục bộ trong 1 truy vấn
Tối ưu cho Báo cáo định kỳ, phân quyền, giám sát Kiểm tra nhanh, phân tích đa tầng
Quyền truy cập Có thể cấp quyền riêng (GRANT SELECT ON view) Không cấp quyền riêng được
Ứng dụng quản trị dữ liệu Xây dashboard, lớp bảo mật logic Kiểm tra chất lượng, so sánh, audit dữ liệu

🧰 4. ỨNG DỤNG VIEW + CTE ĐỂ TỐI ƯU HÓA QUẢN TRỊ

Bài toán quản trị Giải pháp với View/CTE
Theo dõi doanh thu định kỳ View v_sales_by_employee, v_customer_revenue
Đánh giá chất lượng dữ liệu View v_data_quality_customers hoặc CTE null_check
Đối chiếu dữ liệu master–detail CTE order_summary + order_has_detail
Kiểm tra lỗi nhập liệu / thiếu dữ liệu CTE để tổng hợp và lọc các bản ghi bất thường
Xếp hạng nhân viên / khách hàng CTE + Window Functions (RANK(), DENSE_RANK())
Tạo nguồn dữ liệu an toàn cho BI Tạo view chuẩn hóa, cấp quyền SELECT

🚀 5. KINH NGHIỆM QUẢN TRỊ THỰC TẾ

  1. Luôn tạo view chuẩn hóa cho người dùng báo cáo, không cấp quyền truy cập trực tiếp vào bảng gốc.
  2. Dùng CTE để debug và kiểm tra logic dữ liệu trước khi tạo view chính thức.
  3. Đặt tên view rõ ràng:
    • v_qa_... (Quality Assurance)
    • v_revenue_... (doanh thu)
    • v_audit_... (kiểm soát thay đổi)
  4. Tích hợp view vào dashboard BI (Power BI, Metabase, Superset, v.v.) để giảm tải cho DB và chuẩn hóa số liệu.
  5. Lưu version SQL view/CTE trong git, đảm bảo truy vết thay đổi (data governance).

 

 

tạo một bộ file thực hành gồm:

  • 01_create_views.sql – các view quản trị chính
  • 02_cte_examples.sql – các ví dụ CTE có lời giải
  • 03_governance_tasks.md – hướng dẫn áp dụng vào nghiệp vụ quản trị

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *