You are on page 1of 121

LỜI NÓI ĐẦU

Ngày nay cơ sở dữ liệu rất cần thiết cho mọi tổ chức, doanh nghiệp. Bất cứ khi nào chúng
ta truy cập một website đều có một cơ sở dữ liệu phía sau cung cấp các dữ liệu được yêu
cầu. Các tổ chức, doanh nghiệp lưu trữ các hồ sơ quan trọng trong cơ sở dữ liệu giúp cho
việc truy xuất về sau được dễ dàng và nhanh chóng. Đối với các nhà khoa học thì cơ sở dữ
liệu rất cần thiết cho việc lưu trữ và truy xuất các dữ liệu thu thập được trong quá trình
nghiên cứu.
Cơ sở dữ liệu là một trong các môn học cơ sở ngành quan trọng đối với sinh viên Công
nghệ thông tin nhằm giới thiệu, cung cấp những kiến thức cơ bản về cơ sở dữ liệu, các mô
hình dữ liệu quan hệ, ngôn ngữ truy vấn có cấu trúc… Cơ sở dữ liệu cũng là nền tảng để
người học có thể tiếp tục tìm hiểu, nghiên cứu, phát triển các hệ thống thông tin cơ bản và
các hệ thống thông minh.
Nội dung của giáo trình được nhóm biên soạn trên cơ sở đề cương học phần Cơ sở dữ liệu
trong chương trình đào tạo ngành Hệ thống thông tin tại trường Đại học Kỹ thuật – Công
nghệ Cần Thơ với mong muốn đây sẽ là tài liệu tham khảo cung cấp cho sinh viên trong
quá trình tìm hiểu, học tập về học phần này và các học phần có liên quan.
Giáo trình gồm 5 chương, cuối mỗi chương sẽ là phần câu hỏi và bài tập:
• Chương 1: Giới thiệu hệ thống các tập tin cổ điển, những khái niệm chính, những
kiến thức cơ bản về cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu.
• Chương 2: Trình bày mô hình thực thể kết hợp và mô hình dữ liệu quan hệ, các mô
hình quan trọng trong quá trình thiết kế cơ sở dữ liệu quan hệ.
• Chương 3: Giới thiệu về đại số quan hệ như là nền tảng để hiểu cơ sở dữ liệu được
triển khai như thế nào.
• Chương 4: Trình bày về ngôn ngữ truy vấn thông dụng trong cơ sở dữ liệu đó là
ngôn ngữ truy vấn có cấu trúc SQL.
• Chương 5: Trình bày về các khái niệm liên quan đến phụ thuộc hàm, các thuật toán
tìm bao đóng, tìm khóa và các vấn đề chuẩn hóa lược đồ quan hệ.
Để hoàn thiện giáo trình, chúng tôi xin gửi lời cám ơn sâu sắc đến Ban Giám hiệu, lãnh đạo
khoa Công nghệ thông tin và các đồng nghiệp đã tạo điều kiện thuận lợi, nhiệt tình góp ý
và giúp đỡ nhóm biên soạn hoàn thành tốt quyển tài liệu này.
Do đây là phiên bản đầu tiên của giáo trình nên không thể tránh khỏi những thiếu sót. Chúng
tôi mong muốn nhận được những góp ý từ quý độc giả để quyển tài liệu ngày càng hoàn
thiện hơn.
MỤC LỤC
CHƯƠNG 1. GIỚI THIỆU VỀ CƠ SỞ DỮ LIỆU .................................................................... 1
1. HỆ THỐNG DỰA TRÊN TẬP TIN CỔ ĐIỂN (FILE-BASED SYSTEM) ...................... 2
1.1 Khái niệm ..................................................................................................................... 2
1.2 Ưu và nhược điểm của hệ thống tập tin cổ điển ........................................................... 3
2. CƠ SỞ DỮ LIỆU (DATABASE) ...................................................................................... 4
2.1 Khái niệm cơ sở dữ liệu ................................................................................................ 4
2.2 Hệ quản trị cơ sở dữ liệu (Database Management System) ......................................... 4
2.3 Đặc tính của cơ sở dữ liệu ............................................................................................ 5
2.2 Sự cần thiết của cơ sở dữ liệu ....................................................................................... 6
3. MÔ HÌNH DỮ LIỆU (DATA MODEL TYPES) .............................................................. 7
3.1 Mô hình dữ liệu và sự trừu tượng dữ liệu ..................................................................... 7
3.2 Các kiểu mô hình dữ liệu .............................................................................................. 8
4. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU (DATABASE MANAGEMENT SYSTEM) ........... 10
4.1 Hệ quản trị cơ sở dữ liệu - DBMS .............................................................................. 10
4.2 Hoạt động của một hệ quản trị CSDL ........................................................................ 11
4.3 Ngôn ngữ cơ sở dữ liệu (Database Language) ........................................................... 11
4.4 Chức năng của hệ quản trị cơ sở dữ liệu .................................................................... 12
4.5 Kiến trúc của hệ quản trị cơ sở dữ liệu ....................................................................... 13
5. CÁC KIẾN TRÚC TRUY XUẤT DỮ LIỆU................................................................... 14
5.1 Kiến trúc Mainframe – Terminal ................................................................................ 14
5.2 Kiến trúc FileServer – Workstation ............................................................................ 14
5.3 Kiến trúc Client – Server hai lớp ................................................................................ 15
5.4 Kiến trúc Client – Server nhiều lớp ............................................................................ 16
6. CON NGƯỜI TRONG HỆ CƠ SỞ DỮ LIỆU ................................................................. 17
TÓM TẮT CHƯƠNG .......................................................................................................... 18
CÂU HỎI TRẮC NGHIỆM ................................................................................................. 18
CÂU HỎI.............................................................................................................................. 19
CHƯƠNG 2. CÁC MÔ HÌNH DỮ LIỆU QUAN HỆ ............................................................. 21
1. MÔ HÌNH THỰC THẾ KẾT HỢP .................................................................................. 22
1.1 Thực thể và tập thực thể ............................................................................................. 22
1.2 Thuộc tính ................................................................................................................... 22
1.3 Mối kết hợp ................................................................................................................ 23
1.4 Bản số ......................................................................................................................... 25
1.5 Thuộc tính trên tập mối kết hợp ................................................................................. 25
1.6 Khóa của tập thực thể ................................................................................................. 26
i
1.7 Tổng quát hóa và chuyên biệt hóa .............................................................................. 27
1.8 Tập thực thể yếu ......................................................................................................... 28
2. MÔ HÌNH DỮ LIỆU QUAN HỆ ..................................................................................... 29
2.1 Thuộc tính ................................................................................................................... 29
2.2 Quan hệ ....................................................................................................................... 30
2.3 Lược đồ quan hệ ......................................................................................................... 30
2.4 Bộ ............................................................................................................................... 31
2.5 Khóa của một quan hệ ................................................................................................ 31
2.5 Ràng buộc toàn vẹn .................................................................................................... 33
2.6 Tính chất của mô hình quan hệ................................................................................... 33
3. CHUYỂN ĐỔI MÔ HÌNH THỰC THỂ KẾT HỢP SANG MÔ HÌNH DỮ LIỆU QUAN
HỆ ......................................................................................................................................... 33
3.1 Chuyển đổi tập thực thể .............................................................................................. 33
3.2 Chuyển đổi mối quan hệ một – một ........................................................................... 34
3.3 Chuyển đổi mối quan hệ một – nhiều ......................................................................... 35
3.4 Chuyển đổi mối quan hệ nhiều – nhiều ...................................................................... 35
TÓM TẮT CHƯƠNG .......................................................................................................... 36
CÂU HỎI.............................................................................................................................. 36
BÀI TẬP ............................................................................................................................... 36
CHƯƠNG 3. ĐẠI SỐ QUAN HỆ ............................................................................................ 39
1. PHÉP TOÁN ĐẠI SỐ QUAN HỆ ................................................................................... 40
1.1 Phép chọn (Selection) ................................................................................................. 40
1.2 Phép chiếu (Projection) .............................................................................................. 40
1.3 Phép hợp (Union), phép giao (Intersection) và phép trừ (Minus) .............................. 41
1.4 Phép tích Descartes (Cartesian Product) .................................................................... 42
1.5 Phép kết (Join) ............................................................................................................ 43
1.6 Phép đặt lại tên ........................................................................................................... 46
1.7 Phép gán ..................................................................................................................... 47
2. CÁC HÀM TỔNG HỢP VÀ GOM NHÓM .................................................................... 47
2.1 Hàm kết hợp ............................................................................................................... 47
2.2 Gom nhóm .................................................................................................................. 48
TÓM TẮT CHƯƠNG .......................................................................................................... 48
CÂU HỎI.............................................................................................................................. 49
BÀI TẬP ............................................................................................................................... 49
CHƯƠNG 4. NGÔN NGỮ TRUY VẤN SQL ........................................................................ 53
1. GIỚI THIỆU VỀ NGÔN NGỮ SQL ............................................................................... 54
1.1 Lịch sử phát triển ........................................................................................................ 54
1.2 Khái niệm ................................................................................................................... 54

ii
1.3 Cú pháp câu lệnh SQL ................................................................................................ 54
2. CÁC LỆNH ĐỊNH NGHĨA VÀ CẬP NHẬT CSDL ...................................................... 55
2.1 Tạo và cập nhật CSDL................................................................................................ 55
2.1.1 Tạo một cơ sở dữ liệu .......................................................................................... 55
2.1.2 Mở một cơ sở dữ liệu để sử dụng ........................................................................ 55
2.1.3 Hủy bỏ (xóa) một cơ sở dữ liệu ........................................................................... 55
2.1.4 Sửa đổi cơ sở dữ liệu ........................................................................................... 56
2.2 Tạo bảng và cập nhật dữ liệu ...................................................................................... 56
2.2.1 Tạo một bảng dữ liệu ........................................................................................... 56
2.2.2 Thêm dòng mới vào bảng .................................................................................... 57
2.2.3 Cập nhật dữ liệu của các dòng trong bảng........................................................... 58
2.2.4 Xóa dòng dữ liệu trong bảng ............................................................................... 59
2.2.5 Sửa đổi các cột trong bảng .................................................................................. 59
2.2.6 Loại bỏ bảng khỏi CSDL ..................................................................................... 60
3. CÁC LỆNH TRUY VẤN DỮ LIỆU................................................................................ 60
3.1 Cú pháp của lệnh truy vấn dữ liệu .............................................................................. 60
3.1.1 Mệnh đề SELECT ............................................................................................... 61
3.1.2 Mệnh đề FROM ................................................................................................... 61
3.1.3 Mệnh đề WHERE ................................................................................................ 62
3.1.4 Mệnh đề GROUP BY .......................................................................................... 64
3.1.5 Các hàm kết tập ................................................................................................... 64
3.1.6 Mệnh đề HAVING .............................................................................................. 66
3.1.7 Mệnh đề ORDER BY .......................................................................................... 66
3.2 Câu lệnh truy vấn lồng nhau ....................................................................................... 66
3.3 Câu lệnh truy vấn trên nhiều bảng .............................................................................. 69
3.3.1 Phép tích Descartes .............................................................................................. 69
3.3.2 Phép kết nối ......................................................................................................... 70
3.3.3 Các toán tử tập hợp .............................................................................................. 73
3.4 Một số từ khóa thông dụng ......................................................................................... 74
TÓM TẮT CHƯƠNG .......................................................................................................... 75
CÂU HỎI.............................................................................................................................. 75
BÀI TẬP ............................................................................................................................... 76
CHƯƠNG 5. PHỤ THUỘC HÀM VÀ DẠNG CHUẨN ........................................................ 79
1. PHỤ THUỘC HÀM ......................................................................................................... 80
1.1 Khái niệm ................................................................................................................... 80
1.2 Phụ thuộc hàm hiển nhiên .......................................................................................... 82
1.3 Phụ thuộc hàm nguyên tố ........................................................................................... 82
1.4 Tính chất của phụ thuộc hàm ...................................................................................... 83
iii
2. BAO ĐÓNG ..................................................................................................................... 83
2.1 Bao đóng của tập phụ thuộc hàm................................................................................ 83
2.2 Bao đóng của tập thuộc tính ....................................................................................... 83
2.3 Bài toán thành viên ..................................................................................................... 84
2.4 Thuật toán tìm bao đóng ............................................................................................. 84
2.5 Thuật toán tìm bao đóng của tập thuộc tính X ........................................................... 85
3. THUẬT TOÁN TÌM KHÓA ............................................................................................ 86
3.1 Khóa của lược đồ quan hệ .......................................................................................... 86
3.2 Thuật toán tìm khóa .................................................................................................... 86
3.2.1 Thuật toán cơ bản ................................................................................................ 86
3.2.2 Thuật toán cải tiến ............................................................................................... 87
4. PHỦ TỐI THIỂU ............................................................................................................. 88
4.1 Tập phụ thuộc hàm tương đương ............................................................................... 88
4.2 Phủ tối thiểu ................................................................................................................ 89
4.2.1 Phụ thuộc hàm có thuộc tính vế trái dư thừa ....................................................... 89
4.2.2 Tập phụ thuộc hàm có vế phải một thuộc tính .................................................... 90
4.2.3 Phủ tối thiểu của tập phụ thuộc hàm.................................................................... 90
5. RÀNG BUỘC TOÀN VẸN ............................................................................................. 92
5.1 Các yếu tố của ràng buộc toàn vẹn ............................................................................. 92
5.2 Các loại ràng buộc toàn vẹn ....................................................................................... 93
5.2.1 Ràng buộc toàn vẹn có bối cảnh là một quan hệ ................................................. 93
5.2.2 Ràng buộc toàn vẹn có bối cảnh là nhiều quan hệ............................................... 95
6. DẠNG CHUẨN CỦA LƯỢC ĐỒ QUAN HỆ ................................................................ 97
6.1 Sự cần thiết chuẩn hoá dữ liệu .................................................................................... 97
6.2 Một số dạng chuẩn cơ sở dữ liệu ................................................................................ 99
6.2.1 Dạng chuẩn 1 – 1NF (First Normal Form) .......................................................... 99
6.2.2 Dạng chuẩn 2 – 2NF (Second Normal Form) ................................................... 101
6.2.3 Dạng chuẩn 3 - 3NF (Third Normal Form) ....................................................... 103
6.2.4 Dạng chuẩn BC (Boyce-Codd Normal Form) ................................................... 104
TÓM TẮT CHƯƠNG ........................................................................................................ 107
CÂU HỎI............................................................................................................................ 107
BÀI TẬP ............................................................................................................................. 107
PHỤ LỤC ............................................................................................................................... 109
TÀI LIỆU THAM KHẢO ...................................................................................................... 111

iv
DANH MỤC HÌNH

Hình 1-1: Mô hình hệ thống tập tin cổ điển ............................................................................... 2


Hình 1-2: Mô hình cơ sở dữ liệu ................................................................................................ 4
Hình 1-3: Sơ đồ tổng quát của hệ cơ sở dữ liệu ......................................................................... 5
Hình 1-4: Khung nhìn dữ liệu..................................................................................................... 6
Hình 1-5: Các mức mô hình cơ sở dữ liệu ................................................................................. 8
Hình 1-6: Mô hình dữ liệu mạng ................................................................................................ 9
Hình 1-7: Mô hình dữ liệu phân cấp........................................................................................... 9
Hình 1-8: Mô hình thực thể quan hệ......................................................................................... 10
Hình 1-9: Kiến trúc của hệ quản trị cơ sở dữ liệu .................................................................... 13
Hình 1-10: Kiến trúc mainframe - terminal .............................................................................. 14
Hình 1-11: Kiến trúc FileServer – Workstation ....................................................................... 15
Hình 1-12: Kiến trúc Client - Server hai lớp ............................................................................ 16
Hình 1-13: Kiến trúc Client - Server nhiều lớp ........................................................................ 17
Hình 2-1: Tập thực thể GIANGVIEN ...................................................................................... 22
Hình 2-2: Các thuộc tính của tập thực thể GIANGVIEN......................................................... 22
Hình 2-3: Tập mối kết hợp không có thuộc tính giữa GIANGVIEN và KHOA...................... 24
Hình 2-4: Tập mối kết hợp một – một ...................................................................................... 24
Hình 2-5: Tập mối kết hợp một – nhiều ................................................................................... 24
Hình 2-6: Tập mối kết hợp nhiều – nhiều................................................................................. 25
Hình 2-7: Bản số của tập mối kết hợp giữa GIANGVIEN và KHOA ..................................... 25
Hình 2-8: Tập mối kết hợp có thuộc tính giữa GIANGVIEN và KHOA................................. 26
Hình 2-9: Tập mối kết hợp latrgkhoa giữa GIANGVIEN và KHOA ...................................... 26
Hình 2-10: Khóa của tập thực thể GIANGVIEN và KHOA .................................................... 27
Hình 2-11: Ví dụ về chuyên biệt hóa........................................................................................ 28
Hình 2-12: Tập thực thể yếu là tập PHUHUYNH.................................................................... 29
Hình 2-13: Khóa ngoại của các quan hệ. .................................................................................. 33
Hình 2-14: Chuyển đổi tập thực thể mạnh ............................................................................... 34
Hình 2-15: Chuyển đổi thực thể yếu ........................................................................................ 34
Hình 2-16: Chuyển đổi mối quan hệ một - một........................................................................ 35
Hình 2-17: Chuyển đổi mối quan hệ một - nhiều ..................................................................... 35
Hình 2-18: Chuyển đổi mối quan hệ nhiều - nhiều .................................................................. 36
Hình 3-1: Biểu đồ Venn minh họa cho phép hợp ..................................................................... 41

i
Hình 3-2: Biểu đồ Venn minh họa cho phép giao .................................................................... 42
Hình 3-3: Biểu đồ Venn minh họa cho phép trừ ...................................................................... 42
Hình 4-1: Biểu đồ Venn minh họa cho INNER JOIN .............................................................. 71
Hình 4-2: Biểu đồ Venn minh họa cho LEFT (OUTER) JOIN ............................................... 71
Hình 4-3: Biểu đồ Venn minh họa cho RIGHT (OUTER) JOIN ............................................. 72
Hình 4-4: Biểu đồ Venn minh họa cho FULL (OUTER) JOIN ............................................... 72
Hình 5-1: Mối quan hệ giữa các lớp dạng chuẩn lược đồ quan hệ ........................................... 98

ii
DANH MỤC BẢNG
Bảng 2-1: Bảng thể hiện của quan hệ KHOA .......................................................................... 31
Bảng 3-1: Bảng thể hiện quan hệ GIANGVIEN và DETAI .................................................... 43
Bảng 3-2: Bảng kết quả của ví dụ kết nối tự nhiên (Ví dụ 3.11) .............................................. 44
Bảng 3-3: Bảng ví dụ về dữ liệu giảng viên ............................................................................. 45
Bảng 3-4: Bảng ví dụ về dữ liệu giảng viên hướng dẫn đề tài sinh viên.................................. 45
Bảng 3-5: Bảng kết quả của ví dụ kết nối mở rộng trái ............................................................ 45
Bảng 3-6: Bảng kết quả của ví dụ kết nối mở rộng phải .......................................................... 46
Bảng 3-7: Bảng kết quả của ví dụ kết nối mở rộng hai bên ..................................................... 46
Bảng 3-8: Bảng dữ liệu DETAI ................................................................................................ 48
Bảng 5-1: Bảng thể hiện của 𝒓 ................................................................................................. 80
Bảng 5-2: Bảng thể hiện quan hệ GIANGVIEN ...................................................................... 81
Bảng 5-3: Bảng ví dụ về thuật toán tìm khóa đơn cơ bản ........................................................ 87
Bảng 5-4: Bảng ví dụ về thuật toán tìm khóa đơn cơ bản ........................................................ 88
Bảng 5-5: Bảng tầm ảnh hưởng của một RBTV ...................................................................... 93
Bảng 5-6: Bảng ví dụ thể hệ của quan hệ DSLOP ................................................................... 99
Bảng 5-7: Bảng ví dụ thể hiện quan hệ KHACHTHUEPHONG ............................................. 99
Bảng 5-8: Bảng ví dụ thể hệ quan hệ DSHOCSINH .............................................................. 100
Bảng 5-9: Bảng ví dụ thể hệ quan hệ DIEMHOCSINH......................................................... 100
Bảng 5-10: Bảng ví dụ tách giá trị nguyên tố của quan hệ KHACHTHUEPHONG ............. 100
Bảng 5-11: Bảng ví dụ thể hiện quan hệ KHACH ................................................................. 101
Bảng 5-12: Bảng ví dụ thể hiện quan hệ THUEPHONG ....................................................... 101
Bảng 5-13: Bảng ví dụ thể hiện quan hệ PHONG.................................................................. 102
Bảng 5-14: Bảng ví dụ thể hiện quan hệ THUE ..................................................................... 102
Bảng 5-15: Bảng ví dụ quan hệ PHONG ............................................................................... 104
Bảng 5-16: Bảng quan hệ CHU .............................................................................................. 104
Bảng 5-17: Bảng ví dụ mở rộng quan hệ THUE .................................................................... 106
Bảng 5-18: Bảng ví dụ quan hệ PHUTRACH ........................................................................ 106
Bảng 5-19: Bảng ví dụ quan hệ THUE................................................................................... 106

i
ii
CHƯƠNG 1.
GIỚI THIỆU VỀ CƠ SỞ DỮ LIỆU
Trong chương này trình bày những vấn đề cơ bản về cơ sở dữ liệu (CSDL) do E.F Codd đề
xuất. Những vấn đề này bao gồm: khái niệm về cơ sở dữ liệu, sự cần thiết phải tổ chức dữ
liệu dưới dạng cơ sở dữ liệu, tính độc lập của dữ liệu và thể hiện mô hình kiến trúc 3 mức
cơ sở dữ liệu. Nội dung của chương bao gồm các phần:
● Khái niệm hệ thống tập tin (File-Based Systems)
● Khái niệm cơ sở dữ liệu (Database)
● Sự cần thiết của hệ cơ sở dữ liệu
● Mô hình kiến trúc 3 mức cơ sở dữ liệu
● Hệ quản trị CSDL và người quản trị CSDL
● Các mô hình truy xuất dữ liệu

1
1. HỆ THỐNG DỰA TRÊN TẬP TIN CỔ ĐIỂN (FILE-BASED
SYSTEM)
1.1 Khái niệm
Một tập tin (file) thực chất là một tập hợp các mẫu tin, trong đó mỗi mẫu tin chứa các dữ
liệu có liên quan luận lý với nhau. Hệ thống tập tin là một tập hợp các chương trình ứng
dụng phục vụ cho người dùng cuối (end users). Mỗi chương trình định nghĩa và quản lý dữ
liệu của chính nó. Trong một hệ thống tập tin cổ điển, dữ liệu được lưu trữ trong các tập tin
rời rạc khác nhau và tập hợp các tập tin này được tổ chức, lưu trữ trong một hay nhiều máy
tính nhất định. Trước khi các hệ quản trị cơ sở dữ liệu ra đời, người ta sử dụng các tập tin
để lưu trữ dữ liệu trong ứng dụng phần mềm.

Hình 1-1: Mô hình hệ thống tập tin cổ điển


Ví dụ 1.1: Xét một hệ thống quản lý nhân sự của một công ty. Hệ thống này sử dụng hệ
thống tập tin cổ điển trong việc quản lý dữ liệu của tổ chức như sau:
● Phòng Tổ chức lưu giữ những thông tin về lý lịch của nhân viên như họ tên, bí danh,
giới tính, ngày sinh, ngày vào đoàn, ngày vào đảng, ngày tuyển dụng, hệ số lương,
hệ số phụ cấp, hoàn cảnh gia đình … Phần mềm được sử dụng để quản lý là
Microsoft Access.
● Phòng Tài vụ lưu giữ những thông tin về họ tên, hệ số lương, hệ số phụ cấp, đơn vị
… để tính toán lương và phụ cấp dựa trên danh sách do phòng tổ chức gởi sang. Các
bảng tính này thực hiện bằng Microsoft Excel.
● Bộ phận Văn thư sử dụng Microsoft Word để thảo các văn bản báo cáo về tình hình
của đơn vị trong đó có nêu tổng số công nhân viên và trình độ chuyên môn được đào
tạo.
Như vậy trong cùng một công ty có 3 bộ phận khác nhau, mỗi bộ phận có thể sử dụng các
ứng dụng đặc thù tùy theo quy trình nghiệp vụ. Các bộ phận quản trị, truy xuất và thao tác
trên các tập dữ liệu khác nhau. Điều này dẫn đến sự dư thừa trong việc lưu trữ dữ liệu và
dữ liệu của các tập tin không nhất quán với nhau. Giả sử nếu có một nhân viên nghỉ việc thì
phòng Tổ chức cập nhật lại thông tin là nhân viên đã nghỉ nhưng thông tin đó không được
gửi đến phòng Tài vụ. Vì vậy, phòng Tài vụ vẫn dựa trên dữ liệu đang lưu trữ cục bộ tại

2
đơn vị tiếp tục chuyển lương cho người đó.
1.2 Ưu và nhược điểm của hệ thống tập tin cổ điển
Việc xây dựng những hệ thống tập tin riêng rẽ tại từng đơn vị quản lý ít tốn thời gian bởi
lượng thông tin cần quản lý và khai thác là nhỏ, không đòi hỏi đầu tư nhiều nên triển khai
nhanh. Bên cạnh đó, thông tin được khai thác chỉ phục vụ cho mục đích hẹp nên khả năng
đáp ứng nhanh chóng.
Tuy nhiên hệ thống tập tin cổ điển còn nhiều hạn chế trong quá trình triển khai sử dụng. Sự
dư thừa dữ liệu (data redundancy) và tính không nhất quán (inconsistency) là hạn chế dễ
dàng thấy được trong các hệ thống tập tin cổ điển. Do các tập tin và các trình ứng dụng
được tạo ra bởi các người lập trình khác nhau nên các tập tin có định dạng khác nhau, các
chương trình được viết trong các ngôn ngữ lập trình khác nhau, cùng một thông tin có thể
được lưu giữ trong các tập tin khác nhau. Tính không thống nhất và dư thừa này sẽ làm tăng
chi phí truy xuất và lưu trữ, hơn nữa sẽ dẫn đến tính không nhất quán của dữ liệu.
Người dùng gặp khó khăn trong việc truy xuất dữ liệu do môi trường của hệ thống quản lý
tập tin thông thường không cung cấp các công cụ cho phép truy xuất thông tin một cách
hiệu quả và thuận lợi.
Sự cô lập dữ liệu (Data isolation) cũng là một vấn đề cần xem xét khi triển khai sử dụng hệ
thống tập tin cổ điển. Các giá trị dữ liệu được lưu trữ trong cơ sở dữ liệu phải thoả mãn một
số các ràng buộc về tính nhất quán của dữ liệu (ràng buộc nhất quán hay consistency
constraints). Trong hệ thống xử lý tập tin thông thường rất khó khăn trong việc thay đổi các
chương trình để thoả mãn các yêu cầu thay đổi ràng buộc. Vấn đề trở nên khó khăn hơn khi
các ràng buộc liên quan đến các hạng mục dữ liệu nằm trong các tập tin khác nhau.
Một hạn chế nữa là các vấn đề về tính nguyên tử (atomicity problems). Tính nguyên tử của
một hoạt động (giao dịch) nghĩa là hoạt động đó phải được hoàn tất trọn vẹn hoặc không
thực hiện gì cả. Điều này có nghĩa là một hoạt động (giao dịch) chỉ làm thay đổi các dữ liệu
bền vững khi nó đã hoàn tất (kết thúc thành công) nếu không, giao dịch không để lại một
dấu vết nào trên cơ sở dữ liệu. Trong hệ thống quản lý tập tin thông thường khó đảm bảo
được tính chất này.
Các vấn đề an toàn (security problems) của hệ thống này cũng là một nhược điểm. Một
người sử dụng có quyền truy xuất tất cả các dữ liệu. Vấn đề này đòi hỏi hệ thống phải đảm
bảo được tính phân quyền, chống truy xuất trái phép...
Ngoài ra, hạn chế trong điều khiển truy xuất cạnh tranh (concurrence access control) cũng
làm giảm khả năng triển khai sử dụng của hệ thống. Khi một mục dữ liệu có thể được truy
xuất đồng thời bởi nhiều ứng dụng, các ứng dụng này không thể được phối hợp trước nên
không dễ đưa ra chiến lược hỗ trợ cho nhiều người dùng truy xuất dữ liệu đồng thời.
Các nhược điểm của hệ thống tập tin cổ điển đã gợi ý sự phát triển một cách tiếp cận mới
trong việc quản trị một lượng lớn thông tin của tổ chức: tiếp cận cơ sở dữ liệu.

3
2. CƠ SỞ DỮ LIỆU (DATABASE)
Trong những năm gần đây, thuật ngữ “Cơ sở dữ liệu” (tiếng anh là Database, viết tắt tiếng
Việt là CSDL) đã trở nên khá quen thuộc không chỉ đối với những người làm công nghệ
thông tin mà còn đối với những người làm trong nhiều lĩnh vực khác như thống kê, kinh tế,
quản lý doanh nghiệp, …
Các ứng dụng của công nghệ thông tin vào công tác quản lý ngày càng nhiều hơn và càng
đa dạng hơn. Có thể nói hầu hết các lĩnh vực kinh tế, xã hội, giáo dục, y tế, … đều đã ứng
dụng các thành tựu mới của tin học vào phục vụ công tác chuyên môn của mình. Chính vì
lẽ đó mà ngày càng nhiều người quan tâm đến lĩnh vực thiết kế và xây dựng các CSDL.
2.1 Khái niệm cơ sở dữ liệu
Một cơ sở dữ liệu có thể được mô tả với nhiều cách phát biểu khác nhau như:
● Cơ sở dữ liệu là một tập hợp các dữ liệu có liên quan với nhau mang tính chất dùng
chung. Các dữ liệu này sẽ được sử dụng để hỗ trợ các hoạt động của một tổ chức nào
đó. Cơ sở dữ liệu có thể được xem như một kho dữ liệu, được định nghĩa một lần và
sau đó được truy xuất bởi nhiều người dùng khác nhau.
● Cơ sở dữ liệu hiểu theo cách định nghĩa kỹ thuật thì đó là một tập hợp dữ liệu có cấu
trúc. Thuật ngữ này được dùng nhiều trong công nghệ thông tin nên thường được
hiểu dưới dạng một tập hợp liên kết các dữ liệu, đủ lớn và được ghi trên thiết bị lưu
trữ như: đĩa từ, băng từ, …
● Về mặt nghiệp vụ, người ta thường hiểu cơ sở dữ liệu là một tập hợp rất lớn về các
loại dữ liệu tác nghiệp của một cơ quan, xí nghiệp, …. Các loại dữ liệu này được lưu
trữ tập trung hay phân tán trên các thiết bị lưu trữ của các mạng máy tính. Cơ sở dữ
liệu được các chương trình ứng dụng truy xuất và khai thác trực tuyến.
● Cơ sở dữ liệu được quản lý theo cơ chế thống nhất của hệ quản trị CSDL nhằm thực
hiện 3 chức năng: mô tả dữ liệu, cập nhật dữ liệu, tìm kiếm dữ liệu. Một tập hợp
ngẫu nhiên của các dữ liệu không thể xem là CSDL.

Hình 1-2: Mô hình cơ sở dữ liệu


2.2 Hệ quản trị cơ sở dữ liệu (Database Management System)
Hệ quản trị cơ sở dữ liệu (Database Management System, DBMS) là một hệ thống phần
4
mềm cho phép người dùng định nghĩa, tạo và duy trì CSDL đồng thời cung cấp dịch vụ truy
cập đến CSDL này một cách có quản lý. Mục tiêu trước tiên của hệ quản trị cơ sở dữ liệu
là cung cấp một môi trường vừa thuận tiện vừa hiệu quả cho người dùng để họ tìm ra thông
tin và lưu trữ thông tin mà họ cần. Chương trình ứng dụng và người dùng truy xuất dữ liệu
lưu trữ trong cơ sở dữ liệu bằng cách gửi yêu cầu cho hệ quản trị cơ sở dữ liệu. Một số hệ
quản trị cơ sở dữ liệu thông dụng: Microsoft Access, Microsoft SQL Server, Oracle, DB2,
MySQL, …
Thuật ngữ hệ cơ sở dữ liệu (Database System) đôi khi được sử dụng để chỉ cơ sở dữ liệu và
cả hệ quản trị cơ sở dữ liệu. Hệ cơ sở dữ liệu có các thành phần như hình 1-3. Tập hợp bao
gồm cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu và các ứng dụng liên quan có thể được gọi là
hệ cơ sở dữ liệu. Các nhà khoa học máy tính có thể phân loại các hệ cơ sở dữ liệu theo các
mô hình cơ sở dữ liệu mà họ hỗ trợ. Cơ sở dữ liệu quan hệ đã trở nên thịnh hành trong
những năm 1980. Những dữ liệu mô hình này dưới dạng hàng và cột trong một loạt các
bảng và phần lớn sử dụng SQL (Structured Query Language – ngôn ngữ truy vấn có cấu
trúc) để ghi và truy vấn dữ liệu. Vào những năm 2000, các cơ sở dữ liệu phi quan hệ đã trở
nên phổ biến, được gọi NoSQL và được truy vấn bởi nhiều ngôn ngữ khác nhau.

Hình 1-3: Sơ đồ tổng quát của hệ cơ sở dữ liệu

2.3 Đặc tính của cơ sở dữ liệu


Một cơ sở dữ liệu có tính tự mô tả. Hệ CSDL không chỉ chứa bản thân CSDL mà còn chứa
định nghĩa đầy đủ (mô tả) của CSDL. Các định nghĩa được lưu trữ trong catalog. Catalog
chứa các thông tin về cấu trúc tập tin, kiểu và dạng thức lưu trữ của mỗi thành phần dữ liệu
và những ràng buộc dữ liệu. Dữ liệu trong catalog gọi là siêu dữ liệu hay metadata (data of
data). Các chương trình ứng dụng có thể truy xuất đến nhiều CSDL nhờ thông tin cấu trúc
được lưu trữ trong catalog.
Cơ sở dữ liệu có tính độc lập giữa chương trình và dữ liệu. Vì định nghĩa về cấu trúc CSDL
được lưu trữ trong catalog nên khi có thay đổi nhỏ về cấu trúc chúng ta ít phải sửa lại chương
trình.
5
Tính trừu tượng dữ liệu của cơ sở dữ liệu thể hiện ở việc hệ CSDL cho phép trình bày dữ
liệu ở một mức trừu tượng cho phép, nhằm che bớt những chi tiết lưu trữ thật của dữ liệu.
Hệ CSDL cho phép nhiều người dùng thao tác lên cùng một CSDL. Mỗi người đòi hỏi một
cách nhìn khác nhau về CSDL. Một khung nhìn (view) dữ liệu là một phần của CSDL hoặc
dữ liệu tổng hợp từ CSDL. Khung nhìn dữ liệu cung cấp một mức độ an toàn cho dữ liệu,
cung cấp một cơ chế để điều chỉnh diện mạo của cơ sở dữ liệu theo từng loại người dùng.
Một khung nhìn thể hiện cho một hình ảnh nhất quán, không thay đổi của cấu trúc của cơ
sở dữ liệu.

Hình 1-4: Khung nhìn dữ liệu


2.2 Sự cần thiết của cơ sở dữ liệu
Tổ chức lưu trữ dữ liệu theo lý thuyết cơ sở dữ liệu giúp giảm bớt dư thừa dữ liệu trong lưu
trữ. Trong các ứng dụng lập trình truyền thống, phương pháp tổ chức lưu trữ dữ liệu vừa
tốn kém, lãng phí bộ nhớ và các thiết bị lưu trữ, vừa dư thừa thông tin lưu trữ. Nhiều chương
trình ứng dụng khác nhau cùng xử lý trên các dữ liệu như nhau, dẫn đến sự dư thừa đáng
kể về dữ liệu. Nhiều thuộc tính được mô tả và lưu trữ nhiều lần độc lập với nhau. Nếu tổ
chức lưu trữ theo lý thuyết CSDL thì có thể hợp nhất các tập tin lưu trữ của các bài toán
trên, các chương trình ứng dụng có thể cùng chia sẻ tài nguyên trên cùng một hệ cơ sở dữ
liệu.
Cơ sở dữ liệu cũng giúp tránh được sự không nhất quán trong lưu trữ dữ liệu và bảo đảm
được tính toàn vẹn của dữ liệu. Nếu một thuộc tính được mô tả trong nhiều tập tin dữ liệu
khác nhau và lặp lại nhiều lần trong các bản ghi, khi thực hiện việc cập nhật, sửa đổi, bổ
sung sẽ không sửa hết nội dung các mục đó. Nếu dữ liệu càng nhiều thì sự sai sót khi cập
nhật, bổ sung càng lớn. Khả năng xuất hiện mâu thuẫn, không nhất quán thông tin càng
nhiều, dẫn đến không nhất quán dữ liệu trong lưu trữ. Tất yếu kéo theo sự dị thường thông
tin, thừa, thiếu và mâu thuẫn thông tin.
Chúng ta có thể triển khai đồng thời nhiều ứng dụng trên cùng một CSDL. Điều này có
nghĩa là các ứng dụng không chỉ chia sẻ chung tài nguyên dữ liệu mà còn trên cùng một
CSDL có thể triển khai đồng thời nhiều ứng dụng khác nhau tại các thiết bị đầu cuối khác
nhau.
Cơ sở dữ liệu hỗ trợ thống nhất các tiêu chuẩn, thủ tục và các biện pháp bảo vệ, an toàn
dữ liệu. Các hệ CSDL sẽ được quản lý tập trung bởi một người hay một nhóm người quản
trị CSDL, bằng các hệ quản trị CSDL. Người quản trị CSDL có thể áp dụng thống nhất các
tiêu chuẩn, quy định, thủ tục chung như quy định thống nhất về mẫu biểu báo cáo, thời gian
6
bổ sung, cập nhật dữ liệu. Điều này làm dễ dàng cho công việc bảo trì dữ liệu. Người quản
trị CSDL có thể bảo đảm việc truy cập tới CSDL, có thể kiểm tra, kiểm soát các quyền truy
cập của người sử dụng. Ngăn chặn các truy cập trái phép, sai quy định từ trong ra hoặc từ
ngoài vào.
3. MÔ HÌNH DỮ LIỆU (DATA MODEL TYPES)
3.1 Mô hình dữ liệu và sự trừu tượng dữ liệu
Mô hình dữ liệu là một tập hợp các khái niệm có thể được sử dụng để mô tả cấu trúc dữ
liệu, kiểu dữ liệu, các mối quan hệ và ràng buộc toàn vẹn. Hầu hết các mô hình dữ liệu còn
có một tập hợp các phép toán cơ bản để đặc tả sự phục hồi (retrieval) và sự sửa đổi
(modification) trên cơ sở dữ liệu.
Mô hình dữ liệu cung cấp một phương diện để diễn đạt sự trừu tượng dữ liệu (data
abstraction). Trừu tượng dữ liệu có nghĩa là giấu đi các chi tiết phức tạp về việc lưu trữ và
duy trì dữ liệu. Khung nhìn của người dùng trên cơ sở dữ liệu là một mức trừu tượng dữ
liệu, nó làm cho người dùng hiểu về cơ sở dữ liệu dễ dàng hơn. Thông thường có 3 mức
trừu tượng:
● Mức trong (mức vật lý – physical level): mô hình trong là mô hình lưu trữ vật lý dữ
liệu. Mô hình trong là cách biểu diễn cơ sở dữ liệu trừu tượng ở mức thấp nhất. Mức
này còn gọi là mức lưu trữ, mô tả cách dữ liệu thực sự được lưu trữ.
● Mức quan niệm (mức logic – logical level): mô hình quan niệm là cách nhìn dữ liệu
một cách tổng quát của người sử dụng. Nghĩa là có rất nhiều cách nhìn dữ liệu ở mô
hình ngoài, nhưng chỉ có duy nhất một cách nhìn dữ liệu ở mức quan niệm. Biểu
diễn toàn bộ thông tin trong CSDL là duy nhất. Mức này còn gọi là mức tổ chức, mô
tả dữ liệu gì trong cơ sở dữ liệu.
● Mức ngoài hay mức nhìn (view level): mức này còn gọi là mức người dùng, mô tả
một phần của cơ sở dữ liệu. Phần lớn người dùng sẽ không sử dụng toàn bộ cơ sở dữ
liệu lớn mà thay vào đó họ cần truy xuất một phần của nó. Vì thế mức trừu tượng
view được định nghĩa và có nhiều mức nhìn đối với cùng một cơ sở dữ liệu.

7
Hình 1-5: Các mức mô hình cơ sở dữ liệu
3.2 Các kiểu mô hình dữ liệu
Mô hình dữ liệu là một tập hợp các cấu trúc dữ liệu, các phép toán để thao tác dữ liệu và
tập hợp các ràng buộc dữ liệu. Việc tổ chức cơ sở dữ liệu theo mô hình dữ liệu nào là tốt
nhất thực tế chưa có có câu trả lời. Câu trả lời phụ thuộc vào yêu cầu truy xuất và khai thác
thông tin của đơn vị quản lý nó. Có nhiều mô hình dữ liệu được đề xuất cho việc tổ chức cơ
sở dữ liệu. Mô hình dữ liệu được chia ra thành 3 loại:
● Mô hình dữ liệu dựa trên đối tượng (object-based data models): mô hình thực thể -
quan hệ (entity relationship model), mô hình hướng đối tượng (object-based model).
● Mô hình dữ liệu dựa trên mẫu tin (record-based data models): mô hình dữ liệu mạng,
mô hình dữ liệu phân cấp, mô hình dữ liệu quan hệ.
● Mô hình dữ liệu vật lý (physical data models): mô hình Unifying, mô hình Frame
Memory.
Các mô hình dữ liệu thường sử dụng là:
● Mô hình dữ liệu mạng (network data model): là mô hình gồm 2 khái niệm, tập dữ
liệu và tập quan hệ. Mô hình dữ liệu mạng được sử dụng phổ biến vào những năm
60, được định nghĩa lại năm 1971. Mô hình dữ liệu mạng được biễu diễn bằng đồ thị
có hướng. Ưu điểm của mô hình dữ liệu mạng là đơn giản dễ thiết kế, biểu diễn ngữ
nghĩa mối quan hệ đa dạng 1-1, 1-n, đệ quy, truy vấn thông qua phép duyệt đồ thị.
Tuy nhiên mô hình có hạn chế là số lượng các con trỏ lớn, tăng khả năng lưu trữ,
không thích hợp khi thiết kế cho CSDL lớn.

8
Hình 1-6: Mô hình dữ liệu mạng
● Mô hình dữ liệu phân cấp (hierarchical data model): là mô hình đặc biệt của mô
hình mạng. Mô hình dữ liệu phân cấp ra đời vào khoảng những năm 1960 - 1965.
Đối với mô hình dữ liệu phân cấp thì mô hình này được biểu diễn bằng cấu trúc cây,
thể hiện mối quan hệ cha con, mỗi nút có một nút cha duy nhất và mỗi cây là một
CSDL. Ưu điểm của mô hình dữ liệu phân cấp là dễ xây dựng và thao tác; tương
thích với các lĩnh vực tổ chức phân cấp (ví dụ mô hình sơ đồ nhân sự của cơ quan);
có ngôn ngữ thao tác đơn giản (duyệt cây). Tuy nhiên hạn chế của mô hình này là sự
lặp lại các kiểu bản ghi, hạn chế trong việc biễu diễn mối quan hệ giữa các nút với
nhau (chỉ biểu diễn được 1 quan hệ 1-n).

Hình 1-7: Mô hình dữ liệu phân cấp


● Mô hình thực thể quan hệ (entity relationship model): mô hình thực thể quan hệ được
sử dụng rộng rãi để thiết kế cơ sở dữ liệu. Mô hình này được xây dựng dựa trên nhận
thức rằng thế giới thực mà chúng ta muốn phản ánh là một tập hợp các đối tượng cơ
sở và các mối kết hợp giữa chúng. Mô hình này sử dụng các khái niệm như thực thể
(entity), mối quan hệ (relationship) và thuộc tính (attribute). Mô hình này xuất phát
từ các nhu cầu mô hình hóa ngữ nghĩa dữ liệu và phát triển phần mềm. Mô hình được
9
biểu diễn bằng các thực thể và các mối quan hệ hay còn gọi là các liên kết. Ưu điểm
của mô hình là biểu diễn cái mà con người có thể nhìn thấy từ thế giới thực một cách
dễ dàng và thể hiện mối quan hệ phong phú giữa các thực thể. Tuy nhiên mô hình
này không dễ dàng ánh xạ vào những cấu trúc lưu trữ trong máy tính.

Hình 1-8: Mô hình thực thể quan hệ

4. HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU (DATABASE MANAGEMENT


SYSTEM)
4.1 Hệ quản trị cơ sở dữ liệu - DBMS
Định nghĩa của hệ quản trị cơ sở dữ liệu có thể được phát biểu bằng một số cách khác nhau:
● Hệ quản trị cơ sở dữ liệu là một tập hợp các chương trình cho phép người dùng tạo
ra cơ sở dữ liệu, duy trì hoạt động của cơ sở dữ liệu và điều khiển tất cả các truy xuất
đến cơ sở dữ liệu.
● Các hệ quản trị cơ sở dữ liệu là những ứng dụng được thiết kế đặc biệt để tương tác
với người dùng, với những ứng dụng khác và bản thân cơ sở dữ liệu để quản lý và
phân tích dữ liệu.
Một cách tổng quát hệ quản trị cơ sở dữ liệu là một phần mềm cung cấp rất nhiều chức năng
để người dùng tạo lập, cập nhật và khai thác CSDL. Ngoài ra hệ quản trị CSDL còn hỗ trợ
khả năng lưu trữ, sửa chữa, xóa và tìm kiếm thông tin trong một CSDL. Chức năng này
được chia ra thành các nhóm chính theo vai trò:
● Cung cấp môi trường tạo lập CSDL: ngôn ngữ định nghĩa dữ liệu
● Cung cấp môi trường cập nhật và khai thác dữ liệu: ngôn ngữ thao tác và truy vấn
dữ liệu
● Cung cấp công cụ kiểm soát, điều khiển truy cập vào CSDL. Quản lý danh mục hệ
thống (system catalog) hay còn gọi tự điển dữ liệu (data dictionary) hay metadata.
Sử dụng danh mục hệ thống giúp cho việc tập hợp và lưu trữ thông tin về dữ liệu, bảo trì
CSDL và quản lý tài nguyên tốt hơn. Danh mục hệ thống hỗ trợ định nghĩa ý nghĩa của dữ
10
liệu cho phép người dùng hiểu mục đích của dữ liệu, hỗ trợ truy xuất dữ liệu dễ dàng. Nhờ
vào danh mục hệ thống sự dư thừa và không nhất quán dữ liệu sẽ dễ được phát hiện hơn.
Ngoài ra những lợi ích khác của catalog là giúp ghi nhận các hành động thay đổi CSDL và
đảm bảo sự bảo mật và toàn vẹn dữ liệu.
4.2 Hoạt động của một hệ quản trị CSDL
Hoạt động của một hệ quản trị CSDL được tóm tắt các bước sau:
● Người dùng đưa ra yêu cầu truy xuất CSDL bằng ngôn ngữ dữ liệu.
● Hệ quản trị CSDL tiếp nhận và phân tích yêu cầu của người dùng.
● Hệ quản trị CSDL xem xét các lược đồ và ánh xạ.
● Hệ quản trị CSDL hiện thực các thao tác trên cơ sở dữ liệu và trả về kết quả theo
yêu cầu.
Có rất nhiều hệ quản trị cơ sở dữ liệu khác nhau, từ phần mềm nhỏ chạy trên máy tính cá
nhân cho đến những hệ quản trị cơ sở dữ liệu phức tạp chạy trên một hoặc nhiều máy tính.
Các hệ quản trị cơ sở dữ liệu phổ biến được nhiều người biết đến là MS SQL Server,
MySQL, Oracle, PostgreSQL, … Phần lớn các hệ quản trị cơ sở dữ liệu này hoạt động tốt
trên nhiều hệ điều hành khác nhau như Windows, Linux, Unix và MacOS.
4.3 Ngôn ngữ cơ sở dữ liệu (Database Language)
Một hệ quản trị cơ sở dữ liệu cho phép các chương trình ứng dụng và người dùng tương tác
với cơ sở dữ liệu. Để thực hiện sự tương tác đó hệ quản trị cơ sở dữ liệu hỗ trợ cho người
dùng ngôn ngữ cơ sở dữ liệu. Ngôn ngữ cơ sở dữ liệu thường gồm các loại như sau:
● Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL): là ngôn ngữ cho
phép khai báo tên đối tượng, cấu trúc của đối tượng, các quan hệ giữa các đối tượng
(định nghĩa lược đồ quan hệ)
CREATE TABLE SINHVIEN(
masv char(10) PRIMARY KEY,
hoten char(20),
diachi char(50))
Kết quả sau khi thực hiện câu lệnh DDL là một tập các bảng (table) được lưu trữ
trong một từ điển dữ liệu (data dictionary). Từ điển dữ liệu bao gồm các metadata
chứa lược đồ CSDL, tên người có quyền sử dụng CSDL, các mục dữ liệu mà mỗi
người dùng có thể truy cập và kiểu truy cập (read, write, execute).
● Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML): là ngôn ngữ dùng
cho việc làm thay đổi dữ liệu trong một cơ sở dữ liệu. Thường DML bao gồm các
thao tác cơ bản như: thêm dữ liệu (insert), cập nhật dữ liệu (update), xóa dữ liệu
(delete), …. Ví dụ, để thêm một dòng thông tin vào bảng thông tin SINHVIEN người
ta sử dụng lệnh như sau:
INSERT INTO SINHVIEN

11
VALUES ('SV001','Nguyễn Văn A','256 Nguyễn Trãi')
● Ngôn ngữ truy vấn dữ liệu (Structured Query Language): là ngôn ngữ thông dụng
nhất của ngôn ngữ dữ liệu, được dùng để truy vấn dữ liệu cần thiết. Ví dụ, để biết
tên của sinh viên có mã sinh viên ‘SV001’ người ta sử dụng lệnh như sau:
SELECT hoten
FROM SINHVIEN
WHERE masv = 'SV001'
● Ngôn ngữ kiểm kiểm soát dữ liệu (Data Control Language - DCL): cho phép những
người quản trị hệ thống thay đổi cấu trúc của các bảng dữ liệu, khai báo bảo mật
thông tin và cấp quyền hạn khai thác CSDL cho người sử dụng. DCL là tập hợp con
SQL đơn giản nhất, vì nó chỉ bao gồm ba lệnh: gán quyền (grant), thu hồi quyền
(revoke) và từ chối quyền truy cập (deny). Kết hợp lại, ba lệnh này cung cấp cho
quản trị viên sự linh hoạt để thiết lập và loại bỏ các quyền cơ sở dữ liệu theo kiểu
chi tiết. Ví dụ, để cấp quyền cho người dùng Joe khả năng lấy thông tin từ bảng
Nhân Viên (employees) trong cơ sở dữ liệu được gọi là Nhân sự (HR) người ta sử
dụng lệnh như sau:
GRANT SELECT
ON HR.employees
TO Joe
Ngoài ra trong ngôn ngữ cơ sở dữ liệu chúng ta có thể khái niệm Từ điển dữ liệu (Data
Dictionary). Từ điển dữ liệu được dùng để mô tả các ánh xạ liên kết, ghi nhận các thành
phần cấu trúc của CSDL, các chương trình ứng dụng, mật mã, quyền hạn sử dụng.
4.4 Chức năng của hệ quản trị cơ sở dữ liệu
Một hệ quản trị cơ sở dữ liệu, theo E. F. Codd (1982), thường có chức năng cơ bản sau:
● Cung cấp cho người dùng khả năng lưu trữ, truy xuất và cập nhật dữ liệu.
● Cung cấp cho người dùng danh mục hệ thống (system catalog) hay còn gọi từ điển
dữ liệu (data dictionary). Dữ liệu trong từ điển dữ liệu còn gọi là siêu dữ liệu
(metadata).
● Hỗ trợ cho các giao dịch (transactions) bằng cách cung cấp một cơ chế đảm bảo hoặc
tất cả các thao tác cập nhật trong một giao dịch được thực hiện hoặc không thao tác
nào trong giao dịch đó được thực hiện. Chức năng này đảm bảo tính nhất quán
(consistency) và tính bền vững (durability) của dữ liệu.
● Cung cấp các dịch vụ điều khiển sự truy xuất dữ liệu đồng thời (concurrency) khi có
nhiều phiên làm việc với cơ sở dữ liệu, đặc biệt là đối với những truy xuất làm thay
đổi thông tin trên cơ sở dữ liệu. Chức năng này đảm bảo lịch trình (schedule) truy
xuất cơ sở dữ liệu.
● Cung cấp một cơ chế khôi phục dữ liệu (recovery) khi xảy ra một sự cố làm hỏng cơ
sở dữ liệu.
12
● Cung cấp bản quyền dịch vụ (service license). Điều này có nghĩa là có một cơ chế
để đảm bảo chỉ những người được cấp bản quyền mới có thể được truy xuất cơ sở
dữ liệu.
● Hỗ trợ cho truyền thông dữ liệu (data communication). Nói cách khác hệ quản trị cơ
sở dữ liệu phải có khả năng tích hợp với các phần mềm truyền thông.
● Cung cấp các dịch vụ đảm bảo tính toàn vẹn dữ liệu (data intergrity). Điều này có
nghĩa là đảm bảo dữ liệu trong cơ sở dữ liệu và những thay đổi dữ liệu phải tuân
theo những luật đã xác định.
● Cung cấp dịch vụ hỗ trợ cho tính độc lập dữ liệu (data independency).
● Cung cấp một số dịch vụ tiện ích (utilities). Những chương trình tiện ích này sẽ giúp
cho người quản trị cơ sở dữ liệu quản trị tốt cơ sở dữ liệu.
4.5 Kiến trúc của hệ quản trị cơ sở dữ liệu
Để có thể thực hiện các chức năng đã nêu trên, một hệ quản trị cơ sở dữ liệu có một kiến
trúc rất tinh vi và có độ phức tạp khá cao. Một hệ quản trị cơ sở dữ liệu được chia ra thành
một số thành phần, mỗi thành phần là một mô-đun (module) phần mềm chịu trách nhiệm
cụ thể như hình 1-9.

Hình 1-9: Kiến trúc của hệ quản trị cơ sở dữ liệu


● Bộ xử lý truy vấn (Query Processor): là thành phần chính của hệ quản trị cơ sở dữ
liệu với nhiệm vụ dịch các câu lệnh ở mức thấp để chuyển cho bộ quản lý dữ liệu.
● Bộ quản lý cơ sở dữ liệu (Database Manager – DM): là thành phần chính của hệ
quản trị cơ sở dữ liệu với nhiệm vụ dịch các câu lệnh ở mức thấp để chuyển cho bộ
quản lý dữ liệu.
● Bộ tiền xử lý ngôn ngữ thao tác dữ liệu (DML Preprocessor): là thành phần chuyển
các câu lệnh DML nhúng trong chương trình ứng dụng về dạng câu lệnh DML chuẩn.
Nó phải tương thích với bộ xử lý câu hỏi để sinh ra mã thích hợp.

13
● Bộ biên dịch ngôn ngữ định nghĩa dữ liệu (DDL Compiler): là thành phần chuyển
các câu lệnh DDL sang thành một tập hợp các bảng chứa siêu dữ liệu và các bảng
này nằm trong hệ thống từ điển dữ liệu.
● Bộ quản lý từ điển dữ liệu (Dictionary/Catalog Manager): là thành phần quản lý truy
xuất đến từ điển dữ liệu và bảo trì hệ thống từ điển dữ liệu. Hầu hết các thành phần
của hệ quản trị cơ sở dữ liệu đều truy xuất từ từ điển dữ liệu
5. CÁC KIẾN TRÚC TRUY XUẤT DỮ LIỆU
Truy nhập và khai thác các hệ cơ sở dữ liệu trở thành phương thức phổ biến trong các ứng
dụng của hệ thống tin học, đặc biệt trên các mạng Internet/Intranet. Chuyển tải thông tin từ
các hệ cơ sở dữ liệu lên mạng dưới dạng ngôn ngữ đánh dấu siêu văn bản HTML (HyperText
Markup Language) hoặc bằng các ngôn ngữ khác nhằm cung cấp cho dịch vụ World Wide
Web đa dạng và phong phú thêm. Truy cập và khai thác các hệ cơ sở dữ liệu đòi hỏi phải
nghiên cứu, giải quyết một số vấn đề về kỹ thuật lập trình mạng, lập trình cơ sở dữ liệu
động trên các môi trường Internet và Intranet.
5.1 Kiến trúc Mainframe – Terminal
Kiến trúc này còn được gọi là hệ xử lý từ xa (Teleprocessing). Đây là kiến trúc truyền thống
của hệ thống đa người dùng. Một hệ xử lý từ xa bao gồm các hệ thống máy tính lớn
(mainframe) và một số thiết bị cuối (terminal) như hình 1-10.

Hình 1-10: Kiến trúc mainframe - terminal


Tất cả các xử lý đều được thực hiện trên mainframe. Các terminal nối vào các mainframe
bởi cáp. Trong kiến trúc này mainframe phải thực thi các ứng dụng cơ sở dữ liệu và cả phần
mềm hệ quản trị cơ sở dữ liệu thay cho các terminal.
5.2 Kiến trúc FileServer – Workstation
Trong kiến trúc này việc xử lý không còn tập trung vào mainframe mà được phân tán trên
mạng, thường là mạng cục bộ LAN như hình 1-11.

14
Hình 1-11: Kiến trúc FileServer – Workstation
Trong kiến trúc này, một máy chủ fileserver được kết nối với một số máy trạm (workstation)
thông qua qua một mạng cục bộ LAN. Cơ sở dữ liệu sẽ nằm trên fileserver này. Các hệ
quản trị cơ sở dữ liệu và các ứng dụng cơ sở dữ liệu chạy trên các workstation và sẽ gửi yêu
cầu các tập tin dữ liệu đến fileserver khi cần. Máy chủ fileserver hoạt động đơn giản như
một đĩa cứng chứa dữ liệu có thể chia sẻ. Kiến trúc này có nhược điểm là tốc độ truy xuất
phụ thuộc vào giao thông mạng và mỗi workstation đều phải cài đặt hệ quản trị cơ sở dữ
liệu.
5.3 Kiến trúc Client – Server hai lớp
Một trong những mục tiêu khi kết nối các máy tính thành mạng là chia sẻ các tài nguyên
thông tin. Một máy chủ cung cấp các loại dịch vụ cho nhiều máy khách thông qua môi
trường mạng. Máy chủ và máy khách đều tham gia quá trình xử lý, vì vậy mô hình Client-
Server 2 lớp trở nên phổ biến. Các máy khách (client) chia sẻ gánh nặng xử lý của máy chủ
trung tâm. Khi máy khách thực hiện các ứng dụng, nó gửi yêu cầu về máy chủ được kết nối
với cơ sở dữ liệu, máy chủ xử lý và gửi trả lại kết quả về máy khách.
● Trên các máy chủ, thường được cài đặt các hệ cơ sở dữ liệu bao gồm các bảng biểu,
các thủ tục lưu trữ... và điều khiển các tiến trình sau: quản lý dữ liệu, bảo mật dữ
liệu, thực hiện truy vấn, ràng buộc và các thủ tục lưu trữ và điều khiển lỗi.
● Các tiến trình được thực hiện trên máy khách: tạo giao diện người sử dụng (user
inteface)
● Tương tác cơ sở dữ liệu (database interaction): thực hiện các thao tác cập nhật cơ sở
dữ liệu (thêm, sửa, xóa dữ liệu) và điều khiển lỗi.
Tuy nhiên mô hình Client/Server vẫn còn nhiều bất cập:
● Mô hình Client/Server 2 lớp có hiệu quả cao với các ứng dụng nhỏ và số lượng người
sử dụng hạn chế. Khi nhiều máy khách kết nối truy nhập vào cơ sở dữ liệu thì năng
lực quản lý và xử lý của máy chủ (server) sẽ bị giảm xuống, tốc độ xử lý chậm.

15
● Nhiều kết nối dữ liệu phải được duy trì.
● Mã nguồn không có khả năng dùng sử dụng lại. Một ứng dụng tồn tại trong nhiều
khối mã nguồn khác nhau được cài đặt trên máy khách. Vì vậy khi có sự thay đổi
mã nguồn người ta cần phải cài đặt lại trên tất cả máy khách, điều này rất khó có thể
thực hiện được.
● Không có lớp trung gian điều khiển sự bảo mật và các giao dịch giữa máy khách và
máy chủ.

Hình 1-12: Kiến trúc Client - Server hai lớp


5.4 Kiến trúc Client – Server nhiều lớp
Trong mô hình Client/Server 3 lớp (hay nhiều lớp), quá trình xử lý được phân tán trên 3 lớp
khác nhau với các chức năng riêng biệt. Vì vậy mô hình này rất thích hợp cho việc tổ chức
hệ thống thông tin trên mạng Internet và mạng Intranet hay trong các mạng cục bộ. Phát
triển mô hình 3 lớp sẽ khắc phục được một số hạn chế của mô hình 2 lớp. Các hệ cơ sở dữ
liệu được cài đặt trên các máy chủ web server và có thể được truy nhập không hạn chế các
ứng dụng và số lượng người dùng.
● Lớp khách (Clients): Chức năng của lớp này là cung cấp dịch vụ trình bày
(presentation service). Thực hiện việc giao tiếp giữa người sử dụng với lớp giao dịch
thông qua trình duyệt (browser) hay trình ứng dụng để thao tác và xử lý dữ liệu.
Thông thường giao diện người sử dụng được chứa trong các File OCX. Lớp này có
thể cài đặt ở dạng ứng dụng web gồm những trang ASP sử dụng các File OCX. Trong
mô hình Internet (Internet model), lớp khách là trình duyệt Internet Explorer hay
Netscape.
● Lớp giao dịch (Business Tier) cung cấp các dịch vụ quản trị, tổ chức và khai thác
CSDL. Các thành phần trước đây được cài đặt trên lớp khách, nay được cài đặt trên
lớp giao dịch. Ví dụ, một người sử dụng trên máy khách đặt mua hàng, lớp giao dịch
kiểm tra mã hàng còn hay không mới quyết định tiếp tục bán/không bán. Thành phần
của lớp giao dịch trong mô hình Internet là Web Server và COM+/MTS. Công nghệ
của Microsoft với Web Server là IIS (Internet Information Services) sử dụng ASP
để kết nối Client với COM. Web Server giao tiếp với COM+/MTS qua COM.
COM+/MTS điều khiển tất cả giao tiếp với lớp dữ liệu nguồn thông qua ODBC hoặc
OLE - DB.
16
● Lớp nguồn dữ liệu (Data Source): Lớp nguồn dữ liệu cung cấp các dịch vụ tổ chức
và lưu trữ các hệ cơ sở dữ liệu quan hệ. Sẵn sàng cung cấp dữ liệu cho lớp giao dịch.
Đặc trưng của lớp này là SQL Server quản lý dữ liệu và các thành phần trong cơ sở
dữ liệu như bảng, dữ liệu và các thủ tục lưu trữ. Trong mô hình Internet lớp nguồn
dữ liệu quản lý các hoạt động của một lượng lớn Clients. Microsoft phát triển DNA
mô hình chung (Framework) xây dựng cho ứng dụng nhiều lớp.
Tóm lại, đặc trưng của mô hình tính toán phân tán là các tài nguyên của mạng như thiết bị
phần cứng, chương trình, dữ liệu được phân tán theo địa lý trên mạng. Người sử dụng có
thể truy nhập khai thác trực tuyến hoặc và khai thác tương tác dữ liệu từ xa.

Hình 1-13: Kiến trúc Client - Server nhiều lớp

6. CON NGƯỜI TRONG HỆ CƠ SỞ DỮ LIỆU


Với các hệ cơ sở dữ liệu nhỏ chỉ có thể có một người định nghĩa và thao tác trên đó,
nhưng với những hệ cơ sở dữ liệu lớn, có thể có sự tham gia của nhiều người vào việc định
nghĩa, bảo trì và khai thác nó.
● Người quản trị cơ sở dữ liệu (Database Administrator – DBA): là người có trách
nhiệm quản lý các tài nguyên của hệ cơ sở dữ liệu. Các tài nguyên đó là cơ sở dữ
liệu, hệ quản trị cơ sở dữ liệu và các phần mềm có liên quan. Đây là người có vai trò
thiết kế và cài đặt cơ sở dữ liệu về mặt vật lý, cấp phát các quyền truy xuất cơ sở dữ
liệu, cấp quyền sử dụng phần mềm và phần cứng theo yêu cầu, duy trì các hoạt động
hệ thống để đảm bảo thỏa mãn yêu cầu của các chương trình ứng dụng và của người
dùng. Như vậy, DBA phải là người có những hiểu biết chi tiết và kỹ năng về kỹ thuật
trong lĩnh vực cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu và môi trường hệ thống.
● Người thiết kế cơ sở dữ liệu logic (Logical Database Designer): là người có trách
nhiệm xác định dữ liệu nào được lưu trữ trong cơ sở dữ liệu, xác định các mối kết
hợp giữa dữ liệu, xác định các ràng buộc trên dữ liệu được lưu trữ. Như vậy, người
thiết kế dữ liệu logic cần phải có sự hiểu biết đầy đủ về thế giới thu nhỏ mà cơ sở dữ
liệu phản ánh. Tóm lại, người thiết kế cơ sở dữ liệu logic trả lời câu hỏi cái gì được
lưu trữ trong cơ sở dữ liệu.
● Người thiết kế cơ sở dữ liệu vật lý (Physical Database Designer): là người chọn mô
hình dữ liệu logic và quyết định nó được thực hiện về mặt vật lý như thế nào. Tóm
lại, người thiết kế cơ sở dữ liệu vật lý trả lời câu hỏi dữ liệu lưu trữ như thế nào.
Thông thường có 3 cách lưu trữ: tổ chức lưu trữ theo kỹ thuật hàm băm; tổ chức lưu
17
trữ theo chỉ số; tổ chức lưu trữ theo cây cân bằng B.
● Người lập trình ứng dụng (Application Programer): là người viết chương trình ứng
dụng khai thác cơ sở dữ liệu sau khi cơ sở dữ liệu đã được cài đặt. Thông thường
người lập trình ứng dụng thể hiện các đặc tả của người phân tích thiết kế hệ thống
thành chương trình bao gồm các câu lệnh yêu cầu hệ quản trị cơ sở dữ liệu thực hiện
các thao tác cần thiết trên cơ sở dữ liệu.
● Người dùng cuối (End Users): là những người yêu cầu quyền truy cập vào cơ sở dữ
liệu để truy vấn, cập nhật và tạo báo cáo. Trong khi người dùng chất phác (naïve
user) là những người chưa có hiểu biết sâu sắc về cơ sở dữ liệu thì người dùng thành
thạo (sophisticated user) là những người có hiểu biết khá nhiều về cơ sở dữ liệu và
những tiện ích do một hệ quản trị cơ sở dữ liệu cung cấp.
TÓM TẮT CHƯƠNG
Trước khi các hệ quản trị cơ sở dữ liệu ra đời, dữ liệu được lưu trữ trong các tập tin. Hệ
thống dựa trên tập tin cổ điển có nhiều hạn chế như sự dư thừa và tính không nhất quán của
dữ liệu, sự cô lập dữ liệu, không đảm bảo tính nguyên tử của một giao dịch, các vấn đề an
toàn của hệ thống, các hạn chế trong điều khiển truy xuất cạnh tranh… Một cơ sở dữ liệu
có nhiều cách định nghĩa ví dụ như CSDL là tập hợp các dữ liệu liên quan mang tính chất
dùng chung hay là một tập hợp dữ liệu có cấu trúc. Hệ quản trị CSDL được phát triển cho
phép người dùng định nghĩa, tạo và duy trì CSDL, cung cấp dịch vụ truy cập CSDL. Các
kiến trúc giúp truy nhập và khai thác các hệ cơ sở dữ liệu bao gồm kiến trúc mainframe –
terminal, fileserver – workstation và client – server với các ưu điểm và hạn chế nhất định
phù hợp với từng quy mô và mục đích sử dụng.
CÂU HỎI TRẮC NGHIỆM
1. Cơ sở dữ liệu là?
a. Một bộ sưu tập rất lớn về các loại dữ liệu tác nghiệp.
b. Một tập File dữ liệu.
c. Một tập các chương trình ứng dụng và dữ liệu.
d. Hệ quản trị cơ sở dữ liệu.
2. Cơ sở dữ liệu là tài nguyên thông tin ……
a. truy xuất theo chế độ trực tuyến hay tương tác.
b. chia sẻ chung cho nhiều người sử dụng.
c. cài đặt trên mạng máy tính.
d. trên các thiết bị đầu cuối.
3. Đối tượng nghiên cứu của CSDL là ……
a. các thực thể.
b. các mối quan hệ.
18
c. các thực thể và mối quan hệ giữa các thực thể.
d. các mối liên kết giữa các thực thể.
4. Cơ sở dữ liệu có những ưu điểm gì? Chọn phương án SAI.
a. Giảm bớt dư thừa dữ liệu trong lưu trữ.
b. Tránh không nhất quán trong lưu trữ dữ liệu.
c. Bảo đảm được tính toàn vẹn của dữ liệu.
d. Không thể phản ảnh thế giới hiện thực dữ liệu.
5. Mô hình kiến trúc 3 mức của hệ CSDL gồm:
a. Mô hình trong, mô hình vật lý
b. Mô hình dữ liệu
c. Mô hình ngoài, khung nhìn của người sử dụng.
d. Các mô hình con dữ liệu
6. Mô hình kiến trúc 3 mức của hệ CSDL gồm:
a. Mô hình trong, mô hình vật lý
b. Mô hình dữ liệu
c. Mô hình ngoài, khung nhìn của người sử dụng.
d. Các mô hình con dữ liệu
CÂU HỎI
1. Cơ sở dữ liệu là gì?
2. Sự cần thiết tổ chức lưu trữ dữ liệu theo lý thuyết cơ sở dữ liệu là gì?
3. Cho ví dụ minh hoạ về dư thừa dữ liệu và không nhất quán trong lưu trữ làm mất đi
tính toàn vẹn của dữ liệu.
4. Tính độc lập của dữ liệu có thể được hiểu như thế nào?
5. Trình bày tổng quát kiến trúc mô hình hệ cơ sở dữ liệu 3 mức.
6. Khái niệm tập tin (file) có gì khác với khái niệm cơ sở dữ liệu không? Cho ví dụ
minh họa.
7. Tại sao nói “mô hình dữ liệu là cách nhìn toàn bộ nội dung thông tin của CSDL, sơ
đồ quan niệm là định nghĩa của cách nhìn ấy”? Ví dụ minh hoạ.
8. Hiểu thế nào về hệ quản trị CSDL (Database Management System DBMS)?
9. Nêu một số nhiệm vụ chính của người quản trị CSDL.
10. Giải thích về mô hình cơ sở dữ liệu Client- Server.

19
20
CHƯƠNG 2.
CÁC MÔ HÌNH DỮ LIỆU QUAN HỆ
Edgar F. Codd là người đầu tiên nghiên cứu mô hình cơ sở dữ liệu quan hệ. Trong chương
này sẽ trình bày những khái niệm cơ bản nhất về lý thuyết cơ sở dữ liệu quan hệ do E.F
Codd đề xuất, đó là các khái niệm về quan hệ, về khóa của lược đồ quan hệ. Chương 2 cũng
giới thiệu về mô hình thực thể kết hợp để mô hình hóa các hoạt động trong thế giới thực,
nhìn thế giới thực như là một tập các đối tượng căn bản được gọi là các thực thể và các mối
quan hệ ở giữa các đối tượng này. Trong chương này mô hình dữ liệu quan hệ, các quy tắc
chuyển đổi cơ sở dữ liệu biểu diễn dạng lược đồ thực thể kết hợp sang mô hình dữ liệu liên
quan cũng sẽ được trình bày với các nội dung cơ bản. Nội dung của chương bao gồm các
phần:
● Mô hình thực thể kết hợp (Entity Relationship Model)
● Mô hình dữ liệu quan hệ (Relational Data Model)
● Sự chuyển đổi qua lại giữa hai mô hình thực thể kết hợp và dữ liệu quan hệ

21
1. MÔ HÌNH THỰC THẾ KẾT HỢP
Mô hình thực thể kết hợp (E-R – Entity Relationship Data Model) được Peter Pin-Shan
Chen đề xuất năm 1976; trong đó, thế giới thực được xem xét như là một tập các đối tượng
căn bản được gọi là các thực thể và các mối quan hệ ở giữa các đối tượng đó. Mô hình đã
được phát triển để làm thuận tiện cho việc thiết kế cơ sở dữ liệu bằng cách đặc tả một tổ
chức. Mô hình thực thể kết hợp được dùng để thiết kế cơ sở dữ liệu ở mức quan niệm, thể
hiện sự trừu tượng cấu trúc của cơ sở dữ liệu. Những khái niệm cơ bản mà mô hình thực
thể kết hợp sử dụng bao gồm thực thể, tập thực thể, khóa, mối quan hệ, và thuộc tính.
1.1 Thực thể và tập thực thể
Một thực thể (entity) là một “sự vật” hoặc “đối tượng” trong thế giới thực và có thể phân
biệt được với các đối tượng khác. Ví dụ như một nhân viên trong một tổ chức là một thực
thể.
Một tập thực thể (entity set) là một tập hợp các thực thể cùng loại mà chúng chia sẻ cùng
những tính chất hoặc thuộc tính. Ví dụ như tập hợp tất cả những nhân viên của một tổ chức
là một tập thực thể nhân viên. Mỗi tập thực thể được đặt một tên gọi, thông thường là danh
từ. Ví dụ như GIANGVIEN, SINHVIEN, DETAI, …
Ký hiệu của một tập thực thể trong mô hình E-R là hình chữ nhật với nhãn là tên gọi của
tập đó.

Hình 2-1: Tập thực thể GIANGVIEN


Các tập thực thể có thể giao nhau. Ví dụ, tập thực thể viên chức (VIENCHUC) gồm tất cả
những người làm việc trong một trường đại học. Một viên chức có thể là một giảng viên
thuộc tập GIANGVIEN và cũng có thể là một sinh viên thuộc tập SINHVIEN.
1.2 Thuộc tính
Mỗi tập thực thể có nhiều đặc trưng riêng được gọi là các thuộc tính (attributes). Mỗi thuộc
tính được đặt một tên, chẳng hạn như MAGV (Mã giáo viên), HOTEN (Họ tên), GIOITINH
(Giới tính), … Ký hiệu của một thuộc tính là hình bầu dục với nhãn chính là tên thuộc tính
và được nối với tập thực thể tương ứng.

Hình 2-2: Các thuộc tính của tập thực thể GIANGVIEN
Ví dụ 2.1: Ở hình 2-2, tập thực thể GIANGVIEN có một số thuộc tính như mã giảng viên
22
(MAGV), họ tên (HOTEN), ngày sinh (NGAYSINH), giới tính (GIOITINH), … Thuộc tính
là những đặc trưng cơ bản của giảng viên mà người dùng cần quản lý và sử dụng trong hệ
thống quản lý.
Khi phân tích một thuộc tính, thông thường chúng ta cần xét đến kiểu dữ liệu và miền giá
trị tương ứng của thuộc tính đó. Ví dụ các thuộc tính mã giảng viên (MAGV), họ tên
(HOTEN) có kiểu dữ liệu ký tự phản ánh những thông tin của giảng viên; ngày sinh
(NGAYSINH) thuộc kiểu dữ liệu ngày tháng; hệ số lương (HESOLUONG) thuộc kiểu dữ
liệu số thực, ...
Một số loại thuộc tính thường gặp bao gồm:
• Thuộc tính đơn, kết hợp:
Thuộc tính đơn là thuộc tính không thể chia ra thành những phần nhỏ hơn. Ngược
lại, thuộc tính kết hợp có thể chia ra thành những phần con (tức là thành những thuộc
tính khác). Ví dụ, tên giảng viên có cấu trúc như là thuộc tính kết hợp bao gồm tên,
chữ lót, và họ. Thuộc tính kết hợp có thể xuất hiện theo sự phân cấp. Ví dụ, thuộc
tính địa chỉ giảng viên gồm các thuộc tính thành phần phân cấp là số nhà, đường,
thành phố, tỉnh.
• Thuộc tính rỗng:
Một giá trị rỗng (null value) được dùng đến khi một thuộc tính của một thực thể nào
đó không có giá trị. Ví dụ, một giảng viên không chức vụ thì giá trị cột thuộc tính
CHUCVU phải là rỗng. Giá trị rỗng cũng có thể được dùng để chỉ ra rằng giá trị của
thuộc tính là chưa biết. Một giá trị chưa biết có thể là giá trị tồn tại nhưng chúng ta
chưa có thông tin hoặc là giá trị mà sự tồn tại của nó chưa xác định được.
• Thuộc tính dẫn xuất:
Giá trị của loại thuộc tính này có thể được suy ra từ các thuộc tính hoặc thực thể liên
quan khác. Ví dụ, tập thực thể giảng viên có các thuộc tính ngày bắt đầu cho biết
ngày bắt đầu làm việc của giảng viên và thuộc tính thời gian làm việc cho biết tổng
số năm làm việc của giảng viên. Giá trị của thời gian làm việc có thể được suy ra từ
giá trị của ngày bắt đầu và ngày hiện thời.
1.3 Mối kết hợp
Mối kết hợp (relationship) là sự liên kết giữa hai hay nhiều thực thể. Tập hợp các mối kết
hợp tương tự nhau được gọi là tập mối kết hợp (relationship set). Tập mối kết hợp có thể
được ký hiệu bằng hình thoi và nhãn của hình thể hiện tên của tập mối kết hợp. Tên của tập
mối kết hợp có thể là động từ, cụm danh từ hoặc cụm liên từ. Ngoài ra, tập này có thể dùng
để biểu diễn sự liên hệ giữa các tập thực thể và tập các mối kết hợp khác. Ký hiệu là hình
thoi nối với những thực thể tham gia vào mối kết hợp.

23
Hình 2-3: Tập mối kết hợp không có thuộc tính giữa GIANGVIEN và KHOA
Một tập mối kết hợp thường thuộc về một trong ba loại sau: tập mối kết hợp một – một (1 -
1), tập mối kết hợp một – nhiều (1 - n) hoặc nhiều – một (n – 1) và tập mối kết hợp nhiều –
nhiều (n – n).
• Tập mối kết hợp một – một
Một thực thể trong tập thực thể A kết hợp với một thực thể trong tập thực thể B và
ngược lại, một thực thể trong B kết hợp với một thực thể trong A.
Ví dụ 2.2: Theo ví dụ ở hình 2-4, tại một thời điểm một giảng viên không hướng dẫn hoặc
hướng dẫn một đề tài của sinh viên, một đề tài được hướng dẫn bởi một giảng viên.

Hình 2-4: Tập mối kết hợp một – một

• Tập mối kết hợp một – nhiều hoặc nhiều – một


Một thực thể trong tập thực thể A kết hợp với một số thực thể trong tập thực thể B.
Tuy nhiên, một thực thể trong B chỉ kết hợp được với một thực thể trong A.
Ví dụ 2.3: Hình 2-5 minh họa tập mối kết hợp một nhiều với ý nghĩa là một giảng viên thuộc
một khoa, mỗi khoa có một hoặc nhiều giảng viên.

Hình 2-5: Tập mối kết hợp một – nhiều

• Tập mối kết hợp nhiều – nhiều


Một thực thể trong tập thực thể A kết hợp với một số thực thể trong tập thực thể B
và một thực thể trong B kết hợp với một số thực thể trong A.
Ví dụ 2.4: Theo ví dụ ở hình 2-6, mối kết hợp thể hiện một sinh viên có thể thực hiện một
hoặc nhiều đề tài và một đề tài được thực hiện bởi một hoặc nhiều sinh viên
24
Hình 2-6: Tập mối kết hợp nhiều – nhiều
1.4 Bản số
Bản số được xác định bởi một cặp số (min – max) để quy định ràng buộc mỗi thực thể 𝑒
của tập thực thể 𝐸 tham gia vào tập mối kết hợp 𝑅; trong đó giá trị min thể hiện số lượng
tối thiểu các thực thể thuộc 𝐸 tham gia vào tập mối kết hợp R và giá trị max thể hiện số
lượng tối đa các thực thể thuộc 𝐸 tham gia vào tập mối kết hợp R.
• Bản số (0,1): số lần tối thiểu mà một thể hiện bất kỳ của một tập thực thể tham gia
vào các thể hiện của mối kết hợp là 0 và số lần tham gia tối đa là 1.
• Bản số (1,1): một thể hiện bất kỳ của một tập thực thể chỉ tham gia vào các thể hiện
của mối kết hợp duy nhất 1 lần.
• Bản số (0,n): số lần tối thiểu mà một thể hiện bất kỳ của một tập thực thể tham gia
vào các thể hiện của mối kết hợp là 0 và số lần tham gia tối đa là n.
• Bản số (1,n): số lần tối thiểu mà một thể hiện bất kỳ của một tập thực thể tham gia
vào các thể hiện của mối kết hợp là 1 và số lần tham gia tối đa là n.
Ví dụ 2.5: Một giảng viên thuộc về một khoa, một khoa có thể có một hoặc nhiều giảng
viên trực thuộc (hình 2-7).

Hình 2-7: Bản số của tập mối kết hợp giữa GIANGVIEN và KHOA
1.5 Thuộc tính trên tập mối kết hợp
Tập mối kết hợp cũng có thể có các thuộc tính. Với tập mối kết hợp có thuộc tính thì tên
của nó cần đặt một cách có ý nghĩa.
Ví dụ 2.6: Trong hình 2-8, tập mối kết hợp thuoc có thuộc tính NGAYBD thể hiện một giảng
viên bắt đầu làm việc tại một khoa vào thời điểm cụ thể (NGAYBD).

25
Hình 2-8: Tập mối kết hợp có thuộc tính giữa GIANGVIEN và KHOA
Ví dụ 2.7: Như trong hình 2-9, tập mối kết hợp latrgkhoa giữa tập thực thể GIANGVIEN
và tập thực thể KHOA có thuộc tính ngày nhận chức NGAYNHANCHUC để ghi nhận thời
gian nhân viên nhận nhiệm vụ trưởng khoa.

Hình 2-9: Tập mối kết hợp latrgkhoa giữa GIANGVIEN và KHOA

1.6 Khóa của tập thực thể


Khóa (key) của một tập thực thể là một thuộc tính hoặc một số thuộc tính của thực thể, sao
cho mỗi giá trị của các thuộc tính này sẽ có tương ứng một và chỉ một thể hiện của tập thực
thể (xác định một thực thể duy nhất). Trong nhiều trường hợp khóa của tập thực thể thường
là thuộc tính được chỉ định của tập thực thể đó. Một tập thực thể có thể có nhiều khóa và
khi đó cần chọn ra một khóa để làm khóa chính. Ký hiệu của khóa là nhãn thuộc tính được
gạch dưới.
Ví dụ 2.8: Trong hình 2-10, khóa của tập thực thể GIANGVIEN là MAGV. Mỗi giảng viên
chỉ có một mã duy nhất, không trùng với mã của giảng viên khác. Tương tự, khóa của tập
thực thể KHOA là MAKHOA ghi nhận mỗi khoa gắn với một mã khoa duy nhất.

26
Hình 2-10: Khóa của tập thực thể GIANGVIEN và KHOA
1.7 Tổng quát hóa và chuyên biệt hóa
Mặc dù khái niệm bản số của tập thực thể đối với mối kết hợp cho chúng ta biết mỗi thể
hiện của tập thực thể tham gia tối thiểu và tối đa là bao nhiêu vào mối kết hợp. Nhưng trong
thực tế, một lớp các đối tượng trong tổ chức có khi tồn tại tình trạng là một số đối tượng
(tập con) của nó tham gia vào một mối kết hợp này và số còn lại có thể tham gia vào những
mối kết hợp khác, trong khi có thể tất cả các phần tử của chúng lại cùng tham gia vào mối
kết hợp khác nữa. Thêm nữa một tập con có những đặc tính này, còn những phần tử còn lại
thì có thêm những đặc tính khác. Chẳng hạn giảng viên tại trường có 2 loại: giảng viên cơ
hữu và giảng viên thỉnh giảng. Đối với giảng viên cơ hữu người ta quan tâm đến hệ số
lương, còn đối với giảng viên thỉnh giảng thì người ta lại quan tâm đến mức chi trả từng tiết
và số tiết giảng dạy. Ðể phản ánh tình trạng đó trong phương pháp mô hình hóa, người ta
dùng khái niệm chuyên biệt hóa / tổng quát hóa.
Chuyên biệt hóa (specialization) nghĩa là phân hoạch một thực thể thành các tập (thực thể)
con. Tổng quát hóa (generalization) là gộp các tập thực thể thành một tập thực thể bao hàm
tất cả các thể hiện của các tập con. Các chuyên biệt được thừa hưởng tất cả các thuộc tính
của các tập thực thể mức trên và chính nó có thể có những thuộc tính khác. Các tập thực thể
chuyên biệt có thể có những mối kết hợp khác nhau với những tập thực thể khác và do đó
các xử lý sẽ có thể khác nhau tùy theo từng chuyên biệt thành phần. Ký hiệu là hình tam
giác.
Ví dụ 2.9: Hình 2-11 minh hoạ cho vấn đề chuyên biệt hóa/tổng quát hóa. Trong đó tập thực
thể GIANGVIEN được phân hoạch thành tập GV_COHUU và GV_THINHGIANG.
GV_COHUU thừa hưởng các thuộc tính của GIANGVIEN như MAGV, HOTEN,
NGAYSINH, GIOITINH, … và có thuộc tính riêng của nó như HESOLUONG.

27
Hình 2-11: Ví dụ về chuyên biệt hóa

1.8 Tập thực thể yếu


Một tập thực thể có thể không có đủ các thuộc tính để cấu thành một khóa chính được gọi
là tập thực thể yếu (weak entity). Ngược lại một tập thực thể có khóa chính được gọi là tập
thực thể mạnh (strong entity). Tập thực thể yếu phải tham gia vào mối quan hệ mà trong đó
có một tập thực thể mạnh (mà tập đó phụ thuộc vào).
Ví dụ tập thực thể phụ huynh (PHUHUYNH) minh họa trong hình 2-12 có các thuộc tính
là họ tên phụ huynh (HOTENPH), giới tính (GIOITINH), số điện thoại (SDTPH) và mối
quan hệ với sinh viên (QUANHE). Như vậy tập thực thể này không có khóa chính nên nó
là tập thực thể yếu.
Mặc dù tập thực thể yếu không có khóa chính nhưng chúng ta cần một phương tiện để phân
biệt các thực thể thuộc tập này phụ thuộc như thế nào vào một tập thực thể mạnh.
• Phần phân biệt của một tập thực thể yếu là tập hợp các thuộc tính cho phép thực
hiện được sự phân biệt nói trên. Ví dụ thuộc tính tên phụ huynh (HOTENPH) là
phần phân biệt của tập thực thể yếu phụ huynh (PHUHUYNH).
• Phần phân biệt của một tập thực thể yếu còn được gọi là khóa bộ phận của tập thực
thể yếu.
• Khóa chính của tập thực thể yếu được hình thành bởi khóa chính của tập thực thể
mạnh mà tập đó phụ thuộc cộng với phần phân biệt của tập thực thể yếu. Ví dụ khóa
chính của PHUHUYNH là {MASV, HOTENPH}.
Một tập thực thể yếu được chỉ ra bởi một hộp nét đôi trong lược đồ và quan hệ định danh
tương ứng được vẽ bởi hình thoi nét đôi.

28
Hình 2-12: Tập thực thể yếu là tập PHUHUYNH

2. MÔ HÌNH DỮ LIỆU QUAN HỆ


Mô hình thực thể kết hợp là điểm bắt đầu để thiết kế cơ sở dữ liệu quan hệ. Bước tiếp theo
là phát triển mô hình dữ liệu quan hệ. Mô hình dữ liệu quan hệ (Relational Data Model)
biểu diễn một cơ sở dữ liệu như tập các quan hệ. Mô hình quan hệ sẽ cung cấp nền tảng cho
việc nghiên cứu lý thuyết dữ liệu, quan hệ hoặc ràng buộc, các phương pháp thiết kế cơ sở
dữ liệu và ngôn ngữ truy vấn có cấu trúc. Một số khái niệm của mô hình dữ liệu quan hệ
được giới thiệu lần lượt ở các phần tiếp theo như thuộc tính, quan hệ, lược đồ quan hệ, bộ,
khóa và ràng buộc toàn vẹn.
2.1 Thuộc tính
Thuộc tính (attribute) trong mô hình dữ liệu quan hệ là một tính chất riêng biệt của một đối
tượng cần được lưu trữ trong CSDL để phục vụ cho việc khai thác dữ liệu về đối tượng.
Ví dụ 2.10: Đối tượng giảng viên (GIANGVIEN) có các thuộc tính mã giảng viên, họ tên,
ngày sinh, giới tính, học vị, chức vụ, mã khoa.
Ví dụ 2.11: Đối tượng khoa (KHOA) có các thuộc tính mã khoa, tên khoa, năm thành lập,
trưởng khoa.
Các thuộc tính được đặc trưng bởi một tên thuộc tính (name), kiểu dữ liệu (data type) và
miền giá trị (domain). Trong các ứng dụng thực tế, người phân tích – thiết kế thường đặt
tên thuộc tính một cách gợi nhớ, tuy nhiên không nên đặt tên quá dài (vì làm cho việc viết
câu lệnh truy vấn vất vả hơn) nhưng cũng không nên quá ngắn (vì không thể hiện được ngữ
nghĩa một cách rõ ràng).
Các giá trị của mỗi thuộc tính phải thuộc một kiểu dữ liệu. Kiểu dữ liệu có thể là vô hướng
(các kiểu dữ liệu cơ bản như chuỗi, số, logic, ngày tháng…) hoặc các kiểu có cấu trúc được
định nghĩa dựa trên các kiểu dữ liệu đã có sẵn. Mỗi hệ quản trị CSDL có thể gọi các kiểu
dữ liệu nói trên bằng các tên khác nhau và ngoài ra còn bổ sung thêm một số kiểu dữ liệu
riêng của mình. Ví dụ, Microsoft Access có kiểu dữ liệu text, memo là kiểu chuỗi; SQL
Server có kiểu dữ liệu text, char, varchar, nvarchar là kiểu chuỗi.
Mỗi thuộc tính có thể chỉ chọn lấy những giá trị trong một tập hợp con của kiểu dữ liệu.
Tập hợp các giá trị mà một thuộc tính A có thể nhận được gọi là miền giá trị của thuộc tính
đó, thường được ký hiệu là MGT(A) hoặc Dom(A).
Ví dụ 2.12: Tổng điểm của đề tài là một số nguyên nhưng luôn nằm trong khoảng từ 0 đến
100; tức là điểm của đề tài không thể âm và không lớn hơn 100.
29
2.2 Quan hệ
Một quan hệ (relation) R có 𝑛 ngôi được định nghĩa trên tập các thuộc tính 𝑈 =
(𝐴1 , 𝐴2 , … , 𝐴𝑛 ) và kèm theo nó là một tân từ để xác định mối quan hệ giữa các thuộc tính
𝐴𝑖 . Ký hiệu của quan hệ đó là 𝑅 (𝐴1 , 𝐴2 , … , 𝐴𝑛 ). Tập thuộc tính của quan hệ 𝑅 còn được ký
hiệu là 𝑅+ .
Với 𝐴𝑖 là một thuộc tính có miền giá trị là MGT(𝐴𝑖 ), như vậy 𝑅 (𝐴1 , 𝐴2 , … , 𝐴𝑛 ) là tập con
của tích Descartes: MGT(𝐴1 ) × MGT(𝐴2 ) × … × MGT(𝐴𝑛 ). Quan hệ còn được gọi là
bảng (table).
Ví dụ 2.13: KHOA (MAKHOA, TENKHOA, NAMTHANHLAP, TRGKHOA) là một
quan hệ 4 ngôi với tân từ: “Mỗi khoa có một mã khoa duy nhất để phân biệt các khoa khác.
Mỗi khoa xác định tên khoa không trùng nhau, năm thành lập của khoa và trưởng khoa”.
Ví dụ 2.14: NHANVIEN (MANV, HOTEN, NGAYSINH, DIACHI, GIOITINH, LUONG,
PHUCAP, PHONG) là một quan hệ 8 ngôi với tân từ: “Mỗi nhân viên có một mã nhân viên
duy nhất để phân biệt với các nhân viên khác, họ tên, ngày tháng năm sinh, địa chỉ, giới
tính, lương, phụ cấp và làm việc tại một phòng ban”.
2.3 Lược đồ quan hệ
Lược đồ quan hệ (relation schema) là sự trừu tượng hóa của quan hệ, một sự trừu tượng
hóa ở mức cấu trúc của một bảng hai chiều. Khi nói đến lược đồ quan hệ tức là đề cập tới
cấu trúc tổng quát của một quan hệ; khi nói đến một quan hệ thì hiểu rằng đó là một bảng
có cấu trúc cụ thể trên một lược đồ quan hệ với các bộ giá trị của nó. Lược đồ cơ sở dữ liệu
là tập hợp các lược đồ quan hệ con {𝑅𝑖 }, ký hiệu là 𝜁.
Thể hiện (hay tình trạng) của quan hệ R, ký hiệu là 𝑇𝑅 , là tập hợp các bộ giá trị của quan hệ
R vào một thời điểm. Như vậy, tại những thời điểm khác nhau thì quan hệ có những thể
hiện khác nhau.
Ví dụ 2.15: Lược đồ quan hệ
GIANGVIEN (MAGV, HOTEN, NGAYSINH, GIOITINH, HOCVI, CHUCVU,
MAKHOA)
Ví dụ 2.16: Lược đồ cơ sở dữ liệu
• KHOA (MAKHOA, TENKHOA, NAMTHANHLAP, TRGKHOA)
• GIANGVIEN (MAGV, HOTEN, NGAYSINH, GIOITINH, HOCVI, CHUCVU,
MAKHOA)
• SINHVIEN (MASV, HOTEN, NGAYSINH, LOP, QUEQUAN, MAKHOA)
• PHUHUYNH (HOTENPH, MASV, GIOITINH, SDTPH, QUANHE)
• BANGLUONG (MASBL, MAGV, HESOLUONG, PHUCAP, LUONGCOBAN,
NGAYVAOLAM)
• DETAI (MADT, TENDT, KINHPHI, NGAYBD, NGAYDKKT, NGAYKT,
30
TONGDIEM, KETQUA, MAHD)
• CTDT (MACT, MADT, MASV, VAITRO)
Thể hiện của các lược đồ quan hệ con 𝑇𝑅𝑖 gọi là tình trạng của lược đồ CSDL 𝜁.

Bảng 2-1: Bảng thể hiện của quan hệ KHOA

MAKHOA TENKHOA NAMTHANHLAP TRGKHOA

CNTT Công nghệ thông tin 2010 GV001

CNTP Công nghệ thực phẩm 2011

KTCK Kỹ thuật cơ khí 2012 GV003

QLCN Quản lý công nghiệp 2010

DIDT Điện - Điện tử 2013 GV008

2.4 Bộ
Một bộ (tuple) giá trị là các dữ liệu của một đối tượng thuộc quan hệ. Bộ giá trị cũng thường
được gọi là một mẫu tin hay bản ghi (record), dòng của bảng (row). Một bộ 𝑞 là một vec-
tơ gồm 𝑛 thành phần thuộc tập hợp con của tích đề các miền giá trị của các thuộc tính và
thỏa mãn tân từ đã cho của quan hệ.
Ví dụ 2.17: các bộ giá trị dựa trên các thuộc tính của quan hệ KHOA thể hiện trong Bảng
2-1
• 𝑞1 = (CNTT, Công nghệ thông tin, 2010, GV001)
• 𝑞2 = (CNTP, Công nghệ thực phẩm, 2011, NULL)
• 𝑞3 = (KTCK, Kỹ thuật cơ khí, 2012, GV003)
2.5 Khóa của một quan hệ
Quan hệ R định nghĩa trên tập các thuộc tính 𝑈 = {𝐴1 , 𝐴2 , … , 𝐴𝑛 }. Khi đó 𝑈 ⊆ 𝐾 là khóa
của quan hệ 𝑅 nếu thoả:
• 𝐾 xác định được giá trị của 𝐴𝑗 , với mọi 𝑗 = 1, 2, … , 𝑛.
• Không tồn tại 𝐾 ′ ⊆ 𝐾 có thể xác định được giá trị của 𝐴𝑗 , với mọi 𝑗 = 1, 2, … , 𝑛.
Theo định nghĩa trên, 𝐾 là tập con nhỏ nhất mà giá trị của nó có thể xác định được duy nhất
một bộ giá trị của quan hệ. Khóa theo định nghĩa trên gọi là khóa đề nghị (candidate key).
𝐾 được gọi là siêu khóa (superkey) của quan hệ 𝑅 nếu 𝐾 ′ ⊆ 𝐾 là một khóa của quan hệ.
Như vậy một quan hệ 𝑄 luôn có ít nhất một siêu khóa và có thể có nhiều siêu khóa.
Ví dụ 2.18: Với quan hệ GIANGVIEN (MAGV, HOTEN, NGAYSINH, GIOITINH,
HOCVI, CHUCVU, MAKHOA)

31
Siêu khóa là:
• 𝐾1 = {MAGV, HOTEN}
• 𝐾2 = {MAGV, NGAYSINH}
• 𝐾3 = {MAGV, DIACHI}
Ý nghĩa thực tế của khóa là dùng để nhận diện một bộ trong một quan hệ. Khi cần tìm dữ
liệu một bộ 𝑞 nào đó chúng ta chỉ cần căn cứ vào giá trị khóa của 𝑞 để dò tìm và xác định
được vị trí của nó trong quan hệ. Trong thực tế, đối với các loại thực thể tồn tại khách quan
như NHANVIEN, SINHVIEN, HANGHOA, … người thiết kế CSDL thường gán thêm một
thuộc tính giả là mã số để làm khóa như MaNV, MSSV, MaHang, … Đối với các lược đồ
quan hệ biểu diễn cho sự trừu tượng hóa thường có khóa chỉ định là một tổ hợp của hai hay
nhiều thuộc tính.
Trong trường hợp lược đồ quan hệ có nhiều khóa đề nghị, khi cài đặt trong một hệ quản trị
CSDL người ta chọn ra một khóa trong số các khoá đề nghị này để sử dụng. Khi đó khóa
này được gọi là khóa chính (primary key) và các khóa còn lại là khóa tương đương. Khóa
chính chỉ thật sự có ý nghĩa trong quá trình khai thác CSDL và hoàn toàn không có vai trò
gì khác so với các khóa chỉ định còn lại. Các hệ quản trị CSDL có cài đặt cơ chế tự động
kiểm tra tính duy nhất của khóa chính. Khi người sử dụng thêm một bộ mới 𝑞2 có giá trị
khóa chính trùng với giá trị khóa chính của một bộ 𝑞1 đã có thì hệ thống sẽ báo lỗi và yêu
cầu nhập lại giá trị khác.
Các thuộc tính tham gia vào một khóa được gọi là thuộc tính khoá. Về mặt ký hiệu, trong
lược đồ quan hệ các thuộc tính khóa được gạch dưới. Trong một bộ của quan hệ, các thuộc
tính khóa không chứa giá trị rỗng. Giá trị của thuộc tính khóa không được phép sửa đổi;
nếu người sử dụng muốn sửa giá trị thuộc tính khoá của bộ q thì cần phải hủy bỏ bộ q và
sau đó thêm vào bộ 𝑞’ với giá trị khóa mong muốn.
Với hai quan hệ 𝑅 và 𝑆, một tập thuộc tính 𝐾 của quan hệ 𝑅 được gọi là khóa ngoại (foreign
key) của quan hệ 𝑅 nếu 𝐾 là khóa của quan hệ 𝑆.
Ví dụ 2.19: Theo minh họa ở hình 2-13, thuộc tính MAKHOA là khoá ngoại của bảng
GIANGVIEN vì thuộc tính MAKHOA là khóa chính của quan hệ KHOA. Tương tự, quan
hệ DETAI có khóa ngoại là MAHD vì thuộc tính này tương ứng với thuộc tính MAGV là
khóa chính của quan hệ GIANGVIEN.

32
Hình 2-13: Khóa ngoại của các quan hệ.

2.5 Ràng buộc toàn vẹn


Ràng buộc toàn vẹn (RBTV) là một quy tắc định nghĩa trên một hay nhiều quan hệ do môi
trường ứng dụng quy định. Đó chính là quy tắc để bảo đảm tính nhất quán của dữ liệu trong
CSDL. Thông thường mỗi RBTV được định nghĩa bằng một thuật toán trong CSDL.
Ví dụ 2.20: Trong CSDL quản lý điểm của sinh viên sẽ có các ràng buộc toàn vẹn như sau:
• Trong quan hệ KQUATHI, DiemThi là một số nguyên nằm trong khoảng từ 0 đến
10.
• Trong quan hệ KQUATHI, LanThi là 1 hoặc 2.
2.6 Tính chất của mô hình quan hệ
Mô hình quan hệ có các tính chất sau:
• Các bộ trong một quan hệ là duy nhất.
• Không quan tâm đến thứ tự các bộ trong quan hệ.
• Thứ tự các giá trị trong bộ phải tương ứng với thứ tự liệt kê các thuộc tính của quan
hệ.
• Một thuộc tính có thể mang giá trị rỗng (null).
Quy ước:
• Trong một bộ của quan hệ các thuộc tính khóa không chứa giá trị rỗng.
• Không được phép sửa đổi giá trị thuộc tính khóa của một bộ 𝑡. Nếu muốn sửa đổi
giá trị thuộc tính khóa của một bộ, người sử dụng phải hủy bỏ bộ 𝑡 và sau đó thêm
một bộ 𝑡 ′ với giá trị khóa đã được sửa đổi.
3. CHUYỂN ĐỔI MÔ HÌNH THỰC THỂ KẾT HỢP SANG MÔ HÌNH
DỮ LIỆU QUAN HỆ
Mô hình thực thể kết hợp là mô hình dữ liệu mức khái niệm thu được sau quá trình khảo sát
thiết kế. Để thực hiện phát triển cơ sở dữ liệu trên máy tính chúng ta cần chuyển đổi từ mô
hình thực thể kết hợp sang mô hình dữ liệu quan hệ bằng cách sử dụng các quy tắc phù hợp.
3.1 Chuyển đổi tập thực thể
33
Tập thực thể mạnh: giả sử 𝐸 là một tập thực thể mạnh trong một mô hình E-R với các
thuộc tính 𝑒1 , 𝑒2 , … , 𝑒𝑛 . Trong mô hình dữ liệu quan hệ, thực thể này sẽ được biểu diễn bằng
quan hệ cũng có tên là E với n thuộc tính. Mỗi bộ trong quan hệ đó ứng với một thực thể
của tập thực thể E.
Ví dụ 2.21: : Như hình 2-14 tập thực thể mạnh GIANGVIEN được chuyển đổi thành một
quan hệ cùng tên mô tả như sau:
GIANGVIEN(MAGV, HOTEN, NGAYSINH, GIOITINH, …)

Hình 2-14: Chuyển đổi tập thực thể mạnh


Tập thực thể yếu: giả sử 𝐸 là một tập thực thể yếu với các thuộc tính 𝑒1 , 𝑒2 , … , 𝑒𝑛 và 𝑆 là
một tập thực thể mạnh với khóa chính gồm thuộc tính 𝑠1 , 𝑠2 , … , 𝑠𝑚 . Quan hệ biểu diễn cho
𝐸 cũng có cùng tên là 𝐸 nhưng tập các thuộc tính của quan hệ này là tập {𝑒1 , 𝑒2 , … , 𝑒𝑛 } ∪
{𝑠1 , 𝑠2 , … , 𝑠𝑚 }.
Ví dụ 2.22: Như hình 2-15, thực thể yếu PHUHUYNH có các thuộc tính HOTENPH,
GIOITINH, SOTPH, QUANHE và thực thể mạnh GIANGVIEN có khóa chính là MASV.
Quan hệ biểu diễn cho thực thể PHUHUYNH thu được sau quá trình chuyển đổi là:
PHUHUYNH (MASV, HOTENPH, GIOITINH, SOTPH, QUANHE)

Hình 2-15: Chuyển đổi thực thể yếu


3.2 Chuyển đổi mối quan hệ một – một
Mối kết hợp một – một trong mô hình thực thể kết hợp có thể được chuyển đổi thành quan
hệ bằng một trong hai cách sau:

34
• Thêm vào quan hệ này thuộc tính khóa của quan hệ kia.
• Thêm thuộc tính khóa vào cả 2 quan hệ
Ví dụ 2.23: như hình 2-16, thuộc tính MAGV là khóa của quan hệ GIANGVIEN được thêm
vào quan hệ KHOA. Quan hệ biểu diễn cho thực thể KHOA thu được là:
KHOA (MAKHOA, TENKHOA, MAGV, NGAYNHANCHUC, …)

Hình 2-16: Chuyển đổi mối quan hệ một - một


3.3 Chuyển đổi mối quan hệ một – nhiều
Mối quan hệ một – nhiều được chuyển đổi bằng cách thêm vào quan-hệ-một thuộc tính
khóa của quan-hệ-nhiều.
Ví dụ 2.24: như hình 2-17, thuộc tính MAKHOA là khóa của quan hệ KHOA được thêm
vào quan hệ GIANGVIEN và quan hệ thu được mô tả như sau:
GIANGVIEN (MAGV, HOTEN, NGAYSINH, GIOITINH, MAKHOA, …)

Hình 2-17: Chuyển đổi mối quan hệ một - nhiều

3.4 Chuyển đổi mối quan hệ nhiều – nhiều


Mối kết hợp nhiều – nhiều sẽ được chuyển thành một quan hệ mới với tên là tên của mối
kết hợp, thuộc tính khóa gồm các thuộc tính khóa của các tập thực thể có liên quan; thuộc
tính của mối kết hợp (nếu có) cũng trở thành thuộc tính của quan hệ mới.
Ví dụ 2.25: như hình 2-18, kết quả của quá trình chuyển đổi là quan hệ HUONGDAN được
hình thành và quan hệ này bao gồm thuộc tính của chính mối kết hợp huongdan và thuộc
tính khóa của quan hệ GIANGVIEN và DETAI.

35
HUONGDAN (MAGV, MADT, THOIGIAN)

Hình 2-18: Chuyển đổi mối quan hệ nhiều - nhiều

TÓM TẮT CHƯƠNG


Thiết kế cơ sở dữ liệu chủ yếu liên quan đến việc thiết kế lược đồ cơ sở dữ liệu. Mô hình
thực thể kết hợp (E-R) là một mô hình được sử dụng khá phổ biến để thiết kế cơ sở dữ liệu,
cung cấp biểu diễn đồ họa để xem dữ liệu, các mối quan hệ và các ràng buộc. Chương 2
cung cấp các khái niệm chính của mô hình E-R bao gồm thực thể, tập thực thể, thuộc tính,
mối kết hợp, bản số và khóa của tập thực thể. Mô hình dữ liệu quan hệ là bước tiếp theo
trong quá trình thiết kế cơ sở dữ liệu với cấu trúc bao gồm các quan hệ. Mỗi quan hệ có một
khóa chính gồm một hoặc nhiều thuộc tính có các giá trị duy nhất trong quan hệ. Việc
chuyển đổi giữa mô hình thực thể kết hợp và mô hình dữ liệu quan hệ cần tuân theo một số
nguyên tắc cơ bản như chuyển đổi tập thực thể thành quan hệ, chuyển đổi đối với các mối
quan hệ một – một, một – nhiều và nhiều – nhiều.
CÂU HỎI
1. Mô hình thực thể kết hợp là gì?
2. Mô tả các khái niệm: thực thể, tập thực thể, thuộc tính, khóa của tập thực thể.
3. Phân biệt giữa tập thực thể mạnh và tập thực thể yếu.
4. Cách biểu diễn mô hình ER như thế nào?
5. Mô hình dữ liệu quan hệ là gì?
6. Mô tả các khái niệm của mô hình dữ liệu quan hệ: thuộc tính, quan hệ, lược đồ quan
hệ, bộ, khóa và ràng buộc toàn vẹn.
7. Mô tả các quy tắc chuyển đổi từ mô hình thực thể kết hợp sang mô hình thực thể
quan hệ.
BÀI TẬP
Hãy lập mô hình thực thể kết hợp cho các bài toán sau (tập thực thể, khóa của tập thực thể,
bản số và mối kết hợp) và từ đó hãy chuyển đổi thành lập mô hình quan hệ tương ứng (khóa
chính, khóa ngoại cho từng lược đồ quan hệ). Với mỗi bài toán người học đã có gợi ý sơ bộ
và cần phân tích chi tiết các nhu cầu thực tế cần quản lý để làm thông tin đầu vào cho bài

36
toán.
Bài tập 1: Ứng dụng quản lý phân công giảng dạy của một trường đạy học
Mỗi giảng viên có một mã giảng viên (MAGV) duy nhất, mỗi mã giảng viên xác định họ
tên (HOTEN); mỗi giảng viên trong khoa phải thuộc về một bộ môn nào đó quản lý
(MABM, TENBM); mỗi bộ môn thuộc về một khoa nào đó quản lý; mỗi giảng viên cần lưu
trữ thông tin là giảng viên thỉnh giảng hoặc giảng viên cơ hữu. Mỗi khoa có (MAKHOA)
duy nhất và mã khoa xác định tên khoa (TENKHOA).
Mỗi học phần có một mã học phần (MAHP) duy nhất, mỗi mã học phần xác định tên học
phần (TENHP), số tín chỉ (SOTC), số tiết (SOTIET). Ví dụ học phần “Cơ sở dữ liệu” có
mã học phần “001411040”, số tín chỉ là 3, số tiết là 60. Các học phần cần chỉ rõ thuộc về
sự quản lý của bộ môn nào.
Mỗi học phần ở một học kỳ có thể mở một hoặc nhiềm nhóm, các nhóm này được phân
công cho các giảng viên giảng dạy. Mỗi năm học có 3 học kỳ được đánh số 1, 2, 3. Ví dụ
học kỳ 2 năm học “2019-2020” học phần “Cấu trúc dữ liệu và giải thuật” mở 5 nhóm đánh
số 1, 2, 3, 4, 5; trong đó giảng viên “Nguyễn Văn Thành” phụ trách 2 nhóm 1 và 4, còn các
nhóm 2, 3 và 5 do giảng viên “Lê Kim Khánh” phụ trách.
Giả sử ứng dụng này chỉ giới hạn trong việc phân công giảng viên giảng dạy; ứng dụng
không quản lý thù lao giảng viên cũng như không quản lý về lý lịch giảng viên. Kế hoạch
giảng dạy được phân công cho cả năm học. Hệ thống này chỉ quản lý các lớp chính quy.
Ứng dụng cần giải quyết một số vấn đề phù hợp thực tế, chẳng hạn:
• Liệt kê danh sách các học phần được mở học kỳ 3 của một năm học nào đó.
• Liệt kê danh sách các giảng viên có phân công giảng dạy ở học kỳ 1 và học kỳ 2 của
một năm học nào đó.
• Liệt kê danh sách giảng viên chưa có học phần giảng dạy trong một năm học.
• Liệt kê danh sách các học phần được mở theo từng học kỳ của một năm học nào đó.
• Hiển thị kế hoạch các nhóm do các giảng viên thỉnh giảng phụ trách của một năm
học nào đó.
Bài tập 2: Ứng dụng quản lý bảo trì phần cứng và máy tính
Công ty tin học ABC hoạt động trong lĩnh vực bảo trì phần cứng và máy tính, có thể bảo trì
ngay tại nhà khách hàng. Giả sử hệ thống chỉ quản lý các khách hàng lẻ, bảo trì lần nào thì
tính phí bảo trì xong lần đó.
Mỗi khách hàng có các thông tin mã khách hàng (MAKH), họ tên khách hàng (HOTENKH),
địa chỉ (DIACHI), số điện thoại liên hệ (SODT).
Mỗi nhân viên của công ty có các thông tin mã nhân viên (MANV), họ tên (HOTEN). Ứng
với mỗi lượt khách hàng mà công ty có thể phân công cho một hoặc nhiều nhân viên tham
gia bảo trì.

37
Mỗi lượt bảo trì sẽ có một phiếu nghiệm thu công việc, mỗi phiếu nghiệm thu công việc có
mã số nghiệm thu (SONT) duy nhất, mỗi phiếu nghiệm thu công việc thuộc về khách hàng
nào đó (mỗi khách hàng có thể có nhiều phiếu nghiệm thu công việc). Mỗi phiếu nghiệm
thu công việc cũng cần quản lý thêm các thông tin về chi phí bảo trì (SOTIEN), ngày đến
bảo trì (NGAY), nội dung bảo trì (NOIDUNG).
Sơ bộ về quy trình bảo trì máy tính cho khách hàng như sau: Khi máy tính của khách hàng
có sự cố, khách hàng sẽ điện thoại báo cho công ty thông tin sơ lược về sự cố; công ty sẽ
phân công nhân viên có kỹ năng phù hợp với sự cố đến bảo trì. Khi hoàn thành việc bảo trì,
đại diện các nhân viên bảo trì sẽ ký một phiếu nghiệm thu công việc với khách hàng và
đồng thời thu phí bảo trì. Các phiếu nghiệm thu công việc này cùng với số tiền thu được sẽ
chuyển về cho nhân viên kế toán của công ty để tổng hợp, lưu trữ, báo cáo theo yêu cầu của
công ty.
Ứng dụng cần giải quyết một số vấn đề phù hợp thực tế hoạt động của công ty, chẳng hạn:
• Số lượt bảo trì của từng nhân viên có trong một tháng nào đó của năm nào đó.
• Chi tiết về tình hình bảo trì máy tính của khách hàng trong một thời điểm (theo
tháng) nào đó.
• Tìm danh sách các nhân viên đã tham gia bảo trì cho một khách hàng chỉ định tại
một ngày nào đó.
• Tổng số tiền bảo trì thu được theo từng ngày trong một tháng nào đó.

38
CHƯƠNG 3.
ĐẠI SỐ QUAN HỆ
Đại số quan hệ (Relational Algebra) là một trong hai ngôn ngữ truy vấn chính quy (formal
query languages) liên quan đến mô hình quan hệ. Các truy vấn trong đại số quan hệ được
tạo thành từ tập các toán tử. Mỗi toán tử quan hệ sẽ tạo ra quan hệ mới từ một hoặc nhiều
quan hệ đã có. Mục tiêu của việc sử dụng toán tử quan hệ là giúp xác định phạm vi truy vấn
và cập nhật dữ liệu. Đồng thời sử dụng toán tử quan hệ cũng xác định các ràng buộc liên
quan đến việc truy cập hoặc tính toàn vẹn dữ liệu.
Chương 3 sẽ trình bày các nội dung về:
● Các phép toán cơ bản của đại số quan hệ.
● Các hàm tổng hợp và gom nhóm.
Các ví dụ minh họa dựa trên lược đồ cơ sở dữ liệu Quản lý thông tin đề tài nghiên cứu khoa
học tại Phụ lục.

39
1. PHÉP TOÁN ĐẠI SỐ QUAN HỆ
Trước khi xem xét về các phép toán đại số quan hệ chúng ta cùng xác định tính khả hợp của
hai quan hệ. Hai quan hệ gọi là khả hợp khi chúng có số thuộc tính bằng nhau (cùng ngôi)
và miền giá trị của thuộc tính thứ i của hai quan hệ phải tương thích với nhau.
Cho hai quan hệ: 𝑅(𝑅1 , 𝑅2 , … , 𝑅𝑛 ) và 𝑆(𝑆1 , 𝑆2 , … , 𝑆𝑛 ). R và S khả hợp khi:
● |{𝑅1 , 𝑅2 , … , 𝑅𝑛 }| = |{𝑆1 , 𝑆2 , … , 𝑆𝑛 }|
● 𝑀𝐺𝑇(𝑅𝑖 ) = 𝑀𝐺𝑇(𝑆𝑖 ) với 1 ≤ 𝑖 ≤ 𝑛
Đại số quan hệ bao gồm một số phép toán cơ bản như:
● Phép chọn (Selection)
● Phép chiếu (Projection)
● Phép hợp/hội (Union)
● Phép giao (Intersection)
● Phép trừ (Set-Difference/Minus)
● Phép tích (Product)
● Phép kết (Join)
1.1 Phép chọn (Selection)
Phép chọn được sử dụng để lấy ra một tập con của các bộ từ một quan hệ thỏa mãn điều
kiện 𝑝 xác định. Cho quan hệ 𝑅 trong một lược đồ quan hệ, phép chọn 𝜎 trích các bộ từ 𝑅
sao cho các bộ được chọn phải thỏa mãn điều kiện 𝑝.
𝜎𝑝 (𝑅) = { 𝑡 ∈ 𝑅 | 𝑝(𝑡)}
Điều kiện lựa chọn 𝑝 gồm tổ hợp các các toán hạng với mỗi toán hạng là phép so sánh giữa
các thuộc tính hoặc thuộc tính với một hằng. Các phép so sánh thường sử dụng bao gồm
{=, <, ≤, >, ≥, ≠}. Các toán hạng được kết nối với nhau nhờ các phép logic ∧ (và), ∨ (hoặc)
và ¬ (không).
Ví dụ 3.1: Chọn ra các khoa thành lập từ năm 2014, chúng ta có thể sử dụng phép chọn với
điều kiện như sau:
𝜎NAMTHANHLAP≥2014 (KHOA)
Ví dụ 3.2: Chọn ra các sinh viên có quê ở Cần Thơ và hiện đang học tại lớp HTTT2019 thì
phép chọn sẽ được định nghĩa:
𝜎QUEQUAN='Cần Thơ'∧ LOP='HTTT2019' (SINHVIEN)
Ví dụ 3.3: Chọn ra các giảng viên có học vị là thạc sĩ hoặc tiến sĩ:
𝜎HOCVI=′ Thac sĩ′ ∨ HOCVI=′ Tiến sĩ′ (GIANGVIEN)
1.2 Phép chiếu (Projection)
Phép chiếu là phép toán một ngôi và được sử dụng để chọn ra một tập các thuộc tính. Cho

40
quan hệ 𝑅 trong một lược đồ quan hệ, phép chiếu 𝜋 trên một tập các thuộc tính 𝑋 trích các
bộ từ quan hệ 𝑅 sau khi loại bỏ các thuộc tính không thuộc 𝑋.
Gọi 𝑡 là một bộ thuộc 𝑅, tập các thuộc tính của 𝑅 là 𝑈. Với 𝐴 ∈ 𝑈 thì 𝑡 [𝐴] là giá trị của bộ
𝑡 ứng với thuộc tính 𝐴. Nếu 𝑋 ⊆ 𝑈 là một tập các thuộc tính thì 𝑡[𝑋] =
(𝑡[𝑋1 ], 𝑡[𝑋2 ], … , 𝑡[𝑋𝑛 ]) với 𝑋 = {𝑋1 , 𝑋2 , … , 𝑋𝑛 }
𝜋𝑋 (𝑅) = {𝑡[𝑋] | 𝑡 ∈ 𝑅}
Ví dụ 3.4: Hiển thị danh sách tên khoa và trưởng khoa của các Khoa:
𝜋TENKHOA, TRGKHOA (KHOA)
Nếu tập các thuộc tính không bao gồm thuộc tính là khóa thì kết quả có thể có các bộ trùng
nhau. Phép chiếu bỏ các bộ trùng nhau và kết quả của phép chiếu chỉ gồm các bộ riêng biệt.
Ví dụ 3.5: Hiển thị kinh phí, ngày bắt đầu của các đề tài nghiên cứu khoa học:
𝜋KINHPHI, NGAYBATDAU (DETAI)
1.3 Phép hợp (Union), phép giao (Intersection) và phép trừ (Minus)
Phép hợp (Union)
Cho hai quan hệ khả hợp 𝑅 và 𝑆, hợp của 02 quan hệ này 𝑅 ∪ 𝑆 là một quan hệ gồm các bộ
của 𝑅 hoặc 𝑆 hay các bộ thuộc cả 𝑅 và 𝑆. Các bộ trùng nhau sẽ được loại bỏ.
𝑅 ∪ 𝑆 = {𝑡 | 𝑡 ∈ 𝑅 ∨ 𝑡 ∈ 𝑆}
Ví dụ 3.6: Hiển thị họ tên sinh viên và giảng viên của trường:
𝜋HOTEN (GIANGVIEN) ∪ 𝜋HOTEN (SINHVIEN)

Hình 3-1: Biểu đồ Venn minh họa cho phép hợp


Phép giao (Intersection)
Cho hai quan hệ khả hợp 𝑅 và 𝑆, giao của 02 quan hệ này 𝑅 ∩ 𝑆 là một quan hệ gồm các
bộ thuộc cả 𝑅 và 𝑆.
𝑅 ∩ 𝑆 = {𝑡 | 𝑡 ∈ 𝑅 ∧ 𝑡 ∈ 𝑆}
Ví dụ 3.7: Hiển thị mã giảng viên hướng dẫn cả đề tài có kinh phí từ 1.000.000 đ và đề tài
có kinh phí dưới 500.000đ:
𝜋MAHD (𝜎KINHPHI≥ 1.000.000 (DETAI)) ∩ 𝜋MAHD (𝜎KINHPHI< 500.000 (DETAI))

41
Hình 3-2: Biểu đồ Venn minh họa cho phép giao
Phép hợp và phép giao đều có tính chất giao hoán, cụ thể là:
𝑅 ∪ 𝑆 = 𝑆 ∪ 𝑅 và 𝑅 ∩ 𝑆 = 𝑆 ∩ 𝑅
Phép hợp và phép giao cũng có tính chất kết hợp:
𝑅 ∪ (𝑆 ∪ 𝑇) = (𝑅 ∪ 𝑆) ∪ 𝑇 và 𝑅 ∩ (𝑆 ∩ 𝑇) = (𝑅 ∩ 𝑆) ∩ 𝑇
Phép trừ (Set-Difference)
Cho hai quan hệ khả hợp 𝑅 và 𝑆, trừ (hay còn gọi là hiệu) của 02 quan hệ này là 𝑅 − 𝑆 là
một quan hệ gồm các bộ thuộc 𝑅 nhưng không thuộc 𝑆.
𝑅 − 𝑆 = {𝑡 | 𝑡 ∈ 𝑅 ∧ 𝑡 ∉ 𝑆}
Phép trừ không có tính giao hoán: 𝑅 − 𝑆 ≠ 𝑆 − 𝑅
Ví dụ 3.8: Hiển thị mã giảng viên chỉ hướng dẫn các đề tài có kinh phí từ 500.000đ:
𝜋MAHD (𝜎KINHPHI≥ 500000 (DETAI)) − 𝜋MAHD (𝜎KINHPHI< 500000 (DETAI))

Hình 3-3: Biểu đồ Venn minh họa cho phép trừ


1.4 Phép tích Descartes (Cartesian Product)
Tích Descartes của hai quan hệ 𝑅 và 𝑆, ký hiệu 𝑅 × 𝑆, là một quan hệ được tạo thành bằng
cách kết hợp mọi bộ của quan hệ 𝑅 với mọi bộ của quan hệ 𝑆. Phép tích Descartes không
yêu cầu hai quan hệ là khả hợp.
Cho quan hệ 𝑅(𝐴1 , 𝐴2 , … , 𝐴𝑛 ) và 𝑆(𝐵1 , 𝐵2 , … , 𝐵𝑚 ), tích Descartes của R và S là một quan
hệ Q với 𝑛 + 𝑚 ngôi và có tập thuộc tính {𝐴1 , 𝐴2 , … , 𝐴𝑛 , 𝐵1 , 𝐵2 , … , 𝐵𝑚 }
𝑅 × 𝑆 = { (𝑢, 𝑣 ) | 𝑢 ∈ 𝑅 ∧ 𝑣 ∈ 𝑆 }
Nếu 𝑅 có 𝑝 bộ và 𝑆 có 𝑞 bộ thì quan hệ kết quả 𝑄 của phép tích Descartes có 𝑝 ∗ 𝑞 bộ.
Ví dụ 3.9: Lập danh sách tất cả khả năng sinh viên thực hiện đề tài:

42
𝜋HOTEN (SINHVIEN) × 𝜋TENDT (DETAI)
1.5 Phép kết (Join)
Phép kết hay phép kết nối cho phép tạo liên kết dữ liệu của các quan hệ khác nhau. Phép
kết nối hai quan hệ sẽ ghép cặp các bộ của hai quan hệ khi chúng thỏa mãn một điều kiện
nhất định.
Phép kết nối trong (Inner join/Theta join)
Cho quan hệ 𝑅(𝐴1 , 𝐴2 , … , 𝐴𝑚 ) và quan hệ 𝑆(𝐵1 , 𝐵2 , … , 𝐵𝑚 ), kết của 𝑅 và 𝑆 theo điều kiện
kết nối 𝑝 là một quan hệ 𝑄 có 𝑛 + 𝑚 ngôi, 𝑄 (𝐴1 , 𝐴2 , … , 𝐴𝑛 , 𝐵1 , 𝐵2 , … , 𝐵𝑚 ); mỗi bộ của 𝑄
là kết hợp của một bộ từ 𝑅 và một bộ từ 𝑆 thỏa mãn điều kiện 𝑝.
𝑅 ⋈𝑝 𝑆 = {(𝑢, 𝑣 ) | 𝑢 ∈ 𝑅 ∧ 𝑣 ∈ 𝑆 ∧ 𝑝(𝑢, 𝑣)}
Điểm khác biệt giữa phép kết nối trong và phép tích Descartes là điều kiện kết nối. Kết nối
trong chỉ gồm các ghép cặp của các bộ thỏa mãn điều kiện kết nối. Ngược lại, tích Descartes
gồm tất cả các ghép cặp của các bộ thuộc hai quan hệ.
Điều kiện kết nối tổng quát được định nghĩa dưới dạng: 𝑝1 AND 𝑝2 AND … AND 𝑝𝑟 . Mỗi
điều kiện 𝑝𝑘 được định nghĩa dưới dạng 𝐴𝑖 𝜃 𝐵𝑗 với:
● 𝐴𝑖 là thuộc tính của 𝑅 và 𝐵𝑗 là thuộc tính của 𝑆.
● 𝐴𝑖 và 𝐵𝑗 có cùng miền giá trị.
● 𝜃 là một trong các phép so sánh {=, <, ≤, >, ≥, ≠}
Ví dụ 3.10: Hãy cho biết tên đề tài có kinh phí lớn hơn lương cơ bản của một giảng viên
nào đó:
𝜋 𝑇𝐸𝑁𝐷𝑇 (𝐵𝐴𝑁𝐺𝐿𝑈𝑂𝑁𝐺 ⋈𝐿𝑈𝑂𝑁𝐺𝐶𝑂𝐵𝐴𝑁<𝐾𝐼𝑁𝐻𝑃𝐻𝐼 𝐷𝐸𝑇𝐴𝐼)
Phép kết nối tự nhiên (Natural join)
Khi phép kết nối trong dựa trên phép so sánh = theo hai thuộc tính cùng tên của hai quan
hệ 𝑅 và 𝑆 và một trong hai thuộc tính đó bị loại bỏ qua phép chiếu thì gọi đó là phép kết nối
tự nhiên, ký hiệu 𝑅 ∗ 𝑆.
Ví dụ 3.11: Hãy cho biết mã số và họ tên của giảng viên hướng dẫn đề tài “DT004”:
𝜋MANV,HOTEN (GIANGVIEN) ∗ 𝜎MADA=' DT004' (DETAI)

Bảng 3-1: Bảng thể hiện quan hệ GIANGVIEN và DETAI

GIANGVIEN DETAI

MAGV HOTEN MADT MAHD

GV001 Nguyễn Ngọc Hoàng DT001 GV004

GV002 Đào Ngọc Mỹ DT002 GV007

43
GV003 Hoàng Lê Nguyên DT003 GV010

DT004 GV001

Bảng 3-2: Bảng kết quả của ví dụ kết nối tự nhiên (Ví dụ 3.11)

MAGV HOTEN

GV001 Nguyễn Ngọc Hoàng

Ví dụ 3.12: Dựa trên mô tả các quan hệ ở phần phụ lục, hãy cho biết tên Khoa mà sinh viên
“Nguyễn Hoàng Hưng” đang theo học.
𝜋TENKHOA (𝜎HOTEN = 'Nguyễn Hoàng Hưng' (SINHVIEN) ∗ KHOA)

Ví dụ 3.13: Dựa trên mô tả các quan hệ ở phần phụ lục, hãy cho biết mã số, họ tên và học
vị của trưởng khoa “Công nghệ thông tin”.

𝜋MAGV, HOTEN, HOCVI (GIANGVIEN ∗ 𝜋TRGKHOA (𝜎TENKHOA='Công nghệ thông tin' (KHOA)))

Phép kết nối mở rộng (Outer Join)


Phép kết nối mở rộng cho phép làm việc với thông tin bị thiếu, tức là vẫn thực hiện phép
kết nối tự nhiên với các giá trị null của hai thuộc tính dùng để kết nối. Có 3 loại kết nối mở
rộng là trái, phải và hai bên.
Xét 𝑅 là quan hệ trên lược đồ quan hệ 𝑠(𝛺 ), 𝑆 là quan hệ trên lược đồ quan hệ 𝑠(𝛷). Đặt:
● 𝑃 là tập hợp các bộ (𝑢, 𝑣 ), 𝑢 ∈ 𝑅, 𝑣 ∈ 𝑆, sao cho 𝑢 không kết nối với bộ nào trong
𝑆 qua kết nối tự nhiên 𝑅 ∗ 𝑆, các giá trị của thuộc tính 𝑣 trên 𝛷 đều là null.
● 𝑄 là tập hợp các bộ (𝑢, 𝑣 ), 𝑢 ∈ 𝑅, 𝑣 ∈ 𝑆, sao cho 𝑣 không kết nối với bộ nào trong
𝑅 qua kết nối tự nhiên 𝑅 ∗ 𝑆, các giá trị của thuộc tính 𝑢 trên 𝛺 đều là null.
Phép kết nối mở rộng trái được ký hiệu và xác định bởi:
𝑅 ⟕ 𝑆 = (𝑅 ∗ 𝑆) ∪ 𝑃
Phép kết nối mở rộng phải được ký hiệu và xác định bởi:
𝑅 ⟖ 𝑆 = (𝑅 ∗ 𝑆) ∪ 𝑄
Phép kết nối mở rộng hai bên được ký hiệu và xác định bởi:
𝑅 ⟗ 𝑆 = (𝑅 ∗ 𝑆) ∪ 𝑃 ∪ 𝑄
Xét hai quan hệ sau:
● Danh sách nhân viên: 𝐴 = 𝜋MAGV, HOTEN (GIANGVIEN)

44
Bảng 3-3: Bảng ví dụ về dữ liệu giảng viên

MAGV HOTEN

GV001 Nguyễn Ngọc Hoàng

GV002 Đào Ngọc Mỹ

GV003 Hoàng Lê Nguyên

GV004 Hà Thanh Hùng

GV005 Nguyễn Thị Hương

GV006 Hồ Thị Minh Anh

GV007 Nguyễn Hải An

● Phân công hướng dẫn đề tài sinh viên: 𝐵 = 𝜋MADT, MAHD (DETAI)

Bảng 3-4: Bảng ví dụ về dữ liệu giảng viên hướng dẫn đề tài sinh viên

MADT MAHD

DT001 GV004

DT002 GV007

DT003 GV010

DT004 GV001

DT005 GV002

Ví dụ 3.14: Hãy cho biết mỗi giảng viên hướng dẫn sinh viên thực hiện đề tài nào, kể cả
giảng viên chưa hướng dẫn.
𝐴 ⟕𝐵
Bảng 3-5: Bảng kết quả của ví dụ kết nối mở rộng trái

MAGV HOTEN MADT

GV001 Nguyễn Ngọc Hoàng DT004

GV002 Đào Ngọc Mỹ DT005

GV003 Hoàng Lê Nguyên null

GV004 Hà Thanh Hùng DT001

45
GV005 Nguyễn Thị Hương null

GV006 Hồ Thị Minh Anh null

GV007 Nguyễn Hải An DT002

Ví dụ 3.15: Hãy cho biết mỗi đề tài do giảng viên nào hướng dẫn kể cả đề tài chưa có giảng
viên hướng dẫn.
𝐴⟖𝐵
Bảng 3-6: Bảng kết quả của ví dụ kết nối mở rộng phải

MAGV HOTEN MADT

GV004 Hà Thanh Hùng DT001

GV007 Nguyễn Hải An DT002

null null DT003

GV001 Nguyễn Ngọc Hoàng DT004

GV002 Đào Ngọc Mỹ DT005

Ví dụ 3.16: Hãy cho biết dự kiến phân công hướng dẫn đề tài, kể cả các giảng viên chưa
hướng dẫn và những đề tài chưa có giảng viên hướng dẫn?
𝐴⟗𝐵
Bảng 3-7: Bảng kết quả của ví dụ kết nối mở rộng hai bên

MAGV HOTEN MADT

GV001 Nguyễn Ngọc Hoàng DT004

GV002 Đào Ngọc Mỹ DT005

GV003 Hoàng Lê Nguyên null

GV004 Hà Thanh Hùng DT001

GV005 Nguyễn Thị Hương null

GV006 Hồ Thị Minh Anh null

GV007 Nguyễn Hải An DT002

null null DT003

1.6 Phép đặt lại tên

46
Trong nhiều trường hợp khi tên thuộc tính hay quan hệ phức tạp hoặc tránh trùng lặp trong
một biểu thức đại số, chúng ta có thể sử dụng phép đặt lại tên, ký hiệu 𝜌, để thay đổi tên
cho phù hợp. Phép toán cho phép tham chiếu tới kết quả của biểu thức đại số quan hệ hoặc
tham chiếu tới một quan hệ bằng nhiều tên.
Các phép đặt lại tên có thể thực hiện bao gồm:
● Đặt lại tên quan hệ và tên thuộc tính: Cho biểu thức đại số quan hệ E có 𝑛 thuộc tính,
biểu thức 𝜌𝜆 (𝐴1,𝐴2,…,𝐴𝑛 ) (𝐸 ) trả về kết quả biểu thức 𝐸 dưới tên 𝜆 và các tên của thuộc
tính đổi thành 𝐴1 , 𝐴2 , … , 𝐴𝑛 .
● Đặt lại tên quan hệ: Cho biểu thức đại số quan hệ 𝐸, biểu thức 𝜌𝜆 (𝐸) trả về kết quả
biểu thức 𝐸 dưới tên 𝜆.
● Đặt lại tên thuộc tính: Cho biểu thức đại số quan hệ 𝐸 có n thuộc tính, biểu thức
𝜌𝐸(𝐴 ,𝐴 ,…,𝐴 ) (𝐸 ) trả về kết quả biểu thức 𝐸 với các tên của thuộc tính đổi thành
1 2 𝑛
𝐴1 , 𝐴2 , … , 𝐴𝑛 .
Ví dụ 3.17: Cho biết mã sinh viên và họ tên của sinh viên quê ở “Cần Thơ” (yêu cầu sử
dụng phương pháp đặt lại tên quan hệ và thuộc tính)?

𝜌SINHVIENCT (MA, TEN) (𝜋MASV,HOTEN (𝜎QueQuan = "Can Tho" (SINHVIEN)))

1.7 Phép gán


Khi gặp những truy vấn phức tạp, phép gán cho phép diễn tả một cách rõ ràng hơn câu truy
vấn. Khi đó, câu truy vấn chính là một chuỗi các phép gán theo sau đó là một biểu thức có
giá trị như là kết quả của câu truy vấn. Ký hiệu của phép gán là ←
Việc gán được thực hiện cho một biến quan hệ tạm và được sử dụng cho các biểu thức theo
sau. Cho một biểu thức đại số quan hệ 𝐸, thực hiện gán 𝐸 cho một quan hệ tạm 𝑋 được biểu
diễn như sau 𝑋 ← 𝐸.
Ví dụ 3.18: Cho biết mã nhân viên, họ tên và học vị của giảng viên thuộc khoa “Công nghệ
thông tin”?
GIANGVIENIT ← 𝜎TENKHOA='Cong nghe thong tin' (GIANGVIEN ∗ KHOA)
KETQUA ← 𝜋MAGV,HOTEN,HOCVI (GIANGVIENIT)
2. CÁC HÀM TỔNG HỢP VÀ GOM NHÓM
Các hàm tổng hợp và gom nhóm được sử dụng để tính toán các giá trị mang tính chất tổng
hợp trong đại số quan hệ như tìm giá trị lớn nhất hay tính tổng giá trị theo từng nhóm đối
tượng...
2.1 Hàm kết hợp
Hàm kết hợp có đầu vào là một tập giá trị và trả về một giá trị đơn. Các hàm kết hợp có thể
được sử dụng:
● Hàm Avg(): tính giá trị trung bình.

47
● Hàm Min(): tìm giá trị nhỏ nhất.
● Hàm Max(): tìm giá trị lớn nhất.
● Hàm Sum(): tính tổng các giá trị thành phần.
● Hàm Count(): đếm số bộ dữ liệu.
2.2 Gom nhóm
Thay vì tính toán trên toàn tập dữ liệu, chúng ta có thể gom các đối tượng dữ liệu có cùng
thuộc tính và tính toán các giá trị tổng hợp cho từng nhóm này. Công thức gom nhóm có
thể được mô tả như sau:
𝐺1 ,𝐺2 ,…,𝐺𝑛 ℑ𝐹1 (𝐴1 ),𝐹2 (𝐴2 ),…,𝐹𝑛 (𝐴𝑛 )

Với:
● 𝐺𝑖 là tên thuộc tính gom nhóm (có thể không có)
● 𝐹𝑖 là hàm gom nhóm
● 𝐴𝑖 là tên thuộc tính tính toán trong hàm gom nhóm
Giả sử chúng ta có một quan hệ DETAI sau:

Bảng 3-8: Bảng dữ liệu DETAI

MADT TENDT KINHPHI NGAYBD NGAYDKKT NGAYKT TONGDIEM KETQUA MAHD

DA01 Quản lý đồ án 120000 1/12/2010 1/12/2011 1/11/2011 8,0 Giỏi GV001

DA02 Phát hiện tri thức 250000 1/7/2009 1/7/2011 5/7/2011 7,7 Khá GV002

DA03 Phân loại văn bản 400000 1/3/2010 1/9/2010 15/1/2011 7,5 Khá GV003

DA04 Dịch tự động Anh Việt 560000 1/1/2011 1/1/2012 2/4/2012 7,4 Khá GV002

Ví dụ 3.19: Hãy cho biết kinh phí trung bình của các đề tài?
ℑAVG(KINHPHI) (DETAI)
Ví dụ 3.20: Hãy cho biết tổng kinh phí của các đề tài?
ℑSUM(KINHPHI) (DETAI)
Ví dụ 3.21: Hãy cho biết số lượng đề tài mà mỗi giảng viên hướng dẫn?
MAHD ℑCOUNT(MADT) (DETAI)
Ví dụ 3.22: Hãy cho biết thời gian thực hiện đề tài ngắn nhất?
ℑ𝑀𝐼𝑁(NGAYKT−NGAYBD) (DETAI)
Ví dụ 3.23: Hãy cho biết số lượng đề tài theo từng nhóm kết quả?

KETQUA ℑMADT (𝐷𝐸𝑇𝐴𝐼)

TÓM TẮT CHƯƠNG


Chương 3 thảo luận về đại số quan hệ và các phép toán được sử dụng để chỉ định một truy
48
vấn. Các phép toán một ngôi được giới thiệu bao gồm phép chọn, phép chiếu và phép đặt
tên. Các phép toán hai ngôi yêu cầu các quan hệ tham gia phải là quan hệ khả hợp bao gồm:
phép hợp, phép giao, phép trừ. Phép tích Descartes là một phép toán tập hợp được sử dụng
để kết hợp các bộ từ hai quan hệ và trả về tất cả các tổ hợp. Các phép kết nối được trình bày
trong chương này bao gồm phép kết trong, phép kết tự nhiên và phép kết nối mở rộng.
Ngoài ra, các hàm kết hợp cũng được giới thiệu để xử lý các loại yêu cầu thống kê để tóm
tắt thông tin trong quan hệ.
CÂU HỎI
1. Định nghĩa các phép toán của ngôn ngữ đại số quan hệ, cho các ví dụ minh họa.
2. Tính khả hợp của hai quan hệ là gì? Tại sao các phép hợp, giao và trừ yêu cầu các
quan hệ tham gia phải khả hợp.
3. Mô tả các phép kết và nêu các ví dụ minh họa.
4. Mô tả về các hàm kết hợp và nêu ví dụ minh họa.
5. Gom nhóm trong đại số quan hệ là gì?
BÀI TẬP
Bài tập 1:
Cho lược đồ cơ sở dữ liệu quản lý kết quả học tập của sinh viên tại một trường đại học gồm
các lược đồ quan hệ sau:
● SINHVIEN (MASV, HOTENSV, NAMSINH, GIOITINH, DIACHI, MALOP)
Mỗi sinh viên có một mã duy nhất (MASV), họ tên (HOTENSV), năm sinh
(NAMSINH), giới tính (GIOITINH), địa chỉ (DIACHI) và mã số lớp (MALOP).
● MON (MAMON, TENMON, SOTC, BATBUOC, KHOA)
Mỗi môn có một mã duy nhất (MAMON), tên môn (TENMON), số tín chỉ (SOTC),
bắt buộc hoặc không (BATBUOC) và thuộc một khoa chủ quản (KHOA)
● GIANGVIEN (MAGV, HOTENGV, NAMSINH, HOCVI)
Mỗi giảng viên có một mã duy nhất (MAGV), họ tên giảng viên (HOTENGV), năm
sinh giảng viên (NAMSINH) và học vị (HOCVI).
● HOC (MASV, MAGV, MAMON, STTHK, NAMHOC, DIEMCHU, DIEMSO)
Trong học kỳ năm học, sinh viên sẽ đăng ký nhiều môn nhưng mỗi môn chỉ có một
giảng viên giảng dạy, điểm chữ, điểm số tương ứng với quy chế.
Hãy sử dụng đại số quan hệ thực hiện những yêu cầu sau:
1. In ra danh sách gồm mã sinh viên, họ tên, tên môn và kết quả thi tương ứng của các
sinh viên lớp ‘HTTT0117’ trong học kỳ 2, năm 17-18
2. Tìm họ tên sinh viên có điểm môn CSDL từ 4 đến 8.
3. In ra một danh sách gồm mã số và họ tên của tất cả các giảng viên và sinh viên sinh
49
trước năm 2000.
4. Tìm các sinh viên của lớp 'HTTT0117' đã không học ở học kỳ 2 năm 18-19.
5. Tìm các sinh viên có học cả hai môn cơ sở dữ liệu và hệ quản trị CSDL trong học
kỳ này.
6. Hãy in ra danh sách gồm mã môn, tên môn và kết quả thi tương ứng của sinh viên
‘Trần Trọng Nghĩa’.
7. Tìm họ tên các sinh viên từng học cùng một môn với nhiều hơn một giảng viên.
8. Tìm số môn đã học của mỗi sinh viên.
9. Tìm số môn đã học của các sinh viên đã học hơn 15 môn.
10. Thống kê tỉ lệ đạt theo từng thang điểm chữ của các sinh viên trong học kỳ 1 niên
khóa 05-06 do giáo viên có mã 1231 giảng dạy.
11. Tìm số môn có sinh viên theo học ở mỗi niên khóa.
12. In ra danh sách các sinh viên đã tích lũy được >= 70 TC.
13. Tính điểm trung bình trong từng học kỳ của từng sinh viên.
14. Tính điểm trung bình tích lũy của từng sinh viên.
Bài tập 2:
Cho lược đồ cơ sở dữ liệu quản lý việc thực tập của sinh viên tại một trường đại học, gồm
những lược đồ quan hệ sau:
● SINHVIEN (MASV, HOTEN, NAMSINH, QUE)
Mỗi sinh viên được gán một mã sinh viên, họ tên, năm sinh và quê quán.
● DETAI (MADT, GIAOVIEN, KINHPHI)
Mỗi đề tài có một mã đề tài, giáo viên hướng dẫn và kinh phí đề tài.
● THUCTAP (MASV, MADT, NOITHUCTAP, KETQUA)
Khi một sinh viên đi thực tập quản lý mã sinh viên, mã đề tài, nơi thực tập và kết
quả thực tập.
Hãy sử dụng đại số quan hệ thực hiện những yêu cầu sau:
1. Cho biết tên của các giáo viên hướng dẫn sinh viên có quê ở Cần Thơ và có kết quả
thực tập khá (KQ > 7)).
2. Cho biết tên của các sinh viên có kết quả thực tập khá và thực tập tại Đồng Tháp
hoặc thực tập tại Trà Vinh.
3. Cho biết tên của các giáo viên hướng dẫn sinh viên có quê ở Kiên Giang và thực tập
đề tài có kinh phí lớn hơn 5 triệu.
4. Cho biết tên của các sinh viên có kết quả thực tập khá và thực tập đề tài có kinh phí
lớn hơn 4 triệu.

50
5. Danh sách sinh viên thực tập tại quê nhà.
6. Cho biết số lượng sinh viên thực tập tại quê nhà
7. Cho biết mã của các đề tài có kinh phí nằm trong khoảng 1.5 đến 2 triệu
8. Cho biết mã của sinh viên có tuổi nhỏ hơn 20 và kết qủa thực tập là khá (KQ > 7)
9. Cho biết kinh phí trung bình của những đề tài mà sinh viên quê ở Cần Thơ thực hiện

51
52
CHƯƠNG 4.
NGÔN NGỮ TRUY VẤN SQL
Chương 4 trình bày thêm một ngôn ngữ thao tác dữ liệu là ngôn ngữ SQL. SQL là ngôn ngữ
phi thủ tục với hai thành phần chính DDL (Data Definition Language) dùng để định nghĩa
cấu trúc của CSDL, DML (Data Manipulation Language) để truy xuất và cập nhật dữ liệu.
Nội dung chương bao gồm:
● Giới thiệu về ngôn ngữ SQL.
● Các lệnh dùng để định nghĩa cơ sở dữ liệu.
● Các lệnh dùng để truy vấn cơ sở dữ liệu.

53
1. GIỚI THIỆU VỀ NGÔN NGỮ SQL
1.1 Lịch sử phát triển
Từ một bài báo tham dự hội thảo khoa học A Relational Model of Data for Large Shared
Data Banks (tạm dịch là "Mô hình quan hệ cho dữ liệu dùng trong ngân hàng dữ liệu chia
sẻ có khối lượng lớn") của tiến sĩ Edgar F. Codd xuất bản tháng 6 năm 1970 trong tạp chí
Communications of the ACM của Hiệp hội ACM, một mô hình đã được chấp nhận rộng rãi
là mô hình tiêu chuẩn dùng cho hệ thống quản lý cơ sở dữ liệu quan hệ.
Giữa những năm 1970, một nhóm các nhà phát triển tại trung tâm nghiên cứu của IBM tại
San Jose phát triển hệ thống cơ sở dữ liệu "Hệ thống R" dựa trên mô hình của Codd.
Structured English Query Language, viết tắt là "SEQUEL" (tạm dịch là "Ngôn ngữ truy vấn
tiếng Anh có cấu trúc"), được thiết kế để quản lý và truy lục dữ liệu được lưu trữ trong Hệ
thống R. Sau này, tên viết tắt SEQUEL được rút gọn thành SQL để tránh việc tranh chấp
nhãn hiệu (từ SEQUEL đã được một công ty máy bay của UK là Hawker-Siddeley đăng
ký). Mặc dù SQL bị ảnh hưởng bởi công trình của tiến sĩ Codd nhưng nó không do tiến sĩ
Codd thiết kế ra. Ngôn ngữ SEQUEL được thiết kế bởi Donald D. Chamberlin và Raymond
F. Boyce tại IBM và khái niệm của họ được phổ biến để tăng sự chú ý về SQL.
Phiên bản cơ sở dữ liệu quan hệ phi thương mại, không hỗ trợ SQL đầu tiên được phát triển
năm 1974 (Ingres from U.C. Berkeley). Năm 1987, ANSI và ISO công bố chuẩn đầu tiên
cho SQL. Năm 1989, ISO công bố thêm phần phụ lục định nghĩa một “Nét cải tiến cho toàn
vẹn”. Năm 1992, phiên bản chỉnh sửa đầu tiên của chuẩn này có mặt, mang tên SQL2 hay
SQL-92. Năm 1999, SQL:1999 được phát hành với các chuẩn hỗ trợ cho quản lý dữ liệu
hướng đối tượng. Vào cuối năm 2003, SQL:2003 ra đời.
1.2 Khái niệm
SQL (Structured Query Language) là một ngôn ngữ phi thủ tục với hai thành phần chính là
DDL và DML.
• DDL (Data Definition Language) dùng để định nghĩa cấu trúc của CSDL. ANSI
chia DDL gồm 2 phần là DDL gồm các lệnh để định nghĩa cấu trúc của CSDL như
CREATE TABLE, CREATE VIEW, ALTER TABLE, … và DCL (Data Control
Language) gồm các lệnh để điều khiển quyền truy cập trên dữ liệu: GRANT,
REVOKE, …
• DML (Data Manipulation Language) được phân thành 2 lớp là lớp dùng để cập
nhật dữ liệu: INSERT, UPDATE, DELETE, ... và lớp dùng để truy xuất dữ liệu:
SELECT, ...
1.3 Cú pháp câu lệnh SQL
Hầu hết các phần trong câu lệnh SQL là không phân biệt chữ hoa chữ thường, trừ các ký tự
trong chuỗi dữ liệu. Tuy câu lệnh SQL có hình thức tự do nhưng để dễ đọc, chúng ta nên
viết mỗi mệnh đề của lệnh trên một dòng, viết bắt đầu một mệnh đề thẳng hàng với các
mệnh đề khác và nếu một mệnh đề có nhiều vế thì nên viết mỗi vế trên một dòng và lùi đầu
54
dòng trong mệnh đề đó.
Ví dụ 4.1: Cho biết họ tên giảng viên nam thuộc khoa “CNTT” hoặc khoa “CNTP”?
SELECT hoten
FROM GIANGVIEN
WHERE phai = 'Nam'
AND (makhoa = 'CNTT' OR makhoa = 'CNTP')
Câu lệnh SQL gồm 2 thành phần: từ khóa và từ do người dùng định nghĩa (tên bảng, tên
cột, …). Cú pháp của lệnh SQL được giới thiệu theo dạng mở rộng như sau:
● Dấu | chỉ sự lựa chọn.
● Dấu { chỉ phần tử bắt buộc phải có.
● Dấu [ chỉ phần tử tùy chọn (không bắt buộc).
● Dấu ... chỉ thành phần có thể lặp lại từ 0 đến nhiều lần.
2. CÁC LỆNH ĐỊNH NGHĨA VÀ CẬP NHẬT CSDL
SQL sử dụng các thuật ngữ bảng (table), hàng (row) và cột (column) tương ứng quan hệ
(relation), bộ (tuple) và thuộc tính (attribute). Các thuật ngữ tương ứng có thể được sử dụng
thay thế cho nhau trong chương này.
Một lược đồ SQL (SQL schema) được xác định bằng tên lược đồ và bao gồm một số định danh
để chỉ ra người dùng hoặc tài khoản sở hữu lược đồ cũng như các bộ mô tả cho mỗi phần tử
trong lược đồ. Các phần tử của lược đồ bao gồm các bảng, kiểu, ràng buộc, khung nhìn, miền
và các cấu trúc khác để mô tả về lược đồ đó.
2.1 Tạo và cập nhật CSDL
2.1.1 Tạo một cơ sở dữ liệu
Để tạo một cơ sở dữ liệu, chúng ta sử dụng cú pháp được định nghĩa như sau:
CREATE DATABASE [database_name]
với database_name là tên cơ sở dữ liệu cần tạo.
Ví dụ 4.2: Tạo cơ sở dữ liệu QLNCKH?
CREATE DATABASE QLNCKH
2.1.2 Mở một cơ sở dữ liệu để sử dụng
Để có thể thực hiện các thao tác như thêm, cập nhật hoặc truy xuất vào các bộ dữ liệu lưu
trữ trong một CSDL thì chúng ta cần thực hiện thao tác mở cơ sở dữ liệu với cú pháp:
USE [database_name]
Ví dụ 4.3: Sau khi tạo cơ sở dữ liệu QLNCKH, thực hiện mở CSDL đó để sử dụng bằng
lệnh
USE QLNCKH
2.1.3 Hủy bỏ (xóa) một cơ sở dữ liệu
55
Sau khi thực hiện các thao tác mong muốn trên một cơ sở dữ liệu, nếu chúng ta không muốn
lưu giữ, sử dụng CSDL đó nữa thì chúng ta có thể loại bỏ CSDL bằng cách sử dụng lệnh
DROP với cú pháp:
DROP DATABASE [database_name]
Ví dụ 4.4: loại bỏ cơ sở dữ liệu QLNCKH khi không còn sử dụng
DROP DATABASE QLNCKH
2.1.4 Sửa đổi cơ sở dữ liệu
Sau khi tạo thành công CSDL, chúng ta có thể thực hiện thay đổi các thông số của CSDL
đó bằng lệnh ALTER DATABASE với cú pháp:
ALTER DATABASE [database_name] [Options]
Với Options là các tùy chọn đơn giản hoặc phức tạp như thêm file, thay đổi tên, thay đổi
kích thước… của CSDL database_name
Ví dụ 4.5: đổi tên cơ sở dữ liệu QLNCKH thành QuanLyNCKH trong SQL Server sẽ có cú
pháp
ALTER DATABASE QLNCKH MODIFY NAME = QuanLyNCKH
2.2 Tạo bảng và cập nhật dữ liệu
2.2.1 Tạo một bảng dữ liệu
Lệnh CREATE TABLE được sử dụng để tạo một bảng mới trong CSDL với cú pháp:
CREATE TABLE [table_name]([column_list datatype]
[column_constraint])
Trong đó,
● table_name: đặc tả tên của bảng dữ liệu được tạo. Tên của bảng là một chuỗi kí
tự bất kỳ, không có kí tự trống và không trùng với từ khóa.
● column_list: đặc tả các cột trong bảng, cách nhau bằng dấu phẩy
● datatype: đặc tả kiểu dữ liệu của cột
● column_constraint: đặc tả các tùy chọn ràng buộc đối với các cột của bảng. Một
số tùy chọn thường gặp như [NULL|NOT NULL], [PRIMARY KEY], [UNIQUE],
[DEFAULT], [IDENTITY], [REFERENCES ref_table (ref_column)],
[CHECK] …
Tùy chọn [NULL] cho phép cột tương ứng có thể có giá trị NULL và ngược lại [NOT
NULL] không cho phép điều trên xảy ra.
Từ khóa [PRIMARY KEY] xác định ràng buộc toàn vẹn thực thể đối với một hoặc
nhiều cột thông qua một chỉ mục duy nhất và mỗi bảng chỉ có một ràng buộc
PRIMARY KEY để làm khóa chính.

56
Tùy chọn [UNIQUE] ấn định ràng buộc toàn vẹn thực thể cho một hoặc nhiều cột
thông qua một chỉ mục duy nhất. Một bảng có thể có nhiều ràng buộc UNIQUE.
Tùy chọn [DEFAULT] đặc tả giá trị mặc nhiên cho cột khi giá trị gán cho cột không
được chỉ định tường minh trong quá trình thêm dòng dữ liệu vào bảng.
Tùy chọn [IDENTITY] cho biết rằng khi một dòng mới được thêm vào thì cột nhận
một giá trị tăng lên.
Tùy chọn [REFERENCES ref_table (ref_column)] ấn định ràng buộc toàn
vẹn tham chiếu đến bảng ref_table thông qua ref_column.
Ví dụ 4.6: Tạo bảng tên GIANGVIEN
CREATE TABLE GIANGVIEN(
magv char(5) NOT NULL PRIMARY KEY,
hoten varchar(50),
ngaysinh date,
gioitinh smallint,
hocvi varchar(20),
chucvu varchar(20),
makhoa int NOT NULL REFERENCES KHOA(makhoa)
)
SQL hỗ trợ một số kiểu dựng sẵn bao gồm:
• char(n): chuỗi kí tự có chiều dài cố định là n với n do người dùng chỉ định.
• varchar(n): chuỗi kí tự có chiều dài thay đổi với độ dài tối đa là n.
• int, smallint: kiểu số nguyên (tập hợp con hữu hạn của các số nguyên).
• numeric(p, d): số thập phân có tối đa p chữ số trong đó có d chữ số thập phân.
• float, real, double precision: số thập phân dấu phẩy động
• date: dữ liệu dạng ngày tháng.
2.2.2 Thêm dòng mới vào bảng
Sau khi đã tạo bảng dữ liệu, chúng ta có thể thêm các dòng dữ liệu mới vào bảng thông qua
câu lệnh INSERT với cú pháp:
INSERT INTO [table_name][colum_list] VALUES [expression_list]
trong đó:
● table_name: đặc tả tên bảng hoặc khung nhìn nhận dữ liệu thêm vào.
● colum_list: nếu có mô tả thì những cột nào không hiện diện phải là các cột có
thể mang giá trị NULL, trừ khi nó đã được định nghĩa giá trị mặc định lúc tạo bảng.
Nếu không có đặc tả colum_list thì SQL ngầm hiểu là tất cả các cột của bảng
với trật tự ban đầu của nó đều được gán trị. Nếu thêm đầy đủ tất cả các cột của bảng
57
thì có thể không cần truyền tham số danh sách các cột trong colum_list.
● expression_list: đặc tả giá trị gán cho các cột, expression_list và
colum_list phải có cùng số phần tử và tương thích về kiểu theo từng cặp một.
Ví dụ 4.7: Thêm vào bảng KHOA với thông tin của một khoa mới “Điện - điện tử” với mã
khoa “DIDT” và được thành lập năm 2013.
INSERT INTO KHOA
VALUES ('DIDT','Điện điện tử',2013)
Ví dụ 4.8: Thêm vào bảng GIANGVIEN thông tin của một giảng viên mới mã số “GV010”,
họ tên “Ngô Quang Vinh”, học vị “Thạc sĩ” và giữ chức vụ “Phó bộ môn” của khoa
“QLCN”.
INSERT INTO NHANVIEN (manv, hoten, hocvi, chucvu, makhoa)
VALUES ('GV010','Ngô Quang Vinh',
'Thạc sĩ','Phó bộ môn', 'QLCN')
Ví dụ 4.9: Thêm vào bảng SINHVIEN một sinh viên có đầy đủ giá trị cho mỗi cột dữ liệu
INSERT INTO SINHVIEN
VALUES ('SV1010177','Nguyễn Trường Thịnh', '20/07/2000',
'HTTT0116','An Giang', 'CNTT')
Ví dụ 4.10: Thêm thông tin một đề tài “Nghiên cứu lên men của rượu mãng cầu xiêm” do
giảng viên “GV002” hướng dẫn với mã số “DT005”, kinh phí 3 triệu đồng và được thực
hiện trong thời gian 6 tháng từ 01/01/2013 đến ngày 01/06/2013
INSERT INTO DETAI(madt, tendt, kinhphi, ngaybd, ngaydkkt,
mahd)
VALUES ('DT005', ' Nghiên cứu lên men của rượu mãng cầu
xiêm ', 3000000, '01/01/2013', '01/06/2013', 'GV002')
2.2.3 Cập nhật dữ liệu của các dòng trong bảng
Câu lệnh UPDATE được sử dụng để sửa đổi dữ liệu các dòng đã có trong bảng. Cú pháp
của câu lệnh được định nghĩa:
UPDATE [table_name]
SET [colum_list = expression_list]
WHERE [condition]
trong đó:
● table_name: đặc tả tên bảng hoặc khung nhìn chứa dữ liệu cần cập nhật.
● colum_list: danh sách cột cần gán lại giá trị.
● expression_list: đặc tả giá trị gán cho các cột, expression_list và
colum_list phải có cùng số phần tử và tương thích về kiểu theo từng cặp một.
58
● condition: đặc tả điều kiện để giới hạn các dòng được cập nhật, nếu không có
đặc tả thì dữ liệu của tất cả các dòng được cập nhật.
Ví dụ 4.11: Thực hiện cập nhật khoa đang theo học của sinh viên “Trương Thị Ngọc
Nhung” là “CNTT”
UPDATE SINHVIEN
SET makhoa = 'CNTT'
WHERE hoten = 'Trương Thị Ngọc Nhung'
Ví dụ 4.12: Tăng 100000 đồng vào lương cơ bản cho tất cả giảng viên
UPDATE GIANGVIEN
SET luongcoban = luongcoban + 100000
Ví dụ 4.13: Chuyển giảng viên “Hoàng Trung Kiên” sang công tác tại khoa “DIDT”
UPDATE GIANGVIEN
SET makhoa = 'DIDT'
WHERE hoten = 'Hoàng Trung Kiên'
2.2.4 Xóa dòng dữ liệu trong bảng
Câu lệnh DELETE được sử dụng các dòng dữ liệu trong bảng và cú pháp được định nghĩa:
DELETE [table_name]
WHERE [condition]
trong đó:
● table_name: đặc tả tên bảng hoặc khung nhìn chứa dữ liệu cần xóa.
● condition: đặc tả điều kiện để giới hạn dòng bị xóa, nếu không đặc tả thì sẽ xóa
hết tất cả các dòng trong bảng, tuy nhiên bảng sẽ không bị xóa.
Ví dụ 4.14: Sinh viên “SV008” xin rút không tiếp tục thực hiện đề tài “DT006”. Hãy xóa
bỏ thông tin này.
DELETE CTDT
WHERE madt = 'DT006'
AND masv = 'SV008'
Ví dụ 4.15: Hãy xóa hết tất cả thông tin trong bảng dữ liệu CTDT.
DELETE CTDT
Ví dụ 4.16: Do lỗi đánh máy dẫn đến sai sót nên yêu cầu xóa hết các dòng dữ liệu về đề tài
“DT006” trong bảng CTDT
DELETE CTDT
WHERE madt = 'DT006'
2.2.5 Sửa đổi các cột trong bảng
59
Để thay đổi cấu trúc của bảng dữ liệu đã có, chúng ta có thể sử dụng câu lệnh ALTER
TABLE với cú pháp:
ALTER TABLE [table_name]
Câu lệnh là một câu lệnh có nhiều tùy chọn phức tạp, ví dụ sửa đổi, thêm, hủy bỏ,...các cột
và các ràng buộc.
Ví dụ 4.17: Thêm vào một cột diachi vào bảng SINHVIEN
ALTER TABLE SINHVIEN
ADD diachi varchar(255)
Ví dụ 4.18: Loại bỏ cột quequan khỏi vào bảng SINHVIEN.
ALTER TABLE SINHVIEN
DROP COLUMN quequan
2.2.6 Loại bỏ bảng khỏi CSDL
Để bỏ một bảng ra khỏi một CSDL, chúng ta sử dụng câu lệnh DROP TABLE với cú pháp:
DROP TABLE [table_name]
Sau khi thực hiện lệnh này thì dữ liệu và cấu trúc bảng sẽ bị hủy bỏ.
Ví dụ 4.19: Xóa tất cả thông tin và cấu trúc của bảng BANGLUONG.
DROP TABLE BANGLUONG

3. CÁC LỆNH TRUY VẤN DỮ LIỆU


Truy vấn (query) là một yêu cầu dữ liệu hoặc thông tin từ một bảng CSDL hoặc từ kết hợp
của nhiều bảng. Cấu trúc cơ bản của một truy vấn SQL bao gồm 3 mệnh đề select, from và
where. Một truy vấn có đầu vào là các quan hệ được liệt trong mệnh đề from, thực hiện các
xử lý với yêu cầu và điều kiện chỉ định trong where và select, trả về kết quả là một quan hệ.
3.1 Cú pháp của lệnh truy vấn dữ liệu
Truy vấn dữ liệu trong cơ sở dữ liệu là một trong các thao tác cơ bản, được thực hiện bởi
câu lệnh SELECT. Cú pháp tổng quát của câu lệnh SELECT được định nghĩa như sau:
SELECT column_list [INTO new_table]
FROM table_list
[WHERE condition]
[GROUP BY column_list]
[HAVING groupby_expression]
[ORDER BY orderby_expression [ASC | DESC]]
Trong đó:
● column_list: là tên của các thuộc tính cần được hiển thị trong kết quả truy vấn.
● table_list: là tên các quan hệ liên quan đến câu truy vấn.

60
● condition: là biểu thức điều kiện dạng logic nhằm xác định các bộ nào sẽ được
rút trích. Các toán tử logic NOT (phủ định), AND (phép hội), OR (phép tuyển). Các
toán tử so sánh =, <>, >, <, >=, <=
● groupby_expression: là biểu thức điều kiện dạng logic; tuy nhiên điều kiện
này tác động lên từng nhóm dữ liệu (nghĩa là nếu dữ liệu đã có gom nhóm bằng
GROUP BY)
● orderby_expression: là các thuộc tính được sử dụng để sắp xếp các bộ dữ liệu
tăng dần (ASC) hoặc giảm dần (DESC).
3.1.1 Mệnh đề SELECT
SELECT được sử dụng để rút trích thông tin từ các cột của các quan hệ. Cú pháp được mô
tả:
SELECT [ALL | DISTINCT] [* | column_list]
Trong đó:
● Từ khóa ALL là tùy chọn mặc định, đặc tả rằng các dòng giống nhau đều xuất hiện
trong kết quả truy vấn.
● Từ khóa DISTINCT đặc tả rằng chỉ có một trong các dòng giống nhau xuất hiện
trong kết quả truy vấn.
● * là ký tự đặc biệt dùng để chỉ tất các thuộc tính của quan hệ sẽ là thuộc tính của
quan hệ kết quả. Danh sách các thuộc tính này cách nhau bởi dấu phẩy và thứ tự này
cũng chính là thứ tự của các thuộc tính trong quan hệ kết quả.
● column_list: là phát biểu liệt kê danh sách các cột được xuất hiện trong kết quả
truy vấn.
Câu lệnh SELECT không chỉ thực hiện việc trích thông tin từ các cột riêng lẻ của quan hệ
mà còn có thể tính toán theo công thức hay biểu thức bất kỳ dựa trên giá trị của các cột trên
từng bảng ghi của quan hệ.
3.1.2 Mệnh đề FROM
Cú pháp của FROM:
FROM table_list
với table_list là danh sách những quan hệ liên quan đến câu truy vấn, các quan hệ này
được cách nhau bởi dấu phẩy, thứ tự các quan hệ trong mệnh đề FROM không quan trọng.
Trong trường hợp mệnh đề FROM chỉ ra từ hai quan hệ trở lên và nếu có một thuộc tính ở
mệnh đề SELECT là thuộc tính của nhiều hơn một quan hệ thì cần phải chỉ rõ thuộc tính đó
thuộc về quan hệ nào, theo cú pháp: table_name.column_name.
Trong trường hợp chúng ta muốn đặt bí danh cho các quan hệ thì bí danh sẽ đi liền sau tên
của quan hệ tương ứng.

61
Ví dụ 4.20: Cho biết thông tin đầy đủ của toàn bộ giảng viên?
SELECT *
FROM GIANGVIEN
Ví dụ 4.21: Cho biết danh sách gồm họ tên và giới tính của giảng viên?
SELECT hoten, gioitinh
FROM GIANGVIEN
Ví dụ 4.22: Cho biết danh sách các mức phụ cấp có thể có của giảng viên?
SELECT DISTINCT phucap
FROM GIANGVIEN
3.1.3 Mệnh đề WHERE
Mệnh đề WHERE giúp lọc kết quả và chỉ giữ lại các dòng dữ liệu đáp ứng một điều kiện cụ
thể. Cú pháp của WHERE được định nghĩa:
WHERE condition
Trong trường hợp condition chỉ liên quan đến một quan hệ thì có thể gọi điều kiện đó
là điều kiện chọn, nếu condition liên quan đến nhiều quan hệ thì có thể gọi là điều kiện
kết. Các điều kiện chọn và điều kiện kết có thể phối hợp với nhau bởi các toán tử logic để
tạo nên những biểu thức logic.
Cần lưu ý rằng thứ tự điều kiện ở đây là quan trọng. Trong điều kiện cho phép thì điều kiện
chọn nên được thực hiện trước điều kiện kết.
Mệnh đề WHERE thường có các dạng sau:
● So sánh giá trị thuộc tính với 1 giá trị cụ thể theo cú pháp:
<Cột> so sánh <giá trị>
Ví dụ 4.23: Cho biết tất cả các thông tin của giảng viên “Hoàng Trung Kiên”.
SELECT *
FROM GIANGVIEN
WHERE hoten = 'Hoàng Trung Kiên'
Ví dụ 4.24: Cho biết tên đề tài, kinh phí thực hiện của đề tài có mã “DT01”.
SELECT tendt, kinhphi
FROM DETAI
WHERE madt = 'DT01'
Ví dụ 4.25: Cho biết tên và học vị của các giảng viên nam đang công tác tại khoa “CNTT”
SELECT hoten, hocvi
FROM GIANGVIEN
WHERE makhoa = 'CNTT'
AND gioitinh = 'Nam'

62
● So sánh giá trị thuộc tính với nhau theo cú pháp:
<Cột 1> so sánh <Cột 2>
Ví dụ 4.26: Cho biết thông tin lương bao gồm mã giảng viên, lương và phụ cấp của những
giảng viên có lương lớn hơn 2 lần phụ cấp.
SELECT magv, luongcoban * hesoluong, phucap * hesoluong
FROM BANGLUONG
WHERE (luongcoban * hesoluong) > (2 * phucap * hesoluong)
● So sánh giá trị thuộc tính với hằng có kiểu tương thích theo cú pháp:
<Cột> so sánh <Hằng>
Ví dụ 4.27: Cho biết họ tên các sinh viên quê ở “Cần Thơ” là gì?
SELECT hoten
FROM SINHVIEN
WHERE quequan = 'Cần Thơ'
Ví dụ 4.28: Hiển thị mã và họ tên giảng viên thuộc mã khoa “CNTT” (Công nghệ thông tin)
SELECT magv, hoten
FROM GIANGVIEN
WHERE makhoa = 'CNTT'
● So sánh cột với một tập hợp nhiều giá trị theo cú pháp:
<Cột> IN | NOT IN (<Danh sách các giá trị>)
Ví dụ 4.29: Cho biết họ tên các giảng viên thuộc khoa “CNTT”, “CNTP” và “QLCN”?
SELECT hoten
FROM GIANGVIEN
WHERE makhoa IN ('CNTT','CNTP','QLCN')
Ví dụ 4.30: Cho biết họ tên của sinh viên quê ở “Cần Thơ”, “Kiên Giang”, “Bạc Liêu”.
SELECT hoten
FROM SINHVIEN
WHERE quequan IN ('Cần Thơ','Kiên Giang','Bạc Liêu')
● Kiểm tra điều kiện trong phạm vi theo cú pháp:
<Cột> BETWEEN | NOT BETWEEN
<Giá trị đầu> AND <Giá trị cuối>
Ví dụ 4.31: Cho biết họ tên, học vị của những giảng viên sinh năm 1970 đến 1980?
SELECT hoten, hocvi
FROM GIANGVIEN
WHERE ngaysinh BETWEEN 1/1/1970 AND 31/12/1980
● Kiểm tra điều kiện theo mẫu dạng chuỗi với cú pháp:

63
<Cột> LIKE | NOT LIKE <Chuỗi>
Trong đó <Chuỗi> có thể có ký tự đại diện: _ (đại diện cho một ký tự bất kỳ), %
(đại diện cho một chuỗi ký tự bất kỳ).
Ví dụ 4.32: Cho biết thông tin chi tiết các giảng viên nữ có chữ lót là “Thị”?
SELECT *
FROM GIANGVIEN
WHERE hoten LIKE '% Thị %'
AND gioitinh = 'Nữ'
Ví dụ 4.33: Cho biết thông tin chi tiết các sinh viên tên có vần “ao” ví dụ như Bảo, Thảo,
Hào, ...?
SELECT *
FROM SINHVIEN
WHERE hoten LIKE '%ao'
● Kiểm tra điều kiện theo theo giá trị NULL với cú pháp:
<Cột> IS NULL | IS NOT NULL
Ví dụ 4.34: Cho biết mã giảng viên chưa được hưởng phụ cấp?
SELECT magv
FROM GIANGVIEN
WHERE phucap IS NULL
Ví dụ 4.35: Cho biết thông tin chi tiết của các đề tài chưa báo cáo?
SELECT *
FROM DETAI
WHERE ngaykt IS NULL
3.1.4 Mệnh đề GROUP BY
Mệnh đề GROUP BY dùng để phân nhóm những bộ của quan hệ có cùng giá trị trên các
thuộc tính này tạo thành một nhóm. Cú pháp sử dụng:
GROUP BY (<column_list>)
Khi cần tính toán trên các bộ theo một nhóm nào đó (theo cột thuộc tính nào đó), chúng ta
sử dụng mệnh đề GROUP BY để nhóm chúng lại. Ví dụ như đếm số lượng sinh viên của
từng khoa ở một trường nào đó, tổng tiền của từng hóa đơn, ... Các mệnh đề thường sử dụng
để tính toán tổng hợp theo nhóm: SUM, AVG, MIN, MAX, COUNT.
Một điều cần lưu ý khi sử dụng mệnh đề này là những thuộc tính có tham gia phân nhóm
trong GROUP BY phải được liệt kê trong danh sách các thuộc tính của mệnh đề SELECT.
3.1.5 Các hàm kết tập
Trong mệnh đề SELECT có thể sử dụng các hàm kết tập để tính toán và kết quả trả về của
câu lệnh có sử dụng hàm kết tập là một giá trị. Các hàm kết tập có thể sử dụng bao gồm:
64
● COUNT (* [ALL | DISTINCT] [expression]): trả về số lượng các giá
trị trong một nhóm.
● SUM (* [ALL | DISTINCT] [expression]): trả về tổng của tất cả các
giá trị trong một nhóm.
● AVG (* [ALL | DISTINCT] [expression]): trả về giá trị trung bình của
các giá trị trong một nhóm.
● MIN (* [ALL | DISTINCT] [expression]): trả về giá trị nhỏ nhất của
các giá trị trong một nhóm.
● MAX (* [ALL | DISTINCT] [expression]): trả về giá trị lớn nhất của
các giá trị trong một nhóm.
Với từ khóa ALL là mặc định, đặc tả các giá trị khá null đều được đếm. Từ khóa DISTINCT
đặc tả các giá trị khác null giống nhau chỉ đếm một lần. expression đặc tả biểu thức mà
các giá trị của nó được đếm hoặc được thực hiện tính toán.
Nếu trong mệnh đề SELECT có dùng hàm kết tập thì các tên cột phải được đặt trong hàm
kết tập. Từ khóa AS có thể được sử dụng kèm theo để đặt lại tên cho các cột kết quả.
Ví dụ 4.36: Có bao nhiêu giảng viên trong hồ sơ?
SELECT COUNT(*) AS tongsonv
FROM GIANGVIEN
Ví dụ 4.37: Hãy cho biết mức hệ số lương cao nhất, thấp nhất và trung bình của các giảng
viên?
SELECT MAX(hesoluong), MIN(hesoluong), AVG(hesoluong)
FROM BANGLUONG
Ví dụ 4.38: Cho biết số lượng giảng viên nam, và giảng viên nữ?
SELECT gioitinh, COUNT(*) AS slnhanvien
FROM GIANGVIEN
GROUP BY gioitinh
Ví dụ 4.39: Hãy cho biết tổng kinh phí của các đề tài được hướng dẫn bởi giảng viên có mã
hướng dẫn là “GV008”
SELECT SUM(kinhphi) AS tongkinhphi
FROM DETAI
WHERE mahd = 'GV008'
Ví dụ 4.40: Hãy cho biết tổng số lượng và kinh phí trung bình của các đề tài mà mỗi giảng
viên hướng dẫn.
SELECT mahd, COUNT(madt) AS sldt, SUM(kinhphi) AS kptb
FROM DETAI
GROUP BY mahd

65
Ví dụ 4.41: Hãy cho biết số lượng sinh viên theo từng khoa?
SELECT makhoa, COUNT(*) AS slsv
FROM SINHVIEN
GROUP BY makhoa
3.1.6 Mệnh đề HAVING
Mệnh đề HAVING được dùng kết hợp với mệnh đề GROUP BY. Mệnh đề HAVING dùng
để áp dụng điều kiện trên nhóm. Do đó kết quả trả về chỉ bao gồm những nhóm thỏa mãn
điều kiện mới. Cú pháp:
HAVING (<condition_on_group>)
Ví dụ 4.42: Cho biết khoa có nhiều hơn 20 giảng viên?
SELECT makhoa, COUNT(magv)
FROM GIANGVIEN
GROUP BY makhoa
HAVING COUNT(magv) > 20
Ví dụ 4.43: Hãy cho biết mã đề tài có nhiều hơn 3 sinh viên tham gia?
SELECT madt, COUNT(masv)
FROM CTDT
GROUP BY madt
HAVING COUNT(masv) > 3
3.1.7 Mệnh đề ORDER BY
Mệnh đề ORDER BY dùng để sắp xếp kết quả được trả về. Cú pháp sử dụng đối với mệnh
đề này là:
ORDER BY (<column_name|column_order>) ASC | DESC
Việc sắp xếp kết quả được sử dụng bảng tên cột, hoặc thứ tự của cột trong kết quả trả về.
Từ khóa ASC dùng để sắp xếp theo thứ tự tăng dần (mặc định). Từ khóa DESC dùng để
sắp xếp theo thứ tự giảm dần.
Ví dụ 4.44: Cho biết thông tin chi tiết của giảng viên, sắp xếp theo độ tuổi tăng dần?
SELECT *
FROM GIANGVIEN
ORDER BY ngaysinh DESC
Ví dụ 4.45: Hãy cho biết tên đề tài, mã hướng dẫn được sắp xếp theo kinh phí tăng dần,
tổng điểm giảm dần?
SELECT tendt, mahd
FROM DETAI
ORDER BY kinhphi ASC, tongdiem DESC
3.2 Câu lệnh truy vấn lồng nhau

66
Trong trường hợp điều kiện chọn ở mệnh đề WHERE cần truy cập thông tin ở các quan hệ
khác với quan hệ đang truy vấn để kiểm tra điều kiện chúng ta có thể sử dụng một câu
SELECT khác lồng trong điều kiện ở mệnh đề WHERE. SELECT này được gọi là truy vấn
con hay truy vấn lồng nhau. Các truy vấn con sẽ nằm trong mệnh đề WHERE của truy vấn
chính.
Các dạng thường gặp đối với các câu lệnh truy vấn lồng nhau như:
● Dạng 1: <Cột> <so sánh> (<select con>)
Điều kiện là đúng khi giá trị của cột so sánh đúng với một giá trị duy nhất trả về từ
một câu select con.
Ví dụ 4.46: Cho biết mã giảng viên có hệ số lương cao nhất?
SELECT magv
FROM BANGLUONG
WHERE hesoluong = (SELECT MAX (hesoluong)
FROM BANGLUONG)
Ví dụ 4.47: Hãy cho biết họ tên và chức vụ của giảng viên có tuổi lớn nhất Trường?
SELECT hoten, chucvu
FROM GIANGVIEN
WHERE ngaysinh = (SELECT MIN (ngaysinh)
FROM GIANGVIEN)
● Dạng 2: <Cột> <so sánh> ALL (<select con>)
Điều kiện là đúng khi giá trị của cột so sánh đúng với tất cả các giá trị trả về từ một
câu select con.
Ví dụ 4.48: Hiển thị tên đề tài có kinh phí lớn hơn tất cả đề tài được bắt đầu thực hiện năm
2013.
SELECT tendt
FROM DETAi
WHERE kinhphi > ALL (SELECT kinhphi
FROM DETAI
WHERE ngaybatdau BETWEEN 1/1/2013
AND 31/12/2013)
Ví dụ 4.49: Hiển thị họ tên, quê quán của những sinh viên lớn tuổi hơn tất cả sinh viên thuộc
lớp “CNTT0120”.
SELECT hoten, quequan
FROM SINHVIEN
WHERE ngaysinh < ALL (SELECT ngaysinh
FROM SINHVIEN
WHERE makhoa = ' CNTT0120')

67
● Dạng 3: <Cột> <so sánh> ALL|ANY (<select con>)
Điều kiện là đúng khi giá trị của cột so sánh đúng với một giá trị nào đó trong số
các giá trị được trả về từ câu select con.
Ví dụ 4.50: Hiển thị họ tên trưởng khoa của tất cả các khoa.
SELECT hoten
FROM GIANGVIEN
WHERE magv = ANY (SELECT trgkhoa FROM KHOA)
Ví dụ 4.51: Hiển thị họ tên phụ huynh của các sinh viên lớp “HTTT0118”.
SELECT hotenph
FROM PHUHUYNH
WHERE masv = ANY (SELECT masv
FROM KHOA
WHERE lop = ' HTTT0118')
● Dạng 4: <Cột> <so sánh> IN|NOT IN (<select con>)
Điều kiện là đúng khi giá trị của cột so sánh thuộc về/ không thuộc về tập hợp các
giá trị trả về của câu select con.
Ví dụ 4.52: Cho biết họ tên trưởng khoa của tất cả các khoa?
SELECT hoten
FROM GIANGVIEN
WHERE magv = IN (SELECT trgkhoa FROM KHOA)
Ví dụ 4.53: Hãy cho biết thông tin chi tiết của sinh viên từng tham gia đề tài?
SELECT *
FROM SINHVIEN
WHERE masv = IN (SELECT masv FROM CTDT)
● Dạng 5: EXISTS|NOT EXISTS (<select con>)
Điều kiện là đúng khi kết quả trả về của câu select con là rỗng/khác rỗng.
Ví dụ 4.54: Cho biết họ tên những giảng viên có hệ số lương bằng với 1 giảng viên khác?
SELECT hoten
FROM GIANGVIEN a
WHERE EXISTS (SELECT *
FROM GIANGVIEN b
WHERE a.hesoluong = b.hesoluong
AND a.magv <> b.magv)
Ví dụ 4.55: Hãy cho biết tên đề tài có cùng thời điểm bắt đầu và cùng người hướng dẫn với
đề tài khác?
SELECT tendt

68
FROM DETAI a
WHERE EXISTS (SELECT *
FROM DETAI b
WHERE a.ngaybd = b.ngaybd
AND a.mahd = b.mahd
AND a.magv <> b.magv)
Trong khi thực hiện các câu lệnh truy vấn lồng nhau, một số quy luật cần lưu ý:
● Mệnh đề ORDER BY không được sử dụng trong truy vấn con (mặc dù chúng có thể
được dùng trong truy vấn cha).
● Mệnh đề SELECT trong truy vấn con chỉ được bao gồm một cột hoặc một biểu thức
duy nhất, ngoại trừ truy vấn con sử dụng EXISTS.
● Truy vấn con có thể truy cập các cột của các bảng ở truy vấn cha bằng cách sử dụng
bí danh.
Bảng 4-1: Bảng kết quả của truy vấn lồng
Select con trả về Một cột Nhiều cột

Một dòng Dạng 1 Dạng 5

Nhiều dòng Dạng 2, 3, 4

3.3 Câu lệnh truy vấn trên nhiều bảng


Trong các phần trước, câu truy vấn được thực hiện lấy ra nội dung các cột, các dòng thỏa
điều kiện trên các bảng riêng lẻ. Tuy nhiên, trong việc quản lý cơ sở dữ liệu để tối ưu hóa
trong việc lưu trữ thì dữ liệu được lưu trữ ở những bảng khác nhau. Câu truy vấn thực hiện
trên từng bảng riêng lẻ không trả về đủ dữ liệu cho người dùng. Do đó, đòi hỏi phải có sự
kết hợp của hai hay nhiều bảng dữ liệu thông qua các phép kết nối.
3.3.1 Phép tích Descartes
Phép tích Descartes thực hiện kết nối linh hoạt giữa hai bảng bởi vì nó có thể áp dụng trên
bảng có bất kỳ kiểu định dạng nào.
Ví dụ 4.56: Cho biết các trường hợp giảng viên hướng dẫn các đề tài?
SELECT *
FROM GIANGVIEN CROSS JOIN DETAI
Phép tích Descartes sẽ tạo ra quan hệ kết quả từ 2 bảng dữ liệu GIANGVIEN và DETAI
bằng cách lấy từng dòng dữ liệu của bảng GIANGVIEN kết hợp với từng dòng dữ liệu của
bảng DETAI. Do đó, giả sử bảng GIANGVIEN có 𝑛 dòng dữ liệu, bảng DETAI có 𝑚 dòng
dữ liệu. Vậy bảng dữ liệu kết quả sẽ có 𝑛 × 𝑚 dòng.
Phép tích Descartes là cách tiếp cận đơn giản trong phép kết nối giữa bảng dữ liệu. Tuy
nhiên, sản phẩm của phép tích Descarter tạo ra bảng dữ liệu có kết quả rất lớn, điều này dẫn
đến sự dư thừa dữ liệu rất nhiều. Do đó, phép tích Descartes ít được sử dụng vì nó tạo ra
69
nhiều thông tin không hữu ích.
3.3.2 Phép kết nối
Phép kết nối bằng được thực hiện trên hai hay nhiều bảng thông qua thuộc tính chung của
các bảng. Để thực hiện kết nối, liệt kê các bảng trong mệnh đề FROM cách nhau bằng dấu
phẩy. Thông thường mệnh đề WHERE để mô tả điều kiện kết nối của các bảng.
Ví dụ 4.57: Hãy cho biết tên khoa của giảng viên “Hoàng Trung Kiên” đang làm việc?
SELECT tenkhoa
FROM GIANGVIEN, KHOA
WHERE GIANGVIEN.makhoa = KHOA.makhoa
AND hoten = 'Hoàng Trung Kiên'
Chúng ta có thể đặt bí danh cho các bảng trong mệnh đề FROM. Nếu bảng đã được đặt bí
danh thì bí danh đó phải được sử dụng thay cho tên bảng trong toàn bộ lệnh SELECT. Nếu
có một thuộc tính ở mệnh đề SELECT là thuộc tính của nhiều hơn một quan hệ thì cần phải
chỉ rõ thuộc tính đó thuộc về quan hệ nào, theo cú pháp: table_name.column_name.
Ví dụ 4.57 có thể được viết lại như sau:
SELECT tenkhoa
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND hoten = 'Hoàng Trung Kiên'
Ví dụ 4.58: Cho biết mã và họ tên của giáo viên thuộc khoa “Công nghệ thông tin”
SELECT magv, hoten
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND tenkhoa = ' Công nghệ thông tin'
Một dạng đặc biệt của phép nối bằng đó là phép kết nối tự nhiên (natural join). Trong
phép kết nối tự nhiên, điều kiện kết nối giữa hai bảng chính là điều kiện bằng giữa khóa
ngoại và khóa chính của các bảng đó và trong kết quả trả về chỉ giữ lại một trong hai cột
tham gia vào điều kiện của phép kết nối.
Phép kết nối tự nhiên có thể mô tả bằng cách sử dụng các từ khóa như sau:
SELECT * FROM GIANGVIEN NATURAL JOIN KHOA
Phép kết nối mở rộng (outer-join) hoạt động theo cách tương tự phép kết nối tự nhiên
nhưng nó bảo toàn các bộ sẽ bị mất trong một phép kết nối thông thường bằng cách tạo các
bộ kết quả có chứa giá trị NULL.
Theo chuẩn SQL2, điều kiện kết nối được chỉ định trong mệnh đề FROM và chia làm 02
loại là phép kết nối trong INNER JOIN và phép kết nối mở rộng OUTER JOIN. Phép kết
nối mở rộng sẽ bao gồm phép kết nối mở rộng trái LEFT (OUTER) JOIN, phép kết nối mở
rộng phải RIGHT (OUTER) JOIN và phép kết nối mở rộng hai bên FULL (OUTER) JOIN.
70
INNER JOIN: trả về các dòng có giá trị phù hợp trong cả hai bảng

Hình 4-1: Biểu đồ Venn minh họa cho INNER JOIN


Cú pháp được sử dụng khi kết nối 02 bảng:
SELECT column_list
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name
với:
• column_list: là tên của các thuộc tính cần được hiển thị trong kết quả truy vấn.
• table1, table2: là hai bảng được kết nối
• column_name: là thuộc tính chung của hai bảng
Ví dụ 4.58 có thể được viết lại thành
SELECT magv, hoten
FROM GIANGVIEN gv
INNER JOIN KHOA k ON gv.makhoa = k.makhoa
WHERE tenkhoa = ' Công nghệ thông tin'
LEFT (OUTER) JOIN: trả về tất cả các dòng ở bảng bên trái và dòng so trùng trong bảng
bên phải.

Hình 4-2: Biểu đồ Venn minh họa cho LEFT (OUTER) JOIN
Cú pháp được sử dụng khi kết nối 02 bảng:
SELECT column_list
FROM table1
LEFT JOIN table2

71
ON table1.column_name = table2.column_name
Ví dụ 4.59: Hiển thị các thông tin mã khoa, tên khoa và họ tên sinh viên kể cả những khoa
chưa có sinh viên.
SELECT makhoa, tenkhoa, hoten
FROM KHOA k
LEFT JOIN SINHVIEN sv ON k.makhoa = sv.makhoa
RIGHT (OUTER) JOIN: trả về tất cả các dòng ở bảng bên phải và dòng so trùng trong
bảng bên trái.

Hình 4-3: Biểu đồ Venn minh họa cho RIGHT (OUTER) JOIN
Cú pháp được sử dụng khi kết nối 02 bảng:
SELECT column_list
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name
Ví dụ 4.59 có thể được viết lại theo RIGHT JOIN như sau:
SELECT makhoa, tenkhoa, hoten
FROM SINHVIEN sv
RIGHT JOIN KHOA k ON sv.makhoa = k.makhoa
FULL (OUTER) JOIN: trả về tất cả các dòng khi có một kết quả phù hợp trong bảng bên
trái hoặc bảng bên phải

Hình 4-4: Biểu đồ Venn minh họa cho FULL (OUTER) JOIN
Cú pháp được sử dụng khi kết nối 02 bảng:
SELECT column_list
FROM table1
72
FULL JOIN table2
ON table1.column_name = table2.column_name
3.3.3 Các toán tử tập hợp
Trong SQL có cài đặt các phép toán tập hợp như: UNION (phép hợp), INTERSECT (phép
giao), EXCEPT (phép trừ). Kết quả của các phép toán sẽ loại bỏ những bộ trùng nhau (chỉ
giữ lại 1 bộ). Cũng như đại số quan hệ, các toán tử đòi hỏi sự tương thích của hai bảng (khả
hợp). Hai thuộc tính tương thích có cùng kiểu và cùng kích thước.
● Hợp hai truy vấn: kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT.
Ví dụ 4.60: Cho biết danh sách họ tên, học vị của giảng viên khoa “Công nghệ thông tin”
và “Công nghệ thực phẩm”?
(SELECT hoten, hocvi
FROM GIANGVIEN, KHOA
WHERE GIANGVIEN.makhoa = KHOA.makhoa
AND tenkhoa = 'Công nghệ thông tin')
UNION
(SELECT hoten, hocvi
FROM GIANGVIEN, KHOA
WHERE GIANGVIEN.makhoa = KHOA.makhoa
AND tenkhoa = 'Công nghệ thực phẩm'
Ví dụ 4.61: Hãy cho biết tên đề tài do sinh viên khoa “CNTT” và “CNTP” đã thực hiện?
(SELECT tendt
FROM SINHVIEN sv, DETAI dt, CTDT ct
WHERE sv.masv = ct.masv
AND dt.madt = ct.madt
AND makhoa = 'CNTT')
UNION
(SELECT tendt
FROM SINHVIEN sv, DETAI dt, CTDT ct
WHERE sv.masv = ct.masv
AND dt.madt = ct.madt
AND makhoa = 'CNTP')
● Giao hai truy vấn: kết hợp kết quả của hai hoặc nhiều câu lệnh SELECT nhưng trả
về các dòng chung của các kết quả trả về từ các câu lệnh.
Ví dụ 4.62: Cho biết khoa có cả “Trưởng khoa” và “Trợ lý khoa”?
(SELECT makhoa, tenkhoa
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND chucvu = 'Trưởng khoa')

73
INTERSECT
(SELECT makhoa, tenkhoa
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND chucvu = 'Trợ lý khoa')
Phép giao hai tập kết quả truy vấn có thể trả lời bằng các phép truy vấn lồng nhau
bằng cách sử dụng IN hay EXISTS. IN cho phép giao trên một thuộc tính trong khi
EXISTS cho phép giao trên nhiều thuộc tính.
● Trừ hai truy vấn: kết hợp kết quả của hai câu lệnh SELECT và trả về các dòng có
trong kết quả của câu lệnh SELECT thứ nhất nhưng không có trong kết quả của câu
lệnh SELECT thứ hai.
Ví dụ 4.63: Cho biết khoa không có “Trợ lý khoa”?
(SELECT makhoa, tenkhoa
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa)
EXCEPT
(SELECT makhoa, tenkhoa
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND chucvu = 'Trợ lý khoa')
Phép trừ hai tập kết quả truy vấn có thể trả lời bằng các phép truy vấn lồng nhau
bằng cách sử dụng NOT IN và NOT EXISTS. NOT IN cho phép trừ trên một thuộc tính và
NOT EXISTS cho phép trừ trên nhiều thuộc tính.
3.4 Một số từ khóa thông dụng
Từ khóa AS được sử dụng để đặt lại tên cột trong kết quả trả về.
Ví dụ 4.64: Cho biết thông tin giảng viên và lương của họ?
SELECT hoten, ngaysinh,
(luongcoban*(hesoluong+phucap)) AS luong
FROM GIANGVIEN, BANGLUONG
WHERE GIANGVIEN.magv = BANGLUONG.magv
Từ khóa INTO được sử dụng trong lệnh SELECT để lưu trữ dữ liệu tạm thời.
Ví dụ 4.65: Hiển thị mã phòng và tên khoa có số giảng viên nữ nhiều nhất.
SELECT gv.makhoa, tenkhoa,
COUNT(gv.magv) AS sogvnu INTO #TEMP
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND gioitinh = 'Nữ'

74
GROUP BY gv.makhoa, tenkhoa

SELECT gv.makhoa, tenkhoa


FROM TEMP
WHERE sogvnu = (SELECT MAX (sogvnu)
FROM TEMP)

DROP TABLE TEMP


Dùng câu lệnh CREATE VIEW view_name để lưu trữ dữ liệu tạm thời.
Ví dụ 4.66: Hiển thị mã phòng và tên khoa có số giảng viên nữ nhiều nhất.
CREATE VIEW TEMP(gv.makhoa, tenkhoa, sogvnu)
AS
SELECT gv.makhoa, tenkhoa, COUNT(gv.magv) AS sogvnu
FROM GIANGVIEN gv, KHOA k
WHERE gv.makhoa = k.makhoa
AND gioitinh = 'Nữ'
GROUP BY gv.makhoa, tenkhoa
GO
SELECT makhoa, tenkhoa
FROM TEMP
WHERE sogvnu = (SELECT MAX(sogvnu)
FROM TEMP)
-------------------
DROP VIEW TEMP

TÓM TẮT CHƯƠNG


Ngôn ngữ SQL bao gồm 02 phần chính là DDL và DML với DDL cung cấp các lệnh định
nghĩa, điều chỉnh lưu đồ quan hệ và xóa các quan hệ; DML bao gồm ngôn ngữ truy vấn và
các lệnh thêm, xóa và điều chỉnh các bộ dữ liệu. SQL cung cấp các cấu trúc để cập nhật,
chèn và xóa dữ liệu. Bên cạnh đó SQL có các cấu trúc ngôn ngữ khác nhau cho các truy
vấn trên cơ sở dữ liệu bao gồm các mệnh đề select, from và where. Các cơ chế để đổi tên
các thuộc tính và quan hệ cũng như sắp xếp các kết quả truy vấn, tính năng tổng hợp bao
gồm việc chia quan hệ thành các nhóm và áp dụng các hàm kết tập trên các nhóm cũng
được hỗ trợ bởi SQL. Ngoài ra SQL cũng cung cấp các phép kết nối trong và kết nối mở
rộng giúp thực hiện các truy vấn trên nhiều bảng có liên quan.
CÂU HỎI
1. Các lệnh định nghĩa dữ liệu bao gồm những lệnh nào? Ý nghĩa của từng lệnh là gì?
2. Viết câu lệnh để thực hiện:
• Tạo một cơ sở dữ liệu QLCuaHang

75
• Mở CSDL vừa tạo và thêm vào một bảng mới ứng với quan hệ
SANPHAM(MaSP, TenSP, SoLuong, NgayNhap) trong đó kiểu dữ liệu của
SoLuong là kiểu số nguyên, NgayNhap là kiểu ngày tháng, MaSP và TenSP là
kiểu chuỗi.
• Thêm 1 dòng dữ liệu vào bảng SANPHAM.
• Cập nhật NgayNhap của SANPHAM là ngày hôm nay.
3. Mô tả 4 mệnh đề chính trong cú pháp của một câu lệnh truy vấn SQL đơn giản.
Thành phần nào bắt buộc và tùy chọn?
4. Liệt kê và mô tả ý nghĩa của các hàm kết tập.
5. Mô tả các kiểu câu lệnh truy vấn lồng nhau chính.
6. Phân biệt giữa phép tích Descartes và phép kết nối trong.
7. Mô tả các toán tử tập hợp hỗ trợ bởi SQL.
BÀI TẬP
Bài tập 1:
Cho lược đồ cơ sở dữ liệu quản lý kết quả học tập gồm các lược đồ quan hệ sau:
● SINHVIEN (MASV, HOTEN, LOP)
Mỗi sinh viên có một mã số sinh viên duy nhất (MASV), mỗi mã số sinh viên xác
định họ tên sinh viên (HOTEN), lớp của sinh viên theo học (LOP).
● HOCPHAN (MAHP, TENHP, SOTC)
Mỗi học phần có một mã học phần duy nhất (MAHP), mỗi mã học phần xác định
tên học phần (TENHP), số tỉn chỉ (SOTC); số tín chỉ trong phạm vi từ 2 đến 6.
● KETQUA (MASV, MAHP, DIEMHP)
Mỗi sinh viên ứng với mỗi học phần sẽ có một điểm tổng kết học phần đó
(DIEMHP). Điểm học phần thuộc kiểu số thực và được tính theo thang điểm 10.
● Các thuộc tính MASV, HOTEN, LOP, MAHP, TENHP thuộc kiểu dữ liệu chuỗi.
Hãy thực hiện các yêu cầu sau bằng ngôn ngữ SQL:
1. Lập danh sách những sinh viên thuộc lớp “CNTT2017” có ít nhất một học phần nào
đó có điểm nhỏ hơn 4.
2. Lập danh sách những sinh viên thuộc lớp “CNTT2017” có điểm của tất cả các học
phần đều lớn hơn hoặc bằng 8.
3. Lập danh sách các sinh viên học chung với lớp sinh viên có mã số “SV1081700”.
4. Lập bảng điểm trung bình cộng các điểm tổng kết học phần của các sinh viên thuộc
lớp “CNTT2017”.
5. Lập danh sách các sinh viên đã học tất cả các học phần.

76
Bài tập 2:
Ứng dụng quản lý tour của công ty du lịch bao gồm các lược đồ cơ sơ:
● DIADIEM (MADD, TENDD, DCHI, DTHOAI, PHITQ)
Mỗi địa điểm có mã địa điểm duy nhất (MADD) để phân biệt với các địa điểm khác.
Mỗi địa điểm xác định tên địa điểm (TENDD), địa chỉ địa điểm (DCHI), số điện
thoại (DTHOAI) và phí tham quan (PHITQ).
● HANHTRINH (MAHT, TENHT, MAHDV, THOIGIAN, CHIPHI)
Mỗi hành trình có mã hành trình duy nhất (MAHT) để phân biệt với hành trình khác.
Mỗi mã hành trình xác định tên hành trình (TENHT), do một hướng dẫn viên hướng
dẫn (MAHDV), thời gian (THOIGIAN) và chi phí (CHIPHI) tham dự hành trình.
● HUONGDANVIEN (MAHDV, TENHDV, DTHOAI)
Mỗi hướng dẫn viên có mã hướng dẫn viên duy nhất (MAHDV) để phân biệt với
hướng dẫn viên khác. Mỗi hướng dẫn viên xác định tên hướng dẫn viên (TENHDV),
số điện thoại liên lạc (DTHOAI).
● BAOGOM (MAHT, MADD)
Quan hệ bao gồm để diễn đạt mối quan hệ hành trình bao gồm những địa điểm nào.
● THONGTHAO (MAHDV, MADD)
Quan hệ thông thạo để diễn đạt mối quan hệ của hướng dẫn viên thông tạo những
địa điểm nào.
Hãy thực hiện các yêu cầu sau bằng ngôn ngữ SQL:
1. Hiển thị danh sách các địa điểm theo thứ tự phí tham quan tăng dần.
2. Hiển thị Tên và số điện thoại hướng dẫn viên thông thạo “Cần Thơ”.
3. Cho biết chi phí của tất cả các hành trình có địa điểm “Huế”?
4. Cho biết số lượng hành trình của từng hướng dẫn viên?
5. Cho biết địa điểm có hành trình có chi phí cao nhất?
6. Lập danh sách các hành trình có chi phí thấp hơn tổng chi phí tham quan của các địa
điểm trong hành trình.
7. Danh sách các hành trình được hướng dẫn bởi một hướng dẫn viên kém (hướng dẫn
viên không thông thạo ít nhất một địa điểm trong hành trình).

77
78
CHƯƠNG 5.
PHỤ THUỘC HÀM VÀ DẠNG CHUẨN
Chương này sẽ giới thiệu nguyên lý thiết kế về phụ thuộc hàm và các dạng chuẩn hóa cơ sở
dữ liệu. Phụ thuộc hàm (functional dependency) dùng để biểu diễn một cách hình thức các
ràng buộc toàn vẹn. Phụ thuộc hàm có tầm quan trọng rất lớn trong việc giải quyết các bài
toán tìm khóa, phủ tối thiểu và chuẩn hóa cơ sở dữ liệu. Nội dung chương bao gồm:
● Khái niệm về phụ thuộc hàm.
● Bao đóng của phụ thuộc hàm.
● Các thuật toán tìm khóa.
● Ràng buộc toàn vẹn
● Các dạng chuẩn của lược đồ quan hệ.

79
1. PHỤ THUỘC HÀM
1.1 Khái niệm
Cho lược đồ quan hệ 𝑄(𝐴1 , 𝐴2 , … , 𝐴𝑛 ); 𝑋, 𝑌 là hai tập con khác rỗng của 𝑄+ . 𝑋 xác định 𝑌
(hay 𝑌 phụ thuộc vào 𝑋) nếu 𝑟 là một quan hệ nào đó trên 𝑄,
∀ 𝑡1 , 𝑡2 ∈ 𝑅, 𝑡1 . 𝑋 = 𝑡2 . 𝑋 ⇒ 𝑡1 . 𝑌 = 𝑡2 . 𝑌
Ký hiệu cho vấn đề trên là 𝑋 → 𝑌 và gọi đó là một phụ thuộc hàm (functional dependency).
Phụ thuộc hàm là một loại ràng buộc toàn vẹn rất quan trọng để phát hiện các thiết kế cơ sở
dữ liệu tốt, có thể biểu diễn ràng buộc toàn vẹn bằng phụ thuộc hàm dựa trên ngữ nghĩa của
môi trường ứng dụng hay các quy tắc. Quy tắc sử dụng gồm:
● Ký hiệu 𝐹 để chỉ tập các phụ thuộc hàm được xác định trên một lược đồ quan hệ 𝑄;
vì 𝑄 hữu hạn nên 𝐹 cũng hữu hạn.
● Phần diễn giải/mô tả (còn được gọi là tân từ) của lược đồ quan hệ là thông tin duy
nhất để dựa vào đó chúng ta xác định đúng các phụ thuộc hàm cho một lược đồ quan
hệ.
Ví dụ 5.1: Cho quan hệ lược đồ quan hệ 𝑄 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸 ), 𝑟 là quan hệ xác định trên 𝑄 được
thể hiện như Bảng 5-1

Bảng 5-1: Bảng thể hiện của 𝒓

A B C D E
𝑎1 𝑏1 𝑐1 𝑑1 𝑒1
𝑎1 𝑏2 𝑐2 𝑑2 𝑒1
𝑎2 𝑏1 𝑐3 𝑑3 𝑒1
𝑎2 𝑏1 𝑐4 𝑑3 𝑒1
𝑎1 𝑏2 𝑐3 𝑑2 𝑒1

Những phụ thuộc hàm nào sau đây là thỏa với 𝑟?


● 𝐴→ 𝐵
● 𝐴, 𝐵 → 𝐷
● 𝐸→ 𝐴
● 𝐴→ 𝐸
Theo định nghĩa giới thiệu tại phần trên, các phụ thuộc hàm thỏa là: 𝐴, 𝐵 → 𝐷 và 𝐴 → 𝐸
• 𝐴, 𝐵 → 𝐷 thỏa vì khi có thông tin của 𝐴 kết hợp cùng với thông tin của 𝐵 sẽ xác
định được giá trị của 𝐷. Giả sử 𝐴 là 𝑎1 , 𝐵 là 𝑏1 thì suy ra 𝐷 mang giá trị 𝑑1 ; 𝐴 là 𝑎1
và 𝐵 là 𝑏2 thì suy ra 𝐷 mang giá trị 𝑑2 ; 𝐴 là 𝑎2 và 𝐵 là 𝑏1 thì suy ra 𝐷 mang giá trị
𝑑3 .
80
• Tương tự, phụ thuộc hàm 𝐴 → 𝐸 cũng thỏa đối với quan hệ 𝑟 vì tương ứng với thông
tin của 𝐴 sẽ suy ra được giá trị của 𝐸, ở đây 𝐸 cùng mang giá trị bằng 𝑒1 tương ứng
với mọi giá trị của 𝐴 trong quan hệ.
Các phụ thuộc hàm không thỏa trong quan hệ 𝑟 là: 𝐴 → 𝐵 và 𝐸 → 𝐴.
• Xét phụ thuộc hàm 𝐴 → 𝐵 theo bộ dữ liệu như bảng 5-1 thì A cùng mang giá trị
bằng 𝑎1 có thể suy ra được giá trị của B bằng 𝑏1 hoặc 𝑏2 nên 𝐴 → 𝐵 không phải là
phụ thuộc hàm của quan hệ.
• Xét phụ thuộc hàm 𝐸 → 𝐴 cùng giá trị 𝐸 bằng 𝑒1 có thể suy ra giá trị của A là 𝑎1
hoặc 𝑎2 , điều này không đúng với định nghĩa nên phụ thuộc hàm 𝐸 → 𝐴 không thỏa
trong quan hệ.
Ví dụ 5.2: Tìm phụ thuộc cho quan hệ sau:
GIANGVIEN(MAGV, HOTEN, NGAYSINH, GIOITINH, HOCVI, CHUCVU,
MAKHOA)

Bảng 5-2: Bảng thể hiện quan hệ GIANGVIEN

MAGV HOTEN NGAYSINH GIOITINH HOCVI CHUCVU MAKHOA

GV001 Nguyễn Ngọc Hoàng 1970 Nam Tiến sĩ Trưởng Khoa CNTT

GV002 Đào Ngọc Mỹ 1971 Nữ Thạc sĩ Phó bộ môn CNTP

GV003 Hoàng Lê Nguyên 1985 Nam Trưởng Khoa KTCK

GV004 Hà Thanh Hùng 1990 Nam Thạc sĩ CNTT

GV005 Nguyễn Thị Hương 1986 Nữ Thạc sĩ Phó Khoa CNTP

GV006 Hồ Thị Minh Anh 1996 Nữ Thạc sĩ QLCN

GV007 Nguyễn Hải An 1982 Nam DIDT

Xét quan hệ GIANGVIEN (MAGV, HOTEN, NGAYSINH, GIOITINH, HOCVI,


CHUCVU, MAKHOA). Quan hệ này có khóa là MAGV, nghĩa là từ MAGV có thể xác
định tất cả các dữ liệu của giảng viên dựa trên bảng lược đồ quan hệ bao gồm họ tên, ngày
sinh, giới tính, học vị, chức vụ và mã khoa mà giảng viên đang làm việc. Hay chúng ta có
thể phát biểu lại như sau:
• MAGV xác định HOTEN hay HOTEN phụ thuộc hàm vào MAGV
• MAGV xác định NGAYSINH hay NGAYSINH phụ thuộc hàm vào MAGV
• MAGV xác định GIOITINH hay GIOITINH phụ thuộc hàm vào MAGV
• MAGV xác định HOCVI hay HOCVI phụ thuộc hàm vào MAGV
• MAGV xác định CHUCVU hay CHUCVU phụ thuộc hàm vào MAGV
• MAGV xác định MAKHOA hay MAKHOA phụ thuộc hàm vào MAGV
81
Những phụ thuộc hàm trên được biểu diễn bằng ký hiệu:
• MAGV → HOTEN
• MAGV → NGAYSINH
• MAGV → GIOITINH
• MAGV → HOCVI
• MAGV → CHUCVU
• MAGV → MAKHOA
1.2 Phụ thuộc hàm hiển nhiên
Phụ thuộc hàm 𝑋 → 𝑌 với 𝑋 ⊇ 𝑌 được gọi là phụ thuộc hàm hiển nhiên.
Quy ước về cách trình bày phụ thuộc hàm:
● Chỉ cần mô tả các phụ thuộc hàm không hiển nhiên trong tập 𝐹’; còn các phụ thuộc
hàm hiển nhiên thì được hiểu là đã có trong tập 𝐹.
● Nếu thuộc tính chỉ có một ký tự duy nhất thì việc có ghi dấu phẩy ở giữa các thuộc
tính hay không là không quan trọng.
● Nếu tập phụ thuộc hàm có nhiều phụ thuộc hàm, thì các phụ thuộc hàm được liệt kê
cách nhau bởi dấu chấm phẩy, riêng phụ thuộc hàm cuối không cần dấu chấm phẩy.
● Tập phụ thuộc hàm, tập các thuộc tính được liệt kê giữa hai dấu ngoặc {}. Tuy
nhiên, trong nhiều trường hợp các thuộc tính được liệt kê mà không cần có cặp dấu
{} nhưng phải đảm bảo người đọc không hiểu sai ý nghĩa.
1.3 Phụ thuộc hàm nguyên tố
Phụ thuộc hàm 𝑋 → 𝑌 được gọi là phụ thuộc hàm nguyên tố (hay 𝑌 được gọi là phụ thuộc
hàm đầy đủ vào 𝑋) nếu 𝑋 ′ ⊂ 𝑋 không có phụ thuộc hàm 𝑋 ′ → 𝑌.
Như vậy đối với quan hệ GIANGVIEN trong ví dụ 5.2 các phụ thuộc hàm MAGV →
HOTEN, MAGV → NGAYSINH, MAGV → GIOITINH, MAGV → HOCVI, MAGV →
CHUCVU, MAGV → MAKHOA là các phụ thuộc hàm nguyên tố.
Ví dụ 5.3: Xét quan hệ
BANGLUONG (MASBL, MAGV, HESOLUONG, PHUCAP, NGAYVAOLAM)
và các phụ thuộc hàm như sau:
● {MASBL, MAGV} → HESOLUONG
● {MASBL, MAGV} → PHUCAP
● {MASBL, MAGV} → NGAYVAOLAM
HESOLUONG, PHUCAP phụ thuộc đầy đủ vào vào thuộc tính khóa {MASBL, MAGV}

82
nhưng NGAYVAOLAM phụ thuộc vào MAGV (là một thuộc tính khóa) nhưng không phụ
thuộc đầy đủ vào khóa {MASBL, MAGV}.
Như vậy trên một lược đồ quan hệ có thể tồn tại nhiều loại phụ thuộc hàm.
1.4 Tính chất của phụ thuộc hàm
Để có thể tìm thêm các phụ thuộc hàm khác từ tập phụ thuộc hàm đã được xác định; cần
dùng các luật sau đây (còn gọi là hệ luật dẫn Armstrong):
Với 𝑋, 𝑌, 𝑍, 𝑊 ⊆ 𝑄 +
(i). Luật phản xạ (reflexivity)
𝑋⊇𝑌⇒ 𝑋→ 𝑌
(ii). Luật tăng trưởng (augmentation)
𝑋 → 𝑌 ⇒ 𝑋𝑍 → 𝑌𝑍
(iii). Luật bắc cầu (transitivity)
𝑋 → 𝑌; 𝑌 → 𝑍 ⇒ 𝑋 → 𝑍
Các luật (i), (ii), (iii) được chứng minh dựa vào định nghĩa của phụ thuộc hàm. Từ ba luật
trên, chúng ta chứng minh được các luật sau:
(iv). Luật hợp (the union rule)
𝑋 → 𝑌; 𝑋 → 𝑍 ⇒ 𝑋 → 𝑌𝑍
(v). Luật bắt cầu giả (the pseudotransitivity rule)
𝑋 → 𝑌; 𝑊𝑌 → 𝑍 ⇒ 𝑋𝑊 → 𝑍
(vi). Luật phân rã (the decomposition rule)
𝑋 → 𝑌; 𝑍 ⊆ 𝑌 ⇒ 𝑋 → 𝑍
2. BAO ĐÓNG
2.1 Bao đóng của tập phụ thuộc hàm
Bao đóng (closure) của tập phụ thuộc hàm 𝐹 (ký hiệu là 𝐹 ′ ) là tập tất cả các phụ thuộc hàm
có thể suy ra từ 𝐹 dựa vào các luật dẫn Armstrong.
Một số tính chất liên quan tập 𝐹 + bao gồm:
(i). Tính phản xạ:
𝐹 ⊆ 𝐹+
(ii). Tính đơn điệu:
Nếu 𝐹 ⊆ 𝐺 thì 𝐹 + ⊆ 𝐺 +
(iii). Tính lũy đẳng:
𝐹 ++ = 𝐹 +
2.2 Bao đóng của tập thuộc tính
83
Cho lược đồ quan hệ 𝑄 và 𝐹 là tập các phụ thuộc hàm định nghĩa trên 𝑄, 𝑋 ⊆ 𝑄 + . Bao
đóng của tập thuộc tính 𝑋 đối với tập phụ thuộc 𝐹 ký hiệu là 𝑋 + (nói rõ hơn là 𝑋𝐹+ ) là tập
hợp tất cả các thuộc tính 𝐴 ∈ 𝑄+ được suy ra từ 𝑋 dựa vào các phụ thuộc hàm trong 𝐹 và
hệ luật dẫn Armstrong, nghĩa là 𝑋 + = {𝐴: 𝐴 ∈ 𝑄 + 𝑣à 𝑋 → 𝐴 ∈ 𝐹 + }.
Sau đây là một số tính chất liên quan đến tập 𝑋 + :
● 𝑋 ⊆ 𝑋+
● 𝑋 ⊆ 𝑌 ⇒ 𝑋+ ⊆ 𝑌+
● 𝑋 ++ = 𝑋 +
● (𝑋𝑌 )+ ⊇ 𝑋 + 𝑌 +
● (𝑋 + 𝑌 )+ = (𝑋𝑌 + )+ = (𝑋 + 𝑌 + )+
● 𝑋 → 𝑌 ∈ 𝐹+ ⇔ 𝑌 ⊆ 𝑋+
● 𝑋 → 𝑌 ⇔ 𝑌+ ⊆ 𝑋+
2.3 Bài toán thành viên
Vấn đề nảy sinh khi nghiên cứu lý thuyết cơ sở dữ liệu là: cho trước tập các phụ thuộc hàm
𝐹 và một phụ thuộc hàm 𝑓, bài toán kiểm tra phụ thuộc hàm 𝑓: 𝑋 → 𝑌 có thuộc vào tập 𝐹 +
hay không được gọi là bài toán thành viên.
Bài toán thành viên thuộc loại bài toán khó vì 𝐹 dù rất nhỏ nhưng 𝐹 + khó liệt kê được tất
cả các phần tử. Tuy nhiên, chúng ta có thể giải bài toán thành viên bằng cách tính 𝑋 + và so
sánh 𝑋 + với tập 𝑌. Dựa vào tính chất 𝑋 → 𝑌 ∈ 𝐹 + ⇔ 𝑌 ⊆ 𝑋 + trên câu trả lời 𝑋 → 𝑌 ∈
𝐹 + có thể xác định được. Nghĩa là việc giải bài toán thành viên sẽ được chuyển thành giải
bài toán tìm bao đóng của thuộc tính.
2.4 Thuật toán tìm bao đóng

Bước 1:
𝑋+ = 𝑋
Bước 2:
● ∀ 𝑓 ∈ 𝐹+
− Áp dụng luật phản hồi và luật cộng trên 𝑓
− Thêm các phụ thuộc hàm kết quả vào 𝐹 +
● ∀ 𝑓1 , 𝑓2 ∈ 𝐹+
Nếu 𝑓1 , 𝑓2 có thể kết nối lại bằng luật bắt cầu thì phụ thuộc hàm kết quả được
thêm vào 𝐹 +
Bước 3: Nếu 𝐹 + thay đổi, quay lại bước 2; ngược lại, dừng thuật toán.

Thuật toán trên có độ phức tạp là 𝑂(𝑛2 ); trong đó 𝑛 là số thuộc tính của quan hệ 𝑄.
84
Ví dụ 5.4: Cho lược đồ quan hệ 𝑄 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐺, 𝐻 ) và tập phụ thuộc hàm 𝐹.
𝐹 = { 𝑓1 : 𝐵 → 𝐴;
𝑓2 : 𝐷, 𝐴 → 𝐶, 𝐸;
𝑓3 : 𝐷 → 𝐻;
𝑓4 : 𝐺, 𝐻 → 𝐶;
𝑓5 : 𝐴, 𝐶 → 𝐷}
Tìm bao đóng của tập 𝑋 = {𝐴, 𝐶 } dựa trên 𝐹.
Hướng dẫn thực hiện:
𝑋 + = 𝐴, 𝐶
Do 𝑓1 , 𝑓2 , 𝑓3 , 𝑓4 không thỏa, 𝑓5 thỏa: 𝑋 + = 𝐴, 𝐶, 𝐷
Lặp lại bước 2: 𝑓1 không thỏa, 𝑓2 thỏa: 𝑋 + = 𝐴, 𝐶, 𝐷, 𝐸
𝑓3 thỏa: 𝑋 + = 𝐴, 𝐶, 𝐷, 𝐸, 𝐻
Đến bước này thì không có phụ thuộc hàm nào làm thay đổi 𝑋 + nữa, thuật toán dừng
và kết quả của 𝑋 + = 𝐴, 𝐶, 𝐷, 𝐸, 𝐻.
2.5 Thuật toán tìm bao đóng của tập thuộc tính X
Ký hiệu: 𝑋𝐹+
Định nghĩa:
𝑋𝐹+ = {𝑌|𝑋 → 𝑌 được suy dẫn từ 𝐹 } là tập hợp những vế phải của phụ thuộc hàm có vế
trái là 𝑋 nằm trong 𝐹.
Thuật toán:

Bước 1:
𝑋𝐹+ = 𝑋
Bước 2:
Nếu có 𝑓: 𝑈 → 𝑉 ∈ 𝐹 ∧ (𝑈 ⊆ 𝑋𝐹+ ) thì 𝑋𝐹+ = 𝑋𝐹+ ∪ 𝑉
Bước 3: Nếu 𝑋𝐹+ = 𝑅 + hoặc không thể thay đổi nữa thì thuật toán dừng lại; ngược lại,
trở về bước 2

Ví dụ 5.5: Cho lược đồ quan hệ 𝑄 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹 ) và tập phụ thuộc hàm 𝐹.


𝐹 = { 𝑓1 : 𝐴, 𝐵 → 𝐶;
𝑓2 : 𝐵, 𝐶 → 𝐴, 𝐷;
𝑓3 : 𝐷 → 𝐸;
𝑓4 : 𝐶, 𝐹 → 𝐵}
Tìm bao đóng của các tập thuộc tính 𝐴𝐵𝐹+ dựa trên 𝐹.
Hướng dẫn thực hiện:
𝐴𝐵𝐹+ = 𝐴, 𝐵
85
Lặp lại bước 2, 𝑓1 thỏa: 𝐴𝐵𝐹+ = 𝐴, 𝐵, 𝐶
𝑓2 thỏa: 𝐴𝐵𝐹+ = 𝐴, 𝐵, 𝐶, 𝐷
𝑓3 thỏa: 𝐴𝐵𝐹+ = 𝐴, 𝐵, 𝐶, 𝐷, 𝐸
Do tìm bao đóng của thuộc tính 𝐴, 𝐵 không chứa 𝐹 đến bước này thuật toán dừng và
kết quả trả về là 𝐴𝐵𝐹+ = 𝐴, 𝐵, 𝐶, 𝐷, 𝐸.
Ví dụ 5.6: Cho lược đồ quan hệ 𝑄 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹 ) và tập phụ thuộc hàm 𝐹.
𝐹 = { 𝑓1 : 𝐴, 𝐵 → 𝐶;
𝑓2 : 𝐵, 𝐶 → 𝐴, 𝐷;
𝑓3 : 𝐷 → 𝐸;
𝑓4 : 𝐶, 𝐹 → 𝐵}
Kiểm tra phụ thuộc hàm 𝐴, 𝐵 → 𝐷 có suy dẫn từ 𝐹 không?
Hướng dẫn thực hiện:
𝐴𝐵𝐹+ = 𝐴, 𝐵, 𝐶, 𝐷, 𝐸
D có xuất hiện trong bao đóng
Từ đó, chúng ta kết luận 𝐴, 𝐵 → 𝐷 suy dẫn từ F.
3. THUẬT TOÁN TÌM KHÓA
3.1 Khóa của lược đồ quan hệ
Cho quan hệ 𝑄(𝐴1 , 𝐴2 , … , 𝐴𝑛 ), tập phụ thuộc hàm 𝐹 định nghĩa trên 𝑄 và 𝐾 ⊆ 𝑄 + . 𝐾 là
một khóa của quan hệ (relation key) 𝑄 nếu thỏa đồng thời hai điều kiện sau:
(i). 𝐾 → 𝑄+ ∈ 𝐹 + hay 𝐾𝐹+ = 𝑄 +
(𝐾 chỉ thỏa điều kiện 𝑖 thì 𝐾 được gọi là siêu khóa).
(ii). Không tồn tại 𝐾 ′ ⊂ 𝐾 sao cho 𝐾 ++ = 𝑄+
3.2 Thuật toán tìm khóa
3.2.1 Thuật toán cơ bản

Bước 1: Xác định tất cả các tập con của 𝑄+


Để xác định tất các các tập con của một lược đồ quan hệ 𝑄 (𝐴1 , 𝐴2 , … , 𝐴𝑛 ) ta lần lượt
duyệt qua tất cả 2𝑛 − 1 tập hợp con khác rỗng của 𝑄+ , kết quả tìm được giả sử là tập các
thuộc tính: 𝑆 = {𝑋1 , 𝑋2 , … 𝑋2𝑛−1 }
Bước 2: Tính 𝑋𝑖+
Bước 3: Nếu 𝑋𝑖+ = 𝑄 + thì 𝑋𝑖 là siêu khóa
Giả sử sau bước này có 𝑚 siêu khóa 𝑆 = (𝑆1 , 𝑆2 , … , 𝑆𝑚 )
Bước 4: Xây dựng tập chứa tất cả các khóa của 𝑄 từ tập 𝑆
Xét mọi cặp 𝑆𝑖 , 𝑆𝑗 ⊂ 𝑆 (𝑖 ≠ 𝑗), nếu 𝑆𝑖 ⊂ 𝑆𝑗 thì loại 𝑆𝑗 (𝑖, 𝑗 = 1 … 𝑚), kết quả còn lại
86
chính là khóa cần tìm.

Ví dụ 5.7: Tìm tất cả các khóa của lược đồ quan hệ 𝑄 và tập phụ thuộc hàm 𝐹 sau:
𝑄(𝐴, 𝐵, 𝐶 ) và 𝐹 = {𝐴 → 𝐵; 𝐴 → 𝐶; 𝐵 → 𝐴}
Hướng dẫn thực hiện:
Các tập con của lược đồ quan hệ 𝑄: {𝐴}, {𝐵}, {𝐶 }, {𝐴, 𝐵}, {𝐴, 𝐶 }, {𝐵, 𝐶 }, {𝐴, 𝐵, 𝐶 }

Bảng 5-3: Bảng ví dụ về thuật toán tìm khóa đơn cơ bản

𝑿𝒊 𝑿+
𝒊 Siêu khóa Khóa

𝐴 𝑄+ 𝐴 𝐴

𝐵 𝑄+ 𝐵 𝐵

𝐶 -

𝐴, 𝐵 𝑄+ 𝐴, 𝐵

𝐴, 𝐶 𝑄+ 𝐴, 𝐶

𝐵, 𝐶 𝑄+ 𝐵, 𝐶

𝐴, 𝐵, 𝐶 𝑄+ 𝐴, 𝐵, 𝐶

Vậy lược đồ quan hệ 𝑄 có hai khóa là: {𝐴} và {𝐵}


3.2.2 Thuật toán cải tiến
Khi 𝑛 đủ lớn thì phép duyệt để tìm ra tất cả các tập con của tập 𝑄+ là không thể thực hiện,
thuật toán cải tiến sau đây phần nào giải quyết được nhược điểm trên.
Tập nguồn (TN): được định nghĩa là tập chứa tất cả các thuộc tính có xuất hiện ở vế trái
mà không xuất hiện ở vế phải của bất kỳ một phụ thuộc hàm nào. Những thuộc tính không
tham gia vào bất kỳ một phụ thuộc hàm nào (kể cả bên trái và bên phải) thì cũng được tính
là thuộc tính nguồn theo thuật toán cải tiến này.
Tập trung gian (TG): được định nghĩa là tập chứa tất cả các thuộc tính vừa tham gia vào
vế trái vừa tham gia vào vế phải của bất kỳ phụ thuộc hàm nào.

Dữ liệu vào: Lược đồ quan hệ 𝑄 và tập phụ thuộc hàm 𝐹


Dữ liệu ra: Tất cả các khóa của quan hệ
Bước 0: Tìm tập TN, tập TG
if (𝑇𝐺 ≠ 𝜙) {
Khóa chính là tập TN.
Kết thúc
else qua bước 1;
87
Bước 1: Tìm tất cả các tập con của tập TG, gọi đó là tập 𝑋𝑖
Bước 2: Tính TN ∪ 𝑋𝑖 ;
Bước 3: Tính (TN ∪ 𝑋𝑖 )+ ;
Bước 4: Tính TN ∪ 𝑋𝑖 = 𝑄 + thì TN ∪ 𝑋𝑖 là một siêu khóa của 𝑄. Giả sử sau bước này,
ta có 𝑚 siêu khóa: 𝑆 = {𝑆1 , 𝑆2 , … , 𝑆𝑚 }
Bước 5: Xây dựng tập chứa tất cả các khóa của 𝑄 từ tập 𝑆. Xét mọi cặp 𝑆𝑖 , 𝑆𝑗 ⊂ (𝑖 ≠ 𝑗),
nếu 𝑆𝑖 ⊂ 𝑆𝑗 thì ta loại 𝑆𝑗 (𝑖, 𝑗 = 1 … 𝑚), kết quả còn lại chính là tập tất cả các khóa cần
tìm.

Ví dụ 5.8: Tìm tất cả các khóa của lược đồ quan hệ 𝑄 và tập phụ thuộc hàm 𝐹 sau:
𝑄(𝐴, 𝐵, 𝐶 ) và 𝐹 = {𝐴 → 𝐵; 𝐴 → 𝐶; 𝐵 → 𝐴}
Hướng dẫn tìm khóa với thuật toán cải tiến:
TN = 𝜙
TG = {𝐴, 𝐵}
Gọi 𝑋𝑖 là các tập con của tập TG. Thuật toán cải tiến được thực hiện và minh họa tại
bảng 5-4.

Bảng 5-4: Bảng ví dụ về thuật toán tìm khóa đơn cơ bản

𝑿𝒊 (TN ∪ 𝑿𝒊 ) (TN ∪ 𝑿𝒊 )+ Siêu khóa Khóa

𝜙 𝜙 𝜙

𝐴 𝐴 𝑄+ 𝐴 𝐴

𝐵 𝐵 𝑄+ 𝐵 𝐵

𝐴, 𝐵 𝐴, 𝐵 𝑄+ 𝐴, 𝐵

Vậy lược đồ quan hệ 𝑄 có hai khóa là: {𝐴} và {𝐵}


Một điều cần lưu ý là thuật toán tìm khóa cơ bản tìm được tất cả siêu khóa và cả khóa, trong
khi thuật toán tìm khóa cải tiến tìm được tất cả các khóa nhưng không đảm bảo sẽ tìm được
tất cả các siêu khóa.
4. PHỦ TỐI THIỂU
4.1 Tập phụ thuộc hàm tương đương
Cho 𝐹 và 𝐺 là hai tập phụ thuộc hàm, 𝐹 và 𝐺 là hai phụ thuộc hàm tương đương (equivalent
fucntional dependency) và ký hiệu là 𝐹 + = 𝐺 + nếu và chỉ nếu mỗi phụ thuộc hàm thuộc 𝐹
đều thuộc 𝐺 + và mỗi phụ thuộc hàm thuộc 𝐺 đều thuộc 𝐹 + .
Hai tập phụ thuộc hàm F và G tương đương nếu 𝐹 + = 𝐺 +. Ký hiệu 𝐹  𝐺

88
Thuật toán kiểm tra hai phụ thuộc hàm tương đương bao gồm các bước sau:

Bước 1: Với mỗi phụ thuộc hàm 𝑋 → 𝑌 ∈ 𝐹, kiểm tra 𝑋 → 𝑌 có là thành viên của G
không.
Bước 2: Với mỗi phụ thuộc hàm 𝑋 → 𝑌 ∈ 𝐺, kiểm tra 𝑋 → 𝑌 có là thành viên của F
không.
Bước 3: Nếu cả bước 1 và 2 đều đúng thì kết luận 𝐹 ≡ 𝐺

Ví dụ 5.9: Cho lược đồ quan hệ 𝑄 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐺, 𝐻 ), thì hai tập phụ thuộc hàm 𝐹 và 𝐺 sau
(xác định trên 𝑄) là tương đương.

𝐹 = {𝐴 → 𝐵, 𝐶; 𝐺 = {𝐴 → 𝐵, 𝐶, 𝐸;
𝐴 → 𝐷; 𝐴 → 𝐴, 𝐵, 𝐷;
𝐶, 𝐷 → 𝐸} 𝐶, 𝐷 → 𝐸}

Cho biết 𝐹 và 𝐺 có tương đương không?


Hướng dẫn thực hiện:
Bước 1:
𝐴+ + +
𝐺 = 𝐴𝐵𝐶𝐷𝐸 ⇒ (𝐴 → 𝐵, 𝐶 ∈ 𝐺 ∧ 𝐴 → 𝐷 ∈ 𝐺 )

Phụ thuộc hàm 𝐶, 𝐷 → 𝐸 của tập 𝐹 cũng thuộc 𝐺


Như vậy, mọi phụ thuộc hàm trong 𝐹 đều là thành viên của 𝐺
Bước 2:

𝐹 = 𝐴𝐵𝐶𝐷𝐸 ⇒ (𝐴 → 𝐵, 𝐶, 𝐸 ∈ 𝐹 ∧ 𝐴 → 𝐴, 𝐵, 𝐷 𝐹 )
𝐴+ + +

Phụ thuộc hàm 𝐶, 𝐷 → 𝐸 của tập 𝐺 cũng thuộc 𝐹


Như vậy, mọi phụ thuộc hàm trong 𝐺 đều là thành viên của 𝐹
Bước 3: kết luận 𝐹 ≡ 𝐺
4.2 Phủ tối thiểu
4.2.1 Phụ thuộc hàm có thuộc tính vế trái dư thừa
Cho 𝐹 là tập các phụ thuộc hàm trên lược đồ quan hệ Q. Phụ thuộc hàm 𝑍 → 𝑌 ∈ 𝐹 là phụ
thuộc hàm có thuộc tính vế trái dư thừa nếu tồn tại 𝐴 ∈ 𝑍 mà 𝐹 = 𝐹 − (𝑍 → 𝑌 ) ∪
((𝑍 − 𝐴) → 𝑌)
Ngược lại 𝑍 → 𝑌 là phụ thuộc hàm có thuộc tính vế trái không dư thừa hay 𝑌 phụ thuộc đầy
đủ vào 𝑍. Phụ thuộc hàm 𝑍 → 𝑌 còn được gọi là phụ thuộc hàm đầy đủ.
Ví dụ 5.10: Cho lược đồ quan hệ 𝑅 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸 ) và tập phụ thuộc hàm
𝐹 = {𝐴 → 𝐵;
𝐵, 𝐶 → 𝐷;
𝐶 → 𝐷}
Phụ thuộc hàm 𝐴 → 𝐵, 𝐶 → 𝐷 là những phụ thuộc hàm đầy đủ.
89
Phụ thuộc hàm 𝐵, 𝐶 → 𝐷 là phụ thuộc hàm có thuộc tính vế trái 𝐵 dư thừa vì tồn tại thuộc
tính 𝐵 ∈ {𝐵, 𝐶 } mà (𝐹 − {𝐵, 𝐶 → 𝐷}) ∪ {𝐶 → 𝐷} tương đương với F.
Thuật toán sử dụng để tìm các phụ thuộc hàm đầy đủ tương ứng bằng cách loại bỏ các thuộc
tính dư thừa bao gồm các bước chính:

Với mỗi phụ thuộc hàm 𝑋 → 𝑌 ∈ 𝐹


Bước 1:
𝑋 = {𝐴1 , 𝐴2 , … , 𝐴𝑛 } (𝑛 ≥ 2, với 𝑛 = 1 thì 𝑋 → 𝑌 là đầy đủ)
Đặt 𝑍 = 𝑋
Bước 2: với mỗi 𝐴𝑖 thực hiện:
Đặt Temp = 𝑍\𝐴𝑖
Nếu Temp → 𝑌 ∈ 𝐹 + thì 𝑍 = Temp

4.2.2 Tập phụ thuộc hàm có vế phải một thuộc tính


Mỗi tập phụ thuộc hàm 𝐹 đều tương đương với một tập phụ thuộc hàm 𝐺 mà vế phải của
các phụ thuộc hàm thuộc 𝐺 chỉ gồm một thuộc tính.
Ví dụ 5.11: Cho lược đồ quan hệ 𝑅 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸 ) và các tập phụ thuộc hàm

𝐹 = {𝐴 → 𝐵, 𝐶; 𝐺 = {𝐴 → 𝐵;
𝐴 → 𝐷; 𝐴 → 𝐶;
𝐶, 𝐷 → 𝐸} 𝐴 → 𝐷;
𝐶, 𝐷 → 𝐸}

Tập G là tập phụ thuộc hàm có vế phải một thuộc tính và 𝐹 ≡ 𝐺


4.2.3 Phủ tối thiểu của tập phụ thuộc hàm
𝐹 được gọi là một tập phụ thuộc hàm tối thiểu nếu 𝐹 thỏa đồng thời ba điều kiện sau:
(i). Vế phải của 𝐹 chỉ có một thuộc tính
+
(ii). Không ∃𝑓: 𝑋 → 𝐴 và 𝑍 ⊂ 𝑋 mà 𝐹 + = (𝐹 – (𝑋 → 𝐴) ∪ (𝑍 → 𝐴))
+
(iii). Không ∃𝑓: 𝑋 → 𝐴 mà 𝐹 + = (𝐹 – (𝑋 → 𝐴))
Trong đó, vế phải của mỗi phụ thuộc hàm ở:
• Điều kiện (i) chỉ có một thuộc tính, nên bảo đảm không có thuộc tính nào ở vế phải
là dư thừa.
• Điều kiện (ii) bảo đảm không có thuộc tính nào tham gia vế trái của phụ thuộc hàm
là dư thừa.
• Điều kiện (iii) bảo đảm cho tập F không có một phụ thuộc hàm nào là dư thừa.
Một tập phụ thuộc hàm luôn tìm ra ít nhất một phủ tối thiểu và nếu thứ tự các phụ thuộc

90
hàm trong tập 𝐹 là khác nhau có thể sẽ thu được những phủ tối thiểu khác nhau.
Thuật toán tìm phủ tối thiểu của tập phụ thuộc hàm bao gồm các bước:

Thực hiện với mỗi phụ thuộc hàm 𝑋 → 𝑌 ∈ 𝐹


Bước 1: Loại các thuộc tính có vế trái dư thừa của mọi phụ thuộc hàm
Bước 2: Phân rã các phụ thuộc hàm có vế phải nhiều thuộc tính thành các phụ thuộc hàm
có vế phải một thuộc tính
Bước 3: Loại các phụ thuộc hàm dư thừa khỏi 𝐹

Ví dụ 5.12: Cho lược đồ quan hệ 𝑅 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐺, 𝐻 ) và tập phụ thuộc hàm 𝐹 như sau:
𝐹 = {𝐵 → 𝐴;
𝐷, 𝐴 → 𝐶, 𝐸;
𝐷 → 𝐻;
𝐺, 𝐻 → 𝐶;
𝐴, 𝐶 → 𝐷}
Hãy tìm phủ tối thiểu của 𝐹.
Hướng dẫn thực hiện:
Bước 1:
• Với 𝐷, 𝐴 → 𝐶, 𝐸
o Giả sử 𝐷 thừa thì 𝐴 → 𝐶, 𝐸 ∈ 𝐹 + khi đó 𝐴𝐹 + = 𝐴; 𝐶, 𝐸 ∉ 𝐴𝐹 + nên D không
thừa
o Giả sử 𝐴 thừa thì 𝐵 → 𝐶, 𝐸 ∉ 𝐹 + khi đó 𝐷𝐹 + = {𝐷, 𝐻 }; 𝐶, 𝐸 ∉ 𝐷𝐹 + nên 𝐴
không thừa
• Với 𝐺, 𝐻 → 𝐶
o Giả sử 𝐺 thừa thì 𝐻 → 𝐶 ∈ 𝐹 + khi đó 𝐻𝐹 + = 𝐻; 𝐶 ∉ 𝐻𝐹 + nên 𝐺 không thừa
o Giả sử 𝐻 thừa thì 𝐺 → 𝐶 ∈ 𝐹 + khi đó 𝐺𝐹 + = 𝐺; 𝐶 ∉ 𝐺𝐹 + nên 𝐻 không thừa
• Với 𝐴, 𝐶 → 𝐷
o Giả sử 𝐴 thừa thì 𝐶 → 𝐷 ∈ 𝐹 + khi đó 𝐶𝐹 + = 𝐶; 𝐷 ∉ 𝐶𝐹 + nên 𝐴 không thừa
o Giả sử 𝐶 thừa thì 𝐴 → 𝐷 ∈ 𝐹 + khi đó 𝐴𝐹 + = 𝐴; 𝐷 ∉ 𝐴𝐹 + nên 𝐶 không thừa
Vậy mọi phụ thuộc hàm đều là đầy đủ.
Bước 2: Phân rã vế phải ta có
𝐹 = { 𝐵 → 𝐴 ; 𝐷, 𝐴 → 𝐶; 𝐷, 𝐴 → 𝐸; 𝐷 → 𝐻; 𝐺, 𝐻 → 𝐶; 𝐴, 𝐶 → 𝐷}
Bước 3: Loại các phụ thuộc hàm dư thừa:
• Với 𝐵 → 𝐴: ta có 𝐵𝐹\{𝐵→𝐴}
+ +
= 𝐵, 𝐴 ∉ 𝐵𝐹\{𝐵→𝐴} nên 𝐵 → 𝐴 là không thừa

• Với 𝐷𝐴 → 𝐶: ta có 𝐷𝐴+ +
𝐹\{𝐷𝐴→𝐶} = 𝐷𝐴𝐸𝐻, 𝐶 ∉ 𝐷𝐴𝐹\{𝐷𝐴→𝐶} nên 𝐷𝐴 → 𝐶 là không
thừa
91
• Với 𝐷𝐴 → 𝐸: ta có 𝐷𝐴+ +
𝐹\{𝐷𝐴→𝐸} = 𝐷𝐴𝐶𝐻, 𝐸 ∉ 𝐷𝐴𝐹\{𝐷𝐴→𝐸} nên 𝐷𝐴 → 𝐸 là không
thừa
• Với 𝐷 → 𝐻: ta có 𝐷𝐹\{𝐷→𝐻}
+ +
= 𝐷, 𝐻 ∉ 𝐷𝐹\{𝐷→𝐻} nên 𝐷 → 𝐻 là không thừa

• Với 𝐺𝐻 → 𝐶: ta có 𝐺𝐻𝐹\{𝐺𝐻→𝐶}
+ +
= 𝐺𝐻, 𝐶 ∉ 𝐺𝐻𝐹\{𝐺𝐻→𝐶} nên 𝐺𝐻 → 𝐶 là không thừa

• Với 𝐴𝐶 → 𝐷: ta có 𝐴𝐶𝐹\{𝐴𝐶→𝐷}
+ +
= 𝐴𝐶, 𝐷 ∉ 𝐴𝐶𝐹\{𝐴𝐶→𝐷} nên 𝐴𝐶 → 𝐷 là không thừa
Vậy phủ tối thiểu của F:
PTT(𝐹) = { 𝐵 → 𝐴; 𝐷, 𝐴 → 𝐶; 𝐷, 𝐴 → 𝐸; 𝐷 → 𝐻; 𝐺, 𝐻 → 𝐶; 𝐴, 𝐶 → 𝐷}
5. RÀNG BUỘC TOÀN VẸN
5.1 Các yếu tố của ràng buộc toàn vẹn
Trong CSDL luôn tồn tại nhiều mối liên hệ giữa các thuộc tính, các bộ, các bảng với nhau.
Các mối liên hệ này là những điều kiện bất biến mà tất cả các bộ của những quan hệ có liên
quan đều phải thỏa mãn tại mọi thời điểm. Những điều kiện bất biến đó được gọi là ràng
buộc toàn vẹn.
Như định nghĩa tại Chương 2, RBTV đảm bảo tính nhất quán của dữ liệu, bảo đảm rằng dữ
liệu luôn biểu diễn đúng ngữ nghĩa trong thực tế.
Ví dụ như trong giao dịch chuyển tiền. Mỗi giao dịch thực hiện qua các bước: trừ tiền trong
tài khoản người gửi và thêm tiền vào tài khoản người nhận. Nếu cả hai bước đều thực hiện
thành công thì giao dịch hoàn tất ngược lại quay lui lại tình trạng trước khi thực hiện giao
dịch. Qua ví dụ trên thì giao dịch phải được thực hiện thành công ở cả hai bước hoặc không
thực hiện bước nào. Việc thực hiện này bảo đảm tính đắn của dữ liệu.
Mỗi RBTV bao gồm các yếu tố như bối cảnh, biểu diễn và tầm ảnh hưởng.
• Bối cảnh là một hay nhiều quan hệ cần phải sử dụng để kiểm tra RBTV. Nói cách
khác bối cảnh của RBTV là những quan hệ có khả năng bị vi phạm RBTV khi thực
hiện các thao tác cập nhật dữ liệu (thêm, xóa, sửa các bộ).
• Biểu diễn là điều kiện hay nội dung của RBTV. Điều kiện được kiểm tra trên mọi
thay đổi của thể hiện của các quan hệ cơ sở. Điều kiện của một RBTV có thể được
biểu diễn bằng nhiều cách khác nhau, chẳng hạn như ngôn ngữ tự nhiên, ngôn ngữ
hình thức (thuật toán, đại số quan hệ, …).
Một RBTV bị vi phạm có thể được xử lý bằng cách thông báo cho người sử dụng về
việc vi phạm hoặc hệ thống từ chối thực hiện các thao tác cập nhật dữ liệu và thông
báo cho người sử dụng biết các quan hệ và các bước bị từ chối cập nhật.
• Tầm ảnh hưởng: trong quá trình phân tích thiết kế CSDL, chúng ta cần phải lập lập
bảng tầm ảnh hưởng cho RBTV nhằm xác định thời điểm cần kiểm tra RBTV và các
quan hệ cần phải kiểm tra. Một bảng tầm ảnh hưởng của một RBTV thường có dạng
sau

92
Bảng 5-5: Bảng tầm ảnh hưởng của một RBTV

Tên RBTV Thêm Xóa Sửa

𝑅1 + - + (A)

𝑅2 + - + (B)

… … … …

𝑅𝑛 - - +

Các ký hiệu trong bảng 5-5 lần lượt có các ý nghĩa sau: dấu + thể hiện thao tác có
thể gây vi phạm RBTV, dấu – thể hiện thao tác không vi phạm RBTV. Trường hợp +(A)
và các trường hợp tương tự cho biết thao tác có thể gây vi phạm trên thuộc tính chỉ định
trong dấu ngoặc đơn.
5.2 Các loại ràng buộc toàn vẹn
Trong quá trình phân tích thiết kế CSDL, yêu cầu cần thiết là phải tìm được những RBTV
tiềm ẩn trong CSDL. Việc phân loại RBTV cho phép người phân tích tìm kiếm đầy đủ,
tránh bỏ sót những RBTV. Các loại RBTV có thể đượ phân thành hai dạng chính là RBTV
có bối cảnh là một quan hệ và RBTV có bối cảnh là nhiều quan hệ.
5.2.1 Ràng buộc toàn vẹn có bối cảnh là một quan hệ
RBTV có bối cảnh là một quan hệ được chia thành ba loại: RBTV miền giá trị, RBTV liên
bộ và RBTV liên thuộc tính.
RBTV miền giá trị quy định rõ về miền giá trị của một thuộc tính.
Ví dụ 5.13: Mỗi đề tài thực hiện thì kinh phí dành cho đề tài đó không được vượt quá 5 triệu
đồng.
• Bối cảnh: quan hệ DETAI (MaDT, TenDT, KinhPhi, NgayBD, NgayDKKT,
NgayKT, TongDiem, KetQua, MaHD)
• Biểu diễn: ∀ dt ∈ DETAI (dt.KinhPhi ≤ 5)
• Bảng tầm ảnh hưởng

RB1 Thêm Xóa Sửa

DETAI + - +(KinhPhi)

Ví dụ 5.14: Thang điểm của mỗi đề tài là thang điểm 100.


• Bối cảnh: quan hệ DETAI (MaDT, TenDT, KinhPhi, NgayBD, NgayDKKT,
NgayKT, TongDiem, KetQua, MaHD)
• Biểu diễn: ∀ dt ∈ DETAI (dt.TongDiem ≤ 100 ∧ dt.TongDiem ≥ 0)
• Bảng tầm ảnh hưởng
93
RB2 Thêm Xóa Sửa

DETAI + - +(TongDiem)

RBTV liên thuộc tính quy định các ràng buộc giữa các thuộc tính khác nhau trong cùng
một quan hệ.
Ví dụ 5.15: Ngày dự kiến kết thúc và ngày kết thúc thực hiện đề tài phải bằng hoặc sau ngày
bắt đầu đề tài.
• Bối cảnh: quan hệ DETAI (MaDT, TenDT, KinhPhi, NgayBD, NgayDKKT,
NgayKT, TongDiem, KetQua, MaHD)
• Biểu diễn:
∀ dt ∈ DETAI (dt.NgayBD ≤ dt.NgayDKKT ∧ dt.NgayBD ≤ dt.NgayKT)
• Bảng tầm ảnh hưởng

RB3 Thêm Xóa Sửa

DETAI + - +(NgayBD, NgayDKKT, NgayKT)

RBTV liên bộ quy định sự tồn tại của một hoặc nhiều bộ phụ thuộc vào sự tồn tại của một
hoặc nhiều bộ khác trong cùng quan hệ.
Ví dụ 5.16: Ví dụ về RBTV khóa chính là RBTV liên bộ là “Mỗi đề tài có một mã duy nhất
để phân biệt với các đề tài khác”
• Bối cảnh: quan hệ DETAI (MaDT, TenDT, KinhPhi, NgayBD, NgayDKKT,
NgayKT, TongDiem, KetQua, MaHD)
• Biểu diễn:
∀ dt1, dt2 ∈ DETAI (dt1 ≠ dt2 ⇒ (dt1.MaDT ≠ dt2.MaDT))
• Bảng tầm ảnh hưởng

RB4 Thêm Xóa Sửa

DETAI + - +(MaDT)

Ví dụ 5.17: Ví dụ về RBTV về số lượng các bộ trong một quan hệ là “Mỗi giảng viên tại
hướng dẫn không quá 2 đề tài một năm”.
• Bối cảnh: quan hệ DETAI (MaDT, TenDT, KinhPhi, NgayBD, NgayDKKT,
NgayKT, TongDiem, KetQua, MaHD)
• Biểu diễn:

∀dt ∈ DETAI: ℑCOUNT(MaDT) (𝜎dt.MaHD=MaHD∧YEAR(dt.NgayBD)=YEAR(NgayBD) (DETAI)) ≤ 2

94
Với YEAR() là hàm lấy ra năm của các giá trị của thuộc tính tương ứng trong dấu ngoặc
đơn.
• Bảng tầm ảnh hưởng

RB5 Thêm Xóa Sửa

DETAI + - +(MaHD, NgayBD)

5.2.2 Ràng buộc toàn vẹn có bối cảnh là nhiều quan hệ


RBTV có bối cảnh là nhiều quan hệ được chia thành năm loại: RBTV tham chiếu, RBTV
liên bộ - liên quan hệ, RBTV liên thuộc tính - liên quan hệ, RBTV do thuộc tính tổng hợp
và RBTV do chu trình.
RBTV tham chiếu quy định giá trị xuất hiện của một tập thuộc tính trong một quan hệ phải
xuất hiện trong một tập thuộc tính trong một quan hệ khác. RBTV này còn được gọi là
RBTV tham chiếu, RBTV phụ thuộc tồn tại hay RBTV khóa ngoại.
Ví dụ 5.18: Một giảng viên phải thuộc về một khoa, nghĩa là trong quan hệ GIANGVIEN,
nếu một mã khoa (MaKhoa) mà giảng viên trực thuộc xuất hiện, thì mã khoa này phải xuất
hiện trong quan hệ KHOA, cụ thể là thuộc tính (MaKhoa). Như vậy:
• Bối cảnh: GIANGVIEN, KHOA
• Biểu diễn:

∀gv ∈ GIANGVIEN: ((gv.MaKhoa ≠ 𝑁𝑈𝐿𝐿) ∧ (∃k ∈ KHOA (gv.MaKhoa = k.MaKhoa)))

• Bảng tầm ảnh hưởng

RB6 Thêm Xóa Sửa

GIANGVIEN + - +(MaKhoa)

KHOA - + +(MaKhoa)

RBTV liên bộ - liên quan hệ quy định về từng nhóm các bộ của nhiều quan hệ bối cảnh
khác nhau.
Ví dụ 5.19: Mỗi đề tài (DETAI) phải có ít nhất một sinh viên tham gia thực hiện nghĩa là
mỗi đề tài phải có ít nhất một chi tiết đề tài (CTDT). Như vậy:
• Bối cảnh: DETAI, CTDT
• Biểu diễn: ∀dt ∈ DETAI: (∃ctdt ∈ CTDT (ct.MaDT = ctdt.MaDT))
• Bảng tầm ảnh hưởng

RB7 Thêm Xóa Sửa

DETAI + - +(MaDT)

95
CTDT - + +(MaDT)

RBTV liên thuộc tính - liên quan hệ quy định về mối liên hệ giữa các thuộc tính trên nhiều
quan hệ bối cảnh khác nhau.
Ví dụ 5.20: Ngày vào làm của một giảng viên phải lớn hơn ngày sinh.
• Bối cảnh: GIANGVIEN, BANGLUONG
• Biểu diễn:
∀gv ∈ GIANGVIEN:
(∀ bl ∈ BANGLUONG (gv.MaGV = bl.MaGV ⇒ gv.NgaySinh < bl.NgayVaoLam))

• Bảng tầm ảnh hưởng

RB8 Thêm Xóa Sửa

GIANGVIEN + - +(MaGV, NgaySinh)

BANGLUONG + - +(MaGV, NgayVaoLam)

RBTV do thuộc tính tổng hợp quy định về mối liên hệ giữa các thuộc tính do sự có mặt
của thuộc tính tính toán.
Ví dụ 5.21: Số lượng giảng viên của khoa bằng số lượng giảng viên làm việc ở khoa đó.
• Bối cảnh: KHOA, GIANGVIEN
• Biểu diễn:
∀k ∈ KHOA: (∃gv ∈ GIANGVIEN (k.MaKhoa = gv.MaKhoa ⇒ k.SLGV = COUNT(gv.MaKhoa))

• Bảng tầm ảnh hưởng

RB9 Thêm Xóa Sửa

KHOA + - +(MaKhoa, SLGV)

GIANGVIEN + + +( MaKhoa)

RBTV có chu trình xảy ra khi có sự hiện diện của chu trình. Để nhận diện chu trình, người
ta biểu diễn lược đồ CSDL với các quy ước sau:

Nút thể hiện lược đồ


SINHVIEN

Nút thuộc tính kết MaKhoa = MaKhoa

96
Cung nối giữa nút lược đồ và nút thuộc
tính kết

Ví dụ 5.22: Mỗi sinh viên chỉ tham gia đề tài do giảng viên khoa mình hướng dẫn.
• Bối cảnh: KHOA, GIANGVIEN
• Biểu diễn:
Đồ thị thể hiện chu trình như sau:

• Bảng tầm ảnh hưởng

RB10 Thêm Xóa Sửa

GIANGVIEN - + +(MaGV, MaKhoa)

DETAI - + +(MaDT, MaHD)

CTDT + - +(MaDT, MaSV)

SINHVIEN + - +(MaSV, MaKhoa)

6. DẠNG CHUẨN CỦA LƯỢC ĐỒ QUAN HỆ


6.1 Sự cần thiết chuẩn hoá dữ liệu
Khi thực hiện các phép lưu trữ trên các quan hệ chưa được chuẩn hoá thường xuất hiện các
dị thường thông tin. Nghĩa là trong dữ liệu lưu trữ, sự dư thừa, mất dữ liệu, mâu thuẫn hay
không nhất quán dữ liệu có thể xẩy ra khi cập nhật, bổ sung hay sửa đổi dữ liệu. Dị thường
thông tin là nguyên nhân gây cản trở cho việc tìm kiếm, hỏi đáp thông tin. Mục tiêu của
chuẩn hoá dữ liệu là triệt tiêu mức cao nhất khả năng xuất hiện các dị thường thông tin khi
thực hiện các phép lưu trữ. Có như vậy mục tiêu của các hệ cơ sở mới được bảo đảm. Dữ
liệu lưu trữ phản ánh thế giới hiện thực khách quan, đầy đủ hơn và sinh động hơn.

97
Hình 5-1: Mối quan hệ giữa các lớp dạng chuẩn lược đồ quan hệ
Khi thiết kế và cài đặt các hệ CSDL, chuẩn hoá là quá trình khảo sát danh sách các thuộc
tính và áp dụng tập các quy tắc phân tích vào danh sách đó, biến đổi chúng thành nhiều tập
nhỏ hơn sao cho:
• Tối thiểu việc lặp lại.
• Tránh dị thường thông tin.
• Xác định và giải quyết được sự không rõ ràng, nhập nhằng trong suy diễn.
Quá trình chuẩn hoá là quá trình tách lược đồ quan hệ về một nhóm tương đương các lược
đồ quan hệ chiếu sao cho khi kết nối tự nhiên không làm tổn thất thông tin và bảo toàn được
các phụ thuộc hàm. Cơ sở chuẩn hoá dựa trên các khái niệm về phụ thuộc hàm, phụ thuộc
đầy đủ, khoá, các thuộc tính không khoá... Một mô hình được xem là mô hình chuẩn hoá
tốt, lý tưởng là mô hình ở đó mỗi một thuộc tính không khoá phụ thuộc hàm vào khoá.
Quan hệ chuẩn hoá là những quan hệ mà mỗi giá trị thuộc tính trong bộ là những thuộc tính
nguyên tố, không phân chia ra được. Nói cách khác, phần tử trong quan hệ chỉ có đúng một
giá trị chứ không phải là một tập các giá trị.
Trước khi trình bày chi tiết các dạng chuẩn, chúng ta tìm hiểu các khái niệm thuộc tính khóa
và giá trị nguyên tố.
• Thuộc tính khóa: cho lược đồ quan hệ 𝑄(𝐴1 , 𝐴2 , … , 𝐴𝑛 ) khi đó thuộc tính B được
gọi là thuộc tính khóa nếu B là một thuộc tính thành phần trong một khóa nào đó
của Q; ngược lại B được gọi là thuộc tính không khóa.
Ví dụ 5.23: Cho lược đồ quan hệ 𝑅(𝐴, 𝐵, 𝐶, 𝐷) và tập phụ thuộc hàm 𝐹 = {𝐴, 𝐵 → 𝐶; 𝐵 →
𝐷; 𝐵, 𝐶 → 𝐴}
Với dữ kiện trên, lược đồ có 02 khóa là AB, BC. Khi đó A, B, C là thuộc tính khóa
và D là thuộc tính không khóa.
• Giá trị nguyên tố: là giá trị không phân nhỏ được nữa.
Ví dụ 5.24: Ví dụ các giá trị của thuộc tính ChiTietMua bao gồm: “Bánh Orion 1 gói, Kẹo
mút 2 cây” không phải là giá trị nguyên tố vì có thể phân thành: tên hàng, số lượng, đơn vị
tính.
98
Để minh họa cho các ví dụ trong chương này, các lược đồ quan hệ được sử dụng bao gồm
DSLOP và KHACHTHUEPHONG. Trong đó:
• DSLOP (TenLop, SiSo, TenHS1, DiemM11, …)
Dữ liệu mỗi lớp được ghi nhận tại một dòng trong bảng. Mỗi lớp gồm tên lớp
(TENLOP), sĩ số (SISO), tên của các sinh viên (TenHS1, TenHS2, …), điểm của 05
môn mà sinh viên đã học (Diem11, Diem12, …). Số lượng sinh viên ghi nhận của
mỗi lớp sẽ không giống nhau và phụ thuộc vào sĩ số. Thể hiện của quan hệ DSLOP
được minh họa ở Bảng 5-6.

Bảng 5-6: Bảng ví dụ thể hệ của quan hệ DSLOP

TENLOP SISO TENHS1 DIEM11 ... DIEM15 TENHS2 DIEM21 ... DIEM25 ...

11A2 30 Nguyễn An 7 … 8 Trần Trung Tín 8 … 8 30 lần

12A1 28 Vũ Bình 10 … 6 Phan Thị Diên 6 … 6 28 lần

• KHACHTHUEPHONG (KhachID, KhachTen, PhongID, PhongDChi, NgayThue,


NgayTra, Gia, ChuID, ChuTen)
Dữ liệu của khách thuê phòng được ghi nhận bao gồm mã khách thuê phòng
(KhachID), họ tên khách thuê (KhachTen), các phòng mà người khách đã thuê
(PhongID), địa chỉ các phòng đã thuê (PhongDChi), các thời điểm đã thuê
(NgayThue), các thời điểm đã trả (NgayTra), giá của các phòng đã thuê (Gia), mã
của các chủ phòng thuê (ChuID), họ tên của các chủ phòng thuê (ChuTen). Mỗi dòng
dữ liệu ghi nhận thông tin của một khách thuê và chi tiết của tất cả các lần mà người
đó đã thuê. Thể hiện của quan hệ KHACHTHUEPHONG được minh họa trong Bảng
5-7.

Bảng 5-7: Bảng ví dụ thể hiện quan hệ KHACHTHUEPHONG

KHACHID KHACHTEN PHONGID PHONGDCHI NGAYTHUE NGAYTRA GIA CHUID CHUTEN

PG04 6 Tầm Vu 1/6/03 31/08/04 350 CO40 Trần Lê


CR76 Nguyễn Ân
PG16 5 Nguyễn Trãi 1/9/04 1/9/05 450 CO93 Nguyễn Sĩ

Trần Lê
PG06 6 Tầm Vu 1/9/02 10/6/03 350 CO40

CR56 Phan Thị Bình


PG36 2 Hòa Bình 10/10/03 1/12/04 375 CO93 Nguyễn Sĩ

PG16 5 Nguyễn Trãi 1/11/05 10/8/06 450 CO93 Nguyễn Sĩ

Theo dữ liệu ở Bảng 5-6 thì lược đồ quan hệ DSLOP không chuẩn vì có chứa giá trị lặp lại
nhiều lần và có trường giá trị kép. Theo các thể hiện ở Bảng 5-7 thì lược đồ quan hệ
KHACHTHUEPHONG không chuẩn vì giá trị ở một số trường không là giá trị nguyên tố.
6.2 Một số dạng chuẩn cơ sở dữ liệu
6.2.1 Dạng chuẩn 1 – 1NF (First Normal Form)
99
Lược đồ quan hệ 𝑆 = < 𝐸, 𝐹 > được gọi là đạt dạng chuẩn 1 – 1NF, khi và chỉ khi các
thuộc tính chỉ chứa các giá trị nguyên tố (giá trị nguyên tố là giá trị không thể tách).
Biến đổi một lược đồ quan hệ không chuẩn UNF thành một lược đồ quan thỏa dạng chuẩn
1 (1NF) bằng những cách: Biến đổi các thuộc tính chứa giá trị kép thành giá trị nguyên tố
hoặc tách quan hệ để khắc phục hiện tượng giá trị thuộc tính bị lặp lại.
Ví dụ 5.25: UNF → 1NF bằng phương pháp tách quan hệ danh sách lớp (DSLOP) được
phân chia thành 2 lược đồ quan hệ: danh sách học sinh (DSHOCSINH) và điểm học sinh
(DIEMHOCSINH)

Bảng 5-8: Bảng ví dụ thể hệ quan hệ DSHOCSINH

TENLOP SISO TENHS

11A2 30 Nguyễn An

11A2 30 Trần Trung Tín

12A1 28 Vũ Bình

12A1 28 Phan Thị Diên

Bảng 5-9: Bảng ví dụ thể hệ quan hệ DIEMHOCSINH

TENLOP TENHS MON DIEM

11A2 Nguyễn An Văn 7

11A2 Nguyễn An Toán 7

11A2 Trần Trung Tín Văn 8

11A2 Trần Trung Tín Toán 7

12A1 Vũ Bình Toán 10

12A1 Phan Thị Diên Lý 6

Ví dụ 5.26: UNF → 1NF bằng phương pháp Biến đổi giá trị thành nguyên tố

Bảng 5-10: Bảng ví dụ tách giá trị nguyên tố của quan hệ KHACHTHUEPHONG

KHACHID KHACHTEN PHONGID PHONGDCHI NGAYTHUE NGAYTRA GIA CHUID CHUTEN

CR76 Nguyễn Ân PG04 6 Tầm Vu 10/6/03 31/08/04 350 CO40 Trần Lê

CR76 Nguyễn Ân PG16 5 Nguyễn Trãi 1/9/04 1/9/05 450 CO93 Nguyễn Sĩ

CR56 Phan Thị Bình PG04 6 Tầm Vu 1/9/02 1/6/03 350 CO40 Trần Lê

100
KHACHID KHACHTEN PHONGID PHONGDCHI NGAYTHUE NGAYTRA GIA CHUID CHUTEN

CR56 Phan Thị Bình PG36 2 Hòa Bình 10/10/03 1/12/04 375 CO93 Nguyễn Sĩ

CR56 Phan Thị Bình PG16 5 Nguyễn Trãi 1/11/05 10/8/06 450 CO93 Nguyễn Sĩ

Tiếp tục tiến hành tách lược đồ quan hệ KHACHTHUEPHONG thành 2 lược đồ quan hệ:
khách (KHACH) và thuê phòng (THUEPHONG).

Bảng 5-11: Bảng ví dụ thể hiện quan hệ KHACH

KHACHID KHACHTEN

CR76 Nguyễn Ân

CR56 Phan Thị Bình

Bảng 5-12: Bảng ví dụ thể hiện quan hệ THUEPHONG

KHACHID PHONGID PHONGDCHI NGAYTHUE NGAYTRA GIA CHUID CHUTEN

CR76 PG04 6 Tầm Vu 10/6/03 31/08/04 350 CO40 Trần Lê

CR76 PG16 5 Nguyễn Trãi 1/9/04 1/9/05 450 CO93 Nguyễn Sĩ

Trần Lê
CR56 PG04 6 Tầm Vu 1/9/02 1/6/03 350 CO40

CR56 PG36 2 Hòa Bình 10/10/03 1/12/04 375 CO93 Nguyễn Sĩ

CR56 PG16 5 Nguyễn Trãi 1/11/05 10/8/06 450 CO93 Nguyễn Sĩ

Các quan hệ chuẩn hoá thường là các lược đồ quan hệ dạng chuẩn 1NF. Tuy nhiên, cấu trúc
biểu diễn dữ liệu trong các lược đồ quan hệ dạng 1NF còn nhiều điều hạn chế chẳng hạn
như khi thao tác thực hiện các phép chèn thêm, sửa đổi hay bổ sung cập nhật dữ liệu thường
xuất hiện dị thường thông tin và là điều không thể chấp nhận được trong quá trình tìm kiếm.
6.2.2 Dạng chuẩn 2 – 2NF (Second Normal Form)
Lược đồ quan hệ 𝑆 = < 𝐸, 𝐹 > được gọi là dạng chuẩn 2NF, khi và chỉ khi nó là đạt dạng
chuẩn 1NF và các thuộc tính không khoá phụ thuộc hàm đầy đủ vào khoá. Nói cách khác,
nếu 𝑆 = < 𝐸, 𝐹 > là dạng chuẩn 1NF và không tồn tại các phụ thuộc hàm 𝑋 → 𝑌 ∈ 𝐹 + ,
với 𝐹 + là bao đóng của phụ thuộc hàm 𝐹, sao cho 𝑋 là tập con thực sự của khóa và 𝑌 là
thuộc tính không khóa.
Thuật toán kiểm tra lược đồ quan hệ thỏa dạng chuẩn 2 với các bước cụ thể như sau:

Bước 1: Tìm mọi khóa của 𝑆


Bước 2: Với mỗi khóa K, tìm bao đóng của tập tất cả các tập con thực sự 𝑋𝑖 của K
101
Bước 3: Nếu tồn tại bao đóng 𝑋𝑖+ chứa thuộc tính không khóa thì 𝑆 không đạt dạng chuẩn
2, ngược lại 𝑆 đạt dạng chuẩn 2.

Ví dụ 5.27: Cho lược đồ quan hệ Q1 (A, B, C, D) và tập phụ thuộc hàm 𝐹 = {𝐴 → 𝐵; 𝐵 →


𝐷, 𝐶}. Lược đồ chỉ có một khóa là A, nên mọi thuộc tính đều phụ thuộc đầy đủ vào khóa.
Do đó chúng ta có thể kết luận Q1 đạt dạng chuẩn 2.
Ví dụ 5.28: Cho lược đồ quan hệ Q2 (A, B, C, D) và tập phụ thuộc hàm 𝐹 = {𝐴, 𝐵 → 𝐷; 𝐶 →
𝐷}, trong đó D là thuộc tính không khóa (nghĩa là thuộc tính D không phụ thuộc đầy đủ vào
khóa. Do đó Q2 không đạt dạng chuẩn 2.
Ví dụ 5.29: Xét quan hệ lược đồ thuê phòng (THUEPHONG)
Khóa của quan hệ này là: KHACHID, PHONGID. Các phụ thuộc hàm tìm được bao gồm:
• KhachID, PhongID → PhongDChi, NgayThua, NgayTra, Gia, ChuID, ChuTen
• PhongID → PhongDChi, ChuID, ChuTen
Lược đồ quan hệ THUEPHONG không đạt dạng chuẩn 2 vì thuộc tính PhongDChi, ChuID,
ChuTen là thuộc tính không khóa chỉ phụ thuộc vào PhongID hay không phụ thuộc đầy đủ
vào khóa.
Để khắc phục những bất lợi trên, lược đồ quan hệ THUEPHONG được tách thành 02 lược
đồ quan hệ phòng (PHONG) và thuê (THUE) như minh họa trong Bảng 5-13 và Bảng 5-
14.

Bảng 5-13: Bảng ví dụ thể hiện quan hệ PHONG

PHONGID PHONGDCHI GIA CHUID CHUTEN

PG04 6 Tầm Vu 350 CO40 Trần Lê

PG16 5 Nguyễn Trãi 450 CO93 Nguyễn Sĩ

PG36 2 Hòa Bình 375 CO93 Nguyễn Sĩ

Bảng 5-14: Bảng ví dụ thể hiện quan hệ THUE

KHACHID PHONGID NGAYTHUE NGAYTRA

CR76 PG04 10/6/03 31/08/04

CR76 PG16 1/9/04 1/9/05

CR56 PG04 1/9/02 1/6/03

CR56 PG36 10/10/03 1/12/04

102
KHACHID PHONGID NGAYTHUE NGAYTRA

CR56 PG16 1/11/05 10/8/06

Mặc dù lược đồ quan hệ ban đầu khách thuê phòng (KHACHTHUEPHONG) thành 3 lược
đồ quan hệ: KHACH, PHONG, THUE nhưng thông tin vẫn còn bị trùng lắp.
6.2.3 Dạng chuẩn 3 - 3NF (Third Normal Form)
Lược đồ quan hệ 𝑆 = < 𝐸, 𝐹 > được gọi là dạng chuẩn 3NF, khi và chỉ khi không tồn tại
phụ thuộc hàm 𝑋 → 𝑌 ∈ 𝐹 + sao cho 𝑋 + ≠ 𝐸, 𝑌 ∉ 𝑋 và 𝑌 là thuộc tính không khóa. Nói
cách khác nếu 𝑋 + ≠ 𝐸, 𝑌 ∉ 𝑋 thì khi đó hoặc 𝑋 là khóa của lược đồ quan hệ hoặc Y là
một thuộc tính của khóa.
Trong lược đồ 2NF, tất cả các thuộc tính không phải khóa thì không được phụ thuộc vào
các tập con thực sự của khóa. Trong dạng chuẩn 3NF, các thuộc tính không phải là khoá thì
không được phụ thuộc hàm vào tất cả các tập thuộc tính có bao đóng khác 𝐸.
Từ một lược đồ quan hệ 2NF nhưng không đạt dạng 3NF được biến đổi thành một họ tương
đương các lược đồ quan hệ dạng 3NF. Quá trình chuyển đổi là quá trình khả nghịch, do đó
không làm mất thông tin trong quá trình chuyển đổi. Các lược đồ quan hệ kết quả sau biến
đổi được gọi là các lược đồ quan hệ chiếu. Nhóm các lược đồ quan hệ chiếu tương đương
với lược đồ quan hệ ban đầu theo nghĩa là lược đồ quan hệ ban đầu có thể nhận được bằng
cách thực hiện các phép kết nối các lược đồ quan hệ chiếu tương ứng. Như vậy quá trình
biến đổi sẽ không làm mất thông tin. Thông tin của lược đồ quan hệ ban đầu có thể nhận
được từ các lược đồ quan hệ chiếu.
Thuật toán kiểm tra lược đồ quan hệ thỏa dạng chuẩn 3

Bước 1: Tìm mọi khóa của 𝑆


Bước 2: Phân rã vế phải của mọi phụ thuộc hàm trong 𝐹 để tập 𝐹 trở thành tập phụ thuộc
hàm có vế phải một thuộc tính
Bước 3: Nếu mọi phụ thuộc hàm 𝑋 → 𝐴 ∈ 𝐹 mà 𝐴 ∉ 𝑋 đều thỏa:
(1) 𝑋 là siêu khóa (vế trái chứa một khóa), hoặc
(2) 𝐴 là thuộc tính khóa (vế phải là tập con của khóa)
thì 𝑆 đạt dạng chuẩn 3, ngược lại 𝑆 không đạt dạng chuẩn 3.

Ví dụ 5.30: Cho 𝑄(𝐴, 𝐵, 𝐶, 𝐷) và tập phụ thuộc hàm 𝐹 = {𝐴, 𝐵 → 𝐷; 𝐶 → 𝐷}. Lược đồ
quan hệ Q có thỏa dạng chuẩn 3 không?
• Bước 1: 𝑄 có một khóa là ABC
• Bước 2: Mọi phụ thuộc hàm trong 𝐹 đều đã có vế phải một thuộc tính
• Bước 3: Với 𝐴, 𝐵 → 𝐷 và 𝐷 ∉ {𝐴, 𝐵, 𝐶} thì vế trái {A, B} không là siêu khóa và vế
phải {D} không là thuộc tính khóa.

103
Vì vậy, 𝑆 không đạt dạng chuẩn 3.
Ví dụ 5.31: Xét quan hệ phòng (PHONG)
Khóa của PHONG: PHONGID. Phụ thuộc hàm tìm được
• PHONGID → PHONGDCHI, GIA, CHUID, CHUTEN
• PHONGID → CHUTEN
• PHONGID → CHUID
• CHUID → CHUTEN và phụ thuộc hàm này dẫn đến đến tình huống phụ thuộc hàm
bắc cầu vào khóa.
Hướng giải quyết: Tách quan hệ Phòng thành 2 quan hệ: Phòng (PHONG) và chủ
(CHU)

Bảng 5-15: Bảng ví dụ quan hệ PHONG

PHONGID PHONGDCHI GIA CHUID

PG04 6 Tầm Vu 350 CO40

PG16 5 Nguyễn Trãi 450 CO93

PG36 2 Hòa Bình 375 CO93

Bảng 5-16: Bảng quan hệ CHU

CHUID CHUTEN

CO40 Trần Lê

CO93 Nguyễn Sĩ

6.2.4 Dạng chuẩn BC (Boyce-Codd Normal Form)


Khái niệm lược đồ quan hệ 1NF và 2NF là những khái niệm trung gian trên chặng đường
đạt 3NF. Tuy nhiên với khái niệm 3NF chưa thoả mãn cho các trường hợp lược đồ quan hệ
có hơn một khoá, đặc biệt các trường hợp khoá giao nhau. Heath là người đầu tiên, sau đó
Boyce Codd đã đưa ra định nghĩa dạng chuẩn Boyce Codd có thể thoả mãn các yêu cầu
trên. Khái niệm dạng chuẩn Boyce Codd không dựa vào các khái niệm dạng chuẩn 1 và 2,
tức là không dựa vào các khái niệm về phụ thuộc hàm đầy đủ và phụ thuộc bắc cầu.
Dạng chuẩn BC có thể được định nghĩa như sau: lược đồ quan hệ 𝑆 = < 𝐸, 𝐹 > được gọi
là lược đồ dạng chuẩn Boyce - Codd (BCNF), nếu với mọi phụ thuộc 𝑋 → 𝑌 ∈ 𝐹 + , thì khi
đó hoặc 𝑌 ⊆ 𝑋 (phụ thuộc tầm thường), hoặc 𝑋 là một khoá của lược đồ quan hệ. Tức là
nếu 𝑋 → 𝑌 ∈ 𝐹 + , 𝑌 ⊄ 𝑋 thì 𝑋 + = 𝐸. Từ định nghĩa trên chúng ta có thể suy ra rằng:

104
• Các thuộc tính không khoá phụ thuộc hoàn toàn vào khoá.
• Các thuộc tính khoá phụ thuộc hoàn toàn vào tất cả khoá khác. Có thể định nghĩa
cách khác như sau: 𝑆 = < 𝐸, 𝐹 > được gọi là dạng chuẩn Boyce Codd, khi và chỉ
khi mọi định thuộc là khoá của lược đồ quan hệ.
Các khẳng định sau là tương đương:
• Nếu 𝑋 → 𝑌 ∈ 𝐹 + , 𝑌 ⊄ 𝑋 khi đó X là khóa của lược đồ quan hệ.
• Nếu 𝑋 → 𝑌 ∈ 𝐹 + , 𝑌 ⊄ 𝑋 khi đó 𝑋 + = 𝐸
• Mọi định thuộc là khoá của lược đồ quan hệ. 𝑋 là định thuộc khi và chỉ khi tồn tại
𝑌 ⊂ 𝐸 sao cho 𝑋 → 𝑌 ∈ 𝐹 + là phụ thuộc đầy đủ.
Định nghĩa dạng chuẩn 3 và BC giống nhau trừ mệnh đề “hoặc Y là một thuộc tính của
khóa”. Điều này có nghĩa là nếu lược đồ quan hệ BCNF thì cũng là 3NF. Trong định nghĩa
3NF, loại trừ các thuộc tính không khóa phụ thuộc vào các thuộc tính có bao đóng khác E,
còn trong định nghĩa BCNF thì loại trừ tất cả các thuộc tính phụ thuộc vào các thuộc tính
có bao đóng khác E.
Các dạng chuẩn lược đồ quan hệ lồng nhau, nghĩa là nếu lược đồ quan hệ BCNF thì cũng
là 3NF, nếu đã là 3NF cũng là 2NF và nếu 2NF cũng là 1NF. Ký hiệu:
BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF
Thuật toán kiểm tra lược đồ quan hệ thỏa dạng chuẩn BC

Bước 1: Tìm mọi khóa của 𝑆


Bước 2: Phân rã vế phải của mọi phụ thuộc hàm trong 𝐹 để tập 𝐹 trở thành tập phụ thuộc
hàm có vế phải một thuộc tính
Bước 3: Nếu mọi phụ thuộc hàm 𝑋 → 𝐴 ∈ 𝐹 mà 𝐴 ∉ 𝑋 đều thỏa 𝑋 là siêu khóa (vế trái
chưa một khóa) thì 𝑆 đạt dạng chuẩn BC, ngược lại 𝑆 không đạt dạng chuẩn BC.

Ví dụ 5.32: Cho lược đồ quan hệ 𝑄 (𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐼} và phụ thuộc hàm 𝐹 = {𝐴, 𝐶, →


𝐸, 𝐵, 𝐼; 𝐶, 𝐸 → 𝐴, 𝐷}. Q đạt dạng chuẩn BC hay không?
• Bước 1: 𝑄 có hai khóa {𝐴𝐶𝐷, 𝐶𝐸 }
• Bước 2: Phân rã vế phải của các phụ thuộc hàm trong 𝐹, chúng ta thu được:
𝐹 = {𝐴, 𝐶, 𝐷 → 𝐸; 𝐴, 𝐶, 𝐷 → 𝐵; 𝐴, 𝐶, 𝐷 → 𝐼; 𝐶, 𝐸 → 𝐴; 𝐶, 𝐸 → 𝐷}
• Bước 3: Mọi phụ thuộc hàm trong 𝐹 đều có vế trái là một siêu khóa
Qua các bước chứng tỏ 𝑄 đạt dạng chuẩn BC.
Ví dụ 5.33: Giả sử mở rộng lược đồ quan hệ thuê (THUE) như sau:
THUE (KHACHID, PHONGID, NGAYTHUE, NGAYTRA, NHANVIENID)
với thể hiện được minh họa ở Bảng 5-17.

105
Bảng 5-17: Bảng ví dụ mở rộng quan hệ THUE

KHACHID PHONGID NGAYTHUE NGAYTRA NHANVIENID

CR76 PG04 10/6/03 31/08/04 SG37

CR76 PG16 1/9/04 1/9/05 SG24

CR56 PG04 1/9/02 1/6/03 SG37

CR56 PG36 10/10/03 1/12/04 PG36

CR56 PG16 1/11/05 10/8/06 SG24

Khóa: KHACHID, PHONGID. Các phụ thuộc hàm:


• KHACHID, PHONGID → NGAYTHUE, NGAYTRA, NHANVIENID
• NHANVIENID → PHONGID và phụ thuộc hàm này không chứa khóa.
Lược đồ quan hệ THUE không thỏa dạng chuẩn BC.
Hướng giải quyết: Tách quan hệ THUE thành 2 lược đồ quan hệ: phụ trách
(PHUTRACH) và Thuê (THUE)
Xác định là khóa:
• NHANVIENID, PHONGID
• KHACHID, PHONGID

Bảng 5-18: Bảng ví dụ quan hệ PHUTRACH

NHANVIENID PHONGID

SG37 PG04

SG24 PG16

SG05 PG36

Bảng 5-19: Bảng ví dụ quan hệ THUE

KHACHID PHONGID NGAYTHUE NGAYTRA

CR76 PG04 10/6/03 31/08/04

CR76 PG16 1/9/04 1/9/05

CR56 PG04 1/9/02 1/6/03

106
KHACHID PHONGID NGAYTHUE NGAYTRA

CR56 PG36 10/10/03 1/12/04

CR56 PG16 1/11/05 10/8/06

TÓM TẮT CHƯƠNG


Chương 5 cung cấp những kiến thức chuyên sâu về lý thuyết cơ sở dữ liệu quan hệ bao
gồm: phụ thuộc hàm, bao đóng, khóa, ràng buộc toàn vẹn và các dạng chuẩn hóa trong cơ
sở dữ liệu. Giúp cho người học có kỹ năng khi thiết kế cơ sở dữ liệu quan hệ phải chọn ra
một tập các lược đồ quan hệ tốt dựa trên một số tiêu chí nào đó bằng cách xác định các phụ
thuộc hàm dựa trên mối ràng buộc giữa các dữ liệu trong quan hệ. Ngoài ra, người học còn
có khả năng đánh giá một lược đồ cơ sở dữ liệu thỏa các dạng chuẩn nào theo quy định hoặc
giúp đưa một lược đồ cơ sở dữ liệu từ dạng chuẩn thấp lên dạng chuẩn cao hơn.
CÂU HỎI
1. Phụ thuộc hàm là gì? Phân biệt phụ thuộc hàm hiển nhiên và phụ thuộc hàm nguyên
tố.
2. Hãy cho biết các tính chất của phụ thuộc hàm.
3. Phân biệt bao đóng của tập phụ thuộc hàm và tập thuộc tính.
4. Mô tả các thuật toán tìm bao đóng.
5. Khóa của lược đồ quan hệ là gì? Mô tả thuật toán tìm khóa.
6. Các loại ràng buộc toàn vẹn là gì? Hãy mô tả các loại đó.
7. Chuẩn hóa lược đồ quan hệ là gì?
8. Mô tả các dạng chuẩn 1, 2, 3 và BC.

BÀI TẬP
1. Cho lược đồ quan hệ R(A, B, C, D, E, G) và tập phụ thuộc hàm:
𝐹 = {𝐴 → 𝐶; 𝐴 → 𝐸, 𝐺; 𝐵 → 𝐷; 𝐺 → 𝐸}
Tìm 𝐴𝐵𝐹+ , 𝐶𝐺𝐷𝐹+ , 𝐴+
𝐹

2. Cho lược đồ quan hệ R(A, B, C, D, E) và tập phụ thuộc hàm


𝐹 = {𝐵 → 𝐶; 𝐴, 𝐶 → 𝐷; 𝐷 → 𝐺; 𝐴, 𝐺 → 𝐸 }
• Cho biết 𝐴, 𝐶 → 𝐸 có thuộc 𝐹 + không?
• Cho biết 𝐵, 𝐷 → 𝐴, 𝐷 có thuộc 𝐹 + không?
3. Cho lược đồ quan hệ R(A, B, C, D, E, F, G, H, K, L, M) và tập phụ thuộc hàm:
𝐹 = {𝐴 → 𝐵; 𝐴, 𝐶 → 𝐷; 𝐹 → 𝐺; 𝐹, 𝐾 → 𝐿, 𝐸, 𝐻; 𝐸 → 𝐹, 𝐻}

107
• Tìm khóa của tập phụ thuộc hàm theo thuật toán tìm khóa.
• Tìm phủ tối thiểu.
4. Với hai bài toán tình huống là quản lý kết quả học tập của sinh viên mô tả cụ thể ở
bài tập 1 của chương 3 thì ngoại trừ các ràng buộc khoá chính và khoá ngoại, hãy
tìm tất cả các RBTV theo yêu cầu: bối cảnh, biểu diễn, tầm ảnh hưởng. Với những
RBTV tìm được, hãy phân ra theo từng loại RBTV.
5. Kiểm tra cơ sở dữ liệu quản lý đề tài nghiên theo cứu khoa học của sinh viên được
mô tả cụ thể trong phần phụ lục thỏa được dạng chuẩn nào? Giải thích?

108
PHỤ LỤC
Nhằm hỗ trợ cho sinh viên thực hiện đề tài nghiên cứu khoa học, đồng thời hỗ trợ các Phòng
có liên quan để quản lý thông tin đề tài thực hiện. Trường đại học X cần xây dựng ứng dụng
quản lý đề tài nghiên cứu khoa học của sinh viên tại Trường. Ứng dụng này có các lược đồ
quan hệ sau:
• KHOA (MAKHOA, TENKHOA, NAMTHANHLAP, TRGKHOA, SLGV)
Mỗi khoa có một mã khoa duy nhất (MAKHOA) để phân biệt các khoa khác. Mỗi
khoa xác định tên khoa (TENKHOA) không trùng nhau, năm thành lập của khoa
(NAMTHANHLAP) và trưởng khoa (TRGKHOA) của khoa. Trong đó TRGKHOA
lưu giữ MAGV đang làm trưởng khoa. Mỗi khoa có số lượng giảng viên (SLGV)
nhất định.
• GIANGVIEN (MAGV, HOTEN, NGAYSINH, GIOITINH, HOCVI, CHUCVU,
MAKHOA)
Mỗi giảng viên có một mã số duy nhất (MAGV) để phân biệt các giảng viên khác.
Mỗi giảng viên bao gồm các thông tin: họ tên (HOTEN), ngày sinh (NAMSINH),
giới tính (GIOITINH), học vị (HOCVI), chức vụ (CHUCVU) và thuộc về một khoa
quản lý (MAKHOA).
• SINHVIEN (MASV, HOTEN, NGAYSINH, LOP, QUEQUAN, MAKHOA)
Mỗi sinh viên có một mã số sinh viên duy nhất (MASV) để phân biệt các sinh viên
khác tại Trường. Mỗi sinh viên xác định họ và tên (HOTEN), ngày sinh
(NGAYSINH), lớp danh nghĩa (LOP), quê quán (QUEQUAN) và thuộc về một khoa
quản lý (MAKHOA). Lưu ý, một sinh viên có thể không thực hiện hoặc thực hiện
nhiều đề tài nghiên cứu khoa học.
• PHUHUYNH (HOTENPH, MASV, GIOITINH, SDTPH, QUANHE)
Mỗi sinh viên khi học tại Trường có lưu giữ thông tin của một phụ huynh đại diện.
Mỗi phụ huynh có họ tên phụ huynh (HOTENPH) và mã sinh viên (MASV) để phân
biệt các phụ huynh khác. Mỗi phụ huynh xác định thêm thông tin về giới tính
(GIOITINH) và mối quan hệ (QUANHE) với sinh viên.
• BANGLUONG (MASBL, MAGV, HESOLUONG, PHUCAP, LUONGCOBAN,
NGAYVAOLAM)
Mỗi bảng lương có một mã số bảng lương duy nhất (MASBL) để phân biệt với các
bảng lương khác. Mỗi bảng lương cho biết thông tin của một giảng viên (MAGV),
hệ số lương (HESOLUONG), phụ cấp (PHUCAP), lương cơ bản (LUONGCOBAN)
và ngày bắt đầu vào làm (NGAYVAOLAM).
• DETAI (MADT, TENDT, KINHPHI, NGAYBD, NGAYDKKT, NGAYKT,
TONGDIEM, KETQUA, MAHD)
109
Mỗi đề tài có một mã số đề tài duy nhất (MADT) để phân biệt với các đề tài khác.
Mỗi đề tài xác định tên đề tài (TENDT), kinh phí để thực hiện (KINHPHI), ngày bắt
đầu (NGAYBATDAU), ngày kết thúc (NGAYKETTHUC), tổng điểm
(TONGDIEM), kết quả (KETQUA) và do một giảng viên hướng dẫn (MAHD).
• CTDT (MACT, MADT, MASV, VAITRO)
Mỗi đề tài có một hoặc nhiều chi tiết đề tài. Mỗi chi tiết đề tài có một mã chi tiết duy
nhất (MACT) để phân biệt với các chi tiết đề tài khác. Mỗi một chi tiết đề tài xác
định thuộc của một đề tài (MADT), sinh viên thực hiện (MASV) và vai trò của sinh
viên (trưởng nhóm hoặc thành viên)

110
TÀI LIỆU THAM KHẢO
1. Abraham Silberschatz, Henry F. Korth, S. Sudarshan, Database System Concepts
(Mc Graw Hill, 2011)
2. Carlos Coronel, Steven Morris, Database Systems: Design, Implementation and
Management (Cengage, 2019)
3. Dương Tuấn Anh, Nguyễn Trung Trực, Hệ Cơ sở dữ liệu (NXB ĐH Quốc gia TP.
HCM, 2020)
4. Lê Văn Phùng, Cơ sở dữ liệu quan hệ và công nghệ phân tích - thiết kế (NXB
Thông tin và Truyền thông, 2018)
5. Mark L. Gillenson, Fundamentals of Database Management (Wiley, 2012)
6. Nguyễn Thị Thanh Huyền, Ngô Thị Bích Thủy, Giáo trình Cơ sở dữ liệu (NXB
Lao động - Xã Hội, 2019)
7. Phan Tấn Quốc, Nguyễn Thị Uyên Nhi, Giáo trình Cơ sở dữ liệu (NXB ĐH Quốc
gia TP. HCM, 2019)
8. Ramez Elmasri, Shamkant B. Navathe, Fundamentals of Database Systems
(Pearson, 2016)
9. Thomas M. Connolly, Carolyn E. Begg, Database Systems: A Practical Approach
to Design, Implementation, and Management (Pearson, 2015)

111

You might also like