Professional Documents
Culture Documents
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
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.
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.
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).
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.
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.
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ủ.
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-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-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
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
28
Hình 2-12: Tập thực thể yếu là tập PHUHUYNH
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ệ.
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, …)
35
HUONGDAN (MAGV, MADT, THOIGIAN)
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)
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))
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)
GIANGVIEN DETAI
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
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)))
44
Bảng 3-3: Bảng ví dụ về dữ liệu giảng viên
MAGV HOTEN
● 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
45
GV005 Nguyễn Thị Hương null
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
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
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)?
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:
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ả?
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
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
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
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
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
GV001 Nguyễn Ngọc Hoàng 1970 Nam Tiến sĩ Trưởng Khoa CNTT
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.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ệ 𝑄: {𝐴}, {𝐵}, {𝐶 }, {𝐴, 𝐵}, {𝐴, 𝐶 }, {𝐵, 𝐶 }, {𝐴, 𝐵, 𝐶 }
𝑿𝒊 𝑿+
𝒊 Siêu khóa Khóa
𝐴 𝑄+ 𝐴 𝐴
𝐵 𝑄+ 𝐵 𝐵
𝐶 -
𝐴, 𝐵 𝑄+ 𝐴, 𝐵
𝐴, 𝐶 𝑄+ 𝐴, 𝐶
𝐵, 𝐶 𝑄+ 𝐵, 𝐶
𝐴, 𝐵, 𝐶 𝑄+ 𝐴, 𝐵, 𝐶
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.
𝜙 𝜙 𝜙
𝐴 𝐴 𝑄+ 𝐴 𝐴
𝐵 𝐵 𝑄+ 𝐵 𝐵
𝐴, 𝐵 𝐴, 𝐵 𝑄+ 𝐴, 𝐵
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.
𝐹 = {𝐴 → 𝐵, 𝐶; 𝐺 = {𝐴 → 𝐵, 𝐶, 𝐸;
𝐴 → 𝐷; 𝐴 → 𝐴, 𝐵, 𝐷;
𝐶, 𝐷 → 𝐸} 𝐶, 𝐷 → 𝐸}
𝐹 = 𝐴𝐵𝐶𝐷𝐸 ⇒ (𝐴 → 𝐵, 𝐶, 𝐸 ∈ 𝐹 ∧ 𝐴 → 𝐴, 𝐵, 𝐷 𝐹 )
𝐴+ + +
𝐹 = {𝐴 → 𝐵, 𝐶; 𝐺 = {𝐴 → 𝐵;
𝐴 → 𝐷; 𝐴 → 𝐶;
𝐶, 𝐷 → 𝐸} 𝐴 → 𝐷;
𝐶, 𝐷 → 𝐸}
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:
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
𝑅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
DETAI + - +(KinhPhi)
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
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
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:
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
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
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))
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))
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:
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:
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.
TENLOP SISO TENHS1 DIEM11 ... DIEM15 TENHS2 DIEM21 ... DIEM25 ...
Trần Lê
PG06 6 Tầm Vu 1/9/02 10/6/03 350 CO40
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)
11A2 30 Nguyễn An
12A1 28 Vũ Bình
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
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).
KHACHID KHACHTEN
CR76 Nguyễn Ân
Trần Lê
CR56 PG04 6 Tầm Vu 1/9/02 1/6/03 350 CO40
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:
102
KHACHID PHONGID NGAYTHUE NGAYTRA
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
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)
CHUID CHUTEN
CO40 Trần Lê
CO93 Nguyễn Sĩ
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
105
Bảng 5-17: Bảng ví dụ mở rộng quan hệ THUE
NHANVIENID PHONGID
SG37 PG04
SG24 PG16
SG05 PG36
106
KHACHID PHONGID NGAYTHUE NGAYTRA
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 𝐴𝐵𝐹+ , 𝐶𝐺𝐷𝐹+ , 𝐴+
𝐹
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