Professional Documents
Culture Documents
CSDL
CSDL
(DATABASE)
Phụ thuộc hàm và khóa, các ràng buộc toàn vẹn, các dạng chuẩn, và
chuẩn hóa.
Tối ưu hóa câu hỏi truy vấn
2
TỔNG QUAN VỀ MÔN HỌC…
3
TÀI LIỆU THAM KHẢO
1. Đặng Thị Thu Hiền, Cơ sở dữ liệu, NXB Giao Thông Vận Tải, 2013.
2. Phạm Thị Hoàng Nhung, Cơ sở dữ liệu I, Trường Đại học Thuỷ Lợi.
3. Phạm Thị Hoàng Nhung, Cơ sở dữ liệu II, Trường Đại học Thuỷ Lợi.
4
ĐỀ CƯƠNG TỔNG QUAN MÔN HỌC
Số tiết
Thảo Tiểu
TT Tên chương Tổng Lý
luận, BT, luận,
số thuyết
TH KTra
TỔNG QUAN HỆ THỐNG CƠ SỞ DỮ
1 2 2
LIỆU
2 GIỚI THIỆU THIẾT KẾ CƠ SỞ DỮ LIỆU 5 3 2
3 MÔ HÌNH QUAN HỆ 8 6 2
4 SQL 14 8 6
5 PHỤC THUỘC HÀM VÀ KHÓA 7 5 2
6 DẠNG CHUẨN VÀ CHUẨN HÓA 9 6 3
Cộng: 45 30 15
5
BÀI TẬP LỚN
Định dạng trang: Đầu cuối trang 2cm, lề trái 3.5, lề phải 2.
6
BÀI TẬP LỚN …
Nội dung báo cáo:
Lời nói đầu
Mục lục: yêu cầu đánh mục lục tự động
I. Xác định các quy tắc/ràng buộc, xây dựng mô hình thực thể liên kết ER
II. Chuyển từ mô hình thực thể liên kết sang mô hình quan hệ
III. Xác định khóa
IV. Chuẩn hóa lược đồ quan hệ thành dạng chuẩn 3NF hoặc BCNF
V. Câu lệnh truy vấn dữ liệu SQL
Kết luận
Tài liệu tham khảo
7
ĐÁNH GIÁ MÔN HỌC
8
Chương 1
DỮ LIỆU
9
TỔNG QUAN VỀ HỆ CSDL
System)
Mô hình dữ liệu (Data model)
10
1. SỰ CẦN THIẾT CỦA CSDL
11
1. SỰ CẦN THIẾT CỦA CSDL…
Hệ thống các file cổ điển: Được tổ chức riêng rẽ, phục vụ cho
12
1. SỰ CẦN THIẾT CỦA CSDL…
Hệ thống file là sự cải tiến của hệ thống thủ công (manual system)
Ưu điểm: Đơn giản, nhanh chóng
Nhược điểm:
Thông tin được tổ chức riêng rẽ nhiều nơi làm mất tính nhất quán, dư thừa dữ
liệu.
Thiếu sự chia sẻ thông tin giữa các vị trí.
Không thực hiện được truy vấn phức tạp
Quản trị hệ thống khó và phức tạp
Khó mở rộng khi lập trình
Khó thay đổi cấu trúc.
Tính năng bảo mật thấp.
13
2. CƠ SỞ DỮ LIỆU (DATABASE), HỆ CSDL
14
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…
15
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…
16
2. CƠ SỞ DỮ LIỆU, HỆ CSDL …
17
2. CƠ SỞ DỮ LIỆU, HỆ CSDL …
Thủ tục: Những quy tắc chung trong việc thiết kế và sử dụng hệ thống
Dữ liệu: Những dữ liệu thực tế thu thập và lưu trữ trong CSDL
18
2. CƠ SỞ DỮ LIỆU, HỆ CSDL …
Chú ý:
CSDL phải là một tập hợp các thông tin mang tính hệ thống
chứ không phải là các thông tin rời rạc, không có mối quan hệ
với nhau.
Các thông tin này phải có cấu trúc và tập hợp các thông tin này
phải có khả năng đáp ứng các nhu cầu khai thác của nhiều
19
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…
20
2. CƠ SỞ DỮ LIỆU, HỆ CSDL…
21
2. CÁC ĐỐI TƯỢNG SỬ DỤNG CSDL
22
3. HỆ QUẢN TRỊ CSDL - DBMS (DATABASE
MANAGEMENT SYSTEM)
giải quyết các vấn đề như tính chủ quyền, cơ chế bảo
mật/phân quyền khai thác CSDL, giải quyết tranh chấp, và
phục hồi dl khi có sự cố ...
Một số DBMS: Visual FoxPro, MicroSoft Access, SQL-
23
3. HỆ QUẢN TRỊ CSDL - DBMS …
24
3. HỆ QUẢN TRỊ CSDL - DBMS …
1990 bắt đầu xây dựng các DBMS hướng đối tượng (Oriented
hướng đối tượng thuần nhất là ODMG ra đời vào năm 1996.
25
3. HỆ QUẢN TRỊ CSDL - DBMS …
26
3. HỆ QUẢN TRỊ CSDL - DBMS …
1) Ngôn ngữ giao tiếp giữa người sử dụng (NSD) và CSDL, gồm:
Ngôn ngữ mô tả dữ liệu (Data Definition Language - DDL).
Ngôn ngữ truy vấn dữ liệu, hay ngôn ngữ hỏi đáp có cấu trúc
2) Từ điển dữ liệu (Data Dictionary) 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 v.v....
27
3. HỆ QUẢN TRỊ CSDL - DBMS …
28
3. SƠ ĐỒ TỔNG QUÁT CỦA DBMS
3 mức:
29
4. MÔ HÌNH DỮ LIỆU
Mô hình dữ liệu (Data Model): những khái niệm dùng để biểu diễn cấu
=> Mỗi DBMS đều phải xây dựng dựa trên một mô hình DL nhất định.
30
4. MÔ HÌNH MẠNG (NETWORK DATA MODEL)
32
4. MÔ HÌNH PHÂN CẤP (HIERACHICAL DATA
MODEL)
Có cấu trúc cây (Tree), trong đó mỗi nút của cây biểu diễn một thực thể, giữa nút
con và nút cha được liên kết với nhau theo một mối quan hệ xác định.
Mô hình dữ liệu phân cấp sử dụng các khái niệm sau:
Loại mẫu tin: giống khái niệm mẫu tin trong mô hình dữ liệu mạng.
Loại mối liên kết: Kiểu liên kết là phân cấp, theo cách:
Mẫu tin thành viên chỉ đóng vai trò thành viên của một mối liên kết duy nhất, tức
là nó thuộc một chủ duy nhất. Như vậy, mối liên kết từ mẫu tin chủ tới các mẫu
tin thành viên là 1 - n, và từ mẫu tin (hay bản ghi - record) thành viên với mẫu
tin chủ là 1 –1.
Giữa 2 loại mẫu tin chỉ tồn tại 1 mối liên kết duy nhất.
33
4. MÔ HÌNH PHÂN CẤP(HIERACHICAL
DATA MODEL)…
34
4. MÔ HÌNH DL QUAN HỆ (RELATIONAL
DATA MODEL)
Do E.F.Codd [2] đề xuất năm 1970. Nền tảng cơ bản là lý thuyết tập hợp
trên các quan hệ, tức là tập của các bộ giá trị (Value Tuples).
Các khái niệm:
Quan hệ (Relation)
Khóa (Key).
35
4. MÔ HÌNH DL THỰC THỂ LIÊN KẾT ER
(ENTITY - RELATIONSHIP MODEL)
Liên kết: X là thực thể yếu nếu sự tồn tại của X phụ
thuộc vào sự tồn tại của thực thể Y. Được ký hiệu bằng
hình chữ nhật kép
36
4. MÔ HÌNH DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
(OBJECT ORIENTED DATA MODEL)
Là loại mô hình tiên tiến nhất hiện nay dựa trên cách tiếp cận hướng đối
tượng.
Sử dụng các khái niệm như lớp (class), sự kế thừa (inheritance), kế thừa
khác bằng việc gửi đi một thông báo đến đối tượng đó.
Mô hình hướng đối tượng biểu diễn một sơ đồ mới để lưu trữ và
thao tác dữ liệu. Từ một đối tượng có thể sinh ra một đối tượng
khác. 38
4. MÔ HÌNH DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
(OBJECT ORIENTED DATA MODEL)…
Theo [7]
39
BÀI TẬP CHƯƠNG 1
40
BÀI TẬP CHƯƠNG 1…
1.4. Dựa vào những khái niệm đã học hãy biểu diễn CSDL có các loại bản ghi
PHONG, NHANVIEN, CONGVIEC, LYLICH đã trình bày trong mô hình mạng
theo cách tiếp cận phân cấp.
Loại liên kết là phân cấp:
Phòng có nhiều nhân viên; mỗi nhân viên chỉ thuộc 1 phòng duy nhất.
Công việc có nhiều nhân viên cùng làm, mỗi nhân viên chỉ làm một công việc
duy nhất.
Mỗi nhân viên có một lý lịch; mỗi lý lịch chỉ thuộc 1 nhân viên duy nhất.
1.5. Dựa vào những khái niệm đã học, hãy biểu diễn CSDL về quản lý Sinh
viên đã trình bày trong mô hình phân cấp theo cách tiếp cận mạng.
Loại liên kết phân mạng là loại "thuộc về" 41
THIẾT KẾ
CƠ SỞ DỮ LIỆU
2
2.1. QUY TRÌNH THIẾT KẾ
3
3
Bước 1: Tập hợp và phân tích yêu cầu hệ thống.
Bước 2: XD lược đồ khái niệm (conceptual schema), thường dùng mô
hình ER mô hình dữ liệu mức cao (High level data model).
Bước 3: Thiết kế logic (Logical design)/(Data model mapping), kết quả
là lược đồ CSDL.
Bước 4: Thiết kế vật lý (physical design), thiết kế những cấu trúc lưu
trữ dữ liệu bên trong, đường dẫn truy cập, tổ chức file DL.
6
Mô hình thực thể - liên kết được Chen giới thiệu năm
1976.
Mô hình ER được sử dụng nhiều trong thiết kế dữ liệu ở
mức quan niệm
Sử dụng để biểu diễn trừu tượng cấu trúc của CSDL
7
Mục đích của mô hình ER?
Mô hình ER mô tả logic chi tiết dữ liệu, giúp người thiết kế CSDL mô tả thế
giới thực gần gũi với quan niệm và cách nhìn nhận. Nó là công cụ để phân
tích thông tin nghiệp vụ.
Thống nhất quan điểm về dữ liệu của những người tham gia hệ thống:
Người quản lý, người dùng cuối, người thiết kế hệ thống.
Xác định các xử lý về dữ liệu cũng như các ràng buộc trên các dữ liệu.
Giúp đỡ việc thể hiện CSDL về mặt cấu trúc: Sử dụng thực thể và các mối
liên kết giữa các thực thể. Biểu diễn mô hình quan hệ thực thể bằng một sơ
đồ.
8
2.3. THỰC THỂ - THUỘC
TÍNH – KHÓA
9
Thực thể: đối tượng (thực thể yếu?)
Thuộc tính: Loại của thuộc tính (đặc trưng của từng đối tượng-thực
thể)
Liên kết:
Bậc của liên kết: 1; 2; 3
SINHVIEN KHACHHANG
Bản ghi: là một đối tượng cụ thể của lớp các đối tượng đó:
Ví dụ: Sinh viên Đinh Gia Linh là đối tượng cụ thể của thực thể Sinh viên
Khách hàng Nguyễn Văn An là đối tượng cụ thể của thực thể Khách hàng,….
1
1
Thuộc tính(Attribute): Là các tính chất, đặc điểm chung của lớp đối
tượng. Nó là một giá trị dùng để mô tả một đặc trưng nào đó của một thực
thể.
Ví dụ: Thực thể SINHVIEN có các thuộc tính: MaSV, Hoten, Gioitinh,
Ngaysinh, Noisinh
Ký hiệu
7
Các loại thuộc tính:
Thuộc tính đơn (simple)/đơn trị (single-value)/ nguyên tử (Atomic):
chỉ có một giá trị trong một thuộc tính của một thực thể.
VD: Thuộc tính “Giới tính” của thực thể SINHVIEN.
Thuộc tính tổ hợp (Composite): được kết hợp của một số thành phần.
VD: Diachi(sonha, duongpho, quan, TP) hoặc HoTen (Ho, Dem, Ten).
Thuộc tính đa trị (multi-valued): có thể có nhiều giá trị tại một thời điểm.
VD: thuộc tính Bằngcũ của SINHVIEN. Ký hiệu: {Bằngcũ (Trường, Năm,
Bằng, ngành)}.
13
SINHVIEN
maM
H
giaovie
n
Sonh Phuo
Quan
a ng
Thuộc tính lưu trữ (stored attribute) là giá trị của nó phải được lưu trữ.
Thuộc tính suy diễn (derived attribute) là giá trị của nó có thể suy ra từ
giá trị của những thuộc tính khác.
Ví dụ: Tuổi(derived attribute) được suy diễn từ Ngaysinh (stored
attribute).
Giá trị rỗng của thuộc tính (Null Values): Trong một vài trường hợp, một
thực thể có thể không có giá trị tương ứng cho một thuộc tính
15
SINHVIEN
gioitinh
tenSV
tuoi MaSV
namsin
h
diach
i
SN Quan TP
Khoá (key): là một hoặc một tập các thuộc tính xác định duy nhất một bản
ghi trong một thực thể. Thuộc tính khoá hay còn gọi là thuộc tính định danh
luôn được gạch chân để phân biệt.
VD: Mỗi SV có một mã số duy nhất Khóa của thực thể SINHVIEN là MaSV
Masv
NS
SINHVIEN
QUE HT
17
Định nghĩa:
Là thực thể không có thuộc tính khóa
Phải tham gia trong một loại mối kết hợp xác định trong đó có
hợp Thi với thực thể SINHVIEN và MONHOC là loại thực thể yếu
Thực thể yếu
MONHOC
(1,n)
Thi
(1,n) (1,n)
SINHVIEN LANTHI
2.4 MỐI LIÊN
KẾT(Entity
Relationship)
21
Liên kết (Relationship) dùng để chỉ mối quan hệ giữa hai hay nhiều
thực thể khác nhau, được biểu diễn bằng hình thoi (hoặc oval).
Bậc của kiểu liên kết: Là số lượng các thực thể tham gia vào liên
kết.
Kiểu liên kết bậc 1 (đệ quy) là mối quan hệ giữa cùng 1 kiểu thực thể.
Kiểu liên kết bậc 2 là mối liên kết giữa hai kiểu thực thể
Kiểu liên kết bậc 3 là mối liên kết giữa 3 kiểu thực thể
22
MaS
V
maM
tenS H
V
Tenmo
namsi SINHVIE
thi monhoc n
nh N
diac SoTC
hi
ketqu
gioitin a
h
Kiểu liên kết bậc 1 (đệ quy)
24
Kiểu liên kết bậc 2
25
Kiểu liên kết bậc 3
26
Ràng buộc liên kết gồm:
Liên kết/quan hệ 1-1:
27
Liên kết/quan hệ 1-1: là mối quan hệ mà mỗi bản ghi trong thực
thể E1 chỉ có nhiều nhất một bản ghi được liên kết trong thực thể
E2.
Ví dụ: có
NHANVIEN LYLICH
1 chu 1 Giao_vie
Lop_hoc
nhiem n
28
Liên kết/Quan hệ 1-N: là mối quan hệ mà một bản ghi trong thực thể
E1 có thể không liên kết hoặc liên kết với một hay nhiều bản ghi trong
thực thể E2.
Ví dụ:
PHONGBAN có NHANVIEN
1 N
PHONGBAN NHANVIEN
có
29
Liên kết/Quan hệ M-N: là mối quan hệ mà một bản ghi trong thực
thể có thể liên kết với nhiều bản thể trong thực thể khác và ngược
lại.
Ví dụ
Tha NHANVIE
DUAN
mgia N
M Tha N
DUAN NHANVIEN
mgia
30
Lực lượng của mối liên kết: Là số bản ghi lớn nhất và nhỏ
nhất của thực thể tham gia vào liên kết đó.
Ký hiệu: ta thêm (min,max) vào mối liên kết.
min là số bản ghi nhỏ nhất tham gia vào liên kết
max là số bản ghi lớn nhất tham gia vào liên kết
=> Xác định lực lượng này từ khảo sát thực tế bài toán
31
Thuộc tính của mối liên kết (Relationship Attribute): Mỗi mối liên
kêt cũng có thể có những thuộc tính riêng của chúng.
Ví dụ: Trong mối quan hệ giữa DUAN và NHANVIEN có thuộc tính thời
gian bắt đầu và thời gian kết thúc của mỗi nhân viên khi tham gia vào
từng dự án, đây là hai thuộc tính của mối liên kết Tham gia
n n
Tham gia
DUAN NHANVIEN
Chú ý: Để đơn giản, đôi khi trình bày các thuộc tính nằm luôn trong
các thực thể 32
2.5 XÂY DỰNG MÔ HÌNH
E-R
33
Mục tiêu của mô hình E-R trong quá trình thiết kế CSDL:
Phân tích dữ liệu
Xác định các đơn vị thông tin cơ bản cần thiết của tổ chức
Mô tả cấu trúc và mối liên hệ giữa các đơn vị thông tin
Là mô hình trung gian để chuyển những yêu cầu quản lý dữ liệu
trong thế giới thực thành mô hình cơ sở dữ liệu quan hệ
Thuộc tính hay thực thể?
Với một phần tử dữ liệu, để khẳng định nó là thuộc tính hay thực thể
cần trả lời các câu hỏi sau:
Có thuộc tính riêng hay không?
Có liên kết với các thực thể khác hay không, dạng liên kết như thể
nào?
Khi đó:
Nếu không có thuộc tính riêng và liên kết là 1-1 thì nên xem nó là thuộc
tính.
Nếu có thuộc tính riêng và liên kết là 1-nhiều hoặc nhiều-nhiều thì xem nó
là thực thể.
35
Tổng quát hóa: là xem một thực thể nào đó là con của một
thực thể khác tổng quát hơn.
VD: SACH là một loại con của loại tổng quát hơn là TAILIEU
nói chung.
Chuyên biệt hóa: là khái niệm ngược lại với tổng quát hóa.
Ví dụ: Ôtô, xeca, taxi gộp lại thành một thực thể tổng quát
hơn là Phuongtienvantai.
36
Thực thể con và thực thể chính
VD: Trong Đơn vị có 3 loại nhân viên: SECRETARY, TECHNICIAN,
ENGINEER. Các thực thể này có một số thuộc tính chung, riêng. Có thể có
3 hướng giải quyết sau:
Gộp tất cả vào thực thể EMPLOYEE -> dư thừa thông tin, vì có thuộc tính
rỗng.
Để riêng từng thực thể: SECRETARY, TECHNICIAN, ENGINEER. -> không
khai thác được những thuộc tính chung của nhân viên.
Thực thể chính EMPLOYEE, 3 thực thể con là: SECRETARY,
TECHNICIAN, ENGINEER.
37
˜ Thực thể chính
EMPLOYEE, 3 thực
thể con:
SECRETARY,
TECHNICIAN,
ENGINEER.
24
Thực thể con loại trừ: gồm 2 loại
Thực thể con đầy đủ: Là tất cả các thực thể con xác định một thực thể
chính.
VD trên, tất cả các thực thể con là đầy đủ vì không thể bổ sung
thực thể nào vào thực thể chính EMPLOYEE.
Thực thể con không đầy đủ: Tập các thực thể con không đầy đủ xác
định thực thể chính.
VD: Tập thực thể ÔTÔ, XEMAY chưa xác định được thực thể chính
là PHUONGTIEN
25
26
Bước 1: Liệt kê, chính xác hóa và lựa chọn thông tin cơ sở
Xác định một từ điển bao gồm tất cả các thuộc tính (không bỏ sót bất cứ thông
tin nào).
Chính xác hóa các thuộc tính đó. Thêm các từ cần thiết để thuộc tính đó mang
đầy đủ ý nghĩa, không gây lầm lẫn, hiểu nhầm.
Chú ý: Để lựa chọn các đặc trưng cần thiết, duyệt từ trên xuống và chỉ giữ lại
những thuộc tính đảm bảo yêu cầu sau:
Thuộc tính cần phải đặc trưng cho một lớp các đối tượng được xét.
Chọn một thuộc tính một lần, nếu lặp lại thì bỏ qua.
Một thuộc tính phải là sơ cấp (Nếu giá trị của nó có thể suy ra từ các thuộc tính khác
thì bỏ qua).
41
Bước 2: Xác định các thực thể, thuộc tính.
Duyệt danh sách các thuộc tính từ trên xuống để tìm ra thuộc tính
tên gọi. Mỗi thuộc tính tên gọi sẽ tương ứng với một thực thể.
Xác định thuộc tính định danh cho từng thực thể.
42
Bước 3: Xác định các mối quan hệ và các thuộc tính riêng
Xét các thuộc tính còn lại, tìm tất cả các động từ (ứng với thuộc tính
đó).
Với mỗi động từ, trả lời các câu hỏi: Ai? Cái gì? Ở đâu? Khi nào?
Bằng cách nào?
43
Bước 4: Vẽ sơ đồ mô hình thực thể- liên kết, xác định lực lượng
tham gia liên kết cho các thực thể.
Bước 5: Chuẩn hóa sơ đồ và thu gọn sơ đồ
Chuẩn hóa: Loại bỏ các thuộc tính lặp, nhóm lặp và các thuộc tính phụ
thuộc thời gian -> sơ đồ chỉ còn các thực thể đơn, thuộc tính đơn.
Thu gọn sơ đồ: Nếu một thực thể có tất cả các đặc trưng:
Là thực thể treo: chỉ tham gia vào một mối quan hệ và chứa 1 TT duy nhất
(có thể có thuộc tính thứ 2 thêm vào làm định danh).
31
2.6. VÍ DỤ
46
Quy tắc nghiệp vụ của hệ thống CSDL COMPANY như sau:
1. Công ty (COMPANY) có nhiều phòng/ban (DEPARTMENTs). Mỗi
phòng/ban có tên (name), mã số (number) duy nhất và có một nhân viên
(employee) làm quản lý (manages) phòng/ban. Chúng ta lưu lại ngày bắt
đầu (start date) làm quản lý phòng/ban của nhân viên đó.
2. Mỗi phòng/ban có thể có nhiều địa điểm khác nhau (locations).
3. Mỗi phòng/ban điều hành một số dự án (PROJECTs). Mỗi dự án có tên
(name), mã số (number) duy nhất và chỉ có một địa điểm (location).
47
4. Với mỗi nhân viên (employee), chúng ta lưu lại những thông tin sau: tên (name), số bảo
hiểm xã hội (social security number), địa chỉ (address), lương (salary), giới tính (sex),
ngày sinh (birth date).
5. Mỗi nhân viên làm việc ở một phòng/ban, nhưng có thể làm việc cho nhiều dự án. Chúng
ta lưu lại số giờ làm việc (the number of hours per week) của từng nhân viên trong từng
dự án.
6. Chúng ta lưu lại thông tin về người quản lý trực tiếp (direct supervisor), của mỗi nhân
viên. Người quản lý trực tiếp cũng là một nhân viên.
7. Mỗi nhân viên có những người phụ thuộc vào họ (DEPENDENTs). Mỗi người phụ thuộc
ta lưu lại thông tin về tên (name), giới tính (sex), ngày sinh (birth date) và quan hệ
(relationship)
48
Bước 3: Xác định các mối quan hệ và các thuộc tính riêng
Lực lượng tham gia của DEPARTMENT là toàn bộ, vì tại bất kỳ thời điểm nào một phòng
cũng có một nhân viên làm quản lý.
Thuộc tính StartDate được gắn vào kiểu liên kết để ghi lại thời điểm bắt đầu làm quản lý
của nhân viên cho phòng đó.
50
2. WORKS_FOR: là kiểu liên kết 1:N giữa DEPARTMENT
và EMPLOYEE.
Cả hai kiểu thực thể này đều có lực lượng tham gia toàn bộ vào liên kết.
51
4. SUPERVISOR: là kiểu liên kết 1:N giữa EMPLOYEE và
EMPLOYEE
Mỗi nhân viên có người quản lý cấp trên của mình, người
đó cũng là một nhân viên.
Không phải nhân viên nào cũng làm quản lý nhân viên
khác, và không phải nhân viên nào cũng có người quản lý
trực tiếp mình. Vì vậy, cả hai kiểu thực thể này có lực
lượng tham gia bộ phận.
52
5. WORK_ON: là kiểu liên kết M:N giữa EMPLOYEE và
PROJECT
Một dự án có nhiều nhân viên làm việc và một nhân viên có thể
làm việc cho nhiều dự án.
Thuộc tính Hours là thuộc tính của kiểu liên kết được dùng để
ghi lại số giờ mỗi nhân viên làm việc cho một dự án nào đó.
Cả hai kiểu thực thể này có lực lượng tham gia toàn bộ.
53
6. DEPENDENTS_OF: là kiểu liên kết 1:N giữa hai kiểu
thực thể EMPLOYEE và DEPENDENT.
Kiểu thực thể DEPENDENT là kiểu thực thể yếu, vì nó không tồn
tại nếu không có sự tồn tại của EMPLOYEE.
56
2.2. Quản lý hoạt động của một trung tâm đại học.
Một số quy tắc/ràng buộc quản lý như sau:
1. Trung tâm được chia làm nhiều trường và mỗi trường có 1
hiệu trưởng để quản lý nhà trường.
2. Một trường chia làm nhiều khoa, mỗi khoa thuộc về một
trường.
3. Mỗi khoa cung cấp nhiều môn học. Mỗi môn học thuộc về 1
khoa (thuộc quyền quản lý của 1 khoa).
4. Mỗi khoa thuê nhiều giáo viên làm việc. Nhưng mỗi giáo viên
chỉ làm việc cho 1 khoa. Mỗi khoa có 1 chủ nhiệm khoa, đó
là một giáo viên.
57
5. Mỗi giáo viên có thể dạy nhiều nhất 4 môn học và có thể
không dạy môn học nào.
6. Mỗi sinh viên có thể học nhiều môn học, nhưng ít nhất là
môn.
7. Mỗi môn học có thể có nhiều sinh viên học, có thể không có
sinh viên nào.
8. Một khoa quản lý nhiều sinh viên chỉ thuộc về một khoa.
9. Mỗi giáo viên có thể được cử làm chủ nhiệm của lớp, lớp đó có
thể có nhiều nhất 100 sinh viên.
=> Xây dựng mô hình ER
58
2.3. Cho các thuộc tính, quy tắc quản lý của một đơn vị.
Thuộc tính:
Mã đơn vị, Tên đơn vị, Số điện thoại đơn vị, Địa chỉ đơn vị.
Mã nhân viên, Tên nhân viên, Giới tính nhân viên, Địa chỉ nhân viên,
Số điện thoại.
Mã dự án, Tên dự án
Mã khách hàng, tên khách hàng, Địa chỉ khách hàng, Số điện thoại.
Mã hàng, Tên hàng, Số lượng trong kho.
Lượng đặt hàng, Ngày đặt hàng
59
Các quy tắc/ràng buộc
60
Các quy tắc/ràng buộc…
7. Một khách hàng có thể được 1 hoặc nhiều nhân viên phục vụ.
8. Một khách hàng có thể đặt 1 hoặc 1 vài hàng hóa (Khách
hàng nào cũng đặt hàng: 1 hoặc nhiều mặt hàng).
9. Mọi mặt hàng đều có ít nhất một khách hàng đặt mua.
10. Một đơn đặt hàng chỉ có 1 mặt hàng.
61
Chương 3
2
CHƯƠNG 3
QUAN HỆ
3
Mô hình quan hệ (Relational Data Model)
Quan hệ (Relation)
Mô hình CSDL quan hệ là cách thức biểu diễn dữ liệu dưới dạng
Mô hình được xây dựng dựa trên cơ sở lý thuyết đại số quan hệ.
Thao tác dữ liệu: sử dụng những phép toán bằng ngôn ngữ SQL.
5
Thuộc tính: là một tính chất riêng biệt của một đối tượng cần
được lưu trữ trong CSDL để phục vụ cho việc khai thác dữ
liệu về đối tượng.
Ví dụ: Đối tượng KHOA (tương ứng với loại thực thể KHOA
trong mô hình thực thể liên kết) có các thuộc tính Mã-khoa,
Tên-khoa.
Đặc trưng bởi một tên gọi, kiểu giá trị và miền giá trị của
chúng.
6
Mỗi thuộc tính đều phải thuộc một kiểu kiểu dữ liệu (Data
Type).
{A1...An} (thứ tự của các thuộc tính là không quan trọng) và kèm theo nó
là một vị từ, tức là một quy tắc để xác định mối quan hệ giữa các thuộc
tính Ai và được ký hiệu là R(A1...An).
Với Ai là một thuộc tính có miền giá trị là MGT(Ai), như vậy R(A1, A2, ... An)
8
Ví dụ 2.2: Quan hệ SINHVIEN (Masv, Tensv, Que) là một quan
Quy tắc: "Mỗi sinh viên có một mã số sinh viên duy nhất để phân
9
Một bộ giá trị là các thông tin của một đối tượng thuộc quan
hệ.
Bộ giá trị cũng thường được gọi là mẫu tin hay bản ghi
(record) hoặc dòng của bảng (Row).
10
Ví dụ 2.4: Trong quan hệ SINHVIEN có các bộ giá trị sau :
Để lấy thành phần Ai (tức là giá trị thuộc tính Ai) của bộ giá trị q,
ta viết q.Ai. Phép trích rút này được gọi là phép chiếu một bộ lên
thuộc tính Ai.
11
Lược đồ quan hệ là sự trừu tượng hóa của quan hệ ở mức độ cấu
Quan hệ/bảng là một bảng có cấu trúc cụ thể hoặc một định nghĩa
cụ thể trên một lược đồ quan hệ với các bộ giá trị của nó.
Đôi khi người ta có thể dùng lược đồ quan hệ và quan hệ thay thế
13
Thể hiện (tình trạng) của quan hệ R, ký hiệu bởi TR, là tập hợp các bộ
giá trị của quan hệ R vào một thời điểm. Tại những thời điểm khác
nhau thì quan hệ sẽ có những thể hiện khác nhau.
Thể hiện của các lược đồ quan hệ con TRi gọi là tình trạng của lược
đồ cơ sở dữ liệu C.
14
Theo [2]
Khóa của một quan hệ R là một hoặc một số thuộc tính của quan hệ
có thể dùng để phân biệt hai bộ bất kỳ trong quan hệ.
Khóa (Key) của quan hệ R định nghĩa trên tập các thuộc tính U =
A1... An là một tập con K U thỏa mãn các tính chất sau:
Với mọi bộ giá trị q1, q2 R thì q1.K q2.K. // K xác định duy nhất 1 bản ghi
Với mọi K’ K thì tồn tại q1.K’ = q2.K’. // Con của K không thể là Khóa
16
=>Quan hệ có thể có rất nhiều khóa.Việc xác định tất cả các khóa là bài toán khó.
Khoá dự tuyển(Candidate): Khóa của quan hệ theo định nghĩa 2.2 được gọi là
khóa dự tuyển và là khóa nội của quan hệ.
Siêu khoá (Supper key): K là siêu khóa của quan hệ R nếu K' K là một khóa
của quan hệ.
Một quan hệ R luôn có ít nhất một siêu khóa và có thể có nhiều siêu khóa.
K1 = { Malop, Tenlop}
K3 = { Malop, Sohocvien }
K4 = { Malop, Nienkhoa } 17
Khoá chính (Primary key): Trong trường hợp lược đồ quan hệ có nhiều
khóa dự tuyển, khi cài đặt trên một DBMS có thể chọn một trong số các
khóa dự tuyển để tạo chỉ mục (Index) chi phối việc truy cập đến các bộ.
Khi đó khóa dự tuyển này được gọi là khóa chính. Các khóa còn lại gọi là
các khóa tương đương.
Khóa chính chỉ thật sự có ý nghĩa trong quá trình khai thác CSDL. Trên
phương diện lý thuyết, khóa chính hoàn toàn không có vai trò gì khác so
với các khóa dự tuyển còn lại.
Khóa ngoại (Foreign key): Là khóa chính của một quan hệ khác.
18
Quan hệ R được định nghĩa trên tập thuộc tính U = { A1, A2, ...,
An}. X, Y U là 2 tập con của tập thuộc tính U. Nếu tồn tại
một ánh xạ f: X Y thì ta nói rằng X xác định hàm Y, hay Y
phụ thuộc hàm vào X và ký hiệu là X Y.
Ví dụ 2.8: Trong các quan hệ ở ví dụ trên ta thấy có những phụ thuộc hàm
sau:
Quan hệ KHOA, có phụ thuộc hàm Makhoa Tenkhoa
Quan hệ LOPHOC, có phụ thuộc hàm Malop{Tenlop, Nienkhoa, Sohocvien}.
Quan hệ MONHOC, có phụ thuộc hàm Mamon {Tenmon, Sodvhoctrinh}
Quan hệ HOCVIEN có phụ thuộc hàm Mahocvien{Tenhocvien, Ngaysinh,
Quequan} 19
CHƯƠNG 3
3.2 Ràng buộc toàn vẹn
MÔ HÌNH
(Integrity Constraint, Rule)
QUAN HỆ
20
Ràng buộc toàn vẹn (RBTV) là một quy tắc định nghĩa trên một
(hay nhiều) quan hệ do môi trường ứng dụng quy định. Đó chính là
quy tắc để đảm bảo tính nhất quán của dữ liệu trong CSDL.
Mỗi RBTV được định nghĩa bằng một thuật toán trong CSDL.
Ví dụ 2.9:
Quan hệ CBVC (MaCBVC, HotenCBVC, Hesoluong)
Quy tắc: Hệ số lương của cán bộ viên chức (CBVC) phải lớn hơn hay bằng
1.00 và nhỏ hơn hay bằng 10.00.
Thuật toán: "cb CBVC thì cc.Hesoluong >= 1 & cc.Hesoluong <= 10.
21
Định nghĩa: Ràng buộc toàn vẹn là một điều kiện bất biến không được
Trong CSDL, luôn tồn tại rất nhiều mối liên kết ảnh hưởng qua lại lẫn
nhau giữa các thuộc tính, giữa các bộ giá trị trong một quan hệ và nhiều
quan hệ.
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
Ràng buộc toàn vẹn còn được gọi là các quy tắc quản lý (Rules) được
áp đặt lên trên các đối tượng của thế giới thực.
22
VD CSDL về quản lý học viên của một trường học
R1 : Mỗi lớp học phải có một mã số duy nhất để phân biệt với mọi lớp học
khác trong trường.
R2 : Mỗi lớp học phải thuộc một KHOA của trường.
R3 : Mỗi học viên có một mã số riêng biệt, không trùng với bất cứ học viên
nào khác.
R4 : Mỗi học viên phải đăng ký vào một lớp của trường.
R5 : Mỗi học viên được thi tối đa 3 lần cho mỗi môn học
R6 : Tổng số học viên của một lớp phải lớn hơn hoặc bằng số lượng đếm
được của lớp tại một thời điểm.
=>Khóa nội, Khóa ngoại, giá trị NOT NULL ... là những RBTV về
miền giá trị của các thuộc tính. 23
RBTV được xem như một công cụ để diễn đạt ngữ nghĩa của CSDL.
Các DBMS thường có các cơ chế tự động kiểm tra các RBTV.
Kiểm tra RBTV có thể được tiến hành vào một trong các thời điểm sau:
Kiểm tra ngay khi thực hiện một thao tác cập nhật CSDL (thêm, sửa, xóa).
Kiểm tra định kỳ hay đột xuất, nghĩa là việc kiểm tra RBTV được tiến hành
một cách độc lập đối với thao tác cập nhật dữ liệu.
Bối cảnh xảy ra RBTV: trên một hay nhiều quan hệ.
Tầm ảnh hưởng của RBTV. Khả năng tính toàn vẹn dl bị vi phạm.
24
Hành động cần phải có khi RBTV bị vi phạm.
Điều kiện của ràng buộc toàn vẹn:
25
Ví dụ 4.2:
Giả sử có một CSDL quản lý hóa đơn bán hàng gồm các bảng sau:
HOADON (Sohoadon, Soloaihang, Tongtrigia).
26
Điều kiện của ràng buộc toàn vẹn có thể biểu diễn như sau:
R1 : “Mỗi hóa đơn có một Số hóa đơn riêng biệt, không trùng với hóa đơn khác”:
Có thể định nghĩa trên một quan hệ cơ sở hay nhiều quan hệ cơ sở.
VD:
28
Hành động khi RBTV bị vi phạm: có 2 giải pháp:
(1) Đưa ra thông báo và yêu cầu sửa chữa dữ liệu của các
thuộc tính cho phù hợp với quy tắc đảm bảo tính nhất quán dữ
liệu.
Thông báo phải đầy đủ và tạo được sự thân thiện với người sử dụng.
Giải pháp này là phù hợp cho việc xử lý thời gian thực.
Việc từ chối cũng phải được lưu lại bằng những thông báo đầy đủ, rõ
ràng vì sao thao tác bị từ chối và cần phải sửa lại những dữ liệu nào.
29
Ràng buộc toàn vẹn về miền giá trị của thuộc tính:
Loại RBTV này rất phổ biến.
Thuộc tính được đặc trưng bởi kiểu giá trị và bị giới hạn bởi miền giá trị
trong kiểu dữ liệu đó.
Khi thực hiện các thao tác cập nhật đều phải kiểm tra RBTV này.
Ví dụ: Trong quan hệ KQUATHI, do quy định mỗi học viên chỉ được
thi một môn học tối đa là 3 lần, điểm thi không âm và không vượt quá
10.
Có 2 RBTV về miền giá trị trong quan hệ này:
Là loại RBTV có liên quan tới nhiều thuộc tính của một quan hệ.
Đó là các phụ thuộc tính toán, hoặc một suy diễn từ giá trị của
một hay nhiều thuộc tính trong cùng một bộ giá trị.
31
Ví dụ: Quan hệ danh sách cán bộ - công chức Nhà nước CBCC với
tập các thuộc tính:
CBCC{Madonvi, MaCBCC, Hoten, Gioitinh, Ngaysinh, Ngaytuyendung,
NgachCBCC, Bậc, Hesoluong, Ngayxepluong}.
Với quy định nam từ 18 đến 60 và nữ từ 18 đến 55 tuổi và phải từ 18
tuổi trở lên mới được tuyển vào làm công chức Nhà nước. Chúng ta có
các RBTV về miền giá trị liên thuộc tính như sau:
R1: cc CBCC | nếu cc.Gioitinh = Nam thì (Now() -
cc.Ngay_sinh) / 365 trong khoảng 18 và 60. Nếu cc.Gioitinh = Nữ
thì (Now() - cc.Ngay-sinh) / 365 trong khoảng 18 và 55.
R2: cc CBCC | (cc.Ngaytuyendung - cc.Ngaysinh) / 365 18
và cc.Ngaytuyendung Now()
32
Ràng buộc toàn vẹn liên bộ, liên thuộc tính
Đây là loại RBTV có liên quan tới nhiều bộ và có thể tới nhiều thuộc
tính của (các) bộ giá trị trong một quan hệ.
Ví dụ: Điểm thi không chỉ liên quan đến thuộc tính Lần-thi mà còn
liên quan tới điểm thi của lần thi trước đó nếu đã thi 1 hay 2 lần rồi.
RBTV đầy đủ phải được diễn đạt bằng thuật toán như sau:
R3: kq KQUATHI| Nếu kq.Lanthi = 1 thì 0 kq.Diemthi 10.0
hoặc: Nếu kq.Lần thi > 1 thì kq’KQUATHI sao cho kq’.Lanthi = kq.Lanthi - 1 và
kq.Diemthi kq’.Diemthi.
33
Ràng buộc toàn vẹn về phụ thuộc tồn tại (Existential
Dependency hay Referential Dependency)
Còn được gọi là phụ thuộc về khóa ngoại.
Phụ thuộc tồn tại xảy ra nếu có một trong hai trường hợp
sau:
(i) Có sự hiện diện của khóa ngoại.
(ii) Có sự lồng khóa giữa các quan hệ.
34
Ví dụ: Trong thể hiện của quan hệ CHITIETHD, sự tồn tại của mỗi bộ giá trị cthđ
đều phụ thuộc vào sự tồn tại của một bộ giá trị hđ trong thể hiện của quan hệ
HÓAĐƠN sao cho hđ.SoHD = cthđ.SoHD, và phụ thuộc cả vào sự tồn tại của một
bộ giá trị mh trong thể hiện của quan hệ DMHÀNG sao cho mh.Mahang =
cthđ.Mahang.
Biểu diễn các RBTV này như sau:
RBTV1: “Mỗi bộ của CHITIETHD phải có một hóa đơn với Sohoadon tương
ứng”: cthđ CHITIETHD, hđ HOADON sao cho cthđ.Sohoadon =
hđ.Sohoadon.
hoặc: CHITIETHD[ Sohoadon ] HOADON[ Sohoadon ]
RBTV2: “Mỗi bộ của CHITIETHD phải có mã hàng thuộc về danh mục
hàng”: cthđ CHITIETHD, hh DMHANG sao cho cthđ.Mahang=hh.Mahang
Hoặc :CHITIETHD[Mahang] DMHANG[Mahang ]
35
Ràng buộc toàn vẹn tổng hợp (liên bộ - liên quan hệ):
Khi có sự hiện diện của 1 thuộc tính mang tính chất tổng hợp (tức là giá trị của
thuộc tính có thể được tính toán từ giá trị của các thuộc tính khác trên một hay
nhiều bộ giá trị của các quan hệ trong CSDL)
Hay phụ thuộc tồn tại lồng khóa thì có RBTV liên quan hệ - liên bộ.
Ví dụ: Xét CSDL về quản lý học viên, RBTV liên quan hệ - liên bộ có thể được xác định: “Với
mọi bộ giá trị của LOPHOC, nếu Số lượng học viên lớn hơn 0 thì số lượng này phải lớn hơn
hay bằng tổng số bộ giá trị đếm được của các học viên có cùng Mã lớp”.
lh LOPHOC thì: nếu lh.Sohocvien > 0 thì: h.Sohocvien = COUNT (hv HOCVIEN,
hv.Malop = lh.Malop)
36
CHƯƠNG 3
3.3 Các phép toán cập nhật
MÔ HÌNH
QUAN HỆ
37
Phép thêm một bộ mới vào quan hệ
Việc thêm một bộ giá trị mới t vào quan hệ R (A1, A2, ... An) làm
cho thể hiện TR của nó tăng thêm một phần tử mới: TR = TR.t.
Dạng hình thức của phép thêm bộ mới là:
trong đó, Ai1, Ai2, ... Aim là các thuộc tính, và v1, v2, ... vm là các giá
trị thuộc MGT(Ai1), MGT(Ai2) , ..., MGT(Aim) tương ứng.
38
Phép loại bỏ bộ khỏi quan hệ
39
Phép sửa đổi giá trị của các thuộc tính
Một số hệ quản trị CSDL đưa ra nhiều câu lệnh khác nhau để sửa
Trong đó R là quan hệ cần thực hiện sửa đổi; Aij= cj (j = 1, 2, ..., m) là điều
kiện tìm kiếm bộ giá trị để sửa và Aij= vj (j = 1, 2, ..., m) là giá trị mới của bộ.
40
CHƯƠNG 3
41
Hợp (Union)
Giao (Intersection)
Chia (Division).
Q = R S = { t / t R hoặc t S }
VD:
43
Giao của hai quan hệ R và S, được ký hiệu là R ∩ S, là một
quan hệ Q xác định trên tập thuộc tính U, có cùng thứ tự
thuộc tính như trong quan hệ R và S, được định nghĩa như
sau:
Q = R ∩ S = { t | t R và t S }
44
Hiệu của hai quan hệ R và S, được ký hiệu là R - S, là một
quan hệ Q xác định trên tập thuộc tính U, có cùng thứ tự thuộc
tính như trong quan hệ R và S, được định nghĩa như sau:
Q = R - S = { t / t R và t S }
quan hệ R và S với các bộ giá trị là các bộ giá trị của R sau khi
đã loại bỏ đi các bộ có mặt trong quan hệ S.
45
R (A B C) S (A B C) R – S= (A B C)
a1 b1 c1 a2 b1 c2 a1 b1 c1
a1 b2 c1 a2 b2 c2 a2 b2 c2
a2 b2 c2
R (A B C) S (A B C) R – S= (A B C)
a b c b g a a b c
d a f d a f a b d
a b d
46
R (A1, A2, ..., An) và S (B1, B2, ..., Bm) là hai quan hệ có số bộ giá trị hữu hạn.
Tích Đề-các của hai quan hệ R và S, được ký hiệu là R x S, là một quan hệ
Q xác định trên tập thuộc tính của R và S (với n + m thuộc tính) và được
định nghĩa như sau:
Q = R x S = { t | t có dạng (a1, a2, ..., an, b1, b2, ..., bm) trong đó (a1, a2,
..., an) R và (b1, b2, ..., bm) S }
47
48
Kết nối giữa từng bộ của quan hệ thứ nhất với mỗi bộ của quan hệ thứ hai
49
R là quan hệ n ngôi và S là quan hệ m ngôi (n > m và S ),
có m thuộc tính chung (giống nhau về mặt ngữ nghĩa, hoặc
các thuộc tính có thể so sánh được) giữa R và S.
Phép chia 2 quan hệ R và S, ký hiệu là R S, là một quan hệ
Q có n - m ngôi được định nghĩa như sau:
Q = RS = { t |u S, (t,u)R }
Sử dụng phép tích Đề-các, có thể định nghĩa phép chia hình
thức như sau: R S = Q sao cho Q x S R
50
51
Ví dụ: Đưa ra môn học được dạy ở tất cả các khoá học?
PHANCONG KHOAHOC Khoahoc
MonHoc Khoahoc k60
Tiếng Anh k60 K61
Kỹ thuật lập trình K61
Tiếng Anh K61
CSDL K60
HQTCSDL K61
52
Kết quả là
quan hệ
PHICONG
(Sohieuphicon
g) có 1 bộ giá
trị (30)
53
Giả sử R là một quan hệ xác định trên tập thuộc tính U = { A1, A2, ..., An },
X U. Phép chiếu quan hệ R trên tập con các thuộc tính X là một quan hệ
Q xác định trên tập thuộc tính X, ký hiệu là R [X], được định nghĩa như sau:
Q = R [X] = { q | t R: q = t.X }, Có thể ký hiệu X(R).
Ngữ nghĩa: Trích từ R một số thuộc tính nào đó để tạo thành một quan hệ
mới. Số ngôi của quan hệ mới này bằng số thuộc tính của tập con X. Các
bộ giá trị của các cột được trích nếu giống nhau sẽ được loại bỏ để chỉ giữ
lại một bộ duy nhất (trong thể hiện của quan hệ mới không có 2 bộ nào
giống nhau)
54
Lựa chọn một số thuộc tính từ một quan hệ
55
56
Là phép tính để xây dựng một tập con các bộ của quan hệ đã cho, thỏa mãn
một biểu thức F xác định.
Biểu thức F: diễn tả bởi một tổ hợp Boolean của các toán hạng trả về giá trị
True, False, mỗi toán hạng là một phép so sánh
Các phép so sánh trong biểu thức F: <, =, >, <=, >= và các phép logic "và"
( - conjunction), phép "hoặc" ( - disjunction) và phủ định ( - not).
Giả sử quan hệ R(A1, A2, ... An), Đ là một điều kiện. Đánh giá điều kiện Đ
trên bộ giá trị t R được ký hiệu là E(tĐ) hoặc có thể viết Đ(t).
Định nghĩa: Phép chọn các bản ghi của R thỏa mãn điều kiện F là một quan
hệ Q có cùng ngôi với R, ký hiệu là R:Đ, được định nghĩa:
Q = { t R | F (t) = đúng }, có thể được ký hiệu Đ(R).
57
Ví dụ: cho quan hệ R (A, B, C
6 4 12 A B C
8 7 32 10 19 8
10 19 8 25 23 19
25 23 19
Phép chọn (A>8) (B<7) (R) cho kết quả là:
4 56 24
58
Lựa chọn các bộ trong một quan hệ thoả mãn điều kiện cho trước
59
Biểu thức chọn F: một tổ hợp logic của các toán hạng. Mỗi toán
hạng là một phép so sánh đơn giản giữa 2 biến là hai thuộc
tính hoặc giữa 1 biến là 1 thuộc tính và 1 giá trị hằng
Các phép so sánh: <, =, >, , ,
60
Đưa ra tên của các sinh viên sống ở Bundoora
61
Giả sử có 2 quan hệ R (A1, A2, ..., An), S (B1, B2, ..., Bm).
t = (a1, a2, ..., an) R, u = (b1, b2, ..., bm) S. Gọi v là bộ ghép
nối u vào t: v = (t, u) = (a1, a2, ..., an, b1, b2, ..., bm).
A R+, B S+ là hai thuộc tính có thể so sánh được.
Gọi Teta là một trong các phép toán so sánh { <, <=, >, >=, =, }.
Phép kết nối hai quan hệ R với S trên các thuộc tính A và B với phép
so sánh Teta, với giả thiết là giá trị cột R[A] có thể so sánh được với
mỗi giá trị của cột S[B], được định nghĩa qua:
R S = { v = (t, u) | t R , u S va t.A u.B }
Hoặc: R S = (R x S) : (A B).
62
Ví dụ: Đưa ra danh sách các sinh viên và mã khoá học mà
sinh viên đó tham gia
63
Nếu Teta là so sánh bằng nhau (=) thì gọi là phép kết nối bằng (Equi
Join). Nếu các thuộc tính so sánh là giống tên nhau thì trong kết quả
của phép kết nối sẽ loại bỏ đi một trong 2 thuộc tính, khi đó gọi là kết
nối tự nhiên (Natural Join) và ký hiệu" * ".
64
Nếu phép so sánh trong điều kiện kết nối là phép so sánh bằng thì kết nối
65
Thực chất là phép kết nối bằng nhưng trong trường hợp hai
thuộc tính so sánh có cùng tên thì kết quả vẫn giữ lại 2 tên thuộc
tính.
66
Đưa ra tên của các sinh viên sống ở Bundoora và mã khoá
học mà sinh viên đó đăng ký
67
Quan hệ R (A1, A2, ..., An) và S (B1, B2, ..., Bm).
t = (a1, a2, ..., an)R, u = (b1, b2, ..., bm)S,
v = (t, u) = (a1, a2, ..., an, b1, b2, ..., bm).
Bộ tNULL = (NULL, NULL, ..., NULL) là một bộ đặc biệt của R
uNULL = (NULL, NULL, ..., NULL) là một bộ đặc biệt của S.
A R+ và B S+ là hai thuộc tính có thể so sánh được.
Phép kết nối trái hai quan hệ R với S trên các thuộc tính A và B với phép
so sánh bằng ( = ), được định nghĩa là:
70
CHƯƠNG 3 3.5 Chuyển đổi từ mô
71
Cách chuyển một mô hình thực thể kiên kết sang mô hình quan hệ
Quy tắc 1: Các thực thể (trừ thực thể yếu) các bảng/quan hệ
Quy tắc 2: Thực thể yếu bảng (Khóa của chủ sẽ thành khóa ngoại)
Quy tắc 3 : Liên kết 1-1 khoá của 1 bên sang làm khoá ngoại ở bên
kia.
Quy tắc 4: Liên kết 1-N khoá của bảng bên 1 trở thành khoá ngoại
của bên nhiều.
Quy tắc 5: Liên kết M-N Thêm 1 bảng mới.
Quy tắc 6: Thuộc tính đa trị Thêm 1 bảng mới
Quy tắc 7: Liên kết bậc >2 Thêm 1 bảng mới
Quy tắc 8: Xử lý quan hệ cha con, chuyên biệt và tổng quát hóa
72
Quy tắc 1: Các thực thể (trừ thực thể yếu) các bảng/quan hệ
73
74
Quy tắc 2: Thực thể yếu bảng/quan hệ (Khóa của thực thể chủ
sẽ thành khóa ngoại)
75
Quy tắc 3 : Liên kết 1-1 Xác định một quan hệ S_T. Kiểu thực
thể có sự tham gia toàn bộ vào là S, thực thể còn lại là T.
- Đưa khóa chính của T sang làm khóa ngoại của S.
- Thuộc tính của mối quan hệ S_T trở thành thuộc tính của S
76
Quy tắc 4: Liên kết 1-N khoá của bảng bên 1 trở thành khoá
ngoại ở bảng bên nhiều.
77
Quy tắc 5: Liên kết M-N Thêm 1 bảng/quan hệ mới R, chuyển
khóa
chính của hai quan hệ phía M và N thành khóa ngoại của quan hệ
R. Khóa chính của R là sự kết hợp của hai khóa ngoại.
78
Quy tắc 6: Thuộc tính đa trị Thành 1 bảng/quan hệ mới
- Thuộc tính khóa (hoặc 1 phần) của thực thể chính chuyển thành khóa
ngoại của quan hệ mới.
- Khóa chính của quan hệ mới là khóa chính của bản thân quan hệ +
khóa ngoại do thực thể chính chuyển sang.
79
Quy tắc 7: Liên kết bậc >2 Thêm 1 bảng/quan hệ mới R
- Khóa chính của các quan hệ tham gia liên kết được đưa làm khóa ngoại của
quan hệ R và các khóa ngoại này đồng thời đóng vai trò là khóa chính của R
80
Quy tắc 8: Xử lý quan hệ cha con, chuyên biệt và tổng quát hóa
- Attr(R) là thuộc tính của R, PK(R) là khoá của R.
Chuyển đổi mỗi chuyên biệt hoá có: m lớp con { S1, S2 , … ,
Sm} và lớp cha C, thuộc tính của C là { k, a1, a2 , …, an} và k là
khoá chính.
Có 4 lựa chọn sau:
Lựa chọn 1:
- Tạo quan hệ L cho lớp cha C với các thuộc tính Attrs(L)={k, a1,
…, an} và khoá của L là: PK(L)=k.
- Tạo quan hệ Li cho mỗi lớp con tương ứng Si với các thuộc tính
Attrs(Li)={k} U {thuộc tính của Si} và PK(Li)=k
81
-> Chuyển chuyên biệt hoá trên thành các quan hệ sau:
EMPLOYEE(SSN, FName, Minit, LName, BirthDate, Address, Salary)
SECRETARY(SSN, TypingSpeed)
TECHNICIAN(SSN, TGrade)
ENGINEER(SSN, EngType)
82
Lựa chọn 2: Tạo một quan hệ Li cho mỗi lớp con Si , với các
thuộc tính Attr(Li) = {k, a1, a2,..., am} U {thuộc tính của Si} và
PK(Li) = k.
83
Lựa chọn 3: Tạo một quan hệ L với các thuộc tính Attr(L) = {k, a1, a2,
…, an } U {thuộc tính của S1}U… U {thuộc tính của Sm} U {t} và PK(L) =
k. Trong đó, t là thuộc tính phân biệt chỉ ra bản ghi thuộc về lớp con nào,
vì thế miền giá trị của t ={1,2,…,m}.
Ví dụ: Đối với chuyên biệt hoá của EMPLOYEE, ta chỉ tạo ra một quan
hệ L như sau: (JobType là thuộc tính phân biệt)
EMPLOYEE(SSN, FName, Minit, LName, BirthDate, Address, Salary,
TypingSpeed, Tgrad, EngType, JobType)
84
Lựa chọn 4: Tạo một quan hệ L với các thuộc tính Attr(L) = {k, a1 , a2 , …, an } U {thuộc tính của S1} U… U
{thuộc tính của Sm} U {t1 , t2 , …, tmj} và PK(L) = k. Lựa chọn này cho chuyên biệt hoá của các lớp con được
nạp chồng (nhưng cũng áp dụng cho một chuyên biệt tách rời), và với mỗi ti, 1≤ i ≤ m, là thuộc tính BOOLEAN chỉ
ra bộ theo lớp con Si. (Mflag, Pflag thuộc tính phân biệt)
85
86
3.1 Cho các quan hệ R1, R2, R3. Thực hiện các phép toán sau
87
Cho CSDL sau:
Các hãng cung ứng: S (S#, Sname, Status, City)
Các mặt hàng P(P#, Pname, Color, Weight, City)
Sự cung ứng SP (S#, P#, Qty)
Cung cấp: SP
89
1.Đưa ra Mã hàng, Tên hàng có đơn giá bán >200,000
2.Đưa ra tên khách hàng ở Hải Phòng mua hàng ngày 2/2/2013
3.Đưa ra tên hàng được bán trong ngày 2/2/2013
4.Đưa ra các mã hàng chưa từng được bán.
5.Đưa ra các mã khách chưa từng mua hàng từ ngày 12/12/2012.
3.3 Chuyển đổi tất cả các mô hình ER trong bài tập cuối
chương 2 sang mô hình quan hệ
93
1
4.1. Câu lệnh mô tả dữ liệu DDL (Data Definition Language)
2
Một DBMS phải có ngôn ngữ giao tiếp giữa người sử dụng với
CSDL. Ngôn ngữ giao tiếp CSDL gồm các thành phần:
Ngôn ngữ mô tả dữ liệu (Data Definition Languege - DDL): cho phép
khai báo cấu trúc bảng, mối quan hệ, các quy tắc.
Ngôn ngữ thao tác dữ liệu (Data manipulation Language - DML): cho
phép thêm, xoá, sửa.
Ngôn ngữ truy vấn dữ liệu hay ngôn ngữ hỏi đáp có cấu trúc (Structured
Query Language - SQL): cho phép truy vấn các thông tin.
Ngôn ngữ quản lý dữ liệu (Data Control Language - DCL): cho phép
thay đổi cấu trúc, khai báo bảo, cấp quyền.
3
1975-1976: SEQUEL (Structured English Query language) _IBM.
Quan hệ SYSTEM-R
Tất cả các hệ quản trị CSDL lớn trên thế giới cho phép truy cập bằng SQL và hầu
hết theo chuẩn ANSI
4
Ngôn ngữ gần với ngôn ngữ tự nhiên (tiếng Anh)
SQL là ngôn ngữ phi cấu trúc, tức là trong các lệnh của SQL người sử dụng
CHỈ CẦN đưa ra yêu cầu hệ thống CÁI GÌ chứ không cần chỉ ra phải làm
THẾ NÀO.
Ví dụ: Cho cấu trúc dữ liệu để quản lý học sinh như sau
SQL được chia 2 loại: SQL (ngôn ngữ hỏi) và PL/SQL (ngôn ngữ lập trình).
5
Một số quy ước
Các biến cú pháp người sử dụng phải điền cụ thể vào khi viết lệnh (<
>)
Các thành phần tuỳ chọn ([ ]).
Thành phần bắt buộc phải chọn trong danh sách: ({ }).
Lệnh SQL có thể được viết trên nhiều dòng và kết thúc lệnh bởi dấu
chấm phẩy ( ; ),
Từ khoá, tên, hàm, tên thuộc tính, tên bảng, tên đối tượng thì không
được phép viết tách xuống hàng. SQL không phân biệt chữ hoa và chữ
thường.
6
Ví dụ CSDL QLHanghoa
Loaihang(Maloai, tenloai)
7
SQL chuẩn (86, 89, 92, 96) quy định cách đặt tên tên bảng, cột, View,
ràng buộc toàn vẹn,… như sau:
Gồm tối đa 32 ký tự chữ cái, chữ số và dấu (_), bắt đầu bằng chữ cái hoặc (_).
Tên bảng phải là duy nhất trong CSDL và tên bảng trung gian, và không trùng
với từ khoá.
Tên cột của một bảng là khác nhau, có thể giống nhau nếu chúng nằm trong
các bảng khác nhau.
Một số HQTCSDL cho phép tên có dấu cách, khi thao tác phải bao bởi cặp []
-- là chú thích
9
SQL Server cung cấp 6 loại kiểu dữ liệu
1. Kiểu dữ liệu Exact Numeric (số chính xác, không sai số) trong SQL
12
Tạo CSDL
CREATE DATABASE <tên CSDL>
VD: Tạo CSDL QLHANGHOA
Create Database QLHANGHOA;
Tạo bảng CSDL
CREATE TABLE <tên bảng>
( <tên cột 1> <kiểu dữ liệu 1> (<kích thước 1>),
…,
<tên cột n> <kiểu dữ liệu n> (<kích thước n>),
[[CONSTRAINT <tên RB1>] <Ràng buộc 1>,
…,
[CONSTRAINT <tên RBn>] <Ràng buộc n>] )
13
Các dạng ràng buộc gồm:
14
Ví dụ CSDL
Loaihang(Maloai, tenloai)
15
Ví dụ: Tạo bảng HANG
16
Ví dụ: Tạo bảng HANG
Create table HANG(
Mah char(5) not Null Primary Key,
Tenh char(30),
Slton int); Hoặc
Hoặc Create table HANG(
Create table HANG( Mah char(5) not Null,
Mah char(5) not Null, Tenh char(30),
Tenh char(30), Slton int,
Slton int, Primary Key(mah));
Constraint H_PK Primary Key
(Mah));
17
Tạo bảng KHACH với tên và địa chỉ là duy nhất. Mặc định điện
thoại là ‘0’,
18
tạo bảng HoaDon
Create table HOADON
(Sohd char(5) not null primary key,
ngayhd date,
mak char(10),
foreign Key (mak) References khach(mak));
19
Ví dụ : Tạo bảng ChitietHD
Create table ChitietHD
(Sohd char(5) not null,
mah char(5) not null,
slban int,
Primary key (sohd,mah),
foreign Key (sohd) References hoadon(sohd),
check (slban>=0));
Hoặc
Create table ChitietHD
(Sohd char(5) not null,
mah char(5) not null,
slban int,
Constraint CT_PK Primary key (sohd,mah),
Constraint HD_FK foreign Key(sohd) References
hoadon(sohd),
Constraint CK_SLB check (slban>=0));
20
NHANVIEN (MaNV, Ho, Hodem, Ten, NgaySinh, DiaChi, Gioitinh,
Luong, MaNguoitheodoi, MaPhong)
Phongban (MaPhong, TenPhong, MaNQL, NgayBDQL)
Phong_Diachi(MaPhong, Diachi)
DuAn( MaDA, TenDA, DiachiDA, MaPhong)
NV_DA(MaNV, MaDA, SoGio)
21
NguoiPT(MaNV, TenNPT, GioitinhNPT, Nsinh, Moiquanhe)
Xoá một bảng
DROP TABLE <tên bảng>;
22
Sửa đổi cấu trúc của bảng
Thêm một ràng buộc
ALTER TABLE <tên bảng>
ADD CONSTRAINT <Tên RB>;
Thêm một cột
ALTER TABLE <tên bảng>
ADD <tên cột><kiểu dữ liệu>;
Xoá một cột
ALTER TABLE <tên bảng>
DROP COLUMN <tên cột> [ràng buộc];
Thay đổi kiểu dữ liệu của cột
ALTER TABLE <tên bảng>
ALTER COLUMN <tên cột> <kiểu dl mới>;
23
Ví dụ:
Thay đổi độ rộng của cột địa chỉ trong bảng Khach
25
Bổ sung giá trị mới
Có thể thêm vào bảng mỗi lần một bản ghi hoặc nhiều bản ghi lấy kết
INSERT INTO <tên bảng> [(tên cột 1>, <tên cột 2>,…)]
Số lượng biểu thức và kiểu giá trị của các biểu thức phải tương ứng
với số lượng và kiểu giá trị của các tên cột trong danh sách tên cột
của bảng.
26
Các giá trị phải phù hợp với các ràng buộc toàn vẹn định nghĩa trên quan
hệ, trong đó có ràng buộc toàn vẹn về khoá chính (Primary key), khoá
ngoại (Foreign key) và miền giá trị.
27
Thêm một hay nhiều bộ giá trị từ truy vấn.
INSERT INTO <tên bảng> [(<tên cột 1>, <tên cột 2>,…)]
Nếu giá trị của các biểu thức sau từ khoá SELECT hoàn toàn phù hợp
về số lượng, miền giá trị và thứ tự của các cột trong bảng thì danh sách
tên các cột của bảng sau khi từ khoá INTO có thể được bỏ qua.
28
Tạo mới một bảng với các bộ giá trị lấy từ CSDL
Into KHHANOI
From KHACH
30
Sửa nội dung của bộ
Ví dụ: Sửa số lượng hàng tồn kho của tất cả các mặt hàng còn lại một nửa.
Update HANG
Set SLTon=SLTon/2;
31
Xoá bộ
Các bản ghi thoả mãn điều kiện sau WHERE sẽ bị xoá khỏi bảng, nếu
không có mệnh đề WHERE thì tất cả các bản ghi của bảng sẽ bị xoá khỏi
bảng.
33
Cú pháp tổng quát của câu lệnh như sau:
[INTO tenbangmoi]
VD: Cho biết tên các khách hàng của cửa hàng
Select TENK
From KHACH;
Nếu không muốn lấy tên các khách hàng trùng nhau thì dùng từ khoá DISTINCT.
Muốn hiển thị hết tất cả các cột của bảng dùng ký tự đại diện “*”
Select *
From KHACH; 35
Có thể dùng các phép toán số học +,-,*,/, ^,%, các hàm tính toán
From HANG;
Có thể thay đổi tên của các cột trong bảng kết quả ta dùng từ
khoá AS
Select MAK AS ma_so_khach_hang
From KHACH;
36
Nhận xét: Sau từ khoá SELECT ta còn có thể có từ khoá TOP n.
Điều này cho phép chúng ta chỉ hiển thị n hàng trong bảng kết
quả. Thông thường khi dùng TOP thì thường kết hợp với mệnh
đề sắp xếp ORDER BY.
37
WHERE <điều kiện chọn>
Các bản ghi thoả mãn <điều kiện chọn > mới được thể hiện trong bảng kết
quả.
Điều kiện chọn có thể chứa các phép toán And, Or, Between, Not Between,
like (so sánh xâu), In, is [not] Null, =,!=, <, <=, >, >=.
Chú ý: Trong SQL hằng ký tự được bao bởi cặp ‘ ’. Trong Access dấu * thay
thế cho một nhóm ký tự, dấu ? thay thế cho một ký tự, hằng ký tự là cặp dấu
nháy kép “”, hằng ngày tháng là cặp dấu # #.
38
Ví dụ:
Hiển thị các mặt hàng có số lượng tồn lớn hơn 100
Select *
From HANG
Where SLTON>100;
Cho hiển thị các khách hàng ở địa chỉ bắt đầu bằng chữ H
Select *
From KHACH
Where diachi like ‘H%’; ‘H_a%’
39
Toán tử so sánh Diễn tả
= So sánh bằng
<> hoặc != Khác
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
So sánh nằm trong khoảng value1
BETWEEN value1 AND value2
và value2
LIKE So sánh chuỗi tương đối
40
Cho phép so sánh một chuỗi với chuỗi khác (có chứa các ký tự
đại diện) sử dụng toán tử LIKE
1 kí tự (_): ‘H_A’
Nhiều kí tự: ‘%OA%’
Ký tự Mô tả
_ Thay cho một ký tự đơn
% Thay cho một chuỗi
Thay cho một ký tự đơn trong khoảng được bao bởi
[]
cặp dấu ngoặc vuông
41
FROM <bảng1, bảng2,…>
Cho biết các thông tin về khách hàng của các hoá đơn trong tháng
5/2010
Select KHACH.MaK,KHACH.TenK
From KHACH, HOADON
Where (month(NgayHD)= 5) and (year(NgayHD)=2010) and
(HOADON.MaK = KHACH.MaK);
SELECT *
FROM KHACH
Khach(Mak, tenk, diachi, dienthoai)
nhau.
Select KH.*
43
Cho CSDL sau
NHANVIEN(MaNV, Hoten, Luong, GioiTinh,MaDV, MaNQL, CongViec)
DONVI (MaDV,TenDV, DiaChi)
1. Cho biết lương trung bình của các nhân viên nữ
2. Cho biết lương cao nhất, lương thấp nhất, lương trung bình trong công ty.
3. Cho biết trong công ty có bao nhiêu nhân viên nữ.
4. Cho biết công ty có bao nhiêu nhân viên nam là “Kỹ sư”
5. Cho biết Họ tên, Tên đơn vị, địa chỉ của các nhân viên nam
6. Cho biết các nhân viên có lương 200, 300, 500
7. Cho biết các nhân viên là người quản lý
44
ORDER BY <tên cột> | <biểu thức> [ASC | DESC], <tên
Biểu thức phải có giá trị số: nó thể hiện số thứ tự của cột trong bảng kết quả.
Sắp xếp theo thứ tự tăng dần (ASC - mặc định là ASC), giảm dần (DESC) theo
Cho biết 3 mặt hàng đầu tiên có số lượng tồn kho cao nhất (sắp xếp giảm theo
From HANG
Cho biết các khách hàng được sắp xếp theo địa chỉ, nếu cùng
địa chỉ thì giảm theo tên
Select *
From KHACH
Order By DIACHI Asc, TENK Desc;
46
GROUP BY <tên cột 1>,<tên cột 2>,…
Nhóm các bản ghi có giá trị giống nhau trên các cột chỉ định.
HAVING theo sau GROUP BY dùng để kiểm tra điều kiện nhóm. Nhóm
nào thoả mãn điều kiện sau HAVING thì mới được hiển thị.
From KHACH
Group by diachi;
47
Cho biết các khách hàng có nhiều hơn 2 lần mua hàng
Select MAK, count(MAK) AS so_lan_mua
From HOADON
Group By MAK
Having count(MAK)>2;
Chú ý: nếu vừa có điều kiện Where và Having thì điều kiện sau
Where được xử lý trước. Chỉ có những bộ nào thoả mãn điều kiện
Where mới được nhóm và sau khi nhóm xong mới kiểm tra điều
kiện sau Having.
48
Cho biết các khách hàng có nhiều hơn 10 lần mua hàng trong
From HOADON
Group By Mak
Having count(Mak)>10;
Chú ý: Chỉ có các cột phân nhóm mới được thể hiện trên mệnh
đề Select.
49
Tính tổng số lượng hàng của mỗi hoá đơn bán
From chitietHD
Group By SOHD;
Khi phân nhóm dữ liệu ta có thể sử dụng các hàm phân nhóm
để tính toán trên mỗi nhóm như count, sum, avg, max, min,…
50
Các hàm tính toán trên nhóm các bảng ghi
COUNT (*| <tên cột> - đếm số bản ghi có giá trị xác định tại cột được
cho bởi <tên cột>
SUM (<biểu thức>) – tìm tổng giá trị các biểu thức
AVG (<biểu thức>) – tính giá trị trung bình của biêu thức dựa trên các
bản ghi của các nhóm.
Các hàm này còn thường được đi kèm với mệnh đề GROUP BY
51
Cho biết số lượng tồn lớn nhất và nhỏ nhất của các mặt hàng
From HANG;
Đưa ra số lượng lớn nhất của một mặt hàng trong mỗi đơn hàng.
From ChitietHD
Group By SOHD;
Chú ý: các hàm SUM, MAX, MIN, AVG chỉ áp dụng với biểu thức kiểu số.
52
Các hàm tính toán trên bản ghi
SQRT (x) Căn bậc hai của x (Access, SQL–Server :SQR (x) )
Các hàm lượng giác: SIN, COS, TAN, ASIN, ACOS, ATAN…
53
ROUND(n[,m]): Cho giá trị làm tròn của n (đến cấp m, mặc
nhiên m=0).
phân.
54
SQRT(n): Cho căn bậc 2 của n, n>=0
n<0 có SIGN(n)= -1
n=0 có SIGN(n)= 0
n>0 có SIGN(n)= 1
55
Các hàm xử lý chuỗi ký tự.
CONCAT(char1, char2): Cho kết hợp của 2 chuỗi ký tự, tương tự như
56
Các hàm xử lý chuỗi ký tự.
hoa
hoa)
bằng n. Nếu chuỗi char1 ngắn hơn n thì thêm vào bên trái
chuỗi char2 cho đủ n ký tự. Nếu chuỗi char1 dài hơn n thì
giữ lại n ký từ tính từ trái sang 57
LTRIM(char1, n [,char2]): Bỏ các ký tự trống bên trái
NLS_INITCAP(char): Cho chuỗi với ký tự đầu các từ là chữ hoa, các chữ
SUBSTR(char, m [,n]): Cho chuỗi con của chuỗi char lấy từ vị trí m vế
phải n ký tự, nếu không chỉ n thì lấy cho đến cuối chuỗi
58
TRANSLATE(char, from, to): Cho chuỗi trong đó mỗi ký tự trong
chuỗi from thay bằng ký tự tương ứng trong chuỗi to, những ký tự
trong chuỗi from không có tương ứng trong chuỗi to sẽ bị loại bỏ.
ASCII(char): Cho ký tự ASCII của byte đầu tiên của chuỗi char
59
Các hàm xử lý ngày tháng và thời gian.
MONTH_BETWEEN(d1, d2): Cho biết số tháng giữa ngày d1
và d2.
ADD_MONTHS(d,n): Cho ngày d thêm n tháng.
DAY (dd): Cho số thứ tự ngày trong tháng của biểu thức ngày
dd
60
Các hàm xử lý ngày tháng và thời gian.
MONTH (dd) Cho số thứ tự tháng trong năm của biểu thức ngày dd
61
Các hàm chuyển đổi kiểu giá trị.
FORMAT (biểu thức, mẫu): Đổi biểu thức có kiểu bất kỳ thành
Họ các hàm chuyển đổi biểu thức có kiểu bất kỳ thành một giá
62
Các phép toán trên tập hợp gồm: Hợp (UNION) hoặc UNION ALL, Giao
(INTERSECT), Trừ (MINUS)
Điều kiện Các bảng có cùng số cột như nhau.
Phép UNION
VD: GS có KHACH1 lưu các khách ở miền bắc, KHACH2 là khách miền
nam. Đưa ra Tên khách có Diachi ở ‘Hanoi’ hoặc ‘BinhDuong’
SELECT tenk
FROM KHACH1
WHERE diachi=‘Hanoi'
UNION
SELECT tenk
FROM KHACH2
WHERE diachi=‘BinhDuong' 63
Các câu truy vấn trên nhiều bảng, về bản chất là giống như trên một
bảng, tức là chỉ cần chỉ ra thông tin gì cần tìm và lấy từ các nguồn dữ
liệu nào. Các bảng nguồn cần chỉ ra trong FROM.
Nếu các bảng nguồn có các tên thuộc tính giống nhau thì tên thuộc
tính này phải được viết tường minh trong biểu thức tìm kiếm với tên
bảng đi kèm phía trước.
Các bảng được liên kết với nhau qua phép kết nối của mệnh đề FROM
hoặc thông qua điều kiện của mệnh đề WHERE. Nếu không thể hiện
mối quan hệ này, kết quả sẽ là bảng tích Đề các của bảng 2.
64
Select …
From …
Cho biết tên các khách hàng mua hàng trong năm 2011
Select KH.Tenk
From KHACH KH, HOADON HD
Where (KH.Mak = HD.Mak) and (year(NgayHD)= 2011);
Ta có thể sử dụng phép kết nối nội Inner join để viết lại câu lệnh trên
Select KHACH.Tenk
From KHACH Inner Join HOADON on KHACH.Mak=HOADON.Mak
Where year(NgayHD)= 2011;
65
Kết nối ngoại gồm 2 loại, kết nối trái (Left Outer Join),
Cho biết các thông tin về khách hàng và các đơn mua
66
Kết nối ngoại gồm 2 loại, kết nối trái (Left Outer Join), kết nối phải
(Right Outer Join)
LEFT JOIN trả về tất cả các dòng có ở bảng trái, mặc dù bảng
phải không thỏa mãn. Nếu dữ liệu có ở bảng trái mà không có ở
bảng phải thì dữ liệu vẫn hiển thị.
RIGHT JOIN trả về tất cả các dòng có ở bảng phải, mặc dù bảng
trái không thỏa mãn. Nếu dữ liệu có ở bảng phải mà không có ở
bảng trái thì vẫn được hiển thị.
67
Cho biết các thông tin về khách hàng và các
68
Một truy vấn lồng vào một truy vấn khác gọi là Subquery, Subquery
cũng bao gồm các mệnh đề cơ bản như Query và có thể lồng nhau
nhiều mức.
Subquery được bao bởi hai dấu ngoặc và lồng vào truy vấn tại mệnh
đề Where hoặc Having.
Cho biết đầy đủ thông tin về những mặt hàng có tồn kho lớn
nhất
Select *
From HANG
Truy vấn con thực hiện trước và tìm ra số lượng hàng tồn
lớn nhất, sau đó làm điều kiện cho truy vấn ngoài để liệt kê
những mặt hàng có số lượng tồn bằng với số lượng tồn lớn
70
Truy vấn lồng nhau tương quan:
Cho biết n mặt hàng có tồn kho lớn nhất (VD n=5)
Select *
From HANG H
Where (Select count(*) From HANG Where
SLTON>H.SLTON)<5;
Với mỗi mặt hàng của truy vấn ngoài, truy vấn con bên trong sẽ đếm các
mặt hàng có số lượng tồn lớn hơn mặt hàng đó, nếu có ít hơn n mặt hàng
có số lượng tồn lớn hơn chúng thì có nghĩa là nó nằm trong n mặt hàng lớn
nhất.
71
Phép toán tập hợp In, Not in
Để xem một bản ghi có thuộc một bảng hay không ta dùng
Subquery với toán tử In hoặc Not In.
VD: Cho biết các khách hàng ở Hanoi mua hàng trong
tháng 1/2011
Select *
From KHACH
Where DIACHI like ‘Hanoi’ and
Khach.MAK in (Select Hoadon.MAK From HOADON
Where (month(NGAYHD)=1) and
(year(NGAYHD)=2011)); 72
Cho biết các mặt hàng chưa từng được bán
Select *
From HANG
73
Phép so sánh tập hợp
Chú ý: =some tương đương với In nhưng <>some không tương đương với
Not In, <>all tương đương với Not In
Liệt kê các mặt hàng không phải là mặt hàng có tồn kho lớn nhất
Select *
From HANG
Where SLTON<some (Select SLTON From HANG);
74
Cho biết số lượng trung bình một lần đặt hàng của một mặt hàng
Select MAH, Avg(SLB)
From ChitietHD
Group By MAH;
Muốn biết mặt hàng có số lượng đặt hàng trung bình lớn nhất. Thường nghĩ
đến dùng Max(Avg(SLB)), nhưng SQL không cho phép các hàm thống kê lồng
nhau. Cách giải quyết là:
Select MAH, Avg(SLB)
From ChitietHD
Group By MAH
Having Avg(SLB)>=All (Select Avg(SLB)
From ChitietHD
Group By MAH);
75
Phép toán kiểm tra bảng rỗng
Exists(Q)= True nếu có ít nhất một bản ghi trong Q
= false nếu ngược lại
Not Exists(Q)= True Q không có bộ nào
= false nếu ngược lại
Cho biết thông tin về các mặt hàng được bán trong tháng 7/2012
Select H.*
From HANG H
Where Exists (Select *
From HOADON D, ChitietHD C
Where (year(NGAYHD)=2012) And
(month(NGAYHD)=7) and (D.SOHD=C.SOHD)
and (C.MAH=H.MAH));
76
Kiểm tra các bản ghi trùng nhau
77
Tìm các khách hàng chỉ mua hàng một lần
Select *
From KHACH K
Select *
From KHACH K
Dạng 2: Cấp quyền đối với các đối tượng trong CSDL
GRANT ALL | permission [,...,permissionN]
ON table_name |view_name [(column1 [,..., columnN])]
|ON stored_procedure
TO account [, ...,accountN] [WITH GRANT OPTION]
80
Permission:
Quyền trên bảng/view: Select,Insert, Delete, Update
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE
CREATE RULE
CREATE DEFAULT
BACKUP DATABASE
BACKUP LOG
81
Được giao quyền cho người khác [WITH GRANT OPTION]
REVOKE được dùng để huỷ bỏ quyền đã được cấp phát cho người sử
dụng. Câu lệnh này cũng có 2 dạng như GRANT
Cú pháp có 2 dạng như sau:
Thu hồi lại quyền DELETE của GiaLinh đối với bảng HANG
83
4.1: Cho cơ sở dữ liệu dùng để quản lý các chuyến đi của một công ty du lịch
1. DIADIEM(MADD, TENDD)
Mỗi một địa điểm có một mã số( MADD) dùng để phân biệt với các địa điểm
khác và có một tên (TENDD)
2. XE(BIENSO, KHTD)
Mỗi một xe có một biển số duy nhất(BIENSO) để phân biệt với các xe khác và
có số lượng khách tối đa mà xe đó có thể chở(KHTD)
3. HUONGDV(MAHDV, HTHDV, DCHDV)
Mỗi một hướng dẫn viên của công ty có một mã số duy nhất để phân
biệt(MAHDV), có họ tên(HTHDV) và địa chỉ của hướng dẫn viên(DCHDV)
4. CHUYENDI(MACD, TENCD, NGKH, NGKT, KHDK)
Mỗi một chuyến đi có một mã số để phân biệt(MACD), thông tin về chuyến đi
bao gồm: tên chuyến đi(TENCD), ngày khởi hành(NGKH), ngày kết thúc(NGKT)
và số khách dự kiến(KHDK).
5. CTIETCD(MACD, MADD, SNLUU)
Chi tiết của chuyến đi (MACD) là các địa điểm mà chuyến đi đó đi qua
(MADD), (SNLUU) là số ngày lưu lại tại điểm du lịch đó.
6.HUONGDAN(MACD, MAHDV)
Ghi nhận các hướng dẫn viên(MAHDV) tham gia hướng dẫn cho chuyến
đi (MACD)
7. KHACH(MACD, HTKH, TUOI, DCKH, DTKH)
Ghi nhận thông tin về khách hàng đăng ký vào chuyến đi(MACD), bao
gồm: họ tên(HTKH), tuổi (TUOIKH), địa chỉ(DCKH) và điện thoại liên lạc
của khách(DTKH)
8. XEPV(MACD, BIENSO)
Ghi nhận các xe (BIENSO) phục vụ cho chuyến đi (MACD)
Dùng câu lệnh SQL để thực hiện các yêu cầu sau:
1. Tạo tất cả các bảng trên.
2. Cho biết danh sách các hướng dẫn viên của công ty.
3. Liệt kê đầy đủ thông tin về các điểm du lịch liên kết với công ty.
4. Cho biết đầy đủ thông tin về các địa điểm mà chuyến đi mã số
CD2000 đi qua.
5. Liệt kê các lữ khách của chuyến đi CD2000.
6. Cho biết số lượng khách của chuyến đi CD1999.
7. Chuyến đi nào có số lượng khách lớn hơn số lượng dự kiến.
8. Cho biết tổng số lượng khách của tất cả các chuyến đi có ngày khởi
hành trong tháng 12/2001.
9. Cho biết số ngày lưu lại trung bình, số ngày lưu lại lớn nhất, nhỏ nhất
qua các điểm du lịch của chuyến đi CD2000.
10. Cho biết số lượng xe phục vụ cho chuyến đi CD2000.
11. Điểm du lịch nào(Mã số, tên) có số ngày lưu lại lớn nhất của chuyến đi CD2000
12. Điểm du lịch nào(Mã số, tên) có số ngày lưu lại lớn hơn số ngày lưu lại trung
bình qua các điểm của chuyến đi CD2000.
13. Điểm du lịch SaPa(mã số SP) có bao nhiêu chuyến đi ghé qua và khai thác
được bao nhiêu ngày(tổng số ngày phục vụ).
14. Liệt kê 3 điểm du lịch đầu tiên của chuyến đi CD2000 có số ngày lưu lại lớn
nhất.
15. Liệt kê 3 điểm du lịch đầu tiên của chuyến đi CD2000 có số ngày lưu lại ít nhất.
16. Liệt kê các điểm du lịch của chuyến đi CD2000 ngoại trừ điểm có số ngày lưu
ít nhất
17.Cho biết số lượng các điểm du lịch, tổng số ngày lưu lại tại các địa điểm, số
lượng các hướng dẫn viên, số lượng xe phụ vụ cho từng chuyến đi có ngày khởi
hành trong tháng 12/2000.
4.2: Xét CSDL quản lý công chức viên chức CCVC, gồm các bảng DONVI,
LOAIDV, NGACHCBVC, NGACHBACLUONG và CBVC.
1. DONVI(Madv, Tendv, loai) là quan hệ đơn vị gồm mã đơn vị, tên đơn vị, loại đơn vị.
2. LOAIDVI(Loai, Tenloaihinh), là quan hệ về loại hình tổ chức của đơn vị gồm loại hình
và tên loại hình.
5. CBVC(MaDV, MaCC, HT, GT, NS, Ngach, Bac, Ngayxep) là quan hệ về cán bộ viên
chức gồm có Mã đơn vị, mã công chức, họ tên, giới tính, ngày tháng năm sinh, ngạch
lương, bậc lương, ngày xếp lương
Hãy viết các câu lệnh truy vấn thông tin cho các câu hỏi sau đây:
1. Cho danh sách CBVC theo thứ tự Alphabet của tên của các CBVC.
2. Cho danh sách CBVC có hệ số lương từ 3.0 trở lên.
3. Cho biết tổng hệ số lương của từng đơn vị.
4. Cho danh sách CBVC thuộc các đơn vị mà tên có chữ "phòng".
5. Cho danh sách CBVC thuộc các đơn vị có tên loại hình tổ chức là "hành
chinh"
6. Cho danh sách CBVC thuộc ngạch "cán sự" có bậc 7 trở lên, hoặc những
người có hệ số lương lơn hơn 3.06
7. Cho danh sách CBVC (mà) có thời hạn xếp lương tính đến cuối năm 1998 là
3 năm trở lên đối với các ngạch chuyên viên và chuyên viên chính; hoặc 2 năm
trở lên đối với các ngạch còn lại. (Đây là danh sách CBVC đến hạn nâng lương
trong năm 1998).
8. Cho danh sách các CBVC có hệ số lương cao hơn hệ số lương của những
người thuộc ngạch "cán sự".
4.3: Cho lược đồ CSDL QLSV
1. KHOA(Makh, Vpkh)
Mỗi khoa có 1 mã số phân biệt (Makh), ta biết được vị trí của văn phòng
khoa.
2. LOP(Malop, Makh)
Mỗi lớp có 1 mã số để phân biệt (Malop) thuộc duy nhất một khoa nào đó
(Makh).
Mỗi sinh viên có một mã số để phân biệt với các sinh viên khác (Masv),
thông tin của từng sinh viên là họ và đệm (Hosv), tên (Tensv), năm
sinh(Nssv), địa chỉ (Dcsv), có phải là lớp trưởng không (Loptr) và thuộc một
lớp duy nhất nào đó (Malop)
4. MONHOC(Mamh, Tenmh, LT, TH)
Mỗi môn học có một mã số duy nhất (Mamh), có một tên (Tenmh), số tiết lý
thuyết (LT), số tiết thực hành (TH)
Mỗi lớp học (Malop) trong từng học kỳ (HK) sẽ có một số môn học (Mamh)
được giảng dạy cho lớp đó.
6. DIEMSV(Masv, Mamh, Lan, Diem)
Ghi nhận điểm của các môn học (Mamh) ở lần thi nào (Lan), của sinh
viên(Masv).
Viết câu lệnh SQL để thực hiện yêu cầu sau:
1. Cho biết danh sách lớp
2. Cho biết danh sách sinh viên lớp TH1.
3. Cho biết danh sách SV khoa CNTT
4. Cho biết chương trình học của lớp TH1
5. Điểm lần 1 môn CSDL của SV lớp TH1.
6. Điểm trung bình lần 1 môn CTDL của lớp TH1.
7. Số lượng SV của lớp TH2.
8. Lớp TH1 phải học bao nhiêu môn trong HK1 và HK2.
9. Cho biết 3 SV đầu tiên có điểm thi lần 1 cao nhất môn CSDL.
10. Cho biết sĩ số từng lớp.
11. Khoa nào đông SV nhất.
12. Lớp nào đông nhất khoa CNTT.
13. Môn học nào mà ở lần thi 1 có số SV không đạt nhiều nhất.
14. Tìm điểm thi lớn nhất của mỗi SV cho mỗi môn học (vì SV được thi
nhiều lần).
15. Điểm trung bình của từng lớp khoa CNTT ở lần thi thứ nhất môn
CSDL.
16. Sinh viên nào của lớp TH1 đã thi đạt tất cả các môn học ở lần 1
của HK2.
17. Danh sách SV nhận học bổng học kỳ 2 của lớp TH2, nghĩa là đạt
tất cả các môn học của học kỳ này ở lần thi thứ nhất.
18. Biết rằng lớp TH1 đã học đủ 6 học kỳ, cho biết SV nào đủ điều kiện
thi tốt nghiệp, nghĩa là đã đạt đủ tất cả các môn.
BỘ MÔN HỆ THỐNG THÔNG TIN 1
Vấn đề của một sơ đồ quan hệ được thiết kế chưa tốt:
Giả sử ta cần một cơ sở dữ liệu lưu trữ thông tin về các
hãng cung ứng. Sơ đồ quan hệ được thiết kế trong đó tất cả các
thuộc tính cần thiết được lưu trong đúng 1 quan hệ:
Suppliers(sid, sname, city, num_of_emps, product, quantity)
2
Dư thừa dữ liệu: Hãng nào cung ứng nhiều hơn 1 mặt hàng thì thông tin của
hãng đó sẽ bị lặp lại trong bảng (VD S1), mặt hàng được cung ứng bởi nhiều
hãng cũng bị lặp lại (VD Screw)
Dị thường dữ liệu khi thêm: Nếu có một hãng chưa cung cấp mặt hàng nào,
vậy giá trị cho thuộc tính product và quantity trong bộ dữ liệu mới được thêm
vào sẽ không được xác định.
Dị thường dữ liệu khi xóa: Nếu một hãng chỉ cung cấp 1 mặt hàng, nếu ta
muốn xóa thông tin về sự cung cấp này thì ta sẽ mất thông tin về hãng
cung cấp.
Dị thường dữ liệu khi sửa đổi: Do thông tin bị lặp lại nên việc sửa đổi 1 bộ dữ
liệu có thể dẫn đến việc không nhất quán trong dữ liệu về một hang nếu sơ sót
không sửa đổi trên toàn bộ các bộ giá trị liên quan đến hãng đó.
3
Nếu sơ đồ trên được thay thế bằng 2 sơ đồ quan hệ
–Supp(sid, sname, city, numofemps)
–Supply(sid, product,quantity)
Thì tất cả các vấn đề nêu ở trên sẽ được loại bỏ.
Tuy nhiên khi tìm kiếm dữ liệu thì chúng ta phải thực
hiện kết nối 2 bảng chứ không chỉ là chọn và chiếu
trên 1 bảng như ở cách thiết kế trước
4
Xác định được 1 tập các lược đồ quan hệ cho phép tìm kiếm
thông tin một cách dễ dàng, đồng thời tránh được dư thừa dữ
liệu
Hướng tiếp cận: Một trong những kỹ thuật được sử dụng là Tách
các lược đồ quan hệ có vấn đề thành những lược đồ quan hệ
chuẩn hơn. Phụ thuộc hàm có thể được sử dụng để nhân biết
các lược đồ chưa chuẩn và đề xuất hướng cải tiến.
5
5.1. Phụ thuộc hàm
6
5.1 PHỤ THUỘC HÀM
7
Định nghĩa và biểu diễn phụ thuộc hàm.
dẫn Armstrong.
8
Khái niệm: Quan hệ R được định nghĩa trên tập thuộc tính U=A1A2...An.
X,Y U là 2 tập con của tập thuộc tính U. Nếu tồn tại một ánh xạ f: X
Y thì ta nói rằng X xác định hàm Y, hay Y phụ thuộc hàm vào X, và ký
hiệu là X Y.
Định nghĩa hình thức của phụ thuộc hàm như sau: Quan hệ Q (ABC)
có phụ thuộc hàm A xác định B (ký hiệu là A B) nếu: q, q’ Q, sao
cho q.A = q’.A thì q.B = q’.B
9
A B được gọi là phụ thuộc hàm hiển nhiên nếu B A.
A B được gọi là phụ thuộc hàm nguyên tố, hoặc nói cách khác,
B được gọi là phụ thuộc hàm đầy đủ (fully functional dependence)
vào A nếu A’ A đều không có A’ B.
10
Quan hệ CHITIETHD (Sohoadon, Mahang, Soluongdat,
Dongia, Trigia) có các phụ thuộc hàm sau:
f1: Sohoadon, Mahang Soluongdat.
Thuộc tính Dongia phụ thuộc hàm không đầy đủ vào khóa
(Sohoadon, Mahang), bởi vì nó chỉ phụ thuộc vào mặt hàng
(thông qua Mahang). 11
Bao đóng của tập phụ thuộc hàm
Gọi F là tập các phụ thuộc hàm của R(U), XY là một phụ thuộc hàm; X,YU.
XY được suy diễn lôgic từ F nếu R thỏa các phụ thuộc hàm của F thì cũng
thỏa XY, ký hiệu: F |= XY.
Gọi F+ là bao đóng (Closure) của F, tức là tập các phụ thuộc hàm được suy diễn
lôgic từ F.
Nếu F = F+ thì F là họ đầy đủ (full family) của các phụ thuộc hàm.
Bài toán thành viên (MemberShip) nêu vấn đề phụ thuộc hàm XY có phải là
được suy diễn lôgíc từ F hay không (tức là XY F+ ?) là một bài toán khó giải.
Nó đòi hỏi chúng ta phải có một hệ luật dẫn để suy diễn lôgic các phụ thuộc
hàm.
12
Năm 1974, Armstrong đã đưa ra hệ tiên đề như sau:
X, Y, Z, W U. Phụ thuộc hàm có các tính chất sau đây:
(1) Tính phản xạ: Nếu Y X thì X Y.
(2) Tính gia tăng: Nếu X Y thì X Z YZ.
(3) Tính bắc cầu: Nếu X Y và Y Z thì X Z.
Đã chứng minh hệ tiên đề Armstrong là đúng đắn và đầy đủ.
13
Ví dụ: Cho lược đồ quan hệ R (A,B,C,D,E,G,H) và tập các phụ thuộc
15
Ví dụ: Cho lược đồ quan hệ R (A,B,C,D,E,G,H,I,J) và tập các phụ thuộc hàm
F = {ABE, AGJ, BEI, EG, GIH }. Tìm chuỗi suy diễn ABGH
1. ABE (cho trước - phụ thuộc hàm f1)
2. ABAB (phản xạ)
3. ABB (luật tách)
4. ABBE (hợp của 1 & 3)
5. BEI (cho trước - phụ thuộc hàm f3)
6. ABI (bắc cầu 4 & 5)
7. EG (cho trước - phụ thuộc hàm f4)
8. ABG (bắc cầu 1 & 7)
9. ABGI (hợp 6 & 8)
10. GIH (cho trước - phụ thuộc hàm f5)
11. ABH (bắc cầu 9 & 10)
12. ABGH (hợp 8 & 11)
16
Bổ đề 3: X Y được suy diễn lôgic từ F nhờ hệ
Xf+ là bao đóng của tập thuộc tính X đối với tập
17
Định nghĩa: Bao đóng (Closure) của tập các thuộc tính X
đối với tập các phụ thuộc hàm F (ký hiệu là XF+ hoặc X+) là
tập tất cả các thuộc tính A có thể suy dẫn từ X nhờ tập bao
đóng của các phụ thuộc hàm F+:
18
Thuật toán tìm bao đóng: XF+ = { A | X A F+}
Void Closure (X, F)
{
ketqua=X;
While (có sự thay đổi trên tập ketqua)
For (mỗi pth WZ trong F)
If W ketqua
ketqua = ketqua Z
Return ketqua;
};
Tập ketqua là bao đóng của tập thuộc tinh X
19
Ví dụ 4.19: cho tập phụ thuộc hàm F={ABC, IK, GBH, CGI,
BH} của quan hệ R(ABCDEFGHIK). Hãy tính bao đóng của tập
thuộc tính AG, (AG)+
Áp dụng thuật toán trên như sau:
• Ban đầu: ketqua=AG
• Ta lần lượt xét tất cả các phụ thuộc hàm trong F:
• ABC có A ketqua nên ketqua=ketqua BC = AGBC
• IK có I ketqua nên ketqua vẫn giữ nguyên
• GBH có GB ketqua nên ketqua=ketqua H = AGBCH
• CGI có CG ketqua nên ketqua=ketqua I = AGBCHI
• BH có B ketqua nhưng đã có H trong ketqua nên ketqua giữ
nguyên.
20
• Quay lại từ đầu tập F lần 2:
nguyên
• Tiếp tục các phụ thuộc hàm sau không làm thay đổi kết quả.
• Lần này tập ketqua có thay đổi nên lại quay lại từ đầu tập F lần 3:
Phụ thuộc hàm nào sau đây thuộc F+: DEBC, ACBE
22
Định nghĩa: Hai tập phụ thuộc hàm F và G dựa trên Q được
gọi tương đương. Ký hiệu là FG nếu F+=G+
F G thì F được gọi là 1 phủ của G, hay G là một phủ của F.
Để chứng minh F G ta đi chứng minh:
(i) XY F XY G+
Để chứng minh điều này ta tính (X)G+, nếu Y(X)G+ thì
XY G+
(ii) WZ G W Z F+
Tương tự ta tính WF+, nếu Z WF+ thì WZ F+
23
Cho F là tập các phụ thuộc hàm dựa trên Q và một tập các
RBTV dạng phụ thuộc hàm.
Ta biết từ F ban đầu ta có tìm ra nhiều tập Fi tương đương
với F bằng cách suy từ các phụ thuộc hàm của F. Quan hệ
thoả các Fi thì cũng thoả F và ngược lại.
Ví dụ: F={AB, BC}, ta có : F1={AB,BC,AC}, F2=
{AB,BC,AC, ABBC}, …và F1 F , F2 F
Vấn đề được đặt ngược lại là nếu cho F thì ta có thể tìm ra
được tập phụ thuộc hàm đơn giản hơn F và tương đương
với F?.
24
Định nghĩa thuộc tính dư thừa (Extraneous):
Một thuộc tính được gọi là dư thừa trong tập phụ thuộc hàm F nếu
như ta bỏ nó ra khỏi các phụ thuộc hàm mà bao đóng của F vẫn
không đổi.
Cho XY F
25
Phủ tối tiểu của F ký hiệu là Fc là tập phụ thuộc hàm tương đương
26
Thuật toán 1 tìm phủ tối tiểu từ F
X1Y1 và X1 Y2 X1Y1Y2
28
Thuật toán 2 tìm phủ tối tiểu từ F
B1: Dùng luật tách, tách các PTH để vế phải chỉ còn 1
thuộc tính.
( X→YZ thành X→Y và X→Z )
29
Ví dụ: Cho F là tập phụ thuộc hàm trên lược đồ quan hệ
R(ABC) như sau: F={ABC, BC, AB, ABC}. Tìm phủ tối
thiểu Fc của F
B1: Có ABC nên ta tách thành AB, AC
F1={AC, BC, AB, ABC}
B2: Loại bỏ thuộc tính dư thừa ở vế trái
Xét AB C, tính B+=BC không chứa A nên A không dư
thừa
tính A+=ABC B nên B là dư thừa
F2={AC, BC, AB}
30
B3: Loại bỏ các PTH dư thừa
Xét BC: Tính ( B+F-(B->C)) = B không chứa C nên BC không dư thừa.
Xét AB: Tính ( A+F-(A->B)) = AC không chứa B nên AB không dư thừa.
31
5.2. KHÓA VÀ CÁC
TÍNH CHẤT
32
Định nghĩa khóa của quan hệ theo phụ thuộc hàm:
(ii) ! K’ K mà K’ U.
33
Cho lược đồ quan hệ R(U,F) với U là tập thuộc tính, F là
tập phụ thuộc hàm
- Giao của các khóa ký hiệu là X được xác định như sau:
X=U– ( R L)
L RF
X được tính bằng tập thuộc tính U trừ đi hợp của các vế
phải trừ vế trái của phụ thuộc hàm.
Lược đồ quan hệ có một khóa duy nhất khi X+ = U.
34
5.3. THUẬT TOÁN TÌM
KHÓA
35
Thuật toán tìm 1 khóa
Thuật toán 1:
Ý tưởng: Xuất phát từ một siêu khóa K (có thể là U), lần lượt xem xét và loại bỏ thuộc
tính A nếu (K - Ai)+ = U
Input: R(U,F), U = A1A2... An
Output: Tập thuộc tính khóa K
Bước 1: K=U;
Bước 2: While (Ai K)
If ((K - Ai)+ = U) K= K – Ai
K còn lại chính là một khóa cần tìm.
Nếu muốn tìm các khóa khác nhau (nếu có) của lược đồ quan hệ, ta
có thể thay đổi thứ tự loại bỏ các phần tử của K.
36
Ví dụ 4.22: Cho lược đồ quan hệ R(U), U=ABC, F={A->B, A->C, B->A}. Hãy tìm
một khóa của R.
Giải: K= ABC
37
Thuật toán 2: Biểu diễn lược đồ quan hệ R (U) bằng đồ thị có
hướng như sau:
Mỗi nút của đồ thị là tên một thuộc tính của R.
Thuộc tính mà tới nó chỉ có các cung đi tới gọi là nút lá.
Như vậy khóa phải bao phủ tập các nút gốc, đồng thời không
chứa bất kỳ nút lá nào của đồ thị.
38
Các bước thực hiện
39
Ví dụ: Cho R (A, B, C, D, E, H) với F = { ABC, CDE, ECA, CDH,
HB }. Tìm khóa của R.
Nút D là nút gốc, các nút còn lại
đều không phải nút lá. Khóa của R
phải chứa thuộc tính D.
D+ = D, bởi vì không tìm thấy phụ
thuộc hàm nào có vế trái chỉ có một
mình D.
Vì CD có mặt trong vế trái của 2
phụ thuộc hàm do đó ghép thêm C
vào tập các nút gốc để xét khóa.
41
R (A, B, C, D, E, G),
F = { AC; BD,E; DE; AED; ABG }
Thuật toán tìm tất cả các khóa của lược đồ quan hệ:
Input: R(U,F)
Bước 1: Tìm tập X là giao của các khóa theo công thức X U ( R L)
L RF
Bước 2: Tính X+
Nếu X+ = U thì quan hệ R chỉ có một khóa duy nhất K=X
Ngược lại thì R có nhiều hơn một khóa và chuyển sang bước 3.
43
Ví dụ 4.25: Cho lược đồ quan hệ R(U), U=ABC và tập phụ thuộc hàm
F={A->B, A->C, B->A}. Hãy tìm tất cả các khóa của R.
Giải:
Ta có A+=ABC=U
Ta có B+=ABC=U
44
Ví dụ 4.26: Cho lược đồ quan hệ R(U), U=ABCDG và tập phụ thuộc
hàm F={B->C, C->B, A->GD}. Hãy tìm tất cả các khóa của R.
Ta có giao của các khóa là X = {ABCDG} - {CBGD} = {A}
Vì A+ = AGD ≠ U nên quan hệ có nhiều hơn một khóa.
Bổ xung thêm các thuộc tính khác vào cùng với giao của các khóa ta
sẽ có các khóa khác nhau của lược đồ quan hệ.
Bổ xung thêm B, ta có (AB)+ =AGDBC = U
Bổ xung thêm C, ta có (AC)+ =AGDCB = U
Vậy quan hệ R có 2 khóa AB hoặc AC.
45
5.1: Cho lược đồ CSDL về hệ thống kế toán của một
doanh nghiệp với các quan hệ sau:
1. DM-TK (Mã-TK, Tên-TK)
Qui tắc: Danh mục các tài khoản hạch toán kế toán theo chế độ kế toán
hiện hành của Nước CHXHCN Việt nam bao gồm các tài khoản. Mỗi tài
khoản có một tên gọi cụ thể và một mã số duy nhất để phân biệt với mọi tài
khoản khác.
2. TK-ĐỐI-ỨNG (Mã-TK, TK-Đối-ứng);
Qui tắc: Mỗi tài khoản, theo chế độ hạch toán hình chữ T, khi được phát sinh
bên NỢ (hạch toán tăng) thì phải có một mã tài khoản đối ứng bên CÓ (hạch
toán giảm) để đảm bảo cân đối tài khoản. Một tài khoản được ghi NỢ có thể
có nhiều tài khoản khác nhau được ghi CÓ. Mã tài khoản NỢ và mã tài
khoản đối ứng đều phải thuộc danh mục các tài khoản
3. SỔ-CT (Loại-CT, Số-CT, NGày-CT, Diễn-Giải, Số- Tiền,
TK-NỢ, TK-CÓ).
Qui tắc: Trong phương pháp kế toán ghi sổ, các chứng từ ban
đầu được ghi vào sổ theo dõi, gọi là sổ chứng từ. Mỗi chứng từ
đều thuộc một loại chứng từ cụ thể (LOẠI- CT); có một số
chứng từ (SỐ-CT) phân biệt với mọi chứng từ khác. Chứng từ
được ghi rõ ngày tháng phát sinh (NGÀY-CT), diễn giải nội
dung phát sinh (DIỄN- GIẢI), số tiền phát sinh (SỐ-TIỀN), mã
tài khoản ghi NỢ (TK-NỢ) và mã tài khoản đối ứng ghi CÓ
(TK-CÓ);
4. SỔ-CÁI (Mã-TK, NỢ-ĐK, CÓ-ĐK, PS-NỢ, PS-CÓ, NỢ-CK, CÓ-CK).
Qui tắc: Từ sổ chứng từ (SỔ-CT), các chứng từ ghi sổ được tổng hợp
theo từng loại tài khoản (Mã-TK) và lập thành sổ cái. Mỗi mã tài khoản
(Mã-TK) trong SỔ-CÁI được phản ảnh duy nhất 1 lần các số dư NỢ, dư
CÓ đầu kỳ (NỢ-ĐK, CÓ-ĐK); số phát sinh NỢ, CÓ trong tháng (PS-NỢ,
PS-CÓ), và số dư NỢ, dư CÓ cuối kỳ (NỢ-CK, CÓ-CK). Mã tài khoản
phải có trong danh mục tài khoản (DM-TK) nêutrên.
Câu 1: Xác định phụ thuộc hàm
Câu 2: Xác định khóa của các quan hệ trong CSDL nêu trên.
5.2: Vận dụng hệ tiên đề Armstrong để tìm chuỗi suy diễn:
1. Chứng minh rằng R thỏa F thì R thỏa các phụ thuộc hàm AB E, AD BC.
Hay nói cách khác các phụ thuộc hàm AB E, AD BC được suy diễn logic từ
F.
2. Tính bao đóng của các tập thuộc tính: A+, (AC)+
3. Tìm tất cả các khóa của quan hệ R
5.4: Xác định khóa của các lược đồ quan hệ sau:
Q1 (ABCDEH) với F = { AB C; CD E; AH B; B D; A D }
Q3 (MNPQRSTUW) ˜với F = { M W; MR T; T R; QR T; M U; MT
P; NP Q; UW R }
2
6.1 SỰ CẦN THIẾT PHẢI
CHUẨN HÓA
3
Do thiết kế kém sẽ gây nguy hiểm cho CSDL.
Trùng lắp thông tin: không có khả năng trình bày thông tin một cách chắc
chắn.
VD: Cho một lược đồ quan hệ dùng để ghi nhận giáo viên và lớp giảng dạy
của giáo viên
GIANGDAY(MONHOC, SOTIET,LOP,GV,HV,DC)
Các phụ thuộc hàm: MONHOC SOTIET; MONHOC, LOP GV;
GVHOCVI,DC. Có tình trạng dl như sau:
4
Do có phụ thuộc hàm MONHOC SOTIET nên số tiết
của dòng thứ 2 và dòng thứ 4 gây nên trùng lắp thông tin.
Các dl gây trùng lắp thông tin là các dl có thể suy đoán
được một cách chắc chắn và duy nhất từ phụ thuộc hàm.
5
6.2. PHÂN RÃ LƯỢC
ĐỒ QUAN HỆ
6
Từ một lược đồ quan hệ kém phân rã thành những lược đồ quan hệ
tốt hơn.
Ví dụ: Phân rã lược đồ quan hệ GIANGDAY thành hai lược đồ TKB
và GV
TKB(MONHOC, SOTIET, LOP)
GV(LOP,GV,HOCVI,DC)
Tình trạng dữ liệu của hai lược đồ trên như sau:
7
Những rắc rối xảy ra
Để trả lời câu hỏi “Cho biết thông tin của giáo viên dạy CSDL của
CNTT1” ta phải kết nối tự nhiên hai quan hệ TKB và GV.
Ta thấy hai giáo viên dạy môn CSDL của lớp CNTT1 trong khi thông tin ban đầu
chỉ có N.V.A
Vấn đề này gọi là phân rã không bảo toàn thông tin. 8
Xét phụ thuộc hàm trên lược đồ phân rã:
TKB(MONHOC, SOTIET, LOP) MONHOC SOTIET
GV(LOP, GV, HOCVI, DC) GV HOCVI, DC
Từ hai phụ thuộc hàm trên ta không thể suy ra được phụ thuộc hàm
MONHOC, LOP GV.
Như vậy, hai phụ thuộc hàm trên không đảm bảo kiểm tra các ràng buộc
toàn vẹn do 3 phụ thuộc hàm ban đầu gây ra.
Vấn đề này gọi là phân rã không bảo toàn phụ thuộc hàm.
Phải có quy tắc phân rã để không vi phạm hai vấn đề trên.
9
Cho lược đồ quan hệ Q. Ta có định nghĩa sau:
10
Điều kiện để phân rã bảo toàn thông tin
Cho Q và F là tập phụ thuộc hàm, Q1 và Q2 là một phân rã
bảo toàn thông tin trên Q nếu thoả một trong hai phụ thuộc
hàm sau:
Q1 Q2 Q1\Q2 hoặc Q1 Q2 Q2\Q1
Vì vậy nếu X Y F+ thì phân rã sau sẽ bảo toàn thông tin
Q1(XY), Q2(Q-Y)
Thật vậy, vì Q1 có XY và Q1Q2=X, Q1\Q2=Y do đó
Q1Q2Q1\Q2
11
VD: Cho R(ABCDE), F={AB C, C D, D AE}
Kiểm tra xem các phép tách có bảo toàn thông tin không?
R1(ABD), R2(ACE)
R1(ABC), R2(ABDE)
R1(ADE), R2(DEBC)
VD: Lược đồ GIANGDAY nếu phân rã thành hai lược đồ sau thì bảo
toàn thông tin.
Q1(MONHOC, SOTIET, LOP, GV), Q2(GV, HOCVI, DC)
vì Q1Q2=GV , Q2-Q1= HOCVI,DC mà GV HOCVI,DC
12
Phương tiện để kiểm tra phân rã bảo toàn thông tin:
13
Áp dụng luật phụ thuộc hàm để biến đổi bảng T thành T* theo thuật
toán sau:
While (X A F)
{ Chọn dòng W1 và W2 sao cho W1.X = W2.X
If (W1.A != W2.A)
{ Nếu W1.A = aj và W2.A = bk thay W2.A bằng W1.A
Nếu W1.A = bk và W2.A = aj thay W1.A bằng W2.A
Nếu W1.A = bj và W2.A = bk thay W2.A bằng W1.A
}}
Cuối cùng xem bảng kết quả nếu trong bảng xuất hiện hàng gồm các kí
hiệu a1, a2, a3, …, am thì phân rã bảo toàn thông tin.
14
Ví dụ: Q1(MONHOC, SOTIET, LOP, GV), Q2(GV, HOCVI, DC)
15
Ví dụ 2: cho R(ABCDE), F={A BC, B C, C D, DE C,
CE A}
Kiểm tra tách có bảo toàn thông tin R1(AD), R2(AB), R3(BD),
R4(CDE)
16
A B C D E
R1 a1 b1 a2 b2 a4 b3
R2 a1 a2 b4 b2 B5 -->a4 b6
R3 b7 a2 b8 b2 A4 b9
R4 b10 b11 a3 a4 a5
17
A B C D E
R1 a1 b1 b2 a4 b3
R2 a1 a2 b4 b5 b6
R3 b7 a2 b8 a4 b9
R4 b10 b11 a3 a4 a5
18
19
VD3: R(ABCDE)
F: {AC,BC, CD, DEC, CEA)
A B C D E
R1 a1 b1 b2 a4 b3
R2 a1 a2 b4 b5 b6
R3 b7 a2 b8 b9 a5
R4 b10 B11 a3 a4 a5
R5 a1 b12 b13 b14 a5
20
AC, Do 2 hàng bằng nhau trên A, nên b2, b4 và b13 thành b2
A B C D E
R1 a1 B1 b2 a4 b3
R2 a1 a2 b2 b5 B6
R3 b7 a2 B8 B9 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 b2 b14 a5
21
BC; Do 2 hàng (R2,R3) bằng nhau trên B, nên b8 thành b2;
A B C D E
R1 a1 B1 B2 a4 b3
R2 a1 a2 b2 b5 B6
R3 b7 a2 b2 B9 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 b2 b14 a5
22
CD, Do 2 hàng (R1,R2,R3,R5) bằng nhau trên C, nên các
kí hiệu đối với D là b5,b9,b14 thành a4
A B C D E
R1 a1 B1 b2 a4 b3
R2 a1 a2 b2 a4 B6
R3 b7 a2 b2 a4 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 b2 a4 a5
23
DEC; Do 2 hàng (R3,R4,R5) bằng nhau trên DE, nên
các kí hiệu đối với C là b2 ở R3,R5 thành a3
A B C D E
R1 a1 B1 b2 a4 b3
R2 a1 a2 b2 a4 B6
R3 b7 a2 a3 a4 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 a3 a4 a5
24
CEA; Do 2 hàng (R3,R5) bằng nhau trên CE, nên các kí hiệu đối
với A là b7 ở R3 thành a1
A B C D E
R1 a1 B1 B2 a4 B3
R2 a1 a2 b2 a4 B6
R3 a1 a2 a3 a4 a5
R4 b10 B11 a3 a4 a5
R5 a1 B12 a3 a4 a5
25
Cho LĐQH Q và tập PTH F
Phân rã Q thành {Q1, Q2…Qn} thì mỗi Q sẽ xác định một tập PTH Fi:
Fi = {X Y : XY Qi và X Y F+}
Fi được gọi là tham chiếu của F+ lên Qi
26
Ví dụ: Cho Q(ABCD), F = {A B, B C, C D, D A}
Q1(AB), F1 = {A B}
Q2(BC), F2 = {B C}
Q3(CD), F3 = {C D}
Lúc này F’ = F1 F2 F3 = {A B, B C, C D}
=>Nếu vội vã kết luận phân rã trên không bảo toàn phụ thuộc hàm là sai.
27
Thực ra:
Vậy F1 = {A B, B A}
Vậy F2 = {B C, C B}
Vậy F3 = {C D, D C}
Vậy F’ = F1 F2 F3 = { A B,B A, B C, C B, C D, D C}
28
6.3. CÁC DẠNG CHUẨN
CỦA QUAN HỆ
29
Xét dạng chuẩn dựa trên phụ thuộc hàm
Thuộc tính khoá: Thuộc tính tham gia vào bất kỳ khoá nào đó của
quan hệ chứa nó. Ngược lại gọi là thuộc tính không khoá.
Ví dụ: Q(ABCDEF) A, B, D, E là các thuộc tính khoá. C, F là các
YA F+
30
Ví dụ: Cho F = {AB C, B C} thì:
AB C: không là phụ thuộc hàm nguyên tố vì có B C.
31
ĐN: Lược đồ quan hệ Q ở dạng 1NF nếu tất cả các thuộc tính của Q đều là
thuộc tính đơn/nguyên tố.
Lược đồ CSDL C ở 1NF nếu tất cả các Qi của C đều ở 1NF.
Đây là dạng chuẩn đơn giản nhất, nó không chú ý đến các phụ thuộc hàm
do đó có rất nhiều trùng lắp thông tin do các phụ thuộc hàm trên gây ra.
32
Chuyển quan hệ trên thành dạng chuẩn 1 (bằng cách xác định tập
thuộc tính {DNumber, DLocation} là khoá chính)
Đây là dạng chuẩn đơn giản nhất, nó không chú ý đến các phụ thuộc
hàm do đó có rất nhiều trùng lắp thông tin do các phụ thuộc hàm trên gây
ra.
33
ĐN: Lược đồ quan hệ Q ở dạng 2NF nếu ở 1NF và tất cả thuộc tính không khoá
Xét một tình trạng Q có sự trùng lặp thông tin (các giá trị trong ngoặc là trùng lặp)
Q A B C D
(a1) b1 (c1) d1
(a1) b2 (?) d2
a2 (b3) c2 (d3)
a3 (b3) c3 (?)
34
EMP_DEPT đạt 2NF
35
VD: Cho Q(ABCD), F = {AB C, C D} ở 2NF vì:
Khoá chính là AB; C,D là hai thuộc tính không khoá. AB C và ABD đều là các
phụ thuộc hàm nguyên tố.
C và D đều là phụ thuộc đầy đủ vào khoá.
37
Tách thành EMPLOYEE, DEPARTMENT đạt 3NF
38
VD: Cho Q(ABCD), F = {AB CD} ở dạng 3NF
Vì AB CD có vế trái là một siêu khoá.
VD: Cho Q(ABCDE), F = {AB CDE, B D, DE ABC} ở dạng 3NF vì:
AB CDE có vế trái là một siêu khoá.
B D có (VP) – (VT) = D chứa trong khoá DE.
DE ABC có vế trái là một siêu khoá.
Xét một tình trạng Q có sự trùng lặp thông tin:
Q A B C D E
a1 (b1) c1 (d1) e1
a2 (b1) c2 (?) e1
Ở dạng 3NF nếu có nhiều khoá sẽ có khả năng trùng lặp thông tin do các
phụ thuộc hàm loại (ii) trong ĐN2.
39
ĐN: Lược đồ quan hệ Q ở BCNF nếu ở dạng 1NF và tất cả phụ thuộc hàm
không hiển nhiên X Y của F+ thì X là một siêu khoá (X chứa một khoá nào
đó).
Lược đồ CSDL C ở dạng BCNF nếu tất cả các Qi của C đều ở dạng BCNF.
Ở dạng chuẩn BCNF không có sự trùng lắp thông tin do phụ thuộc hàm gây
ra. Tuy nhiên dạng BCNF có điều kiện quá khắt khe, đôi khi người ta chỉ cần
chấp nhận ở dạng 3NF.
40
6.4. CHUẨN HÓA LƯỢC
ĐỒ QUAN HỆ
41
Thuật toán phân rã
42
Dựa vào điều kiện phân rã bảo toàn thông tin: Q thành Q1 và Q2 thoả Q1
Q2 Q1\Q2 hay Q1 Q2 Q2\Q1.
Thuật toán phân rã thành các lược đồ ở dạng chuẩn BCNF như sau:
Cho Q và tập phụ thuộc hàm F xác định trên Q
Phân_rã = {Q} ;
done = false ;
Tính F+;
while (not done)
if (có một Qi trong Phân_rã không ở dạng BCNF)
{ X Y là phụ thuộc hàm không hiển nhiên trên Qi thoả:
X Qi F+ và X Y = thì
Phân_rã = (Phân_rã – Qi) (XY) (Qi – Y)
}
else done = true;
43
Kết quả ta được tập Phân_rã gồm các lược đồ ở dạng BCNF.
VD: Cho Q(ABCD), F = {AB C, C A, B D}
Q(ABCD) không ở dạng BCNF, chọn C A. Phân rã thành Q1 và Q2
Q1(CA), F1 = {C A}, BCNF
Q2(BCD), F2 = {B D}, không BCNF
Q2(BCD) không ở BCNF, chọn BD. Phân rã thành Q21, Q22
Q21(BD), F21 = {B D}, BCNF
Q22(BC), F22 = , BCNF
45
Thuật toán sau cho phân rã đạt tối thiểu dạng 3NF.
Cho Q và tập PTH F xác định trên Q.
Tính Fc là một phủ tối thiểu của F;
Xác định các khoá của Q ;
i=0;
for (Mỗi phụ thuộc hàm X Y trong Fc)
if (không có Qj, j = 1,2,…i chứa XY)
{ i++ ;
Qi = XY ;
}
if (Không có Qj, j=1,2,…i chứa khoá của Q)
{ i++;
Qi = bất kỳ khoá nào của Q ;
}
46
return (Q1,Q2,…,Qi) ;
VD: Phân rã Q(ABCDE), F = {A CD, C D, B E}
Tính được Fc = {A C, C D, B E}; khoá là AB
Suy ra phân rã thành:
Q1 = AC
Q2 = CD
Q3 = BE
Không có Qi nào chứa khoá AB nên ta có: Q4 = AB
Kết quả đạt được:
Q1(AC), F1 = {A C}, đạt 3NF (đạt luôn BCNF)
Q2(CD), F2 = {C D}, đạt 3NF (đạt luôn BCNF)
Q3(BE), F3 = {B E}, đạt 3NF (đạt luôn BCNF)
Q4(AB), F2 = , đạt 3NF (đạt luôn BCNF)
47
Nhận xét:
Tối thiểu đạt dạng chuẩn 3NF .
Bảo toàn PTH vì mỗi PTH trong Fc cho một quan hệ
và quan hệ này xác định luôn PTH đó.
Vậy F’ = Fi, F’ Fc F.
Bảo toàn thông tin vì có ít nhất một lược đồ trong
phân rã chứa khoá.
48
Cho lược đồ quan hệ R(C,T,H,R,S,G) với tập phụ thuộc hàm
tối thiểu F: {C->T, HR->C,
HT->R, CS->G, HS-> R}.
Yêu cầu: Phân rã lược đồ quan hệ trên thành các quan hệ
con đều ở dạng 3NF
49
6.5. CÁCH THỨC CHUẨN
HÓA THỰC TẾ
50
Trong thực tế khi chuẩn hoá lược đồ CSDL thường thực hiện theo các
bước:
Bước 1: Kiểm tra xem quan hệ đã đạt đạt dạng chuẩn 1NF chưa?. Nếu
chưa ở 1NF có nghĩa là có các thuộc tính chưa nguyên tố/lặp. Tiến hành
tách các thuộc tính đó.
Bước 2: Kiểm tra xem chúng có ở dạng 2NF không?, nghĩa là kiểm tra
xem các thuộc tính không khoá có phụ thuộc hoàn toàn vào khoá chính
không?. Tiến hành tách những PTH bộ phận đó thành các bảng con để
giảm sự trùng lặp thông tin.
51
Bước 3: Kiểm tra xem chúng đã đạt dạng chuẩn 3NF chưa?, nghĩa là
các thuộc tính không khoá thì phụ thuộc trực tiếp vào khoá chính. Tiến
hành tách những PTH bắc cầu thành bảng con.
Bước 4: kiểm tra xem chúng đã đạt dạng chuẩn BCNF chưa?, nghĩa là
tất cả các phụ thuộc hàm đều có vế trái là siêu khoá. Tiến hành tách
PTH có vế trái chưa phải là siêu khoá.
52
Ta có thể tóm tắt lại quá trình chuẩn hoá như sau:
53
Ví dụ minh hoạ
Giả sử khi khảo sát thực tế về việc mua bán vật tư, ta có được lược đồ quan hệ
sau:
PHIEUNHAP(sophieu, ngaynhap, makhach,tenkh, diachikh, dienthoai, makho,
1 2 3 4 5 6 7
diachikho, hinhthucthanhtoan, loaitien, mavattu*, tenvattu*, soluong*,
8 9 10 11 12 13
donvitinh*, dongia*, tyleVAT*)
14 15 16
54
Bước1: Khoá chính của quan hệ PHIEUNHAP là K=(1,11)=(sophieu, mavattu).
Chưa ở dạng 1NF vì có các thuộc tính (có dấu *) là thuộc tính lặp. Ta tiến hành
Quan hệ 2: các thuộc tính còn lại và phần khoá chính xác định phần này(các
55
Quan hệ 2 gồm các thuộc tính (2,3,4,5,6,7,8,9,10) và khoá (1)
PHIEUNHAP(sophieu, ngaynhap, makhach, tenkh, diachikh, dienthoai,
1 2 3 4 5 6
makho, diachikho, hinhthucthanhtoan, loaitien)
7 8 9 10
Phụ thuộc hàm của quan hệ này F2={1(2,3,4,5,6,7,8,9,10);3 (4,5,6); 7 8}
Khoá chính là {1}.
56
Bước 2: Xét xem các quan hệ 1 và 2 ở trên đã đạt dạng chuẩn 2NF chưa?.
Nếu chưa ta tiến hành tách đôi thành quan hệ 1: gồm các thuộc tính phụ
thuộc vào một phần khóa chính và phần khoá chính; Quan hệ 2 : các thuộc
tính còn lại và khoá chính.
Xét quan hệ 1: Ta thấy chưa đạt dạng 2NF vì khoá là {1,11}, mà lại có phụ
thuộc hàm 11->12,14,15,16, nghĩa là các thuộc tính 12,14,15,16 không phụ
thuộc hoàn toàn vào khoá. Để đạt dạng chuẩn 2 ta tách thành 2 quan hệ:
Quan hệ 1_1: VATTU(mavattu, tenvattu, donvitinh, dongia, tyleVAT)
11 12 14 15 16
F1_1={11 12,14,15,16}, khoá là {11}
Quan hệ 1_2: DONGVATTU(sophieu, mavattu, soluong)
1 11 13
F1_2={(1,11) 13}
57
- Xét quan hệ 2: đã đạt dạng chuẩn 2NF vì thuộc tính khoá của nó là sophieu và
các thuộc tính đều phụ thuộc hoàn toàn vào khoá.
Bước 3: Xem chúng đã đạt dạng 3NF chưa?. Nếu chưa ta tiến hành tách đôi
thành quan hệ 1: gồm các thuộc tính phụ thuộc bắc cầu và thuộc tính cầu; quan
hệ 2: gồm các thuộc tính còn lại và thuộc tính cầu.
- Xét quan hệ 1_1:
Quan hệ 1_1: VATTU(mavattu, tenvattu, donvitinh, dongia, tyleVAT)
11 12 14 15 16
Đã là dạng chuẩn 3NF vì không có phụ thuộc hàm bắc cầu.
- Xét quan hệ 1_2:
Quan hệ 1_2: DONGVATTU(sophieu, mavattu, soluong)
1 11 13
Đã là dạng chuẩn 3NF vì không có phụ thuộc hàm bắc cầu.
58
- Xét quan hệ 2:
PHIEUNHAP(sophieu, ngaynhap, makhach,tenkh, diachikh, dienthoai, makho,
1 2 3 4 5 6 7
diachikho, hinhthucthanhtoan, loaitien
8 9 10
F2={1->(2,3,4,5,6,7,8,9,10);3->(4,5,6); 7->8}, Khoá chính là {1}
Chưa đạt dạng 3NF vì có PTH bắc cầu: Các thuộc tính (4,5,6) PTH bắc cầu vào
khoá chính qua cầu (3), còn thuộc tính (8) phụ thuộc bắc cầu vào khoá chính qua
cầu (7).
Để có dạng chuẩn 3NF tách thành những quan hệ sau:
Quan hệ 2_1: KHACH(makhach,tenkh, diachikh, dienthoai)
3 4 5 6
F2_1={3->4,5,6}, khoá chính là (3)
59
Quan hệ 2_2: KHO(makho, diachikho)
7 8
F2_2={7->8}; khoá chính là (7)
Quan hệ 2_3: PHIEUNHAP(sophieu, ngaynhap, makhach,
1 2 3
makho, hinhthucthanhtoan, loaitien)
7 9 10
F2_3={1-(2,3,7,9,10)} ; khoá chính là (1)
Bước 4: Kiểm tra xem chúng đạt dạng BCNF chưa?.
Ta thấy tất cả các quan hệ trên đều đã đạt ở dạng BCNF vì tất cả các vế
trái của các phụ thuộc hàm đều là siêu khoá.
60
Tóm lại: Ta có các quan hệ sau khi chuẩn hoá đạt dạng chuẩn
BCNF như sau:
1. VATTU(mavattu, tenvattu, donvitinh, dongia, tyleVAT)
2. DONGVATTU(sophieu, mavattu, soluong)
3. KHACH(makhach,tenkh, diachikh, dienthoai)
4. KHO(makho, diachikho)
5. PHIEUNHAP(sophieu, ngaynhap, makhach, makho,
hinhthucthanhtoan, loaitien)
61
6.1: Xác định khoá và xét các phân rã sau đây theo hai tiêu chuẩn bảo toàn
thông tin và bảo toàn phụ thuộc hàm.
a. Q(ABCD), F = {A BC, C D}
Q1(AB), F1 = {A B}
Q2(CD), F2={CD}
b. Q(ABCD), F={AB, ACD}
Q1(AB), F1={AB}
Q2(ADC),F2={ACD}
c. Q(ABDCE),F={AC, BC, CD, DEC, CEA}
Q1(AB),F1={AD}
Q2(CD),F2=
Q3(AB),F3=
Q4(CD),F4={CD, DEC, CED}
Q5(AB), F5=
d. Q(ABCD), F={AB, CD}
Q1(AB), F1={AB}
Q2(CD), F2={CD}
62
6.2: Xét dạng chuẩn của các lược đồ quan hệ sau:
Q(ABCD), F={AB, CD}
Q(ABCD), F={ABC, CD}
Q(ABCD), F={ABCD, CDAB, CB}
Q(ABCDE), F={ABCD, DE, DEABC}
Q(ABCDEF), F={ABE, ACF, ADB, BC, CD}
6.4: Giả sử bài 3 được phân rã thành Q1(CDEF) và Q2(ABE), hãy xác định F1,
F2 và đánh giá phân rã trên.
63
6.5: Nếu bài 3 được phân rã thành Q1(CF), Q2(AE), Q3(CDE), Q4(AB). Hãy xác
định F1, F2, F3, F4 và đánh giá chúng.
6.6: Cho lược đồ quan hệ
VẬNCHUYỂN(TÀU, LOẠITÀU, CHUYẾN, HÀNG, CẢNG, NGÀY)
Mỗi tàu (TÀU) thuộc duy nhất một loại tàu nào đó (LOẠITÀU), mỗi chuyến có
một mã số riêng biệt (CHUYẾN) dùng để xác định một chuyến tàu (TÀU) chở
một khối lượng hàng hoá nào đó (HÀNG), mỗi chiếc tàu trong một ngày(NGÀY)
chỉ cập vào một cảng duy nhất (CẢNG) của một chuyến vận chuyển nào đó
(CHUYẾN)
Xác định tập các phụ thuộc hàm trên.
Xác định dạng chuẩn của VẬNCHUYỂN
Nếu VẬNCHUYỂN chưa tốt hãy tìm một phân rã tốt cho nó
64
6.7. Cho quan hệ PHIEUNHAP(số phiếu, ngày, mã NCC, tên NCC, địa
chỉ, Mã vật tư, tên vật tư, số lượng, đơn vị, đơn giá)
Có các phụ thuộc hàm
F={ Số phiếu->ngày, mã NCC;
mã NCC->tên NCC, địa chỉ;
mã vật tư->tên vật tư, đơn vị, đơn giá;
số phiếu, mã vật tư -> số lượng}
Giả sử tách thành hai quan hệ:
PHIEUNHAP(số phiếu, ngày, mã NCC, Mã vật tư, tên vật tư, số lượng,
đơn vị, đơn giá)
NHACUNGCAP(mã NCC, tên NCC, địa chỉ)
Kiểm tra xem chúng đạt dạng chuẩn nào? vì sao? 65
Giả sử tách thành các quan hệ:
PHIEUNHAP(số phiếu, ngày, mã NCC)
DONGPHIEU(số phiếu, Mã vật tư, số lượng)
NHACUNGCAP(mã NCC, tên NCC, địa chỉ)
VATTU(Mã vật tư, tên vật tư, đơn vị, đơn giá)
Kiểm tra xem chúng đạt dạng chuẩn nào? vì sao?
6.8. Giả sử có quan hệ BANHANG(Ngày tháng, mã hàng, tên hàng, đơn giá, số
lượng, tổng tiền theo ngày, thanh toán)
Có các phụ thuộc hàm sau:
{mã hàng}->{tên hàng, đơn giá}
{ngày tháng}->{ tổng tiền theo ngày, thanh toán}
{ngày tháng, mã hàng}->{số lượng}
Hãy chuẩn hoá quan hệ BANHANG thành dạng chuẩn BCNF.
66