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 đã 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 11 View Các Con Trỏ Mục đích: Hồn tất chương này, bạn Định nghĩa view Hiểu ưu điểm View Tạo View Sửa đổi View Xố view Định nghĩa trỏ q trình tạo trỏ Hiểu rõ View mục View phân tán Nắm vững trình thực thi trỏ Nhận liệu từ trỏ theo hàng Giới thiệu Trong chương trước, học mục Chúng ta hiểu rõ kiểu mục với đặc trưng hoàn chỉnh Chúng ta có kiến thức tác vụ xem, xoá mục Các câu truy vấn sử dụng để truy xuất liệu từ bảng Chúng thực trực tiếp liệu thực lưu trữ bảng Thay việc truy vấn xử lý liệu trực tiếp bảng, SQL Server hỗ trợ bảng ảo để biểu diễn liệu có theo cách Các bảng ảo hỗ trợ chức tương tự bảng vật lý Dữ liệu đọc, thêm sửa đổi bảng giả lập Các bảng gọi View Trong sở liệu quan hệ, tác vụ thực tập hợp hàng bảng, trả lệnh SELECT Một số ứng dụng ứng dụng tương tác trực tuyến khơng thể làm việc hiệu với tồn tập hợp liệu trả Những ứng dụng cần kỹ thuật để xử lý liệu hàng khối lượng nhỏ hàng thời điểm Con trỏ mở rộng tập hợp kết trả mà cung cấp kỹ thuật Trong chương này, nghiên cứu chi tiết view trỏ 11.1 View View cách thức để xem liệu từ hay nhiều bảng sở liệu View bảng ảo, bảng ảo tạo tập cột hay hàng từ hay nhiều bảng khác Đồng thời, bao gồm tất hàng cột Tuy nhiên, view không tồn tập hợp giá trị liệu lưu trữ sở liệu Các dòng cột đến từ bảng tham chiếu chuỗi truy vấn Dữ liệu hiển thị trực tiếp từ bảng thời gian thực thi Một view có tác dụng lọc liệu bảng có địa truy vấn Các truy vấn khai báo view dựa hay nhiều bảng, hay từ view khác, từ sở liệu hay sở liệu khác Hình 11.1 mơ tả view tạo Xem xét bảng, bảng A bảng B view tạo từ bảng Tất cột cột chọn từ bảng 144 Thiết kế sở liệu thực hành với SQL Server gộp view Hình 11.1 view tạo với cột A B từ bảng A cột B1,C1,D1 từ bảng B A B C A B B1 C1 D1 Tabl eA Tabl eB View - Table A & Table B A1 B1 C1 D1 Figure 11.1: View View thường sử dụng để: Lọc dòng từ bảng Bảo vệ liệu nhạy cảm khỏi người dùng không phép Làm giảm phức tạp sở liệu Tách sở liệu khác dạng vật lý vào sở liệu đơn dạng logic 11.1.1 Ưu điểm View Việc sử dụng view mang lại cho người sử dụng nhà phát triển số thuận lợi sau: Thuận lợi View người sử dụng cuối • • 145 Dễ dàng để hiểu kết Trong tạo view, tên cột thay đổi cho có nghĩa hơn, làm cho người sử dụng dễ dàng hiểu cột biểu diễn Việc thay đổi tên cột view khơng tác động đến tên cột bảng mà view tham chiếu đến Dễ dàng để thu liệu mong muốn Có nhiều người biết SQL, câu lệnh SQL trở nên khó khăn họ họ muốn tạo truy vấn phức tạp từ nhiều bảng khác Bởi vậy, view tạo Thiết kế sở liệu thực hành với SQL Server cho việc truy cập liệu từ nhiều bảng khác nhau, giúp người sử dụng dễ dàng việc truy cập sở liệu Thuận lợi View nhà phát triển • Dễ dàng hạn chế việc mát liệu Một nhà phát triển muốn giấu thơng tin số cột số dịng Bằng việc sử dụng view, người sử dụng cách truy cập linh hoạt tới liệu mà họ muốn, trì bảo mật liệu khác bảng bảng khác Để làm việc này, View thiết lập ngăn chặn việc truy cập cột không phép, cột bị ẩn người sử dụng • Dễ dàng bảo trì ứng dụng Chúng ta dễ dàng soát lỗi View sốt lỗi nhũng truy vấn Dị tìm lỗi bước trình View dễ dàng tất bước phần View 11.1.2 Tạo View Câu lệnh T-SQL CREATE VIEW sử dụng để tạo view Cú pháp là: CREATE VIEW AS Ví dụ , để tạo View sở liệu pups bao gồm chi tiết nhân viên cho nhà xuất “ New Moon Books”, câu lệ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 tạo ra, câu lệnh SELECT thực thi để xem hàng View SELECT * FROM NewMoon_employee Hình 11.2 hiển thị nội dung View View trỏ 146 Figure 11.2: Hiển thị nội dung View 11.1.3 Các nguyên tắc tạo View Có số nguyên tắc phải tuân theo tạo View View tạo sở liệu Tên View tương tự tên bảng phải dễ dàng để nhớ có liên kết (khơng có khoảng trắng kí tự) Nó phải theo quy ước đặt tên để đảm bảo đồng Một View xây dựng dựa vào View khác SQL SERVER cho phép View lồng vào tới 32 mức (cấp) Mỗi View bao gồm tới 1024 cột từ hay nhiều bảng từ nhiều View khác Những giá trị mặc định, quy tắc bẫy lỗi liên kết với View View đánh mục Các bảng tạm thời tham gia vào View Khai báo View lưu giữ lại bảng liên quan bị loại bỏ Câu truy vấn để khai báo View bao gồm mệnh đề ORDER BY, COMPUTE, COMPUTE BY từ khóa INTO 11.1.4 Sửa đổi liệu thơng qua View Tương tự bảng, câu lệnh INSERT/UPDATE/DELETE đưa vào View Kết thay đổi View thay đổi liệu bảng sở Một View sử dụng để thay đổi liệu bảng với điều kiện: View phải bao gồm bảng nằm mệnh đề FROM phần khai báo View, điều có nghĩa View khơng thể có biểu thức Khơng có tất hàm sau (AVG, COUNT, SUM, MIN, MAX, GROUPING) GROUP BY, UNION, DISTINCT mệnh đề TOP danh sách chọn Tuy nhiên, tất hàm sử dụng chuỗi truy vấn khai báo 147 Thiết kế sở liệu thực hành với SQL Server mệnh đề FROM với điều kiện giá trị nhận được, sinh từ nhóm hàm khơng bị thay đổi View khơng có cột nhận từ danh sách chọn Các cột nhận kết tập hợp cột chuẩn thứ cột biểu thức đơn giản, ví dụ việc sử dụng hàm, hay toán tử thêm xóa Câu lệnh INSERT, UPDATE DELETE bắt buộc phải theo tiêu chuẩn định trước chúng tham chiếu đến View cập nhật Câu lệnh UPDATE INSERT tham chiếu đến View (có thể cập nhật) chúng thay đổi liệu bảng bảng sở View Câu lệnh DELETE tham chiếu đến View cập nhật View bao gồm xác bảng mệnh đề FROM 11.1.5 Xóa View Sau View sử dụng xong, bị xóa để giải phóng vùng nhớ Việc xóa View khơng tác động đến bảng sở mà View tham chiếu đến Câu lệnh xóa View là: DROP VIEW Ten_view Ten_view tên view có sở liệu Ví dụ, câu lệnh sau xóa View có tên NewMoon_employee DROP VIEW NewMoon_employee 11.2 View mục View mục giới thiệu SQL Server 2000 hỗ trợ phiên Enterprise Edition (Phiên Standard Personal cho phép bạn tạo mục View trình tối ưu hố truy vấn không sử dụng view mục phần truy vấn) Đến tận gần khái niệm việc đánh mục View cịn vơ lý, việc đánh mục liệu ảo (dữ liệu khơng tồn tại) cịn mơ hồ khơng rõ ràng Một View bảng ảo, khơng có liệu thật Nó cho phép bạn truy cập đến liệu thời bảng sở Những View mục tăng cường khả thực truy vấn phức tạp cách mạnh mẽ SQL Server 2000 có View mục, tương tự Materialized View Oracle Những lợi kiểu view cung cấp chế tìm kiếm nhanh chóng để lấy thông tin view cách liên tục Chỉ mục tạo View mục phải mục loại clustered Mỗi mục tạo ra, kéo theo số mục loại non-clustered tạo Tốt nên xây dưng View mục liệu không thường xuyên cập nhật, việc trì view có chi phí cao việc trì mục bảng Nếu view mục tạo liệu cập nhật thường xun chi phí để trì liệu view mục làm giảm ưu điểm việc sử dụng view mục Bạn cải thiện khả thực thi kiểu truy vấn việc sử dụng View mục: • Q trình tập hợp kết nối nhiều hàng View trỏ 148 Bạn cải thiện khả thực thi kiểu truy vấn việc sử dụng View mục: • • • • Các cơng việc chứa số lượng lớn tác vụ cập nhật sở liệu Những hệ thống OLTP với nhiều tác vụ ghi liệu Các câu truy vấn khơng chứa tốn tử tập hợp kết nối Các tập hợp liệu có khố mức yếu tố cao (Một mức yếu tố cao khoá nắm giữ nhiều giá trị Trong trường hợp khoá nhất, khố có giá trị khác mức yếu tố giá trị cao có thể) Có số giới hạn cho việc xây dựng mục View: Tuỳ chọn SCHEMABINDING phải sử dụng với view Tuỳ chọn kết nối bảng xác định định nghĩa view Mỗi đối tượng cần thiết view giới hạn, không thay đổi Để thay đổi đối tượng vậy, bạn phải xoá bỏ khung giới hạn view SCHEMABINDING không cho phép tác vụ sửa đổi đối tượng bên dưới, tránh việc view trở thành “mồ cơi" Ví dụ, trường hợp bảng mà view tạo bị xoá Nếu view Schema Bound, bạn tránh điều rắc rối Nếu view tham chiếu đến chức người dùng định nghĩa, phải sử dụng tuỳ chọn SCHEMABINDING View bao gồm chức người dùng định nghĩa bảng tham chiếu khơng thể tham chiếu đến view khác Các đối tượng tham chiếu view phải sở liệu với view Các đối tượng tham chiếu view phải sử dụng kiểu tên quy ước gồm hai phần chẳng hạn as dbo.Employees (dbo tên người sở hữu Employees đối tượng sở liệu), Jones.UDFName (Jones tên người sở hữu UDFName đối tượng sở liệu) Một view bao gồm đối tượng tạo người sở hữu view Ví dụ, view tạo người sử dụng dbo chứa đối tượng dbo Bạn phải sử dụng tuỳ chọn ARITHABORT tạo mục Ghi chú: Tuỳ chọn arithabort dùng để huỷ truy vấn trường hợp tràn đệm gặp lỗi chia cho Tuỳ chọn giúp cho việc dừng thao tác số học trường hợp có lỗi Do có tên ARITHABORT Chúng ta tạo View mục sử dụng bảng Customer, Product, Order Order_Details từ sở 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 149 Thiết kế sở liệu thực hành với SQL Server ON orddet.ProductID = prod.ProductID Trong view này, phải sử dụng tuỳ chọn SCHEMABINDING quy ước đặt tên hai phần cho đối tượng tham chiếu view Bạn kiểm tra view câu lệnh SELECT đơn giản: SET STATISTICS IO ON SET STATISTICS TIME ON SELECT * FROM CustOrdProd_view Kết thể hình 11.3 Tuỳ chọn statistics time sử dụng để xem số lượng thao tác đĩa sinh T-SQL Tuỳ chọn statistics io sử dụng để hiển thị số mili giây cần thiết để chuyển đổi, dịch thực lệnh Shows Estimated Execution Plan Hình 11.3 SQL Server 2000 tạo lược đồ thực thi trước thi hành câu truy vấn Lược đồ mô tả mục đường dẫn, SQL Server sử dụng để lấy liệu cần thiết cho truy vấn Hình hiển thị kết việc nhấn nút lược đồ thực thi câu truy vấn Hình 11.4 hiển thị chi phí thực lược đồ cho truy vấn View trỏ 150 Hình 11.4 Cú pháp TSQL tạo view mà đánh mục Khi tạo mục, mục tạo view phải vừa clustered , vừa có tính SET ARITHABORT ON CREATE UNIQUE CLUSTERED INDEX Index_CustOrdProd ON CustOrdProd_view (CompanyName, OrderID, ProductID) Bạn kiểm tra lệnh SELECT đơn giản: SELECT * FROM CustOrdProd_view Kết view thể hình 11.5 151 Thiết kế sở liệu thực hành với SQL Server Hình 11.5 Hình 11.6 hiển thị chi phí thực lược đồ cho truy vấn View trỏ 152 Hình 11.6 showplan cho view thơng thường view mục thể mục không sử dụng lúc Tác dụng view mục rõ ràng bảng mà chứa số lượng lớn hàng Trong bảng với số lượng hàng, hiệu suất view mục view thông thường gần tương đương 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 View phân tán Tính cho phép phân chia va phân tán liệu theo chiều ngang tới nhiều server sở liệu làm cho cảm thấy sở liệu thống nhât DPV giới thiệu SQL Server 7.0, với giới hạn việc thực lệnh Select Việc phân chia view có SQL Server SQL Server 2000 cho phép chúng phân tán thông qua nhiều máy khác Các bảng phân chia phân tán qua nhiều server Vì thế, server cần truy nhập tới server khác Do đó, bạn cần cài đặt cầu hình tất server server liên kết (linked servers) Ví dụ, xét bạn muốn phân chia bảng Customers Orders ba server gọi Server1, Server2 and Server3 Để liên kết server này, Server1 cầm liên kết với Server2 Server3; Server2 cần liên kết với Server3 Server1; Server3 cần liên kết với 153 Thiết kế sở liệu thực hành với SQL Server Server1 Server2 Trong SQL Server 2000 bạn thực tác vụ thêm mới, cập nhật view phân tán Với tính này, liệu đặt nút riêng biệt nút biết nút khác sử dụng server liên kết Nó sử dụng chức Dynamic Partition Elimination phép câu truy vấn thực server đặt server khác Các server không lưu trữ liệu cần thiết không truy vấn Trước sử dụng chức bạn nên: Lên kế hoạch phân chia liệu server khác Tạo view phân chia với khố để chia liệu Ví dụ, bạn phải chia liệu cột EmpID lưu trữ ghi nhân viên từ đến 1000 Server A 1001 đến 3000 Server B vv Dữ liệu server có ràng buộc CHECK, giới hạn liệu server, nhân viên Thông báo tới server nút khác server liên kết Server A có liên kết với Server B ngược lại Tạo DPV server mà phản ánh liệu riêng liệu biểu diễn server khác Khi truy vấn thực DPV, trình tối ưu hố thơng qua nút thành viên dựa ràng buộc CHECK nút thành viên để to xác nhận xem bảng yêu cầu duyệt Nếu điều kiện khơng phù hợp, bảng duyệt, ngược lại bị bỏ qua Sau trình này, câu truy vấn gửi lại cho server, từ nófrom where it originated ensuring the optimization of all servers The disadvantage of this view lies in the Schema changes You have to manage all the nodes that participated in the view and the view itself in case of any change in the schema 11.3.1 Tạo View phân chia Trong view phân chia, liệu chia theo chiều ngang từ tập hợp bảng thành viên thông qua nhiều server hợp lại bảng đơn SQL Server 2000 phân biệt view cục view phân tán Trong trường hợp view phân chia cục bộ, tất bảng tham chiếu view thân view tồn phiên SQL Server, với trường hợp view phân tán, bảng tham chiếu nằm server xa Bên cạnh đó, SQL Server 2000 phân biệt view phân chia cập nhật view đọc Khái niệm view phân tán minh hoạ hình 11.7 View trỏ 154 MemberTable_3 View1 MemberTable_1 View1 MemberTable_2 View1 Hình 11.7 Bạn phải chia bảng theo chiều ngang trước thực thi view phân chia Trong trình phân chia theo chiều ngang, bảng gốc thay số bảng thành viên có số cột bảng gốc, cột có thuộc tính kích thước, kiểu liệu Tất bảng thành viên view phân tán phải đặt server thành viên riêng biệt Bạn đặt trùng tên cho sở liệu thành viên server thành viên Ví dụ, Server1.TempDatabase, Server2 TempDatabase, Server3 TempDatabase Trong chia bảng, bạn phải thiết kế bảng thành viên cho bảng chứa phần liệu theo chiều ngang bảng gốc dựa vào khoảng giá trị khoá Khoảng giá trị bảng thành viên quy định ràng buộc CHECK cột phân chia Các giá trị khoảng khơng thể chồng chéo Ví dụ, bảng khơng nên có một khoảng giá trị từ đến 1000, bảng khác với khoảng từ 500 đến 3000, điều tạo lẫn lộn việc định bảng chứa giá trị từ 500 đến 1000 Ví dụ, bạn chia bảng TEMP thành ba bảng Ràng buộc CHECK cho bảng là: Tạo bảng Server1: CREATE TABLE TEMP_1 (ID_no INTEGER PRIMARY KEY CHECK (ID_no BETWEEN AND 500), - ) Tạo bảng Server2: CREATE TABLE TEMP_2 (ID_no INTEGER PRIMARY KEY CHECK (ID_no BETWEEN 500 AND 1000), - ) Tạo bảng Server3: 155 Thiết kế sở liệu thực hành với SQL Server CREATE TABLE TEMP_3 (ID_no INTEGER PRIMARY KEY CHECK (ID_no BETWEEN 1000 AND 2000), - ) Mỗi bảng thành viên tạo, bạn phải định nghĩa view phân tán server thành viên Mỗi view server khác nên để trùng tên phép câu truy vấn tham chiếu tới view phân tán, thực hiên bất ký server thành viên Thực tế, server có bảng thành viên view phân tán hệ thống thực thi phiên bảng gốc server thành viên Vùng lưu trữ liệu suốt ứng dụng Để xây dựng view phân tán: • Bạn phải thêm vào server thành viên định nghĩa server liên kết để chúng thực truy vấn phân tán server thành viên khác Bằng cách đó, view phân tán truy nhập liệu server khác • Bạn phải thiết lập tuỳ chọn lazy schema validation, sử dụng sp_serveroption, cho định nghĩa server liên kết tham chiếu view phân tán • Bạn phải tạo view phân tán server thành viên Chúng ta tạo view phân tán: CREATE VIEW SELECT * UNION ALL SELECT * UNION ALL SELECT * Reservation_View AS FROM Server1 TempDatabase.dbo.TEMP_1 FROM Server2 TempDatabase.dbo.TEMP_2 FROM Server3 TempDatabase.dbo.TEMP_3 Trong đó, TempDatabase– Tên sở liệu dbo – Người sở hữu bảng liệu Bạn phải tạo view phân tán Server2 Server3 11.3.2 Các quy tắc cho view phân tán Một view cập nhật tập hợp câu lệnh SELECT mà tập kết độc lập chúng hợp vào câu lệnh sử dụng mệnh đề UNION ALL Mỗi lệnh SELECT độc lập định nghĩa view nên tham chiếu đến bảng sở SQL Server Mỗi bảng thành viên tham chiếu định nghĩa view phải tuân thủ quy tắc sau: • View khơng thể tham chiếu tới bảng thành viên tên nhiều lần định nghĩa View trỏ 156 • • View khơng thể có bảng thành viên mà chúng có mục tạo cột tính tốn Các bảng thành viên phải có tất ràng buộc PRIMARY KEY số giống cột Các cột định nghĩa danh sách lựa chọn câu lệnh SELECT định nghĩa view phải tuân thủ quy tắc sau • • • • Bạn phải bao gồm tất cột bảng thành viên danh sách chọn Bạn sử dụng cột nhiều lần danh sách chọn Thứ tự cột danh sách chọn giống Các cột danh sách chọn lệnh SELECT phải kiểu (bao gồm kiểu liệu, độ xác, phạm vi, thứ tự) Ví dụ, định nghĩa view khơng thực cột câu lệnh SELECT khác kiểu CREATE VIEW Temp AS SELECT CharPrimaryKey, PartNmbr FROM Table_A UNION ALL SELECT IntPrimaryKey, PartNmbr FROM Table_B Việc phân chia cột bảng thành viên phải tuân theo quy tắc sau: • • • • • • Mỗi bảng thành viên có cột chứa giá trị khoá ràng buộc CHECK Phạm vi khoá mà ràng buộc CHECK kiểm tra bảng không chồng lên phạm vi bảng khác Giá trị định cột phân chia phải ánh xạ tới bảng đơn nhât sử dụng toán tử như: =, =, BETWEEN, AND, OR Mỗi câu lệnh SELECT view nên có cột phân chia mà thứ tự với cột lệnh SELECT Ví dụ, cột phân chia cột đầu tiên, cột thứ hai danh sách lựa chọn Các cột phân chia không nên có giá trị NULL Các cột phân chia phải phần khố bảng Các cột tính tốn khơng thể sử dụng cho việc phân chia cột Bạn có ràng buộc cột phân chia SQL Server loại bỏ tất ràng buộc có nhiều Bạn sử dụng lệnh INSERT để thêm liệu vào bảng thành viên thông qua view phân chia Các lệnh INSERT phải tuân thủ quy tắc sau: • • • • • 157 Bạn phải bao gồm tất cột câu lệnh INSERT Những cột có giá trị NULL bảng sở có ràng buộc DEFAULT Bạn khơng thể định từ khoá DEFAULT mệnh đề VALUES câu lệnh INSERT Bạn phải cung cấp giá trị, thoả mãn ràng buộc CHECK định nghĩa cột phân chia, câu lệnh INSERT Bạn chèn ghi vào bảng thành viên chứa cột với thuộc tính đồng Bạn chèn ghi vào bảng thành viên chứa cột kiểu timestamp Thiết kế sở liệu thực hành với SQL Server • Bạn khơng thể chèn ghi vào bảng thành viên tồn self-join tới view bảng thành viên Bạn sử dụng câu lệnh UPDATE để sửa đổi liệu nhiều bảng thành viên thông qua view phân chia Các lệnh UPDATE phải tuân thủ quy tắc sau: • • • • • Bạn cập nhật giá trị cột có thuộc tính đồng Bạn khơng thể cập nhật giá trị PRIMARY KEY cột lưu trữ liệu dạng text, image ntext Bạn cập nhật ghi bảng thành viên chứa liệu dạng timestamp Bạn khơng thể cập nhật ghi bảng thành viên tồn self-join tới view bảng thành viên Bạn định từ khoá DEFAULT mệnh đề SET câu lẹnh UPDATE Bạn sử dụng lệnh DELETE để xoá liệu từ nhiều bảng thành viên thông qua view phân chia Các lệnh DELETE phải tn thủ quy tắc sau • Bạn khơng thể xoá ghi bảng thành viên tồn self-join tới view bảng thành viên 11.3.3 Các quy tắc cho View phân tán View phân tán (ở xa) có thêm số điều kiện quy tắc định nghĩa cho view phân tán Đó là: • • • • Một phiên làm việc phân tán thực để đảm bảo số phần tử cập nhật tất nút Bạn phải thiết lập tuỳ chọn XACT_ABORT giá trị ON Nếu, lệnh T-SQL trả lỗi chạy, toàn phiên làm việc huỷ bỏ trả lại tình trạng ban đầu XACT_ABORT đặt ON Nếu đặt OFF, có lệnh T-SQL bị lỗi trả lại tình trạng ban đầu phiên làm việc tiếp tục Các cột smallmoney smalldatetime bảng xa ánh xạ thành money datetime riêgn biệt cột tương ứng bảng cục phải có kiểu money datetime Bất server liên kết trỏ đến phiên SQL Server (tham khảo loopback linked server) bao gồm view phân tán Bạn có view cập nhật bao gồm bảng phân chia, chúng không tuân theo tất quy tắc, cung cấp bẫy lỗi INSTEAD OF 11.4 Bẫy lỗi INSTEAD OF Một view thưc chức bảng Bạn hồn tồn chạy lệnh INSERT, UPDATE, DELETE view Khi liệu thay đổi thông qua view, bạn nên ý tờI số điều đây: Nếu view bạn có tốn tử join định nghĩa nó, bạn khơng thể chèn xoá liệu trừ bạn sử dụng bẫy INSTEAD OF Bạn cập nhật cột mà chúng thuộc bảng đơn không sử dụng bẫy INSTEAD OF View trỏ 158 Nếu view bạn bao gồm bảng đơn với tất trường nó, bạn chèn liệu thơng qua view mà khơng cần sử dụng bẫy INSTEAD OF Trong view bảng đơn, bạn bao gồm cột, cột khơng có giá trị ngầm định, vào view, bạn phải sử dụng bẫy INSTEAD OF để thực thi thao tác chèn Trong chương này, thảo luận bẫy lỗi discussed INSTEAD OF ngắn gọn bàn luận kỹ chương 11.5 Cập nhật View Trong SQL Server 2000, bạn cập nhật view theo hai cách: • Bẫy INSTEAD OF: Bạn cập nhật view sử dụng bẫy INSTEAD OF Nó thực thay cho lệnh sửa đổi liệu Bạn cung cấp tập hợp thao tác cần thiết để sửa đổi liệu bẫy lỗi Vì vậy, bạn xây dựng bẫy INSTEAD OF cho view lệnh sửa đổi liệu chẳng hạn INSERT, UPDATE, DELETE view tương ứng cập nhật thơng qua lệnh • View phân chia: Bạn cập nhật 'view phân chia' với hạn chế định Nếu bạn có view, view phân chia bẫy lỗi INSTEAD OF, cập nhật điều kiện thoả mãn: • Câu lệnh SELECT khơng nên chứa hàm kết hợp mệnh đề TOP, GROUP BY, UNION, DISTINCT Bạn sử dụng hàm kết hợp mệnh đề FROM câu truy vấn giá trị trả hàm khơng thay đổi • Lệnh SELECT khơng chứa cột chuyển hố • Mệnh đề FROM câu lệnh SELECT nên có bảng Ví dụ, view khơng thể cập nhật CREATE VIEW NoTable AS SELECT GETDATE() AS CurrentDate, @@LANGUAGE AS CurrentLanguage Các lệnh INSERT, UPDATE, DELETE phải thoả mãn điều kiện đinh trước chúng tham chiếu đến view Các lệnh UPDATE INSERT tham chiếu đến view chúng sửa đổi liệu bảng sở bao gồm mệnh đề FROM view Lệnh DELETE tham chiếu đến view view bao gồm xác bảng mệnh đề FROM 11.6 Con trỏ Một trỏ đối tượng sở liệu sử dụng ứng dụng để thao tác với hàng liệu thay tập hợp liệu Sử dụng trỏ, nhiều tácvụ thực theo hàng tập kết mà cần ko cần có mặt bảng gốc Hay nói cách khác, trỏ, mặt khái niệm, trả tập hợp kết dựa bảng bên sở liệu Với trỏ có thể: 159 Thiết kế sở liệu thực hành với SQL Server Cho phép định vị hàng định tập kết Nhận hàng đơn tập hợp hàng từ vị trí tập kết Hỗ trợ sửa đổi liệu hàng vị trí tập kết Hỗ trợ nhiều cấp độ quan sát thay đổi tạo người dùng khác liêu tập kết Cung cấp lệnh Transact-SQL script, thủ tục lưu, bẫy lỗi để truy nhập liệu tập kết 11.6.1 Tạo trỏ Lệnh DECLARE sử dụng để tạo trỏ Nó chứa lệnh SELECT để bao gồm ghi từ bảng Cú pháp là: DECLARE CURSOR [LOCAL | GLOBAL] [FORWARD ONLY | SCROLL] [STATIC | KEYSET | DYNAMIC | FAST_FORWARD] [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] [TYPE_WARNING] FOR [FOR UPDATE [OF Column_name[,….N]]] Các thuộc tính giải nghĩa đây: LOCAL Chỉ phạm vi hạn chế trỏ thủ tục lưu bẫy lỗi Hay nói cách khác, tên trỏ hợp lệ bên phạm vi Con trỏ hồn tồn giải phóng thủ tục lưu bẫy lỗi bị hủy bỏ GLOBAL Chỉ phạm vi trỏ tồn cục Tên trỏ tham chiếu bất cú thủ tục lưu FORWARD_ONLY Chỉ trỏ duyệt từ hàng đến hàng cuối cùng, chế độ hỗ trợ tuỳ chọn FETCH NEXT để lấy liệu Ngầm định trỏ chế độ FORWARD ONLY SCROLL Chỉ tất tuỳ chọn để lấy liệu (FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE) hỗ trợ Nếu SCROLL không khai báo trỏ, hỗ trợ tuỳ chọn NEXT STATIC Định nghĩa trỏ mà tạo môt liệu để sử dụng Tất yêu cầu gửi đến trỏ trả lời từ bảng tạm thời tempdb Vì vậy, việc sửa đổi liệu View trỏ 160 bảng sở không ảnh hưởng tới liệu trả trỏ, trỏ không cho phép sửa đổi KEYSET Chỉ thứ tự hàng trỏ cố định trỏ mở DYNAMIC Định nghĩa trỏ mà ánh xạ toàn thay đổi hàng tập kết trỏ duyệt FAST_FORWARD Chỉ định trỏ FORWARD_ONLY READ_ONLY FAST_FORWARD xác định tuỳ chọn SCROLL FOR_UPDATE Các trỏ FORWARD ONLY FAST_FORWARD loại trừ lẫn READ_ONLY Nghiêm cấm việc cập nhật thông qua trỏ Nó khơng thể tham chiếu mệnh đề WHERE CURRENT OF câu lệnh UPDATE DELETE SCROLL_LOCKS Chỉ việc cập nhật xố vị trí thơng qua trỏ đảm bảo thành cơng SQL Server khố hàng mà chúng đọc vào trỏ để đảm bảo khả sẵn sàng chúng cho việc sửa đổi sau Tuỳ chọn SCROLL_LOCKS xác định với FAST_FORWARD OPTIMISTIC Chỉ việc cập nhật xố vị trí thơng qua trỏ không thành công, hàng cập nhật đọc vào trỏ TYPE_WARNING Đưa thông điệp cảnh báo gửi đến người dùng trỏ ngầm chuyển đổi từ kiểu yêu cầu sang kiểu khác UPDATE [OF Column_name[, n]] Định nghĩa cột cập nhật trỏ Nếu OF Column_name [,…n] sử dụng, cột nằm danh sach phép sửa đổi Trong số thuộc tính nêu DYNAMIC, STATIC, KEYSET FORWARD_ONLY định nghĩa đặc trưng mang tính truy xuất liệu trỏ số lại định nghĩa đặc trưng mang tính chất chức trỏ 11.6.2 Các bước tạo trỏ 161 Thiết kế sở liệu thực hành với SQL Server Một trỏ tồn nhiều trạng thái Các trạng thái khác trỏ liên quan đến khu vực khác nơi mà chúng tạo thực Một trỏ đơn giản thực thi theo bước đây: Sau trỏ tạo, phải mở trước ghi truy xuất từ Lệnhe OPEN sử dụng để mở trỏ Cú pháp là: OPEN Mỗi trỏ mở, ghi truy xuất từ trỏ để hiển thị chúng hình Lệnh FETCH sử dụng để hiển thị ghi từ trỏ Cú pháp là: FETCH Một cách tuỳ ý, trỏ đóng tạm thời khơng cần thiết sử dụng lệnh CLOSE Lệnh đóng trỏ mở cách giải phóng tập kết Mỗi trỏ đóng, hàng truy xuất sau mở lại Cú pháp là: CLOSE Khi trỏ không cần thiết thêm nữa, tham chiếu đến huỷ bỏ Lệnh DEALLOCATE sử dụng để giải phóng tham chiếu tới trỏ Cú pháp là: DEALLOCATE Mỗi trỏ đựoc tạo mở, hàng truy xuất từ trỏ Chúng ta xem chi tiết việc duỵệt nhận liệu chương tiếp 11.6.3 Truy xuất Duyệt trỏ Khi trỏ mở, hàng vị trí trỏ mặt logic trước hàng Các trỏ Transact-SQL truy xuất hàng thời điểm Các tác vụ để nhận hàng từ trỏ gọi fetching Có nhiều thao tác truy xuất: FETCH FIRST: Truy xuất hàng FETCH NEXT: Truy xuất hàng hàng truy xuất trước FETCH PRIOR: Truy xuất hàng trước hàng truy xuất trước FETCH LAST: Truy xuất hàng cuối FETCH ABSOLUTE n: Nếu n số nguyên dương, truy xuất n hàng trỏ Nếu n số nguyên âm, n hàng trước hàng cuối trỏ truy xuất Nếu n 0, không hàng truy xuất Ví dụ, FETCH Absolute hiển thị ghi thứ hai bảng FETCH RELATIVE n: Truy xuất n hàng từ hàng truy xuất trước đó, n số dương Nếu n số âm, n hàng trước hàng truy xuất trước truy xuất Nếu n 0, hàng nhận Trạng thái lệnh truy xuất xác định hai biến tồn cục @@FETCH _STATUS Biến trả số nguyên biễu diễn kết lệnh truy xuất cuối trỏ View trỏ 162 @@CURSOR_ROWS Biến trả tổng số hàng trỏ mở Hình 11.8 hiển thị ví dụ việc sử dụng trỏ, hàng truy xuất biến Hình 11.8: Ví dụ tạo trỏ 163 Thiết kế sở liệu thực hành với SQL Server Tổng kết View cách thức để xem liệu từ hay nhiều bảng sở liệu View bảng ảo, bảng ảo tạo tập cột hay hàng từ hay nhiều bảng khác Một view có tác dụng lọc bảng sử dụng câu truy vấn Lệnh CREATE VIEW để tạo view Lệnh DROP VIEW để xoá view Một trỏ đối tượng sở liệu sử dụng ứng dụng để thao tác với hàng liệu thay tập hợp liệu Sử dụng trỏ, nhiều tácvụ thực theo hàng tập kết mà cần ko cần có mặt bảng gốc Con trỏ tạo lệnh DECLARE Đầu tiên trỏ khai báo tạo nhớ Sau mở Lệnh OPEN mở trỏ Việc nhận ghi từ trỏ gọi fetching Một người dùng nhận ghi thời điểm Lệnh FETCH sử dụng để đọc ghi từ trỏ Ngầm định, trỏ forward only Nó truy xuất ghi từ ghi đến ghi cuối Nó khơng thể truy xuất trực tiếp hàng thứ hàng cuối bảng Khi trỏ tạm thời không cần thiết, đóng lệnh CLOSE Mỗi trỏ không sử dụng, tham chiếu đến nên loại bỏ lệnh DEALLOCATE SQL Server 2000 giới thiệu Indexed View, etương đương với Materialized View Oracle View phân tán(“Distributed Partitioned Views (DPV)”), tính SQL Server 2000 cho phép phân chia phân tán liệu theo chiều ngang tới số lượng lớn server sở liệu Các view phan chia giới thiệu SQL Server SQL Server 2000 cho phép chúng phân tán nhiều server khác Các bảng phân chia phân tán nhiều server khác Do đó, server cần truy nhập tới tất server khác Vì vậy, bạn cần đặt cầu hình tất server thành linked servers (liên kết server) Trong DPV, liệu đặt nút độc lập nút biết nút khác sử dụng liên kết server View trỏ 164 DPV sử dụng tính Dynamic Partition Elimination phép câu truy vấn thực server đặt server khác Các server mà không lưu trữ liệu yêu cầu không truy vấn Trong view phân chia, liệu phân chia theo chiều ngang, từ tập hợp bảng thành viên nhiều server hợp lại bảng đơn 165 Thiết kế sở liệu thực hành với SQL Server Kiểm tra kiến thức SQL Server cho phép view lồng mức? a 1024 b 32 c 24 d Một view SQL Server chứa cột? a 250 b 1024 c 24 d 99 Lệnh để tạo view không bao gồm: a ORDER BY clause b COMPUTE clause c COMPUTE BY clause d INTO keyword Tuỳ chọn sử dụng để nhận ghi trỏ? a DEALLOCATE b DROP c FETCH d CREATE e OPEN Tuỳ chọn sử dụng để tất tuỳ chọn(FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE) hỗ trợ sau tạo trỏ? a LOCAL b SCROLL c FORWARD_ONLY d GLOBAL e SCROLL_LOCKS Tuỳ chọn định nghĩa trỏ mà tạo tạm thời liệu để sử dụng? a STATIC b DYNAMIC c KEYSET d FAST_FORWARD Phần câu lệnh DECLARE xác định việc duyệt liệu? a NEXT, PRIOR b DYNAMIC c ORDER BY, DYNAMIC d FAST_FORWARD, FORWARD_ONLY e All of the above View trỏ 166 167 Bạn tạo trỏ để đạt optimistic locking? a Select CURSOR FOR OPTIMISTIC b DECLARE CURSOR OPTIMISTIC c DECLARE CURSOR OPTIMISTIC FOR d DECLARE CURSOR WHILE OPTIMISTIC Thiết kế sở liệu thực hành với SQL Server Luyện tập Viết câu lệnh Transact-SQL để thực công việc sau sử dụng sở liệu pubs: Tạo view có tên Store_Discount từ bảng Discounts Stores View bao gồm trường store ID, store name kiểu discount đưa Khai báo trỏ tên JobCursor để bao gồm toàn hàng từ bảng job Mở trỏ có tên JobCursor Tạo mọt trỏ để truy xuất hiển thị hàng từ bảng authors theo thứ tự định trước View trỏ 168 ... Books’ Một View tạo ra, câu lệnh SELECT thực thi để xem hàng View SELECT * FROM NewMoon_employee Hình 11. 2 hiển thị nội dung View View trỏ 146 Figure 11. 2: Hiển thị nội dung View 11. 1.3 Các nguyên... FROM 11. 1.5 Xóa View Sau View sử dụng xong, bị xóa để giải phóng vùng nhớ Việc xóa View khơng tác động đến bảng sở mà View tham chiếu đến Câu lệnh xóa View là: DROP VIEW Ten _view Ten _view tên view. .. Server 2000 phân biệt view phân chia cập nhật view đọc Khái niệm view phân tán minh hoạ hình 11. 7 View trỏ 154 MemberTable_3 View1 MemberTable_1 View1 MemberTable_2 View1 Hình 11. 7 Bạn phải chia