Transcript PPT

Microsoft
Outline


Data Integrity
Enforcing Data Integrity





Types of Constraints
Defining Constraints
Disabling Constraints
Using Defaults and Rules
Deciding enforcement method to use
Microsoft
Data Integrity
Tính toàn vẹn dữ liệu


Tập các ràng buộc nhằm đảm bảo chất lượng dữ liệu trong các
CSDL: dữ liệu là đúng đắn, tin cậy, nhất quán.
Toàn vẹn miền giá trị
Các kiểu toàn vẹn:
(columns)
Toàn vẹn định nghĩa
Bởi người sử dụng
Toàn vẹn thực thể (rows)
Toàn vẹn
liên kết
(between tables)
Microsoft
Types of Constraints






PRIMARY KEY constraints
UNIQUE constraints
CHECK constraints
DEFAULT constraints
FOREIGN KEY constraints
Cascading referential integrity
Microsoft
Cài đặt tính toàn vẹn dữ liệu

Cài đặt lúc khai báo lược đồ CSDL



Khai báo thuộc tính các cột: PRIMARY KEY, NOT NULL,
UNIQUE, DEFAULT, FOREIGN KEY
Thêm vào các bảng: constraints, defaults, and rules
Cài đặt bằng các thủ tục

Microsoft
scripts, triggers and stored procedures
Ràng buộc PRIMARY KEY




PRIMARY KEY là một cột hoặc một tập các cột dùng để nhận diện
(phân biệt) các bản ghi dữ liệu
Mỗi bảng có nhiều nhất 1 PRIMARY KEY
Các giá trị trên PRIMARY KEY là duy nhất, không được phép NULL
Index tự động sinh ra trên PRIMARY KEY
USE qlnv
CREATE TABLE DMNN
(Mann char (2) PRIMARY KEY,
Tennn nvarchar(20))
CREATE TABLE DMNN
(Mann char (2),
Tennn nvarchar(20),
CONSTRAINT PK_DMNN PRIMARY KEY (Mann)
Microsoft
)
USE qlnv
CREATE TABLE TDNN
(Manv char (6) NOT NULL,
Mann char(2) NOT NULL,
Tdo smallint);
Alter TABLE TDNN
ADD CONSTRAINT PK_TDNN
PRIMARY KEY (Manv, Mann)
Ràng buộc UNIQUE




Ràng buộc UNIQUE có thể định nghĩa trên một cột hoặc
một tập các cột
Cho phép 1 bản ghi có giá trị NULL
Một bảng có thể có nhiều ràng buộc UNIQUE
A unique Index tự động sinh ra trên cột UNIQUE
USE qlnv;
ALTER TABLE DMNN
ADD CONSTRAINT U_Tennn
UNIQUE NONCLUSTERED (Tennn)
Microsoft
USE qlnv;
CREATE TABLE DMNN
ADD CONSTRAINT U_Tennn
UNIQUE NONCLUSTERED (Tennn)
Ràng buộc CHECK

Ràng buộc CHECK được định nghĩa trên một hoặc
nhiều cột của cúng một bảng
USE qlnv;
CREATE TABLE Nhanvien
( Manv char (8) PRIMARY KEY,
HoTen nvarchar(50) NOT NULL,
Ngaysinh datetime CHECK (Ngaysinh BETWEEN '01-01-1900' AND '01-01-2012'),
maphong int
)
USE qlnv;
ALTER TABLE Nhanvien
ADD CONSTRAINT CK_ngaysinh CHECK (ngaysinh > '01-01-1900' AND ngaysinh <‘01-01-2012’)
Microsoft
Ràng buộc DEFAULT



Được thực hiện với các lệnh INSERT
Mỗi cột chỉ có tối đa 1 ràng buộc DEFAULT
Không sử dụng các cột có tính chất IDENTITY
hoặc các cột có kiểu dữ liệu rowversion
USE qlnv
CREATE TABLE Phong
( MaPhong int PRIMARY KEY,
TenPhong nvarchar(40) UNIQUE,
DiaChi nvarchar(50) DEFAULT
N'123-Đống Đa - HN',
Tel char (10)
)
Microsoft
USE qlnv
CREATE TABLE Phong
( MaPhong int PRIMARY KEY,
TenPhong nvarchar(40) UNIQUE,
DiaChi nvarchar(50),
Tel char (10)
)
ALTER TABLE phong
ADD CONSTRAINT DF_diachi
DEFAULT ‘123-Đống Đa - HN'
FOR DiaChi
Ràng buộc Default


Rang buộc DEFAULT cũng có thể được định nghĩa như
các đối tượng độc lập
Và gắn với cột hoặc kiểu dữ liệu người dùng
CREATE DEFAULT [schema_name.] default_name AS
constant_expression [ ; ]
EXEC sp_bindefault <default_name>, <Object_name>
CREATE DEFAULT phone_no_default
AS '(000)000-0000'
GO
EXEC sp_bindefault phone_no_default, ‘Phong.Tel'
Microsoft
Ràng buộc khóa ngoài FOREIGN KEY


Phải tham chiếu đến thuộc tính là PRIMARY KEY or
UNIQUE của bảng khác
Phải có quyền SELECT or REFERENCES trên bảng
tham chiếu đến
CREATE TABLE TDNN
(manv char(8),
mann char(2),
TDo smallint,
PRIMARY KEY (manv,mann),
CONSTRAINT FK_TDNN_NhanVien FOREIGN KEY (manv) REFERENCES Nhanvien(manv),
FOREIGN KEY (mann) REFERENCES DMNN(mann)
)
Microsoft
Các loại ràng buộc tham chiếu

Khi xóa hoặc cập nhật khóa chính của một bảng, nếu
khóa chính đó được tham chiếu từ bảng khác thì mặc
định SQL server không cho phép xóa hoặc cập nhật
khóa chính này. Tuy nhiên có thể lựa chọn: SET NULL,
SET DEFAULT, CASCADE
[ON DELETE {NO ACTION|CASCADE|SET NULL|SET DEFAULT}]
[ON UPDATE {NO ACTION|CASCADE|SET NULL|SET DEFAULT}]
ALTER TABLE TDNN
DROP CONSTRAINT FK_TDNN_DMNN
ALTER TABLE TDNN
ADD CONSTRAINT FK_TDNN_DMNN FOREIGN KEY (Mann) REFERENCES
DMNN(Mann) ON DELETE CASCADE
Microsoft
Disabling Constraints

Disabling constraint checking on existing data


Using WITH NOCHECK option when adding a new constraint
Applied to CHECK and FOREIGN KEY constraints
USE Northwind
ALTER TABLE dbo.Employees
WITH NOCHECK
ADD CONSTRAINT FK_Employees_Employees
FOREIGN KEY (ReportsTo)
REFERENCES dbo.Employees(EmployeeID)
Microsoft
Disabling Constraints

Disabling constraint checking when loading new data


Using NOCHECK option before loading new data
Applied to CHECK and FOREIGN KEY Constraints
USE Northwind
ALTER TABLE dbo.Employees
NOCHECK
CONSTRAINT FK_Employees_Employees
Microsoft
Rule Constraints
CREATE RULE [schema_name.] rule_name
AS <condition_expression>
GO
EXEC sp_bindrule regioncode_rule,'Customers.Region'
CREATE RULE regioncode_rule
AS @regioncode IN ('IA', 'IL', 'KS', 'MO')
GO
EXEC sp_bindrule regioncode_rule,'Customers.Region'
Microsoft
Note: CREATE RULE may be not supported anymore
in next version of SQL Server
Enforcement Method to Use
Data integrity
components
Functionality Performance Before or after
costs
modification
Constraints
Medium
Low
Before
Defaults and rules
Low
Low
Before
Triggers
High
Medium-High After
Data types,
Null/Not Null
Low
Low
Microsoft
Before
Summary

Các ràng buộc toàn vẹn dữ liệu là phương tiện đảm bảo
tính đúng đắn, tính hợp lý và tính đầy đủ của dữ liệu

Cài đặt toàn vẹn dữ liệu giúp cho việc duy trì cơ sở dữ
liệu luôn trong trạng thái hợp lý, đúng đắn và đầy đủ
trong quá trình CSDL được cập nhật
Using các ràng buộc toàn vẹn là quan trọng,…, nhưng
chỉ khi cần thiết.

Microsoft