Có nên sử dụng View trong MySQL không?
Bài này sẽ tư vấn có nên sử dụng View trong MySQL không, View rất hay nhưng trong quá trình sử dụng làm Website thì mình rất ít khi áp dụng, bởi các dự án chưa thực sự cần thiết.
Nhưng nếu bạn là một DBA thì chắc chắn phải nghĩ đến việc sử dụng nó nhé, bởi View sẽ giúp bạn tối ưu hóa việc xử lý truy vấn trong MySQL.
1. Đặt vấn đề về View trong MySQL
Hãy bắt đầu bằng một ví dụ, điều này sẽ giúp bạn hiểu rõ vấn đề hơn.
Giả sử ta có 2 table gồm:
Bài viết này được đăng tại [free tuts .net]
- payments: Lưu lịch sử thanh toán của khách hàng
- customers: Lưu danh sách khách hàng
Cấu trúc như hình sau:
Bây giờ hãy viết câu truy vấn lấy ra tất cả khách hàng và thông tin lịch sử thanh toán của khách hàng đó. Rất đơn giản, ta chỉ việc sử dụng lệnh Inner Join hai bảng.
SELECT customerName, checkNumber, paymentDate, amount FROM customers INNER JOIN payments USING (customerNumber);
Giả sử kết quả như sau:
Câu truy vấn đã trả về kết quả thành công. Nhưng vào một ngày kia ta cần lấy lại thông tin này thì bạn sẽ phải viết lại câu truy vấn này một lần nữa. Câu hỏi đặt ra là có giải pháp nào tối ưu cho những lần sau không?
Có một cách truyền thống đó là bạn lưu dữ liệu vào file word hoặc txt, thậm chí là file sql. Tuy nhiên như vậy thì kích thước file quá lớn, và ta rất khó để sàn lọc dữ liệu.
Cách tốt hơn đó là sử dụng View trong MySQL, đây là một table ảo nhưng có đầy đủ tính năng của một table thật. Hãy xem cú pháp tạo View ho trường hợp trên như sau:
CREATE VIEW customerPayments AS SELECT customerName, checkNumber, paymentDate, amount FROM customers INNER JOIN payments USING (customerNumber);
Sau khi chạy câu truy vấn này thì trên hệ thống database xuất hiện thêm một View có tên là customerPayments. Đây là một table ảo nên bạn co thể viết câu truy vấn trên này một cách bình thường.
Vì vậy ở những lần sau nếu bạn muốn lấy dữ liệu thì chỉ việc chạy câu SQL này.
SELECT * FROM customerPayments;
Thật tuyệt vời phải không các bạn! Những lần sau này truy vấn sẽ rất đơn giản.
Vì một View sẽ được lưu trữ trên ổ đĩa vật lý nên thực chất nó cũng là một table, vì vậy bạn có thể thực hiện truy vấn với câu Select. Tuy nhiên với lệnh Delete hoặc Update thì không thực hiện trên View được.
Áp dụng phương pháp này ta có thể tạo ra một View chứa dữ liệu từ nhiều bảng khác nhau. Hãy xem hình minh họa dưới đây:
Trong hình này ta tạo ra một view chứa liệu của cả 3 bảng bằng cách sử dụng lệnh Join để kết hợp đồng bộ dữ liệu giữa chúng.
Một ví dụ khác: Giả sử ta cần tạo ra một View chứa tất cả các ngày trong tuần thì viết như sau:
CREATE VIEW daysofweek (day) AS SELECT 'Mon' UNION SELECT 'Tue' UNION SELECT 'Web' UNION SELECT 'Thu' UNION SELECT 'Fri' UNION SELECT 'Sat' UNION SELECT 'Sun';
Sau đó muốn lấy dữ liệu trong tuần thì chạy câu SQL sau:
SELECT * FROM daysofweek;
Kết quả:
2. Tại sao nên sử dụng View trong MySQL?
Nếu sử dụng View trong quản lý database ta sẽ có những ưu thế sau.
Đơn giản hóa truy vấn phức tạp
View giúp đơn giản hóa những câu truy vấn phức tạp cho những lần sử dụng sau, bở khi dữ liệu ở bảng chính thay đổi thì trong View cũng sẽ được thay đổi theo nên vấn đề đồng bộ dữ liệu rất chính xác.
Làm giảm độ phức tạp tính toán
Giả sử bạn phải viết cùng một công thức cho mọi truy vấn. Hoặc bạn có một truy vấn có logic phức tạp. Để làm cho logic này nhất quán trên các truy vấn thì có thể sử dụng View để lưu trữ phép tính.
Phân quyền và bảo mật
Với tính chất chỉ Xem chứ không được thay đổi dữ liệu nên khi muốn cho ai đó xem thì bạn có thể cho họ xem View thay vì xem Table.
Ngoài ra nó là một table nên bạn có thể giới hạn phân quyền cho table một cách dễ dàng.
Giả sử thông tin thanh toán của khách hàng thì chỉ có bộ phận kế toán thấy mà thôi, vì vậy ta có thể tạo ra một view chứa thông tin này và cấp quyền cho bộ phận kết toán.
Như vậy là bạn đã trả lời được câu hỏi có nên sử dụng View trong MySQL không rồi phải không nào? Hy vọng qua bài này bạn đã biết cách tạo View và lý giải có nên sử dụng View trong MySQL không.