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à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 đã 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 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. Đồ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
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ệu
Mộ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 D1
View - Table A & Table B
Table A
Table 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_employee
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 View
Sau 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_view
Ten_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ục
View 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ì
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 ON
SET STATISTICS TIME ON
SELECT * FROM CustOrdProd_view
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