27
1 1 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM TRUNG TÂM TIN HỌC SQL Server

Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

Embed Size (px)

DESCRIPTION

Các quy định của công việc trong thực tế • Trong thực tế mỗi công việc đều có những quy định phải tuân theo − Mỗi quy định trở thành một hay nhiều ràng buộc trong CSDL − Một số quy định đơn giản, mặc nhiên thấy cũng phải mô tả trong CSDL • Ví dụ quản lý đơn đặt hàng − Số lượng đặt hàng phải lớn hơn 0 − Các số hoá đơn giao hàng không được trùng nhau − Ngày dự kiến nhận hàng phải sau ngày đặt hàng − Một đơn đặt hàng phải do một khách hành lập ra − Mỗi một mặt hàng phải có nhà cung cấp (mỗi mặt hàng phải có xuất xứ) − Số lượng mặt hàng giao cho khách phải nhỏ hơn hay tối đa bằng với số lượng đặt − Hai nhà cung cấp có thể trùng tên nhưng là hai nhà cung cấp khác nhau

Citation preview

Page 1: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

11

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

SQL Server

Page 2: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

22

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các ràng buộc toàn vẹn dữ liệu

3

Page 3: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

33

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Ràng buộc toàn vẹn dữ liệu - Constraint

Page 4: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

44

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các quy định của công việc trong thực tế Các quy định của công việc trong thực tế • Trong thực tế mỗi công việc đều có những quy định phải tuân theo

− Mỗi quy định trở thành một hay nhiều ràng buộc trong CSDL

− Một số quy định đơn giản, mặc nhiên thấy cũng phải mô tả trong CSDL

• Ví dụ quản lý đơn đặt hàng− Số lượng đặt hàng phải lớn hơn 0

− Các số hoá đơn giao hàng không được trùng nhau

− Ngày dự kiến nhận hàng phải sau ngày đặt hàng

− Một đơn đặt hàng phải do một khách hành lập ra

− Mỗi một mặt hàng phải có nhà cung cấp (mỗi mặt hàng phải có xuất xứ)

− Số lượng mặt hàng giao cho khách phải nhỏ hơn hay tối đa bằng với số lượng đặt

− Hai nhà cung cấp có thể trùng tên nhưng là hai nhà cung cấp khác nhau

Page 5: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

55

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các ràng buộc toàn vẹn dữ liệu Các ràng buộc toàn vẹn dữ liệu • SQL Server chia làm hai loại chính

− Loại đơn giản: sử dụng CONSTRAINT để mô tả

− Loại phức tạp: sử dụng TRIGGER để thực hiện

• Các loại ràng buộc đơn giản− Kiểm tra duy nhất

• PRIMARY KEY, UNIQUE

− Kiểm tra khác rỗng• NOT NULL

− Kiểm tra tồn tại • FOREIGN KEY

− Kiểm tra miền giá trị • CHECK, DEFAULT

Page 6: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

66

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Nguyên tắc chung• Một constraint luôn gắn với một bảng

• Nếu không đặt tên thì hệ thống sẽ tự động phát sinh tên cho constraint.

• Có thể tạo constraint :− Cùng với thời điểm tạo bảng hoặc

− Sau khi đã tạo bảng xong

• Có thể khai báo constraint ở mức cột hoặc mức bảng.

• Có thể xem các constraint hiện có trong Database.

Page 7: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

77

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Khai báo constraintCREATE TABLE [schema.]ten_bang

(cot kieu_du_lieu [DEFAULT bieu_thuc][constraint_muc_cot],...[constraint_muc_bang][,...])

CREATE TABLE nhanvien( manhanvien NUMERIC(6), honv NVARCHAR(20), ... macongviec NVARCHAR(10) NOT NULL,

CONSTRAINT nv_manhanvien_pk PRIMARY KEY (MANHANVIEN))

Page 8: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

88

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Khai báo Constraint• Constraint mức cột

• Constraint mức bảng

column [CONSTRAINT ten_constraint] loai_constraint

column,... [CONSTRAINT ten_constraint]

loai_constraint tham_so

Page 9: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

99

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint NOT NULLĐảm bảo rằng giá trị NULL sẽ không tồn tại trong cột

NOT NULL constraint(Không dòng nào được phép chứa giá trị NULL cột này.)

Không tồn tại NOT NULL constraint(Dòng bất kỳ có thể chứa giá trị null.)

NOT NULL constraint

Page 10: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1010

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

CREATE TABLE nhanvien( manhanvien NUMERIC(6), tennv NVARCHAR(25) NOT NULL, mucluong NUMERIC(10), phucap NUMERIC(10), ngayvaolam DATE CONSTRAINT nv_ngayvaolam_nn NOT NULL,...

Constraint NOT NULLĐược khai báo ở mức cột

Tên của hệ thống

Tên người

dùng đặt

Page 11: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1111

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint UNIQUEEMPLOYEES

UNIQUE constraint

Thêm vào

Không cho phép vì đã tồn tại

Cho phép

Page 12: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1212

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint UNIQUEKhai báo ở mức bảng hoặc mức cột:

CREATE TABLE nhanvien( manhanvien NUMERIC(6), tennv NVARCHAR(25) NOT NULL, email NVARCHAR(25), mucluong NUMERIC(8,2),... CONSTRAINT nv_email_uk UNIQUE(email))

CREATE TABLE nhanvien( manhanvien NUMERIC(6), tennv NVARCHAR(25) NOT NULL, email NVARCHAR(25) UNIQUE, mucluong NUMERIC(8,2),...

hoặc

Page 13: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1313

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint PRIMARY KEYDEPARTMENTS

PRIMARY KEY

Thêm vào bảngKhông cho phép(giá trị Null)

Không cho phép(50 đã tồn tại)

Page 14: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1414

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

CREATE TABLE phong( maphong NUMERIC(4) PRIMARY KEY, tenphong NVARCHAR(30) CONSTRAINT phong_ten_nn NOT NULL, manguoiquanly NUMERIC(6), makhuvuc NUMERIC(4))

Constraint PRIMARY KEYKhai báo ở mức cột hoặc mức bảng:

CREATE TABLE phong( maphong NUMERIC(4), tenphong NVARCHAR(30) CONSTRAINT phong_ten_nn NOT NULL, manguoiquanly NUMERIC(6), makhuvuc NUMERIC(4), CONSTRAINT phong_ma_pk PRIMARY KEY(maphong))

hoặc

Page 15: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1515

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint FOREIGN KEYPHONG

NHANVIEN KHÓA NGOẠI (FK)

Thêm vào Không cho phép(75 không tồn tại)

Cho phépCho phép

KHÓA CHÍNH (PK)

Page 16: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1616

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint FOREIGN KEY

CREATE TABLE nhanvien( manhanvien NUMERIC(6), tennv NVARCHAR(25) NOT NULL, email NVARCHAR(25), mucluong NUMERIC(10, phucap NUMERIC(10), ngayvaolame DATE NOT NULL,... maphong NUMERIC(4), CONSTRAINT nv_phong_fk FOREIGN KEY (maphong) REFERENCES phong(maphong), CONSTRAINT nv_email_uk UNIQUE(email))

Khai báo ở mức bảng hoặc mức cột:

Page 17: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1717

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Cú pháp constraint FOREIGN KEYFOREIGN KEY [( cot [ ,...n ] ) ] REFERENCES Ten_bang_tham_chieu [ ( cot [ ,...n ] ) ] [ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }] [ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }]

Page 18: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1818

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Constraint CHECK• Khai báo những qui định mà mỗi dòng đều phải

thỏa mãn

• Dùng để kiểm tra miền giá trị của dữ liệu

..., mucluong NUMERIC(10) CONSTRAINT nv_luong_min CHECK (mucluong >= 0),...

[CONSTRAINT ten_constraint] CHECK (bieu_thuc_luan_ly)

Page 19: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

1919

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Thêm Constraint mới vào bảng

ALTER TABLE bang ADD [CONSTRAINT ten_constraint] Loai_Constraint Tham_so

• Dùng để tạo constraint sau khi đã tạo bảng

• Sử dụng lệnh ALTER TABLE.

Page 20: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2020

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Cú pháp chi tiết từng loại constraint

ALTER TABLE bang ADD [CONSTRAINT ten_constraint] PRIMARY KEY (danh_sach_cot_khoa_chinh)hoặc UNIQUE (danh_sach_cot)hoặc FOREIGN KEY (danh_sach_cot_khoa_ngoai)

REFERENCES bang_tham_chieu (ds_cot_tham_chieu)hoặc CHECK (bieu_thuc_luan_ly)hoặc DEFAULT gia_tri_mac_dinh FOR Ten_cot

Page 21: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2121

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Xóa Constraint• Cú pháp

• Ví dụ

ALTER TABLE nhanvienDROP CONSTRAINT nv_luong_min

ALTER TABLE ten_bangDROP CONSTRAINT ten_constraint [,…]

Page 22: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2222

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Tắt kiểm tra Constraints

ALTER TABLE ten_bangNOCHECK CONSTRAINT ALL | ten_constraint[,...]

Bật lại kiểm tra Constraints

ALTER TABLE ten_bangCHECK CONSTRAINT ALL | ten_constraint[,...]

Page 23: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2323

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Xem các constraint trong một bảng• Xem bằng SSMS.

• Xem bằng câu lệnh

• Xem từ view hệ thống sys.objects

sp_helpconstraint ‘ten_bang’Hoặc sp_help ‘ten_bang’

SELECT * FROM sys.objects WHERE parent_object_id IN (SELECT object_id FROM sys.objects

WHERE name=‘Ten_bang')

Page 24: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2424

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Mô hình quan hệ dữ liệu (Diagram)

Page 25: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2525

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Khái niệm về mô hình quan hệ dữ liệu Khái niệm về mô hình quan hệ dữ liệu

• Thể hiện mối quan hệ giữa các bảng trong CSDL

• Có thể sử dụng để− Thiết lập mối quan hệ khoá ngoại (FOREIGN KEY)

− Chỉnh sửa cấu trúc bảng

− Chỉnh sửa thuộc tính bảng

− Tạo bảng mới

Page 26: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2626

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Ví dụ mô hình quan hệVí dụ mô hình quan hệ

Page 27: Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server

2727

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Tạo mới mô hình quan hệ dữ liệu Tạo mới mô hình quan hệ dữ liệu

• Chỉ có thể tạo bằng SSMS

• Với một CSDL lớn, tạo một hay nhiều mô hình cho các nghiệp vụ thực tế khác nhau