Professional Documents
Culture Documents
v Mục đích của việc tăng cường tính toàn vẹn của
SQL.
v Cách định nghĩa các ràng buộc toàn vẹn dùng SQL.
2
Nội dung chương 7
3
Các kiểu dữ liệu của SQL chuẩn ISO
Cơ sở dữ liệu – Đại số quan hệ
4
Đặc tính tăng cường tính toàn vẹn dữ
liệu
5
Đặc tính tăng cường tính toàn vẹn dữ
liệu
6
Đặc tính tăng cường tính toàn vẹn dữ
liệu
Diemtoan DECIMAL(4,2)
CONSTRAINT chk_diemtoan
CHECK(diemtoan>=0 AND diemtoan<=10)
7
Đặc tính tăng cường tính toàn vẹn dữ
liệu
CONSTRAINT chk_lop
CHECK (NamNhapHoc<=YEAR(GETDATE()) AND
HeDaoTao IN (‘chính quy’,‘liên thông’))
8
Đặc tính tăng cường tính toàn vẹn dữ
liệu
[DEFAULT defaultOption]
[CHECK (searchCondition)]
Ví dụ:
CREATE DOMAIN SexType AS CHAR
CHECK (VALUE IN ('M', 'F'));
sex SexType NOT NULL
9
Đặc tính tăng cường tính toàn vẹn dữ
liệu
10
Ràng buộc về thực thể
v Khóa chính của một bảng phải chứa một giá trị duy
nhất và khác NULL
Cơ sở dữ liệu – Đại số quan hệ
12
Ràng buộc trong tham khảo dữ liệu
13
Ràng buộc trong tham khảo dữ liệu
14
Ràng buộc trong tham khảo dữ liệu
15
Ràng buộc trong tham khảo dữ liệu
16
Ràng buộc ASSERTION
v Hay:
CREATE ASSERTION AssertionName
CHECK (searchCondition)
v Giống như sử dụng mệnh đề CHECK
17
Ràng buộc ASSERTION
v GENERAL ASSERTION
Cơ sở dữ liệu – Đại số quan hệ
18
Ràng buộc từ ASSERTION
v Ví dụ: Một sinh viên với GPA < 4.0 chỉ được đăng ký
vào campus có rank (cấp bậc) > 3.
Cơ sở dữ liệu – Đại số quan hệ
19
Ràng buộc ASSERTION
FROM PropertyForRent
GROUP BY staffNo
HAVING COUNT(*) > 100))
20
Định nghĩa dữ liệu
22
CREATE SCHEMA
23
CREATE TABLE
v Tạo một bảng với các cột, mỗi cột có kiểu dữ liệu
riêng
Cơ sở dữ liệu – Đại số quan hệ
v Với NOT NULL, cột không chấp nhận giá trị NULL
v Mỗi cột có thể đặt một giá trị DEFAULT
v Khóa chính phải đặt NOT NULL
v FOREIGN KEY có chỉ ra chế độ thao tác xóa/sửa ở
cột có liên quan bảng cha
25
Ví dụ 7.1 - CREATE TABLE
27
ALTER TABLE
28
Ví dụ 7.2(a) - ALTER TABLE
Female ('F').
29
Ví dụ 7.2(b) - ALTER TABLE
mới
31
BÀI TẬP
Cơ sở dữ liệu – Đại số quan hệ
32
BÀI TẬP
Cơ sở dữ liệu – Đại số quan hệ
33
BÀI TẬP
Cơ sở dữ liệu – Đại số quan hệ
34
BÀI TẬP
Cơ sở dữ liệu – Đại số quan hệ
35
BÀI TẬP
Xét bảng:
TranDau(MaTD, NgayTD, GioBD, GioKT)
Cơ sở dữ liệu – Đại số quan hệ
36
View
37
Lệnh CREATE VIEW
38
Lệnh CREATE VIEW
39
Ví dụ 7.3 - Tạo View theo chiều ngang
40
Ví dụ 7.4 - Tạo View theo chiều dọc
Tạo view chi tiết nhân viên tại chi nhánh B003
không có cột salaries.
Cơ sở dữ liệu – Đại số quan hệ
41
Ví dụ 7.5 - Tạo View có nhóm, có kết dữ
liệu
42
Ví dụ 7.5 - Tạo View có nhóm, có kết dữ
liệu
Cơ sở dữ liệu – Đại số quan hệ
43
Lệnh DROP VIEW
44
Sự phân giải view (view phân giải)
45
Sự phân giải view (view phân giải)
(a) Các tên cột của view sau SELECT được phân giải
thành các tên tương ứng trong truy vấn định
Cơ sở dữ liệu – Đại số quan hệ
nghĩa:
SELECT s.staffNo As staffNo, COUNT(*) As cnt
(b) Tên view sau FROM được thay thế bằng danh
sách sau phần FROM của truy vấn định nghĩa
view:
FROM Staff s, PropertyForRent p
46
Sự phân giải view (view phân giải)
(c) Cuối cùng, truy vấn sau sẽ thực thi để lấy kết
quả:
Cơ sở dữ liệu – Đại số quan hệ
47
Giới hạn cho view
48
Giới hạn cho view
SELECT COUNT(cnt)
Cơ sở dữ liệu – Đại số quan hệ
FROM StaffPropCnt;
SELECT *
FROM StaffPropCnt
WHERE cnt > 2;
49
Giới hạn cho view
(b) View có nhóm không được kết với các view khác
hay kết với các bảng dữ liệu nền.
Cơ sở dữ liệu – Đại số quan hệ
50
Việc cập nhật view
51
Việc cập nhật view
52
Việc cập nhật view
v SQL chuẩn ISO qui định một view cập nhật được
nếu:
-Không dùng DISTINCT
Cơ sở dữ liệu – Đại số quan hệ
v LOCAL/CASCADED
v Nếu dùng LOCAL: không cho các hàng ra khỏi
Cơ sở dữ liệu – Đại số quan hệ
55
Ví dụ 7.6 - Dùng WITH CHECK OPTION
FROM Staff
WHERE branchNo = 'B003'
WITH CHECK OPTION;
v Không thể sửa B003 thành B002 vì khi đó các hàng
sẽ biến khỏi view.
56
Ví dụ 7.6 - Dùng WITH CHECK OPTION
57
Ví dụ 7.6 - WITH CHECK OPTION
UPDATE Manager3Staff
SET salary = 9500
Cơ sở dữ liệu – Đại số quan hệ
58
Vi dụ 7.6 - WITH CHECK OPTION
59
Ưu điểm của View
60
Cơ sở dữ liệu – Đại số quan hệ
61
Ưu điểm của View
Nhược điểm của View
v Chậm hơn
62
Bài tập
Cơ sở dữ liệu – Đại số quan hệ
a. Có thể thông qua khung nhìn này để bổ sung dữ liệu cho bảng
DONDATHANG được không?
b. Có thể thông qua khung nhìn này để bổ sung dữ liệu cho bảng
CHITIETDATHANG được không?
63
Bài tập
Cơ sở dữ liệu – Đại số quan hệ
a. Có thể thông qua khung nhìn này để xoá hay cập nhật dữ liệu
trong bảng DONDATHANG được không?
b. Có thể thông qua khung nhìn này để cập nhật dữ liệu trong bảng
CHITIETDATHANG được không?
64
BÀI TẬP
Xét bảng:
MatHang(MaMH, TenMH, DonGia, SoLuongTon)
HoaDon(MaHD, NgayLap)
Cơ sở dữ liệu – Đại số quan hệ
65
Vật chất hóa view (View vật chất)
v View vật chất lưu view như một bảng tạm khi truy
xuất lần đầu tiên
v Do đó, view vật chất chạy nhanh hơn.
v Nhưng: phải xem xét đến việc cập nhật view vật
chất (bảo trì) khi bảng nền của nó được cập nhật.
66
Bảo trì view
67
Vật chất hóa view (View vật chất)
v Giao tác là một đơn vị logic của công việc, các lệnh
SQL về giao tác phải bảo đảm việc giao tác thực
hiện xong công việc hoặc là phục hồi lại trạng thái
trước giao tác.
v Một giao tác của SQL tự động khởi động với câu
lệnh có tính khởi động giao tác (như lệnh SELECT,
INSERT).
v Các thay đổi do giao tác gây ra bị dấu đi cho đến
khi hoàn thành giao tác
69
Giao tác (Transactions)
nhật
- ROLLBACK hủy bỏ giao tác, hoàn lại trạng thái trước
khi giao tác làm cho thay đổi
- Trong lập trình với SQL, các chương trình có thể kết
thúc giao tác thành công, kể cả khi chưa thực hiện lệnh
COMMIT.
- Trong lập trình với SQL, nếu chương trình bị lỗi giữa
giao tác thì nên hủy giao tác.
70
Giao tác (Transactions)
SET TRANSACTION
[READ ONLY | READ WRITE] |
[ISOLATION LEVEL READ UNCOMMITTED |
READ COMMITTED|REPEATABLE READ
|SERIALIZABLE ]
71
Ràng buộc toàn vẹn kiểu trung gian
và trì hoãn
v Không phải lúc nào các ràng buộc cũng kiểm tra
tức thời, có khi phải chờ đến lúc giao tác ủy thác
Cơ sở dữ liệu – Đại số quan hệ
(commit)
v Các ràng buộc có thể được định nghĩa là INITIALLY
IMMEDIATE hay INITIALLY DEFERRED lúc đầu
giao tác.
v Cũng có thể thay đổi lại kiểu ràng buộc dùng [NOT]
DEFERRABLE.
v Kiểu mặc định là INITIALLY IMMEDIATE.
72
Ràng buộc toàn vẹn kiểu trung gian
và trì hoãn
SET CONSTRAINTS
{ALL | constraintName [, . . . ]}
{DEFERRED ¦ IMMEDIATE}
73
Kiểm soát truy xuất – Danh hiệu về
quyền và quyền sở hữu
74
Đặc quyền (Privileges)
v Các thao tác user được phép thực hiện trên các
view hay các quan hệ nền:
SELECT Lấy dữ liệu
Cơ sở dữ liệu – Đại số quan hệ
TO {AuthorizationIdList | PUBLIC}
[WITH GRANT OPTION]
v PrivilegeList gồm một hay nhiều quyền cách nhau
bằng dấu phẩy
v ALL PRIVILEGES ban tất cả quyền cho user
76
Lệnh ban quyền GRANT
77
Ví dụ 7.7/8 - GRANT
GRANT SELECT
ON Branch
TO PUBLIC;
79
Lệnh thu lấy quyền REVOKE
80
Lệnh thu lấy quyền REVOKE
81
Cơ sở dữ liệu – Đại số quan hệ
82
Lệnh thu lấy quyền REVOKE
Ví dụ 7.10/11 - Lệnh lấy quyền REVOKE
REVOKE SELECT
ON Branch
FROM PUBLIC;
Lấy tất cả quyền đã cho Director trên bảng Staff :
REVOKE ALL PRIVILEGES
ON Staff
FROM Director;
83
TRIGGER
§ Cú pháp:
Cơ sở dữ liệu – Đại số quan hệ
85
Khai báo ràng buộc (TRIGGER)
TRIGGER Tên-Trigger.
§ Table_name để chỉ đến tên của table muốn tạo trigger.
§ INSERT | DELETE | UPDATE ứng với sự kiện tác
động lên table để trigger tự động thi hành khi sự kiện đó
xảy ra.
86
Khai báo ràng buộc (TRIGGER)
§ Đối với tham số For | After thì Trigger sẽ được gọi sau khi
Cơ sở dữ liệu – Đại số quan hệ
87
Khai báo ràng buộc (TRIGGER)
88
Khai báo ràng buộc (TRIGGER)
§ Để disable tất cả các trigger liên quan đến một table cụ thể,
dùng lệnh:
ALTER TABLE table_name DISABLE ALL TRIGGERS;
§ Lệnh enable một trigger
ALTER TRIGGER trigger_name ENABLE;
§ Để enable tất cả các trigger liên quan đến một table cụ thể,
dùng lệnh:
ALTER TABLE table_name ENABLE ALL TRIGGERS;
v Cú pháp xóa trigger: DROP TRIGGER Tên-trigger;
89
VÍ DỤ
v Tạo trigger thông báo mỗi khi có thao tác thay
đổi bảng PROJECT
Cơ sở dữ liệu – Đại số quan hệ
VÍ DỤ
v Tạo trigger kiểm tra từ chối thêm mới nhân viên
dưới 18 tuổi
Cơ sở dữ liệu – Đại số quan hệ
VÍ DỤ
v Tạo trigger kiểm tra từ chối thêm mới nhân viên
dưới 18 tuổi
Cơ sở dữ liệu – Đại số quan hệ
VÍ DỤ
v Tạo trigger kiểm tra sự thay đổi Dnum trong
PROJECT
Cơ sở dữ liệu – Đại số quan hệ
Cơ sở dữ liệu – Đại số quan hệ
VÍ DỤ