Tải bản đầy đủ (.pdf) (67 trang)

Chuong4 rangbuoctoanven

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.29 MB, 67 trang )

Chương 4

Ràng Buộc Dữ
Liệu


Nội dung
1

Giới thiệu

2

Phân loại

3

Qui tắc chung

4

User-defined Constraint


Mục tiêu
Mỗi thể hiện của
thực thể là duy nhất

RB về kích thước,
định dạng, miền giá trị


Thực thể

Miền giá trị

Tham chiếu

RB tự định
nghĩa

RB tham chiếu
giá trị

RB nghiệp vụ mà
3 loại trên không
kiểm tra được


Mục tiêu
Chuyển trách nhiệm kiểm tra RBDL cho SQL
Server làm một cách tự động mỗi khi có thay đổi
trên DL (Con người không cần kiểm tra thủ công)


Nội dung
1

Giới thiệu

2


Phân loại

3

Qui tắc chung

4

User-defined Constraint


Phân loại

1. Primary

1. Trigger

2. Foreign

3. Check

4. Unique

5. Default

6. Rule


Ví dụ Rule
CREATE RULE ur_LuongDuong

AS @Luong>0
ur_LuongDuong

sp_bindRule
NHANVIEN
MaNV …

Luong

NV1



10000

NV2
NV3




30
-40

sp_unbindRule

sp_bindRule ‘ur_LuongDuong’,’NhanVien.Luong’
sp_unbindRule ‘NhanVien.Luong’



Nội dung
1

Giới thiệu

2

Phân loại

3

Qui tắc chung

4

User-defined Constraint


Qui tắc chung
vSQL constraints có 3 cách tạo
§ Tạo trong tạo bảng
Ø Ràng buộc trên thuộc tính
Ø Ràng buộc trên bảng

§ Tạo ngồi bảng

v Ví dụ : tạo ràng buộc Unique


RB trên thuộc tính

Chỉ áp dụng
cho RB trên
một thuộc tính

CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)


RB trên bảng
CREATE TABLE Persons3
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Áp dụng cho
các RB có trên
Address varchar(255),
Cho phép đặt
2 thuộc tính
tên ràng buộc
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)



RB bên ngoài bảng
ALTER TABLE Persons
ADD CONSTRAINT Uc_Person
UNIQUE (P_id, LastName)
Áp dụng cho
các RB có trên
2 thuộc tính

Cho phép đặt
tên ràng buộc


Qui tắc chung
vVơ hiệu hóa { Check | Foreign } constraint
đang có hiệu lực
Alter table <Tab_name> Nocheck constraint
{ALL | constraint_name [,…n]}
§ Ví dụ :
ALTER TABLE SINHVIEN
NOCHECK CONSTRAINT
C_Phai, chk_Nam

ðLưu ý: Primary, Unique, Default luôn ở trạng
thái hoạt động


Qui tắc chung
vHiệu lực hóa { Check | Foreign } constraint đã
mất hiệu lực

Alter table <Tab_name> Check constraint
{ALL | constraint_name [,…n]}
§ Ví dụ :
ALTER TABLE SINHVIEN
CHECK CONSTRAINT
C_Phai, chk_Nam


Ví dụ


Ví dụ


Nội dung
1

Giới thiệu

2

Phân loại

3

Qui tắc chung

4

User-defined Constraint



User-defined Constraint
Mục tiêu
ü Cài đặt RBTV phức tạp
üCác qui tắc nghiệp vụ

Năm kết thúc khóa học phải lớn hơn hoặc
bằng năm bắt đầu

Đặc điểm
üLà một thủ tục đặc biệt
üKhơng có tham số
üThuộc duy nhất một bảng
Hoạt động
üĐược kích hoạt tự động thông qua các thao tác
(Insert, Update, Delete)
üDựa trên bảng tạm: Inserted, Deleted


User-defined Constraint
vInserted : Khi có thay đổi trên DL, có thể sẽ có một
hoặc một số dịng được thêm vào bảng X. Các dòng
này sẽ được đưa vào bảng inserted (có cấu trúc giống
X).
vDeleted : Khi có thay đổi trên DL, có thể sẽ có một
hoặc một số dịng bị xóa đi. Các dịng này sẽ được đưa
vào bảng deleted (cấu trúc giống X).



User-defined Constraint
vCác bước xây dựng trigger
§ Bước 1: xác định bảng tầm ảnh hưởng.
§ Bước 2: với mỗi quan hệ trong bảng tầm ảnh hưởng
xác định xử lí trên các thao tác khi vi phạm RBTV.
§ Bước 3: các thao tác có cùng xử lí sẽ được viết
trong cùng một trigger.


User-defined Constraint
vCú pháp

Quan hệ bị ảnh
hưởng

Create trigger tên_trigger
On {tên_bảng|tên_view}
{For| After| Instead of } { [delete] [,] [insert] [,]
[update] }
Thao tác bị ảnh
As
hưởng
Begin
{ các lệnh T-sql }
Xữ lí khi có vi
End
phạm RBTV
Go



User-defined Constraint
vNếu thao tác insert/ delete/ update thực hiện
trên nhiều dịng, trigger cũng chỉ được gọi một
lần
àBảng inserted/ deleted có thể chứa nhiều dòng


User-defined Constraint
vFor | After:
§ Trigger được gọi thực hiện sau khi thao tác delete/
insert/ update tương ứng đã được thực hiện thành
cơng
• Các dịng mới được thêm chứa đồng thời trong bảng
dữ liệu và bảng inserted
• Các dịng bị xố chỉ nằm trong bảng deleted (đã bị xoá
khỏi bảng dữ liệu)

§ Có thể xử lý quay lui thao tác đã thực hiện bằng
lệnh rollback transaction


User-defined Constraint
vInstead of:
§ Trigger được gọi thực hiện thay cho thao tác
delete/ insert/ update tương ứng
• Các dịng mới được thêm chỉ chứa trong bảng inserted
• Các dịng bị chỉ định xoá nằm đồng thời trong bảng
deleted và bảng dữ liệu (dữ liệu khơng bị xố).

§ Trigger Instead of thường được dùng để xử lý cập

nhật trên khung nhìn (view).


User-defined Constraint
vLưu ý:
§ Trên một bảng có thể định nghĩa nhiều trigger
for/after cho mỗi thao tác…
§ Trong thân trigger, có thể sử dụng hàm
Update(tên_cột) để kiểm tra xem việc cập nhật/
insert được thực hiện trên cột nào.
• Update(tên_cột) = true : có thực hiện cập nhật trên cột
tên_cột


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×