Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
1,23 MB
Nội dung
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Bài 07: Triggers and Views Trong tìm hiểu ứng dụng loại stored procedure đặc biệt gọi Triggers dùng Views để thể data hay nhiều table Triggers Trigger loại stored procedure đặc biệt execute (thực thi) cách tự động có data modification event xảy Update, Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Insert hay Delete Trigger dùng để đảm bảo Data Integrity hay thực business rules Khi ta cần sử dụng Trigger: Ta sử dụng trigger mà biện pháp bảo đảm data intergrity khác Constraints thỏa mãn yêu cầu ứng dụng Nên nhớ Constraint thuộc loại Declarative Data Integrity kiểm tra data trước cho phép nhập vào table Trigger thuộc loại Procedural Data Integrity nên việc insert, update, delete xảy kích hoạt trigger Chính mà ta cần cân nhắc trước định dùng loại việc đảm bảo Data Integrity Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Khi database denormalized (ngược lại trình normalization, trình thiết kế database schema cho database chứa data không thừa không thiếu) có số data thừa (redundant ) chứa nhiều tables Nghĩa có số data chứa lúc hai hay nhiều nơi khác Khi để đảm bảo tính xác data update table phải update cách tự động table lại cách dùng Trigger Ví dụ: ta có table Item có field Barcode dùng để xác định mặt hàng Item table có vai trò catalog chứa thông tin cần thiết mô tả mặt hàng Ta có table khác Stock dùng để phản ánh hàng có thực Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com kho nhập cung cấp đại lý nào, số lượng (tức thông tin hàng mà chứa Item table được) table có field Barcode để xác định hàng kho Như thông tin Barcode chứa hai nơi khác ta cần dùng trigger để đảm bảo Barcode hai nơi synchonize (đồng bộ) Ðôi ta có nhu cầu thay đổi dây chuyền (cascade) ta dùng Trigger để bảo đảm chuyện Nghĩa có thay đổi table số table khác thay đổi theo để đảm bảo tính xác Ví dụ hàng bán số lượng hàng table Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Item giảm đồng thời tổng số hàng kho (Stock table) phải giảm theo cách tự động Như ta tạo trigger Item table để bán trigger kích hoạt giảm tổng số hàng Stock table Ðặc điểm Trigger: Một trigger làm nhiều công việc (actions) khác kích hoạt nhiều event Ví dụ ta viết trigger kích hoạt event Update, Insert hay Delete bên trigger ta viết code để giải cho trường hợp Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Trigger tạo temporary hay system table Trigger kích hoạt cách tự động event Insert, Update, Delete mà chạy manually Có thể áp dụng trigger cho View Khi trigger kích hoạt data vừa insert hay vừa thay đổi chứa Inserted table data vừa delete chứa Deleted table Ðây table tạm chứa memory có giá trị bên trigger mà (nghĩa nhìn thấy query trigger mà thôi) Ta Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com dùng thông tin table để so sánh data cũ kiểm tra xem data vừa thay đổi có hợp lệ trước commit hay roll back (Xem thêm ví dụ bên dưới) Có loại triggers (class) : INSTEAD OF AFTER Loại INSTEAD OF bỏ qua (bybass) action kích hoạt trigger mà thay vào thực dòng lệnh SQL bên Trigger Ví dụ ta có Update trigger table với câu INSTEAD OF table update thay update SQL Server thực lệnh viết sẵn bên trigger Ngược lại loại AFTER (loại default tương đương với keyword FOR) thực câu lệnh bên trigger sau action tạo nên trigger xảy Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Tạo Một Trigger Như Thế Nào? Cú pháp để tạo trigger có dạng sau: CREATE TRIGGER trigger_name ON table_name or view_name FOR trigger_class and trigger_type(s) AS Transact-SQL statements Như tạo trigger ta phải rõ tạo trigger table trigger (insert, update hay delete Sau chữ AS câu lệnh SQL xử lý công việc Ta nghiên cứu ứng dụng thực tiễn sau Giả sử ta viết application cho phép user Insert, Update Delete thông tin nằm database User thường Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com người không thông thạo computer mà thường gọi đùa "bà tám" Vào ngày đẹp trời, "bà tám" mặt mày tái xanh đến cầu cứu ta lỡ tay "delete" thông tin quan trọng hy vọng ta phục hồi liệu dùm Nếu không phòng xa trước viết application coi vô phương cứu chữa data hoàn toàn bị delete Nhưng bạn "guru" bạn gật gù "chuyện khó lắm!" sau bạn tốn vài phút đồng hồ để rollback Muốn làm chuyện phải dùng "chiêu" gọi Audit (kiểm tra hay giám sát) Tức table ta thêm table phụ gọi Audit tables Bất kỳ hoạt động đụng chạm vào số table quan trọng database ta ghi nhận vào Audit table Ví dụ user update hay delete record table Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com trước update hay delete ta âm thầm di chuyển record sang Audit table update hay delete table Như có chuyện xảy ta dễ dàng rollback (trả record chỗ cũ) Ví dụ: Ta có table Orders PracticeDB Ðể audit hoạt động diễn table ta tạo audit table với tên Aud_Orders với column giống y hệt với Orders table Ngoài ta thêm vào columns : Audit_Type : với giá trị 'I','U','D' để ghi nhận record Insert, Update hay Delete Date_Time_Stamp : Data Type thuộc loại DateTime dùng để ghi nhận thời điểm xảy thay đổi, có vai trò dấu Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com (Nếu môi trường nhiều user ta thêm column UserID để ghi nhận user thay đổi) Sau ta tạo trigger dùng cho việc audit sau: Insert Trigger CREATE TRIGGER [AuditInsertOrders] ON [dbo].[Orders] FOR Insert AS insert into aud_orders select *,'I',getdate() From inserted Update Trigger CREATE TRIGGER [AuditUpdateOrders] ON [dbo].[Orders] Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com for UPDATE AS insert into aud_orders select *,'U',Getdate() from deleted Delete Trigger CREATE TRIGGER [AuditDeleteOrders] ON [dbo].[Orders] FOR DELETE AS insert into aud_orders select *,'D',getdate() From deleted Trong ví dụ user insert record record vừa insert nằm inserted table trình bày phần Do ta select tất column inserted Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com table cộng thêm Audit Type "I" dùng hàm GetDate() SQL Server để lấy system date time dùng cho Date_Time_Stamp column, sau insert vào Aud_Orders table Tương tự với trường hợp Update Delete, record update hay delete nằm deleted table Như trở lại trường hợp thí dụ "bà tám" yêu cầu ta vào tìm kiếm audit table để phục hồi lại record Ngoài ta dùng table để tìm thủ phạm xoá hay sửa chữa data cần thiết Ðể tạo hay xem trigger Enterprise Manager bạn làm sau: Right-Click lên table mà bạn muốn tạo trigger->All Tasks-> Manage Triggers Lưu ý: Ðôi Khi ta muốn trigger thực hoạt động hay vài column Update column Khi Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com ta dùng hàm Update(Column_Name) để kiểm tra xem column có bị update hay không Ví dụ: Tạo trigger cho Customer table Bên Trigger (sau chữ AS) ta kiểm tra xem column First_Name hay Last_Name bị thay đổi hành động không không làm IF UPDATE (first_name) OR UPDATE (Last_Name) BEGIN Do some conditional processing when either of these columns are updated END Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Nếu muốn kiểm tra nhiều columns ta dùng hàm khác Columns_Updated() Xin xem thêm SQL Server Books Online để biết thêm chi tiết cách sử dụng Views Ðịnh nghĩa cách đơn giản view SQL Server tương tự Query Access database View xem table ảo mà data select từ stored query Ðối với programmer view không khác chi so với table đặt vị trí table câu lệnh SQL Ðặc điểm View ta join data từ nhiều table trả recordset đơn Ngoài ta "xào nấu" data (manipulate data) trước trả cho user cách dùng số logic checking (if, case ) Ví dụ: Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Create View OrderReport As Select OrderID, (case when [Name] is null then 'New Customer' else [Name] end )As CustomerName, ProductName, DateProcessed From Customers Right Outer Join Orders on Customers.CustomerID=Orders.CustomerID Trong ví dụ ta chủ yếu trả data từ Orders table PracticeDB thay display CustomerID vốn ý nhiều ý nghĩa user ta display tên customer Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com cách join với Customer table Nếu Customer Name Null nghĩa tên customer đặt order không tồn system Thay để Null ta display "New Customer" để dễ nhìn cho user Nói chung câu lệnh SQL View từ đơn giản select toàn data từ table phức tạp với nhiều tính programming T-SQL View Thường Ðược Dùng Vào Việc Gì? View thường sử dùng vào số công việc sau: Tập trung vào số data định : ta thường dùng view để select số data mà user quan tâm hay chịu trách nhiệm loại bỏ data không cần thiết Ví dụ: Giả sử table ta có column Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com "Deleted" với giá trị True hay False để đánh dấu record bị delete hay không Việc dùng cho việc Audit Nghĩa ứng dụng user delete record đó, thay ta physically delete record ta logically delete cách đánh dấu record "Deleted" để đề phòng user yêu cầu roll back Như chủ yếu ta quan tâm đến data chưa delete data đánh dấu deleted để ý cần roll back hay audit mà Trong trường hợp ta tạo view select data mà Deleted=False làm việc chủ yếu view thay toàn table Ðơn giản hóa việc xử lý data: Ðôi ta có query phức tạp sử dụng Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com thường xuyên ta chuyển thành View đối xử table, làm cho việc xử lý data dễ dàng Customize data: Ta dùng view để làm cho users thấy data từ góc độ khác họ dùng nguồn data giống Ví dụ: Ta tạo views thông tin customer thể khác tùy login ID normal user hay manager Export Import data: Ðôi ta muốn export data từ SQL Server sang ứng dụng khác Excel chẳng hạn ta dùng view để join nhiều table export dùng bcp Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Khi sử dụng view ta select,insert, update, delete data bình thường với table Lưu ý: Trong Enterprise Edition (và Developer Edition) ta tạo Index cho View cho table Index bàn đến sau Muốn hiểu rõ học bạn cần làm Như tìm hiểu Trigger, View SQL Server số ứng dụng Nói chung view thường dùng để trừu tượng hóa (abstract) hay lọc raw data (data thô) trước trả cho user trigger thường dùng để bảo đảm tính integrity database [...]... export dùng bcp Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Khi sử dụng view ta có thể select,insert, update, delete data bình thường như với một table Lưu ý: Trong Enterprise Edition (và Developer Edition) ta có thể tạo Index cho View như cho table Index sẽ được bàn đến trong các bài sau Muốn hiểu rõ hơn về bài học này bạn cần làm Như vậy trong bài này chúng ta đã tìm hiểu... Do some conditional processing when either of these columns are updated END Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Nếu muốn kiểm tra nhiều columns ta có thể dùng hàm khác là Columns_Updated() Xin xem thêm trong SQL Server Books Online để biết thêm chi tiết về cách sử dụng Views Ðịnh nghĩa một cách đơn giản thì view trong SQL Server tương tự như Query trong Access... phức tạp và sử dụng Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com thường xuyên ta có thể chuyển nó thành View và đối xử nó như một table, như vậy sẽ làm cho việc xử lý data dễ dàng hơn Customize data: Ta có thể dùng view để làm cho users thấy data từ những góc độ khác nhau mặc dù họ đang dùng một nguồn data giống nhau Ví dụ: Ta có thể tạo ra views trong đó những thông tin về... xem một trigger bằng Enterprise Manager bạn làm như sau: Right-Click lên table mà bạn muốn tạo trigger->All Tasks-> Manage Triggers Lưu ý: Ðôi Khi ta chỉ muốn trigger thực sự hoạt động khi một hay vài column nào đó được Update chứ không phải bất kỳ column nào Khi Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com đó ta có thể dùng hàm Update(Column_Name) để kiểm tra xem column... TRIGGER [AuditInsertOrders] ON [dbo].[Orders] FOR Insert AS insert into aud_orders select *,'I',getdate() From inserted Update Trigger CREATE TRIGGER [AuditUpdateOrders] ON [dbo].[Orders] Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com for UPDATE AS insert into aud_orders select *,'U',Getdate() from deleted Delete Trigger CREATE TRIGGER [AuditDeleteOrders] ON [dbo].[Orders] FOR... data từ nhiều table và trả về một recordset đơn Ngoài ra ta có thể "xào nấu" data (manipulate data) trước khi trả về cho user bằng cách dùng một số logic checking như (if, case ) Ví dụ: Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Create View OrderReport As Select OrderID, (case when [Name] is null then 'New Customer' else [Name] end )As CustomerName, ProductName, DateProcessed... Trong ví dụ trên ta chủ yếu trả về data từ Orders table trong PracticeDB nhưng thay vì display CustomerID vốn không có ý nhiều ý nghĩa đối với user ta sẽ display tên của customer bằng Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com cách join với Customer table Nếu Customer Name là Null nghĩa là tên của customer đã đặt order không tồn tại trong system Thay vì để Null ta sẽ display... vào một số data nhất định : ta thường dùng view để select một số data mà user quan tâm hay chịu trách nhiệm và loại bỏ những data không cần thiết Ví dụ: Giả sử trong table ta có column Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com "Deleted" với giá trị là True hay False để đánh dấu một record bị delete hay không Việc này đôi khi được dùng cho việc Audit Nghĩa là trong một... Trong ví dụ trên khi user insert một record thì record mới vừa được insert sẽ nằm trong inserted table như đã trình bày ở phần trên Do đó ta sẽ select tất cả các column trong inserted Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com table cộng thêm Audit Type "I" và dùng hàm GetDate() trong SQL Server để lấy system date time dùng cho Date_Time_Stamp column, sau đó insert vào...Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com (Nếu trong môi trường nhiều user thì ta thêm một column UserID để ghi nhận user nào thay đổi) Sau đó ta sẽ tạo ra 3 trigger dùng cho việc audit ... mà bạn muốn tạo trigger->All Tasks-> Manage Triggers Lưu ý: Ðôi Khi ta muốn trigger thực hoạt động hay vài column Update column Khi Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com... trigger Chính mà ta cần cân nhắc trước định dùng loại việc đảm bảo Data Integrity Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Khi database denormalized (ngược lại... tin cần thiết mô tả mặt hàng Ta có table khác Stock dùng để phản ánh hàng có thực Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com kho nhập cung cấp đại lý nào, số lượng