View và Các Con Trỏ
Chương 11 View và Các Con TrỏMục đích:Hoàn tất chương này, bạn có thể Định nghĩa view Hiểu được các ưu điểm của View Tạo View Sửa đổi View Xoá view Định nghĩa con trỏ và quá trình tạo con trỏ Hiểu rõ View chỉ mục và View phân tán Nắm vững quá trình thực thi con trỏ Nhận về dữ liệu từ con trỏ theo hàngGiới thiệuTrong chương trước, chúng ta đã được học về các chỉ mục. Chúng ta cũng đã hiểu rõ về các kiểu chỉ mục cùng với các đặc trưng hoàn chỉnh và duy nhất. Chúng ta cũng đã có những kiến thức về các tác vụ như xem, xoá các chỉ mục.Các câu truy vấn được sử dụng để truy xuất dữ liệu từ một bảng. Chúng được thực hiện trực tiếp trên dữ liệu thực lưu trữ trong bảng. Thay vì việc truy vấn và xử lý dữ liệu trực tiếp trong các bảng, SQL Server hỗ trợ các bảng ảo để biểu diễn các dữ liệu hiện có theo một cách mới. Các bảng ảo hỗ trợ các chức năng tương tự như các bảng vật lý. Dữ liệu có thể được đọc, thêm mới và sửa đổi trong các bảng giả lập. Các bảng như vậy được gọi là View.Trong cơ sở dữ liệu quan hệ, các tác vụ được thực hiện trên tập hợp các hàng của bảng, trả về bởi lệnh SELECT. Một số ứng dụng như các ứng dụng tương tác và trực tuyến không thể làm việc hiệu quả với toàn bộ tập hợp dữ liệu trả về. Những ứng dụng này cần một kỹ thuật để xử lý dữ liệu trên một hàng hoặc một khối lượng nhỏ các hàng tại một thời điểm. Con trỏ là sự mở rộng của tập hợp kết quả trả về mà cung cấp kỹ thuật này. Trong chương này, chúng ta sẽ nghiên cứu chi tiết về view và các con trỏ.11.1 ViewView là một cách thức để xem các dữ liệu từ một hay nhiều bảng trong cơ sở dữ liệu. View là một bảng ảo, bảng ảo được tạo ra như một tập con của các cột hay các hàng từ một hay nhiều bảng khác nhau. Đồng thời, nó cũng có thể bao gồm tất cả các hàng và các cột . Tuy nhiên, một view không tồn tại như một tập hợp của các giá trị dữ liệu lưu trữ trong cơ sở dữ liệu. Các dòng và cột đến từ các bảng tham chiếu trong chuỗi truy vấn. Dữ liệu được hiển thị trực tiếp từ bảng ngay tại thời gian thực thi.Một view có tác dụng như một bộ lọc dữ liệu trên các bảng có địa chỉ trong các truy vấn. Các truy vấn này khai báo một view có thể dựa trên một hay nhiều bảng, hay từ những view khác, từ cơ sở dữ liệu hiện tại hay cơ sở dữ liệu khác.Hình 11.1 mô tả một view đã được tạo ra như thế nào. Xem xét các bảng, bảng A và bảng B và một view được tạo ra từ 2 bảng trên. Tất cả các cột hoặc các cột đã được chọn từ các bảng trên 144 Thiết kế cơ sở dữ liệu và thực hành với SQL Server đều có thể được gộp trong view. Hình 11.1 chỉ ra một view được tạo ra với cột A và B từ bảng A và cột B1,C1,D1 từ bảng BA B C A B B1 C1 D1Figure 11.1: View View thường được sử dụng để: Lọc các dòng từ bảng Bảo vệ dữ liệu nhạy cảm khỏi những người dùng không được phép Làm giảm sự phức tạp của cơ sở dữ liệu Tách các cơ sở dữ liệu khác nhau ở dạng vật lý vào một cơ sở dữ liệu đơn nhất ở dạng logic. 11.1.1 Ưu điểm của View Việc sử dụng view mang lại cho người sử dụng và các nhà phát triển một số thuận lợi sau: Thuận lợi của View đối với người sử dụng cuối• Dễ dàng để hiểu được kết quảTrong khi tạo ra những view, tên cột có thể được thay đổi sao cho có nghĩa hơn, vì vậy nó làm cho người sử dụng có thể dễ dàng hiểu được cột này biểu diễn cái gì. Việc thay đổi tên cột trong view không tác động đến tên cột trong bảng mà view tham chiếu đến.• Dễ dàng để thu được dữ liệu mong muốnCó nhiều người biết rất ít về SQL, các câu lệnh SQL trở nên khó khăn đối với họ khi họ muốn tạo ra các truy vấn phức tạp từ nhiều bảng khác nhau. Bởi vậy, view được tạo ra cho việc truy cập dữ liệu từ nhiều bảng khác nhau, nó giúp người sử dụng dễ dàng trong việc truy cập sở dữ liệu. Thuận lợi của View đối với những nhà phát triển• Dễ dàng hạn chế việc mất mát dữ liệuMột nhà phát triển có thể muốn giấu những thông tin trong một số cột hoặc một số dòng nào đó. Bằng việc sử dụng view, người sử dụng có thể được cách truy cập linh hoạt tới những dữ liệu mà họ muốn, trong khi vẫn duy trì được bảo mật đối với những dữ liệu khác trong cùng một bảng hoặc trong các bảng khác nhau. Để làm việc này, View được 145 Thiết kế cơ sở dữ liệu và thực hành với SQL Server A1 B1 C1 D1View - Table A & Table BTable ATable B thiết lập ngăn chặn việc truy cập các cột không được phép, các cột này sẽ bị ẩn đối với người sử dụng.• Dễ dàng bảo trì các ứng dụng Chúng ta dễ dàng soát lỗi của View hơn là soát lỗi của nhũng truy vấn. Dò tìm lỗi trong từng bước của mỗi một quá trình trong một View là dễ dàng bởi tất cả các bước đều là một phần của View. 11.1.2 Tạo mới View Câu lệnh T-SQL CREATE VIEW được sử dụng để tạo ra một view. Cú pháp là:CREATE VIEW <Ten_View> AS <Câu lệnh Select>Ví dụ , để tạo một View trong cơ sở dữ liệu pups nó bao gồm chi tiết về những nhân viên cho nhà xuất bản “ New Moon Books”, câu lệnh như sau: CREATE VIEW NewMoon_employee AS Select emp_id, fname, minit, lname, hire_date FROM employee e, publishers p WHERE e.pub_id =p.pub_id AND pub_name=’New Moon Books’Một View đã được tạo ra, một câu lệnh SELECT có thể được thực thi để xem các hàng của View. SELECT * FROM NewMoon_employeeHình 11.2 hiển thị nội dung của View.View và con trỏ 146 Figure 11.2: Hiển thị nội dung của một View11.1.3 Các nguyên tắc khi tạo ViewCó một số các nguyên tắc phải tuân theo trong khi tạo View View chỉ có thể được tạo trong cơ sở dữ liệu hiện tại. Tên một View tương tự như tên một bảng bởi vì nó phải dễ dàng để nhớ và có sự liên kết (không có khoảng trắng giữa các kí tự). Nó phải theo các quy ước đặt tên để đảm bảo sự đồng nhất. Một View có thể được xây dựng dựa vào các View khác. SQL SERVER cho phép các View được lồng vào nhau tới 32 mức (cấp). Mỗi một View có thể bao gồm tới 1024 cột từ một hay nhiều bảng hoặc từ nhiều View khác. Những giá trị mặc định, những quy tắc và bẫy lỗi không thể được liên kết với View. View không thể đánh chỉ mục. Các bảng tạm thời không thể tham gia vào View Khai báo View được lưu giữ lại ngay cả khi các bảng liên quan bị loại bỏ. Câu truy vấn để khai báo View không thể bao gồm các mệnh đề ORDER BY, COMPUTE, COMPUTE BY hoặc từ khóa INTO.11.1.4 Sửa đổi dữ liệu thông qua ViewTương tự như trong các bảng, các câu lệnh INSERT/UPDATE/DELETE có thể được đưa vào trong View. Kết quả thay đổi ở View chính là sự thay đổi dữ liệu trong bảng cơ sở. Một View có thể được sử dụng để thay đổi dữ liệu trong bảng với điều kiện: View phải bao gồm ít nhất một bảng nằm trong mệnh đề FROM của phần khai báo View, điều đó có nghĩa là View không thể chỉ có một biểu thức. Không có tất cả các hàm sau (AVG, COUNT, SUM, MIN, MAX, GROUPING) hoặc GROUP BY, UNION, DISTINCT hoặc mệnh đề TOP trong danh sách được chọn. Tuy nhiên, tất cả các hàm đó có thể được sử dụng trong chuỗi truy vấn con được khai báo trong mệnh đề FROM với điều kiện là các giá trị nhận được, được sinh ra từ nhóm các hàm trên không bị thay đổi. View không có các cột nhận được từ trong danh sách chọn. Các cột nhận được này là kết quả của tập hợp các cột chuẩn bởi bất cứ thứ gì hơn là một cột biểu thức đơn giản, ví dụ như việc sử dụng các hàm, hay toán tử thêm hoặc xóa.Câu lệnh INSERT, UPDATE và DELETE bắt buộc phải theo một tiêu chuẩn nhất định trước khi chúng tham chiếu đến View có thể cập nhật. Câu lệnh UPDATE và INSERT có thể tham chiếu đến View (có thể cập nhật) chỉ khi nếu chúng thay đổi dữ liệu chỉ trong một bảng của các bảng cơ sở của View. Câu lệnh DELETE có thể tham chiếu đến View cập nhật được chỉ khi nếu View đó bao gồm chính xác một bảng trong mệnh đề FROM.11.1.5 Xóa ViewSau khi một View được sử dụng xong, nó có thể bị xóa để giải phóng vùng nhớ. Việc xóa một View không tác động đến các bảng cơ sở mà View tham chiếu đến. Câu lệnh xóa một View là: DROP VIEW Ten_viewTen_view chính là tên của một view đã có trong cơ sở dữ liệu. Ví dụ, câu lệnh sau sẽ xóa View có tên NewMoon_employee 147 Thiết kế cơ sở dữ liệu và thực hành với SQL Server DROP VIEW NewMoon_employee 11.2 View chỉ mụcView chỉ mục đã được giới thiệu trong SQL Server 2000 và chỉ được hỗ trợ trong phiên bản Enterprise Edition (Phiên bản Standard và Personal cho phép bạn tạo chỉ mục trên một View nhưng trình tối ưu hoá truy vấn sẽ không sử dụng view chỉ mục ở trong phần truy vấn). Đến tận gần đây khái niệm của việc đánh chỉ mục một View vẫn còn vô lý, bởi việc đánh chỉ mục dữ liệu ảo (dữ liệu không tồn tại) vẫn còn mơ hồ không rõ ràng. Một View là một bảng ảo, nó không có bất kì dữ liệu thật nào của chính nó. Nó cho phép bạn truy cập đến dữ liệu hiện thời ở trong những bảng cơ sở. Những View chỉ mục tăng cường khả năng thực hiện các truy vấn phức tạp một cách mạnh mẽ. SQL Server 2000 có View chỉ mục, tương tự như Materialized View của Oracle. Những lợi thế của kiểu view này là nó cung cấp một cơ chế tìm kiếm rất nhanh chóng để lấy ra thông tin của một view một cách liên tục. Chỉ mục đầu tiên được tạo ra trong một View chỉ mục phải là một chỉ mục duy nhất loại clustered. Mỗi khi chỉ mục đầu tiên được tạo ra, kéo theo một số chỉ mục loại non-clustered có thể được tạo ra. Tốt nhất chúng ta nên xây dưng View chỉ mục trên dữ liệu không thường xuyên cập nhật, bởi vì việc duy trì view có chi phí cao hơn việc duy trì một chỉ mục của bảng. Nếu view chỉ mục được tạo ra trên những dữ liệu cập nhật thường xuyên thì chi phí để duy trì dữ liệu trong view chỉ mục có thể làm giảm những ưu điểm của việc sử dụng view chỉ mục. Bạn có thể cải thiện khả năng thực thi của những kiểu truy vấn dưới đây bằng việc sử dụng View chỉ mục: • Quá trình tập hợp hoặc kết nối rất nhiều hàng.Bạn không thể cải thiện khả năng thực thi của những kiểu truy vấn dưới đây bằng việc sử dụng View chỉ mục: • Các công việc chứa một số lượng lớn các tác vụ cập nhật đối với cơ sở dữ liệu• Những hệ thống OLTP với nhiều tác vụ ghi dữ liệu.• Các câu truy vấn không chứa toán tử tập hợp hoặc kết nối.• Các tập hợp dữ liệu có khoá ở mức yếu tố cao. (Một mức yếu tố cao chỉ ra rằng khoá nắm giữ nhiều giá trị. Trong trường hợp khoá là duy nhất, mỗi khoá đều có một giá trị khác nhau thì mức yếu tố ở giá trị cao nhất có thể). Có một số giới hạn cho việc xây dựng các chỉ mục trên View: Tuỳ chọn SCHEMABINDING phải được sử dụng với view. Tuỳ chọn này kết nối các bảng được xác định trong định nghĩa view. Mỗi khi các đối tượng cần thiết trong một view được giới hạn, không ai có thể thay đổi nó. Để thay đổi những đối tượng như vậy, đầu tiên bạn phải xoá bỏ khung giới hạn của view. SCHEMABINDING không cho phép bất cứ một tác vụ sửa đổi nào đối với các đối tượng bên dưới, do đó tránh được việc view trở thành “mồ côi". Ví dụ, trong trường hợp một bảng mà một view được tạo ra rồi bị xoá bởi một ai đó. Nếu view là Schema Bound, bạn có thể tránh được những điều rắc rối như vậy. View và con trỏ 148 Nếu view tham chiếu đến một chức năng nào đó do người dùng định nghĩa, nó phải sử dụng tuỳ chọn SCHEMABINDING. View có thể chỉ bao gồm các chức năng do người dùng định nghĩa và các bảng tham chiếu và nó không thể tham chiếu đến bất kỳ view nào khác. Các đối tượng được tham chiếu trong view phải trong cùng một cơ sở dữ liệu với view. Các đối tượng được tham chiếu trong view phải sử dụng kiểu tên quy ước gồm hai phần chẳng hạn như as dbo.Employees (dbo là tên người sở hữu và Employees là đối tượng cơ sở dữ liệu), Jones.UDFName (Jones là tên người sở hữu và UDFName là đối tượng cơ sở dữ liệu). Một view có thể chỉ bao gồm các đối tượng được tạo ra bởi người sở hữu view đó. Ví dụ, một view được tạo bởi người sử dụng dbo có thể chứa các đối tượng của một mình dbo. Bạn phải sử dụng tuỳ chọn ARITHABORT khi tạo chỉ mục.Ghi chú: Tuỳ chọn arithabort được dùng để huỷ các truy vấn trong trường hợp tràn bộ đệm hoặc gặp lỗi chia cho 0. Tuỳ chọn này giúp cho việc dừng các thao tác số học trong trường hợp có lỗi. Do đó nó có tên là ARITHABORT.Chúng ta cùng tạo một View chỉ mục sử dụng các bảng Customer, Product, Order và Order_Details từ cơ sở dữ liệu Northwind. CREATE VIEW CustOrdProd_view WITH SCHEMABINDING AS SELECT cust.CompanyName, ord.OrderID, ord.OrderDate, orddet.ProductID, prod.ProductName, orddet.Quantity, orddet.UnitPrice FROM dbo.Customers AS cust INNER JOIN dbo.Orders AS ord ON cust.CustomerID = ord.CustomerID INNER JOIN dbo.[Order Details] AS orddet ON ord.OrderID = orddet.OrderID INNER JOIN dbo.Products AS prod ON orddet.ProductID = prod.ProductID Trong view này, chúng ta phải sử dụng tuỳ chọn SCHEMABINDING và quy ước đặt tên hai phần cho các đối tượng tham chiếu bởi view.Bạn có thể kiểm tra view bằng một câu lệnh SELECT đơn giản: SET STATISTICS IO ONSET STATISTICS TIME ONSELECT * FROM CustOrdProd_viewKết quả thể hiện trên hình 11.3. Tuỳ chọn statistics time được sử dụng để xem số lượng các thao tác đĩa được sinh ra bởi T-SQL. Tuỳ chọn statistics io được sử dụng để hiển thị số mili giây cần thiết để chuyển đổi, dịch và thực hiện mỗi lệnh. 149 Thiết kế cơ sở dữ liệu và thực hành với SQL Server Hình 11.3SQL Server 2000 tạo một lược đồ thực thi trước khi thi hành một câu truy vấn. Lược đồ này mô tả các chỉ mục và đường dẫn, SQL Server sẽ sử dụng để lấy các dữ liệu cần thiết cho truy vấn. Hình 1 hiển thị kết quả của việc nhấn nút trên lược đồ thực thi của câu truy vấn. Hình 11.4 hiển thị chi phí thực hiện lược đồ cho truy vấn này.View và con trỏ 150Shows Estimated Execution Plan Hình 11.4Cú pháp TSQL ở trên đã tạo ra một view mà nó có thể được đánh chỉ mục. Khi chúng ta tạo chỉ mục, chỉ mục đầu tiên được tạo trên view phải vừa là clustered , vừa có tính năng duy nhất. SET ARITHABORT ONCREATE UNIQUE CLUSTERED INDEX Index_CustOrdProdON CustOrdProd_view (CompanyName, OrderID, ProductID)Bạn có thể kiểm tra bằng một lệnh SELECT đơn giản: SELECT * FROM CustOrdProd_viewKết quả của view thể hiện trên hình 11.5. 151 Thiết kế cơ sở dữ liệu và thực hành với SQL Server Hình 11.5Hình 11.6 hiển thị chi phí thực hiện lược đồ cho truy vấn này.View và con trỏ 152 Hình 11.6showplan cho view thông thường và view chỉ mục thể hiện rằng chỉ mục không được sử dụng lúc nào. Tác dụng của một view chỉ mục chỉ rõ ràng trên các bảng mà chứa một số lượng lớn các hàng. Trong các bảng với một số lượng ít các hàng, hiệu suất của một view chỉ mục và view thông thường sẽ gần như tương đương nhau.11.3 View Phân Tán (Distributed Partitioned views)SQL Server 2000 hỗ trợ đặc tính “Distributed Partitioned Views (DPV)” hay tạm dịch là View phân tán. Tính năng này cho phép phân chia va phân tán dữ liệu theo chiều ngang tới nhiều server và cơ sở dữ liệu và làm cho chúng ta cảm thấy vẫn như một cơ sở dữ liệu thống nhât. DPV cũng được giới thiệu trong SQL Server 7.0, với các giới hạn về việc thực hiện các lệnh Select. Việc phân chia view cũng đã có trong SQL Server 7 nhưng SQL Server 2000 cho phép chúng được phân tán thông qua nhiều máy khác nhau. Các bảng đã phân chia được phân tán qua nhiều server. Vì thế, mỗi server cần truy nhập tới mọi server khác. Do đó, bạn cần cài đặt cầu hình tất cả các server như các server liên kết (linked servers). Ví dụ, xét rằng bạn muốn phân chia các bảng Customers và Orders trên ba server được gọi là Server1, Server2 and Server3. Để liên kết các server này, Server1 cầm được liên kết với Server2 và Server3; Server2 cần được liên kết với Server3 và Server1; và Server3 cần được liên kết với 153 Thiết kế cơ sở dữ liệu và thực hành với SQL Server [...]... Hiểu được các ưu điểm của View Tạo View Sửa đổi View Xoá view Định nghĩa con trỏ và quá trình tạo con trỏ Hiểu rõ View chỉ mục và View phân tán Nắm vững quá trình thực thi con trỏ Nhận về dữ liệu từ con trỏ theo hàng Giới thiệu Trong chương trước, chúng ta đã được học về các chỉ mục. Chúng ta cũng đã hiểu rõ về các kiểu chỉ mục cùng với các đặc trưng hoàn chỉnh và duy nhất. Chúng ta cũng... việc sửa đổi dữ liệu trên các bảng cơ sở không ảnh hưởng tới dữ liệu trả về bởi con trỏ, và con trỏ này không cho phép sửa đổi. KEYSET Chỉ ra thứ tự của các hàng trong con trỏ là cố định khi con trỏ được mở. DYNAMIC Định nghĩa một con trỏ mà ánh xạ toàn bộ thay đổi đối với các hàng trong tập kết quả mỗi khi con trỏ duyệt. FAST_FORWARD Chỉ định con trỏ là FORWARD_ONLY và READ_ONLY. FAST_FORWARD... nhất. Một View có thể được xây dựng dựa vào các View khác. SQL SERVER cho phép các View được lồng vào nhau tới 32 mức (cấp). Mỗi một View có thể bao gồm tới 1024 cột từ một hay nhiều bảng hoặc từ nhiều View khác. Những giá trị mặc định, những quy tắc và bẫy lỗi không thể được liên kết với View. View không thể đánh chỉ mục. Các bảng tạm thời không thể tham gia vào View Khai báo View được lưu... UPDATE, hoặc DELETE thì các view tương ứng có thể được cập nhật thơng qua các lệnh đó. • View phân chia: Bạn có thể cập nhật một &apos ;view phân chia' với các hạn chế nhất định. Nếu bạn có một view, khơng phải là một view phân chia và khơng có bẫy lỗi INSTEAD OF, thì nó có thể được cập nhật chỉ khi các điều kiện dưới đây được thoả mãn: View và con trỏ 158 Nếu view tham chiếu đến một chức... khối lượng nhỏ các hàng tại một thời điểm. Con trỏ là sự mở rộng của tập hợp kết quả trả về mà cung cấp kỹ thuật này. Trong chương này, chúng ta sẽ nghiên cứu chi tiết về view và các con trỏ. 11.1 View View là một cách thức để xem các dữ liệu từ một hay nhiều bảng trong cơ sở dữ liệu. View là một bảng ảo, bảng ảo được tạo ra như một tập con của các cột hay các hàng từ một hay nhiều bảng khác nhau.... thành viên. 11.3.3 Các quy tắc cho View phân tán 157 Thiết kế cơ sở dữ liệu và thực hành với SQL Server Hình 11.6 showplan cho view thơng thường và view chỉ mục thể hiện rằng chỉ mục không được sử dụng lúc nào. Tác dụng của một view chỉ mục chỉ rõ ràng trên các bảng mà chứa một số lượng lớn các hàng. Trong các bảng với một số lượng ít các hàng, hiệu suất của một view chỉ mục và view thông thường... Customers và Orders trên ba server được gọi là Server1, Server2 and Server3. Để liên kết các server này, Server1 cầm được liên kết với Server2 và Server3; Server2 cần được liên kết với Server3 và Server1; và Server3 cần được liên kết với 153 Thiết kế cơ sở dữ liệu và thực hành với SQL Server Chương 11 View và Các Con Trỏ Mục đích: Hồn tất chương này, bạn có thể Định nghĩa view Hiểu được các ưu... CREATE VIEW NoTable AS SELECT GETDATE() AS CurrentDate, @@LANGUAGE AS CurrentLanguage Các lệnh INSERT, UPDATE, và DELETE cũng phải thoả mãn các điều kiện nhất đinh trước khi chúng tham chiếu đến view. Các lệnh UPDATE và INSERT tham chiếu đến các view chỉ khi chúng sửa đổi dữ liệu trong các bảng cơ sở được bao gồm trong mệnh đề FROM của view. Lệnh DELETE tham chiếu đến một view chỉ khi view bao... Con trỏ Một con trỏ là một đối tượng cơ sở dữ liệu được sử dụng bởi ứng dụng để thao tác với các hàng dữ liệu thay vì các tập hợp dữ liệu. Sử dụng con trỏ, nhiều tácvụ có thể được thực hiện theo từng hàng trên tập kết quả mà có thể cần hoặc ko cần sự có mặt của bảng gốc. Hay nói một cách khác, con trỏ, về mặt khái niệm, trả về một tập hợp kết quả dựa trên các bảng bên trong cơ sở dữ liệu. Với con. .. gồm tất cả các hàng và các cột . Tuy nhiên, một view không tồn tại như một tập hợp của các giá trị dữ liệu lưu trữ trong cơ sở dữ liệu. Các dòng và cột đến từ các bảng tham chiếu trong chuỗi truy vấn. Dữ liệu được hiển thị trực tiếp từ bảng ngay tại thời gian thực thi. Một view có tác dụng như một bộ lọc dữ liệu trên các bảng có địa chỉ trong các truy vấn. Các truy vấn này khai báo một view có thể . Định nghĩa con trỏ và quá trình tạo con trỏ Hiểu rõ View chỉ mục và View phân tán Nắm vững quá trình thực thi con trỏ Nhận về dữ liệu từ con trỏ theo. Chương 11 View và Các Con TrỏMục đích:Hoàn tất chương này, bạn có thể Định nghĩa view Hiểu được các ưu điểm của View Tạo View Sửa đổi View Xoá view Định