View là một bảng ảo mà nội dung được định nghĩa bởi một truy vấn (câu Select). Giống như một bảng thực, một view bao gồm một tập các cột và các dịng dữ liệu. Tuy nhiên, một view khơng là nơi lưu trữ dữ liệu. Các dịng và cột của dữ liệu được tham chiếu từ các bảng trong một truy vấn mà định nghĩa View và là kết quả động khi View được tham chiếu.
Dùng view để:
- Chỉ cho User xem những gì cần cho xem. - Đơn giản hĩa việc truy cập dữ liệu.
- Dùng để lựa chọn những dữ liệu cần thiết ứng vĩi mỗi user. - Dùng View để Import, Export.
- Kết hợp các dữ liệu khác nhau.
Hạn chế khi định nghĩa View:
- Khơng bao gồm các mệnh đề COMPUTER hoặc COMPUTER BY. - Khơng bao gồm từ khĩa INTO.
- Chỉ được dùng ORDER BY chỉ khi từ khĩa TOP được dùng. - Khơng thể tham chiếu quá 1024 cột.
- Khơng thể kết hợp với câu lệnh T-SQL khác trong một cùng một bĩ lệnh. - Khơng thể định nghĩa chỉ mục full text trên View.
Partitioned Views: Một partition View kết nối theo chiều dọc các dữ liệu phân tán từ một tập các bảng ở một hay nhiều server, các dữ liệu sẽ hiện lên như thể là chúng được lấy từ một bảng. Cĩ hai lạoi: Local partition view là view cĩ tham chiếu các table và các view khác nằm trong cùng một serever. Distributed partition view cĩ ít nhất một bảng nằm ở server khác.
8.2 Tạo, hiệu chỉnh, xĩa View Tạo View
CREATE VIEW [ < database_name > . ] [ < owner > . ] view_name [ (column [,...n ])] [ WITH < view_attribute > [,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ] < view_attribute > ::=
{ ENCRYPTION | SCHEMABINDING }
Giải thích
view_name: là tên của View. Tên View phải tuân thủ các qui tắc định danh.
Column: Tên được dùng cho cột trong view. Tên cột chỉ dùng trong trường hợp cột được phát sinh từ một biểu thức, hàm, một hằng, các cột trong các table trùng tên. Tuy nhiên tên cột cũng cĩ thể được ấn định trong câu lệnh Select. Khơng chỉ định tên cột chính là tên các cột trong câu lệnh select
select_statement: Là câu lệnh select để định nghĩa View. Nĩ cĩ thể tham chiếu một hoặc nhiều bảng hoặc các View khác với một câu Select phức tạp.
Lưu ý: Để tạo một view, bạn phải cĩ quyền dành riêng trên các bảng hoặc view
tham chiếu trong định nghĩa view.
WITH CHECK OPTION: Bắt buộc tất cả các câu lệnh hiệu chỉnh dữ liệu thực thi dựa vào View phải tuyệt đối tơn trọng triệt để đến tập tiêu chuẩn trong câu lệnh Select. Nếu bạn dùng từ khĩa này, các dịng khơng thể được hiểu chỉnh trong cách mà tại sao chúng hiện trong view. Bất kỳ hiệu chỉnh nào mà sẽ gây ra tình trạng thay đổi đều bị hũy bỏ, và một lỗi được hiện ra.
WITH ENCRYPTION: Mã hĩa câu lệnh Select tạo ra view
SCHEMABINDING: Kết view với một giản đồ. Khi SCHEMABINDING được chỉ định, câu lệnh Select phải chỉ rõ chủ quyền của các bảng, các view. Các hàm được tham chiếu View hay bảng tham gia trong view được tạo với schema khơng thể xĩa trừ phi view đĩ bị xĩa hoặc thay đổi cơ chế này. Câu lệnh Alter Table trên bảng tham gia trong view cũng bị lỗi.
Ví dụ 1: Xem danh sách các InvoiceNo và CustNo CREATE VIEW vwSim
AS
SELECT InvoiceNo, CustNo From tblSim
Where InvoiceDate = Getdate() ORDER BY InvoiceNo
Xem nội dung View
Select * From vwSim Ví dụ 2:
CREATE VIEW vwSales AS
Select c.CustNo,c.CustName, sim.InvoiceNo, sim.InvoiceDate, sid.ItemNo, sid.Quatity From TblCustomer c INNER JOIN TblSim sim ON c.CustNo=sim.CustNo INNER JOIN TblSid sid ON sim.InvoiceDate = sid.InvoiceDate
Xem nội dung View
Select * From vwSales
8.3 Tạo Partition view
- Các bảng tham gia trong Partition view phải cĩ cấu trúc giống nhau.
- Cĩ một cột cĩ check contraint, với phạm vi của Check constraint ở mỗi bảng là khác nhau.
- Tạo view bằng cách kết các dữ liệu bằng từ khĩa UNION ALL
Ví dụ: Ta cĩ 3 table tương ứng dùng để lưu trữ các khách hàng ở 3 miền Bắc, Trung, Nam cĩ cấu trúc tạo như sau:
(Makh int primary key, TenKh Nchar(30),
Khuvuc Nvarchar(30) CHECK (Khuvuc='Bac bo') )
Create Table KH_TRUNG
(Makh int primary key, TenKh Nchar(30),
Khuvuc Nvarchar(30) CHECK (Khuvuc='Trung bo') )
Create Table KH_NAM
(Makh int primary key, TenKh Nchar(30),
Khuvuc Nvarchar(30) CHECK (Khuvuc='Nam bo') )
Tạo một partition View gộp 3 bảng trên lại với nhau: Create View Khachhang
AS
Select * From KH_BAC UNION ALL
Select * From KH_TRUNG UNION ALL
Select * From KH_NAM
8.4 Truy xuất dữ liệu thơng qua View.
(Tương tự như truy xuất dữ liệu trên bảng)
8.4.1 Xem dữ liệu thơng qua view.
Dùng câu lệnh Select (Ví dụ ở trên)
8.4.2 Hiệu chỉnh dữ liệu thơng qua View.
Thao tác hiệu chỉnh dữ liệu giống thao tác hiệu chỉnh dữ liệu trên một bảng. Tuy nhiên, view phải thỏa mãn điều kiện sau:
- View chỉ tham chiếu duy nhất một bảng.
- Thao tác Delete khơng bao giờ được phép thực hiện trên nhiều bảng trong View.
- Các hàm kết hợp Group By, Union, Distinct, Top khơng dùng trong danh sách chọn trong câu Select của View.
- Khơng cĩ các cột tính tốn. Ví dụ:
Hiệu chỉnh dữ liệu thơng qua partitioned View
Khi dùng lệnh Insert và update phải tơn trọng các qui tắc sau:
- Tất cả các cột phải cĩ giá trị ngay cả cột chấp nhận null và cột cĩ giá trị defaul.
- Từ khĩa Defaul khơng được sử dụng trong câu Insert, update. - Phải cĩ giá trị đúng của cột cĩ check constraint.
- Câu lệnh insert khơng cho phép nếu bảng thành viên cĩ cột cĩ thuộc tính identity, cột timestamp.
- Khơng insert hoặc Update nếu cĩ một kết self-join trong cùng view hay bảng thành viên.
Khi dùng lệnh delete, ta cĩ thể xĩa các mẫu tin trong bảng thành viên thơng qua view. Lệnh Delete khơng thực thi nếu cĩ liên kết Sefl-join
BÀI 9: CHUYỂN ĐỔI DỮ LIỆU