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

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
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
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.
Khai báo constraint
CREATE TABLE [schema.]ten_bang (cot kieu_du_lieu [DEFAULT bieu_thuc] [constraint_muc_cot], ... [constraint_muc_bang][,...])
Ví dụ constraint
- Tên vật tư phải duy nhất 0<=
- PhanTram <= 100
- Giá trị mặc định cho cột đơn vị tính là ""
ALTER TABLE vattu ADD CONSTRAINT chk_phantram CHECK (phantram BETWEEN 0 AND 100 ), CONSTRAINT u_tenvtu UNIQUE(tenvtu), CONSTRAINT d_dvtinh DEFAULT '' FOR dvtinh
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
Ví dụ mô hình quan hệ
ALTER TABLE ctpxuat ADD CONSTRAINT fk_ctpxuat_vattu FOREIGN KEY(mavtu) REFERENCES vattu(mavtu) ON DELETE CASCADE ON UPDATE CASCADE -- có 4 loại CASCADE, No Action, Set Null, Set Default