Xác định đúng Data type Xác định đúng Data type của Column của Column hoặc biến variable cũng là một cách thúc ép tính toàn vẹn dữ liệu VD: không thể chấp nhận giá trị của cột Ten
Trang 1Ràng buộc (Contraint) và Toàn vẹn dữ liệu (Data Integrity)
Ràng buộc (Contraint) và Toàn vẹn dữ liệu (Data Integrity)
6
Trang 2I Giới thiệu toàn vẹn dữ liệu (Data Integrity)
Toàn vẹn dữ liệu là đề cập đến trạng thái của tất cả
các giá trị dữ liệu lưu trữ trong CSDL là đúng
Các table trong CSDL của SQL Server có một số
loại toàn vẹn dữ liệu khác nhau VD: định nghĩa NOT NULL, định nghĩa DEFAULT, thuộc tính IDENTITY, CONTRAINTS, RULES, TRIGGERS, INDEXES.
Xác định đúng Data type Xác định đúng Data type của Column của Column hoặc biến
(variable) cũng là một cách thúc ép tính toàn vẹn
dữ liệu
VD: không thể chấp nhận giá trị của cột TenSinhVien
là một giá trị dạng ngày giờ cũng như ngược lại
Trang 3Các loại Ràng buộc 4 loại
Ràng buộc thực thể: đảm bảo rằng một dòng được xác định duy nhất bởi một hoặc nhiều thuộc tính gọi là khóa chính (Primary Key)
Ràng buộc miền trị: đảm bảo rằng giá trị được lưu giữ trong 1 cột phải nằm trong một miền trị hợp lệ được xác định trước (CHECK)
Ràng buộc tham chiếu: đảm bảo rằng giá trị của khóa ngoại (Foreign Key) được lưu trữ phải là khóa chính (Primary Key) trong Table khác
Ràng buộc do người dùng định nghĩa:
Trang 4 Định nghĩa ràng buộc: Ràng buộc được định
nghĩa khi thiết kế cấu trúc table (Create Table) hay hiệu chỉnh table (Alter Table)
Để kiểm tra hoặc xem các toàn vẹn dữ liệu
Sp_HelpConstraint <Table_Name>
Hoặc Bật cửa sổ
Hoặc Bật cửa sổ Object Browser Object Browser của Query của Query
Analyzer , mở nhánh Constraint của từng table
Xóa các toàn vẹn dữ liệu
ALTER TABLE <Table_Name>
DROP CONSTRAINT <Constraint_Name>
Trang 5II Tìm hiểu các toàn vẹn dữ liệu.
1 Định nghĩa NULL/ NOT NULL
Một giá trị NULL không đồng nhất với giá trị
0, khoảng trắng, chuỗi rỗng.
NULL có nghĩa là không có thao tác nhập nào
thực hiện được.
Việc chỉ định một cột không chấp nhận giá trị
Null có thể giúp duy trì tính toàn vẹn dữ liệu.
Nên tránh dùng NULL vì chúng gây ra nhiều
phức tạp hơn trong các truy vấn cũng như cập
Trang 62 Default Contraint:
Default constraint có thể được tạo tại thời
điểm tạo Table, thêm sau khi Table được tạo.
Chì có một giá trị Default có thể được tạo cho
một cột.
Các cột TIMESTAMP, IDENTITY và
ROWGUIDCOL không thể có default constraint, vì giá trị của chính đã tự động xác định.
Giá trị default có thể là một hằng; một hàm hệ
thống; một biến toàn cục, như @@trancount hoặc một hàm do người dùng định nghĩa.
Trang 7 Định nghĩa Default constraing trong khi tạo bảng
CREATE TABLE TableName(ColumnName datatype
[NULL/NOT NULL]
[CONSTRAINT constraintname] DEFAULT expression
Định nghĩa Default constraint đối với một bảng đã
tồn tại.
ALTER TABLE tablename
ADD [CONSTRAINT constraintname] DEFAULT
expression FOR columnname
Trang 8Vd1: Định nghĩa default khi tạo table
CREATE TABLE tbl_SinhVien
( MaSV NOT NULL Primary key MaSV NOT NULL Primary key ,
HoTen Nvarchar (100) NOT NULL,
NgayNhapHoc smalldate NOT NULL,
GioiTinh bit
GioiTinh bit Defalut Defalut 1 )
Vd2: Định nghĩa default khi table đã tồn tại
Alter Table tbl_SinhVien
Add Default GetDate() GetDate() NgayNhapHoc_DF NgayNhapHoc_DF For For NgayNhapHoc
Hoặc:
ALTER TABLE tbl_SinhVien
Add Constraint NgayNhapHoc_DF Default GetDate() For
NgayNhapHoc
Trang 9 Đối tượng Default (Default Object)
Trang 103 Thuộc tính Identity:
Identity là một thuộc tính của Column, nó hẳn
không là một constraint Tuy nhiên, Identity dùng để ràng buộc sự tồn tại dữ liệu.
Một Table chỉ có duy nhất một Column được
định nghĩa Identity.
Kiểu dữ liệu của cột Identity phải là kiểu số
nguyên.
Giá trị của cột Identity sẽ tự động tăng.
Identity được định nghĩa khi tạo Table, hoặc
khi hiệu chỉnh Column bằng lệnh Alter Table
Trang 11CREATE TABLE tbl_Khoa
( MaKhoa int IDENTITY (1,1) ,
TenKhoa Nvarchar (100) Not Null,
Phone varchar(15) Not Null
)
VD: Khi chèn dữ liệu có định nghĩa Identity
INSERT tbl_Khoa (Ho, Ten)
VALUES (N ‘Công nghệ thông tin’ , ‘0613886699’ )
Trang 124 Check Constraint:
Check giới hạn các giá trị có thể đưa vào cột Chúng sẽ
xác định các giá trị nào là hợp lệ.
Một cột có thể có nhiều hơn một Check constraint,
chúng được lượng giá theo thứ tự được tạo.
Các check constraint giới hạn các giá trị được phép
Trang 13 Định nghĩa Check Constraint khi tạo Table
Create Table TableName (ColumnName datatype
[ Constraint ConstraintName]
Check [Not For Replication] (logical_expression)
CREATE TABLE tbl_NhanVien
( MaNV int Primary Key,
HoTen Nvarchar (100) Not Null,
NgayLV int Check (NgayCong> 0 and NgayCong<32) )
CREATE TABLE tbl_Diem
( MaSV char(10) Not Null,
Trang 14 Định nghĩa Check Constraint Table đã tồn tại
ALTER TABLE TableName
[With Check/ with Nocheck] ADD [CONSTRAINT
constraintname]
CHECK [Not For Replication] (logical_expression)
Alter Table tbl_ChuVu
Add Constraint CK_NV_HSCV Check
(HSPC >= 0 1 and HSCV < 0 5)
Alter Table tbl_BaoHiem
Add Constraint CK_Ngay Check (EndDate > Startdate)
Ghi chú: logical_expression là biểu thức điều kiện dùng giống
ĐK trong mệnh đề WHERE như: Not, And, Or, IN, LIKE
và các toán tử so sanh
Trang 155 Đối tượng Rule (Rule Object)
CREATE RULE RuleName AS
@Variable_Name = condition_expression
VD:
Create Rule range_rule as
@range >= $1000 AND @range < $20000
Create Rule GioiTinh_rule as
@GioiTinh IN ('Nam', N'Nữ')
Create Rule SoXe_rule as
@SoXe Like '[0-9][0-9]-[A-Z][0-9]-[0-9][0-9][0-9][0-9]'
Trang 16 Kết buộc Rule vào một Column
Trang 17 Ghi chú về Rule Object:
Ruler là một tính năng tương thích ngược để định
nghĩa các quy tắc hợp lệ.
Phải tháo gỡ tất cả các kết buộc (sp_unbindrule) của
Rule trước khi xóa rule (Drop Rule)
Một cột chỉ có thể có một Ruler được kết buộc, bạn
có thể kết buộc một Ruler với cột đã có định nghĩa Check Constraint Cả hai đều có giá trị nhưng sẽ ưu tiên Check Constraint.
Rule có thể tham chiếu đến nhiều Column của Table.
Trang 186 Primary key Constraint
• Một Table chỉ có một constraint Primary key.
• SQL Server tự động tạo một chỉ mục (Index) cho
Table ứng với các cột tham gia primary key.
• Column là Primary key không thể chấp nhận giá
trị Null, trùng lắp.
• Nếu một Primary key constraint được ấn định
trên nhiều cột, các giá trị có thể được lập lại trong một cột, nhưng mỗi sự kết hợp giá trị từ tất cả các cột trong Primary key constraint phải là sự kết hợp duy nhất.
Trang 19a Tạo Primary key Constraint
• Có thể tạo constraint Primary key trong khi tạo
Table hoặc thêm constraint Primary key cho table có sẵn.
• Để hiệu chỉnh constraint Primary key của một
Table thì bạn phải xóa constraint Primary key và tạo lại.
• Đối với Column được tạo mà chấp nhận giá trị
NULL khi hiệu chỉnh cột đó là giá Primary Key thì ta phải hiệu chỉnh NOT NULL trước sau đó
Trang 20Định nghĩa primary Key Constraint khi tạo bảng:
CREATE TABLE <TableName>
( ColumnName DataType not null [
( ColumnName DataType not null [CONSTRAINT CONSTRAINT
ConstraintName]
ConstraintName] PRIMARY KEY PRIMARY KEY )
Create Table tbl_SinhVien
( MaSV char(10) not null Primary Key,
TenSV Nchar(100) Not Null )
Create Table tbl_MonHoc
( MaMH char(10) not null
Constraint PK_MaMH Primary Key,
TenMH Nchar(100) Not Null )
Trang 21Định nghĩa Primary Key Constraint bảng đã tồn tại: ALTER TABLE TableName
ADD [CONSTRAINT ConstraintName]
PRIMARY KEY (ColumnName)
VD:
Create Table tbl_Diem
( MaSV char(10) Not null,
MaMH char(10) Not null,
Trang 22Định nghĩa Primary Key Constraint bảng đã tồn tại:
ALTER TABLE TableName
ADD [CONSTRAINT ConstraintName]
PRIMARY KEY (ColumnName)
VD:
Create Table tbl_Diem
( MaSV char(10) Not null,
MaMH char(10) Not null,
Diem float
Diem float Check Check (DiemThi Between (DiemThi Between 0 and 10 )
)
Alter Table tbl_Diem
Add Constraint PK_tbl_Diem
Primary Key Primary Key (MaSV, MaMH )
Trang 23Lưu ý: Không thể xóa một Primary
Key Constraint nếu nó được tham
Trang 246 Forein key Constraint
• Một khóa ngoại (Foreign Key) sự kết hợp của
một hoặc nhiều cột được thiết lập và tuân theo một liên kết giữa các dữ liệu trong hai bảng
• Mặc dù mục đích chính của một Constraint Mặc dù mục đích chính của một Constraint
Foreign Key là điều khiển dữ liệu có thể được chứa trong bảng khóa ngoại, nhưng nó củng điều khiển các thay đổi đối với bảng khóa chính
• Một Constraint Foreign Key Một Constraint Foreign Key sẽ ngăn chặn tình
trạng mồ côi dữ liệu
trạng mồ côi dữ liệu Constraint Foreign Key Constraint Foreign Key sẽ bảo đảm không cho phép bạn xóa dữ liệu trong bản chính chứa
bản chính chứa Primary Key Primary Key
Trang 25Định nghĩa Foreign Key Constraint khi tạo Table:
CREATE TABLE Table_Name
( Column_Name DataType [,…] ,
[
[CONSTRAINT CONSTRAINT Constraint_Name]
FOREIGN KEY [(column [,…n])]
REFERENCES ref_table [(ref_column[,…n])]
[ON DELETE {CASCADE | NO ACTION} ]
[ON UPDATE {CASCADE | NO ACTION} ]
Trang 26CREATE TABLE PhongBan
TenPB varchar (30)
TenNV Nvarchar (100),
MaPB int not null,
MaCV int not null
)
Trang 27Đ/nghĩa Foreign Key Constraint khi Table đã tồn tại:
[ WITH CHECK / WITH NO CHECK] ADD
[
[ON DELETE { CASCADE | NO ACTION } ]
[ON UPDATE { CASCADE | NO ACTION } ]
[NOT FOR REPLICATION]
Trong đó:
vi phạm ràng buộc hay không, nếu có sẽ không tạo Constraint.
Trang 28Create Table ChucVu
( MaCV int PRIMARY KEY,
TenCV varchar (30),
HSPC Real )
Alter Table NhanVien
Add Constraint FK_NV_CV FK_NV_CV Foreign Key Foreign Key (MaCV)
References ChucVu (MaCV)
Lưu ý:
• ON DELETET CASCADE | NO ACTION
• ON UPDATE CASCADE | NO ACTION
Trang 29Định nghĩa UNIQUE Constraint khi tạo Table:
CREATE TABLE TableName
( ColumnName datatype [,…]
[
[CONSTRAINT CONSTRAINT ConstraintName]
UNIQUE [CLUSTERED | NONCLUSTERED]
{ (Column [ASC | DESC] [,…])}
[ON {filegroup | DEFAULT}])
)
Trang 30Định nghĩa UNIQUE Constraint Table đã tồn tại:
ALTER TABLE TableName
ADD ColumnName Datatype
[CONSTRAINT ConstraintName]
UNIQUE [CLUSTERED | NONCLUSTERED]
[ON {filegroup / DEFAULT}] [,…]
Hoặc:
ALTER TABLE TableName
ADD [ [CONSTRAINT CONSTRAINT ConstraintName]
UNIQUE [CLUSTERED | NONCLUSTERED]
{ (Column [ASC | DESC][,…n]) } [ ON { filegroup | DEFAULT} ]