Đặt vấn đề • Ràng buộc khóa chính • Ràng buộc tồn tại • Ràng buộc duy nhất • Ràng buộc kiểm tra • Ràng buộc mặc nhiên • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 17 Ràng buộc duy nhất • Tạo RB duy nhất ngay trong lúc tạo bảng bằng column constraint. Create table HoatDongTiepThi ( MaHoatDong varchar(10) not null Primary key, TenHoatDong nvarchar(50) not null unique, LoaiHoatDong varchar(10), NgayBatDau DateTime, NgayKetThuc DateTime, TongChiPhi float Khai báo ràng buộc duy nhất trong ) Column constraint (Xem chương 2 : Xây dựng CSDL) Chương IV : Ràng buộc Dữ liệu 18 Ràng buộc duy nhất • Tạo RB duy nhất ngay trong lúc tạo bảng bằng table constraint. Thích hợp khi muốn đặt tên cho RB duy nhất hoặc muốn khai báo 1 lần cho nhiều thuộc Onh Create table HoatDongTiepThi ( MaHoatDong varchar(10) not null Primary key, TenHoatDong nvarchar(50), Khai báo RBDN LoaiHoatDong varchar(10), trong Table NgayBatDau DateTime, constraint (Xem NgayKetThuc DateTime, chương 2 : Xây TongChiPhi float dựng CSDL) Constraint u_tenHD unique (TenHoatDong) ) Tên RBDN do người Danh sách này có thể dùng đặt có nhiều thuộc tính Chương IV : Ràng buộc Dữ liệu 19 Ràng buộc duy nhất • Tạo ràng buộc duy nhất cho bảng đã có Alter table Tab_name add constraint U_name unique(colname […,n]) • Ví dụ Alter table DanhMucChiPhi add constraint u_TenChiPhi unique(TenChiPhi) Chương IV : Ràng buộc Dữ liệu 20 Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa chính • Ràng buộc tồn tại • Ràng buộc duy nhất • Ràng buộc kiểm tra • Ràng buộc mặc nhiên • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 21 Ràng buộc kiểm tra • Đây là loại ràng buộc dùng để kiểm tra các RBTV miền giá trị một cách tự động. • Cũng như các constraint khác, ràng buộc kiểm tra gắn liền với 1 table cụ thể và dùng để kiểm tra miền giá trị của các thuộc hnh trong table đó mỗi khi có thay đổi trên dữ liệu • Ví dụ : Ta có RBTV sau : Điểm thi có giá trị từ 0 đến 10 và chính xác đến 0.25 Chương IV : Ràng buộc Dữ liệu 22 Ràng buộc kiểm tra • Tạo ràng buộc kiểm tra ngay khi tạo bảng bằng column constraint Create table KetQua ( MaSV varchar(10) not null, MaMH varchar(10) not null, Khai báo RBKT trong column LanThi int, constraint (Xem Diem float check chương 2 : Xây dựng CSDL) (Diem >=0 And Diem <=10 And Diem*4=Round(Diem*4,0)), Constraint PK_KQ primary key(MaSV,MaMH) ) Chương IV : Ràng buộc Dữ liệu 23 Ràng buộc kiểm tra • Tạo ràng buộc kiểm tra ngay khi tạo bảng bằng table constraint Create table KetQua ( MaSV varchar(10) not null, MaMH varchar(10) not null, LanThi int, Diem float, Constraint PK_KQ primary key(MaSV,MaMH), Constraint ck_Diem check (Diem >=0 And Diem <=10 And Khai báo RBKT trong Table Diem*4=Round(Diem*4,0)) constraint (Xem ) chương 2 : Xây dựng CSDL) Chương IV : Ràng buộc Dữ liệu 24 Ràng buộc kiểm tra • Tạo RBKT trên bảng đã có.
Nếu bảng này đã được nhập liệu, phải đảm bào dữ liệu hiện hành không vi phạm RBKT sắp tạo. • Alter Tab_name add constraint check_name check(Logical expression) • Ví dụ : Alter table Ketqua add constraint ck_diem Check(Diem >=0 And Diem <=10 And Diem*4 = Round(Diem*4,0)) Chương IV : Ràng buộc Dữ liệu 25 Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa chính • Ràng buộc tồn tại • Ràng buộc duy nhất • Ràng buộc kiểm tra • Ràng buộc mặc nhiên • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 26 Ràng buộc mặc nhiên • Có những thuộc lnh của bảng dữ liệu mà ở hầu hết các dòng, thuộc lnh ấy mang cùng một giá trị • Có những thuộc lnh mà ngay khi nhập liệu nó phải mang một giá trị khởi đầu nào đó để làm cơ sở cho các cnh toán lch lũy về sau • Từ đó xuất hiện nhu cầu về thuộc lnh có giá trị mặc định. Điều này gọi là ràng buộc mặc nhiên.Trong SQL Server, RBMN được cài đặt thành đối tượng default Chương IV : Ràng buộc Dữ liệu 27 Ràng buộc mặc nhiên • Một hình thức của default là gắn vào một table nhất định nào đó. Nó thực sự là một constraint như các constraint đã pm hiểu • Ví dụ : Tạo default khi tạo table Create table SanPham ( MaSP varchar(10) primary key, Khai báo TenSP nvarchar(50) not null unique, default trong LuongTon float default 0 column constraint ) (Xem chương 2 : Xây dựng CSDL) Chương IV : Ràng buộc Dữ liệu 28 Ràng buộc mặc nhiên • Tạo default cho bảng đã có sẵn Alter table Tab_name add constraint Def_name default def_value for column Ví dụ : Alter table SinhVien add constraint Def_HCM default N’Tp.Hố Chí Minh’ For TinhThanh Chương IV : Ràng buộc Dữ liệu 29 Ràng buộc mặc nhiên • Một hình thức thứ hai : Khác với các constraint đã gm hiểu, đối tượng mặc nhiên không phải một constraint • Một constraint luôn định nghĩa trên 1 và chỉ 1 table nhất định • Default không thuộc về một table nào cả, nó là một đối tượng độc lập • Khi muốn default phát huy hiệu lực trên 1 thuộc hnh của một bảng, ta phải gắn default vào thuộc hnh ấy Chương IV : Ràng buộc Dữ liệu 30 Ràng buộc mặc nhiên • Một default có thể cùng lúc gắn vào nhiều thuộc hnh của nhiều bảng khác nhau • Khi không muốn default phát huy hiệu lực trên thuộc hnh (đã gắn default), ta phải gỡ default ra khỏi thuộc hnh đó • Một default chỉ có thể bị xóa đi khi nó không còn gắn vào bất kỳ thuộc hnh nào Chương IV : Ràng buộc Dữ liệu 31 Ràng buộc mặc nhiên Tên đối tượng default • Khai báo default Create default def_zero as 0 Create default def_HCM as N’Tp.Hồ Chí Minh’ • Gắn default vào thuộc hnh Sp_bindefault ‘def_zero’,’SanPham.LuongTon’ Giá trị đối tượng default Sp_bindefault ‘def_HCM’,’SinhVien.TinhThanh’ Tên đối tượng default Thuộc tính của bảng Tham số truyền dạng chuỗi Tham số truyền dạng chuỗi Chương IV : Ràng buộc Dữ liệu 32 Ràng buộc mặc nhiên • Gỡ default ra khỏi thuộc hnh • Sp_unbindefault ‘SanPham.LuongTon’ • Sp_unbindefault ‘SinhVien.TinhThanh’ • Xoá default • Drop default def_zero • Drop default def_HCM Chương IV : Ràng buộc Dữ liệu 33 Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa chính • Ràng buộc tồn tại • Ràng buộc duy nhất • Ràng buộc kiểm tra • Ràng buộc mặc nhiên • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 34 Đối tượng luật • Ta đã biết check constraint là 1 constraint thuộc về 1 và chỉ 1 table, dùng để kiểm tra RBTV miền giá trị cho thuộc lnh của table đó • Đối tượng luật (rule) là 1 công cụ tương tự check constraint, nhưng rule không thuộc về 1 table nào cả.
Cách phát huy hiệu lực của rule trên thuộc lnh của table hoàn toàn tương tự đối tượng default • Ví dụ : Chương IV : Ràng buộc Dữ liệu 35 Đối tượng luật Create rule rl_0_10_25 as (@GiaTri <=10 and @GiaTri >=0 And Dùng biến @GiaTri*4=Round(@GiaTri*4,0) ) tạm thay Go cho thuộc Sp_bindrule ‘rl_0_10_25’,’KetQua.Diem’ tính cần Sp_unbindrule ’KetQua.Diem’ kiểm tra, tên biến Drop rule rl_0_10_25 tạm luôn phải bắt đầu với 1 ký tự @ Chương IV : Ràng buộc Dữ liệu 36 Đối tượng luật • So sánh với check • Check hơn Rule : • Trên 1 thuộc Pnh có thể có đồng thời nhiều check phát huy hiệu lực nhưng trên 1 thuộc Pnh tại 1 thời điểm chỉ chấp nhận 1 rule. • Check có thể kiểm tra trên nhiều thuộc Pnh. • Rule hơn Check : • Rule có thể phát huy hiệu lực trên nhiều table khác nhau (Pnh tái sử dụng) trong khi check chỉ phát huy hiệu lực trên 1 table thôi. Chương IV : Ràng buộc Dữ liệu 37 Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa chính • Ràng buộc tồn tại • Ràng buộc duy nhất • Ràng buộc kiểm tra • Ràng buộc mặc nhiên • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 38 Một số quy tắc chung • Các quy tắc này đúng cho mọi constraint có gắn với table cụ thể, bất kể là loại constraint gì • Khi tạo constraint • Từ khóa with check : Có kiểm tra Qnh trạng dữ liệu hiện có khi tạo constraint • Từ khóa with nocheck : Không kiểm tra Qnh trạng dữ liệu hiện có khi tạo constraint • Ví dụ : Chương IV : Ràng buộc Dữ liệu 39 Một số quy tắc chung • Khi tạo constraint về điểm của sinh viên, không bận tậm các điểm hiện có, chỉ quan tâm các điểm sắp được ghi vào DB mà thôi Alter table Ketqua With Nocheck add constraint ck_diem Check(Diem >=0 And Diem <=10 And Diem*4 = Round(Diem*4,0)) Chương IV : Ràng buộc Dữ liệu 40 Một số quy tắc chung • Khi tạo constraint về điểm của sinh viên, kiểm tra cả các điểm hiện có, các điểm này phải thỏa check sắp tạo Alter table Ketqua With check add constraint ck_diem Check(Diem >=0 And Diem <=10 And Diem*4 = Round(Diem*4,0)) Chương IV : Ràng buộc Dữ liệu 41 Một số quy tắc chung • Vô hiệu hóa constraint đang có hiệu lực Alter table Tab_name Nocheck constraint {constraint_name [,…n]} • Ví dụ : alter table SINHVIEN nocheck constraint u_CMND, chk_Nam Lưu ý : Primary, Unique, Default luôn ở trạng thái hoạt động Chương IV : Ràng buộc Dữ liệu 42 Một số quy tắc chung • Hiệu lực hóa constraint đã mất hiệu lực Alter table Tab_name Check constraint {constraint_name [,…n]} • Ví dụ : alter table SINHVIEN Check constraint u_CMND, chk_Nam Chương IV : Ràng buộc Dữ liệu 43 Nội dung trình bày • Đặt vấn đề • Ràng buộc khóa chính • Ràng buộc tồn tại • Ràng buộc duy nhất • Ràng buộc kiểm tra • Ràng buộc mặc nhiên • Đối tượng luật • Quy tắc chung • Trigger Chương IV : Ràng buộc Dữ liệu 44 Trigger • Trigger dùng để kiểm tra ràng buộc toàn vẹn phức tạp (không phải ràng buộc miền giá trị) • Trigger được tự động kích hoạt khi có thay đổi trên dữ liệu • Trigger thực hiện kiểm tra nhờ vào 2 bảng ảo : Inserted và Deleted • Một trigger xác định bởi : Một table X, một hay một vài acSons trong số 3 acSons : I, U, D • Một RBTV có thể cần nhiều hơn 1 trigger Chương IV : Ràng buộc Dữ liệu 45 Trigger • Inserted : Khi có thay đổi trên DL,có thể sẽ có 1 số dòng được thêm vô, inserted chỉ chứa các dòng này.
Cấu trúc giống X. • Deleted : Khi có thay đổi trên DL,có thể sẽ có 1 số dòng bị xóa đi, inserted chỉ chứa các dòng này. Cấu trúc giống X. Chương IV : Ràng buộc Dữ liệu 46 Trigger • Trigger có thể phân thành 3 dạng dựa trên cách giải quyết vấn đề : • Dạng 1 : • Kiểm tra RBTV.
• Nếu vi phạm báo lỗi và ngăn chặn. • Dạng 2 : • Kiểm tra RBTV.