Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 82 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
82
Dung lượng
3,36 MB
Nội dung
CHƯƠNG IV: RÀNG BUỘC DỮ LIỆU GV: TUẤN NGUYÊN HOÀI ĐỨC Email: tnhduc@fit.hcmus.edu.vn Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa • Ràng buộc tồn • Ràng buộc • Ràng buộc kiểm tra • Ràng buộc • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu Đặt vấn đề • Ràng buộc liệu (RBDL) quy định liệu nhằm đảm bảo ràng buộc toàn vẹn liệt kê q trình thiết kế CSDL ln tuân thủ • Vấn đề : Số lượng RBDL nhiều Lượng thông Sn người dùng phải cập nhật vào máy thời điểm lớn Sai sót mệt mỏi khơng qn xuyến hết RBDL không nắm bắt cnh trạng CSDL hành Kiểm tra RBDL bắng người không khả thi Chương IV : Ràng buộc Dữ liệu Đặt vấn đề • Mục Jêu : Chuyển trách nhiệm kiểm tra RBDL cho SQL Server làm cách tự động có thay đổi DL (Con người không cần kiểm tra thủ công) • Cơ chế kiểm tra : • Sẵn có : PK, FK, Unique • Ép thỏa đơn giản : Check, rule,… • Ép thỏa phức tạp : Trigger Chương IV : Ràng buộc Dữ liệu Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa • Ràng buộc tồn • Ràng buộc • Ràng buộc kiểm tra • Ràng buộc • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu Ràng buộc khoá • Tạo khóa lúc tạo bảng column constraint Thích hợp PK gồm thuộc Bnh Create table HoatDongTiepThi ( MaHoatDong varchar(10) not null Primary key, TenHoatDong nvarchar(50), LoaiHoatDong varchar(10), NgayBatDau DateTime, Khai báo khóa Column NgayKetThuc DateTime, constraint (Xem TongChiPhi float ) chương : Xây dựng CSDL) Chương IV : Ràng buộc Dữ liệu Ràng buộc khố • Tạo khóa lúc tạo bảng table constraint Thích hợp PK gồm thuộc lnh trở lên muốn định tên khố Create table ChiTietHoatDong ( Khai báo khóa Table constraint (Xem chương : Xây dựng CSDL) MaHoatDong varchar(10), STT int, TenChiTiet nvarchar(10), Constraint PK_CTHD primary key(MaHoatDong,STT) ) Tên khóa người dùng đặt Chương IV : Ràng buộc Dữ liệu Ràng buộc khố • Tạo khóa cho bảng có • Đúng bảng chưa có liệu, bảng có liệu, phải xem xét gnh trạng CSDL tổ hợp thuộc hnh muốn chọn làm PK SQL Server báo lỗi • Khi chưa có khóa cần tạo khóa • Thuộc hnh khóa phải NOT NULL • Khi có khóa cũ, cần hủy khóa cũ trước tạo khóa • Alter table Tab_name drop constraint PK_name Chương IV : Ràng buộc Dữ liệu Ràng buộc khố • Tạo khóa cho bảng có Alter table Tab_name add constraint PK_name primary key(colname […,n]) • Ví dụ Alter table DanhMucChiPhi add constraint Pk_DMCP primary key(MaChiPhi) Thuộc tính bắt buộc phải thuộc tính not null Chương IV : Ràng buộc Dữ liệu Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa • Ràng buộc tồn • Ràng buộc • Ràng buộc kiểm tra • Ràng buộc • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 10 Trigger dạng • Bảng tầm ảnh hưởng insert update delete DonHang PhieuGiao CTPhieuGiao INSERTED ? INSERTED DELETED CTDonHang Chương IV : Ràng buộc Dữ liệu 68 Trigger dạng • Viết trigger bảng PhieuGiao • • • • • Create trigger trg_PhieuGiao On PhieuGiao for Update As If exists (vi phạm) Begin • Raiserror… • Rollbacktransaction • End Select * from Inserted I, CTPhieuGiao CTPG Where CTPG.MaPG = I.MaPG And not exists (select * from CTDonHang CTDH where CTDH.MaDH = I.MaDH And CTDH.MaMH = CTPG.MaMH) Chương IV : Ràng buộc Dữ liệu 69 Trigger dạng • Viết trigger bảng CTDonHang • Create trigger trg_PhieuGiao • On CTDonHang for Update,Delete • As • If update(MaDH) Or update(MaMH) • Or not exists(select * from inserted) • If exists (vi phạm) • Begin • Raiserror… • Rollbacktransacpon • End Select * from Deleted D Where exists (select * from PhieuGiao PG, CTPhieuGiao CTPG where PG.MaDH = D.MaDH And CTPG.MaPG = PG.MaPG And D.MaMH = CTPG.MaMH) Chương IV : Ràng buộc Dữ liệu 70 Trigger dạng • Viết trigger bảng CTPhieuGiao • Sinh viên tự viết, xem tập Chương IV : Ràng buộc Dữ liệu 71 Trigger dạng • Ví dụ : • Cho bảng KetQua(MaSV, MaMH, Diem) • RBTV : Điểm tính xác đến 0.25, vi phạm tự động làm trịn thành 0.0/0.25/0.5/0.75 • Giải pháp : Create trigger trg_lamtron On KetQua For insert,update As Update KetQua set Diem = Round(Diem*4,0)/4 Where Diem*4 Round(Diem*4,0) GO Chương IV : Ràng buộc Dữ liệu 72 Trigger dạng • Ví dụ : • Cách khác : Create trigger trg_lamtron On KetQua For insert,update As Begin Declare cur_i cursor for select* from inserted where Diem*4 round(Diem*4,0) Declare @MaSV varchar(10), @MaMH varchar(10), @Diem float Fetch next from cur_i into @MaSV,@MaMH,@Diem While (@@fetch_status=0) Begin Update KetQua set Diem = round(Diem*4,0)/4 Where MaSV = @MaSV and MaMH = @MaMH Fetch next from cur_i into @MaSV,@MaMH,@Diem End Close cur_i Deallocate cur_i End Chương IV : Ràng buộc Dữ liệu 73 Trigger dạng • Ví dụ : • Cho bảng : • Lop(MaLop, TenLop, Siso, Khoa, KhoaHoc,…) • SinhVien(MaSV, MaLop, HoTen,…) • RBTV : Sĩ số lớp phải số sinh viên thực thuộc lớp • Giải pháp : Viết trigger sau đây… Chương IV : Ràng buộc Dữ liệu 74 Trigger • Sửa trigger Alter trigger trg_DH_PGH On DonHang For update, Insert As Begin If exists(select * from Insreted I, PhieuGH P Where P.MaDH=I.MaDH And (P.NgayGiaoHang < I.NgayDatHang Or Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1)) Begin Raiserror(‘Thao tac da bi huy’,0,1) Rollback transaction End End vXóa trigger Drop trigger tên_trigger_cần _xóa [,…n] Ví dụ: Drop trigger trg_DH_PGH Chương IV : Ràng buộc Dữ liệu 75 Trigger • Lưu ý : • Bảng ảo Inserted deleted : tinh thần chứa nhiều dịng liệu • Trigger SQL Server After trigger • Ví dụ : • Lop(MaLop,…,SiSoMax) • SinhVien(MaSV,…,MaLop) • Ràng buộc : Số sinh viên thực tế không vượt số sinh viên max lớp Chương IV : Ràng buộc Dữ liệu 76 Trigger • Giả sử viết trigger cho hành động insert sinh viên X Điều kiện vi phạm … If exists(select * from Inserted I,Lop L Where I.MaLop = L.MaLop and (select count(*) from SinhVien SV where SV.MaLop = L.MaLop) >= > L.SiSoMax … Sai Đúng Chương IV : Ràng buộc Dữ liệu 77 Trigger • Lưu ý : • Các trigger thuộc loại DML trigger (Data Manipulation Language Trigger) : Loại trigger dùng để kiểm soát thao tác cập nhật liệu (thêm, xóa, sửa…) • Ngồi cịn có trigger thuộc loại DDL trigger (Data Definition Language Trigger) : Loại trigger kiểm soát hành động định nghĩa liệu (tạo bảng, xóa bảng…) Chương IV : Ràng buộc Dữ liệu 78 Trigger • DDL Trigger : • Một số kiện kiểm soát : create_databse, create_table, drop_table, alter_table, alter_view, create_view, drop_view, … (tham khảo thêm BOL) • Vd : Create trigger trg_XoaBang Chỉ có với On DataBase phiên For drop_table Bản SQL Tác dụng lên Server 2005 As DB hành Trở lên Print N‘Ai cho phép bạn xóa bảng >.