Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
ÔN TẬP CƠ SỞ DỮ LIỆU
I. TÁCH LƯỢC ĐỒ QUAN HỆ VỀ DẠNG 3NF.
Trước khi tách phải kiểm tra xem lược đồ đã cho ở dạng phủ tối thiểu hay
chưa?
BƯỚC 1:Thuật toán tìm phủ tối thiểu là:
Phụ thuộc hàm tương đương: Cho hai tập phụ thuộc hàm F và G, F và G gọi
là hai tập phụ thuộc hàm tương đương hay F phủ G (G phủ F), nếu mọi phụ
thuộc hàm của F đều thuộc G+ và mọi phụ thuộc hàm của G đều thuộc F+.
Phủ tối thiểu: Cho tập phụ thuộc hàm F của quan hệ R. Phủ tối thiểu của F sẽ
đồng thời thỏa mãn 2 điều kiện sau:
1.Vế phải của F chỉ chứa 1 thuộc tính.
2. Không chứa thuộc tính dư thừa ở vế trái.
3. Không chứa phụ thuộc hàm dư thừa.
Thuật toán tìm phủ tối thiểu là:
Bước 1: tách các phụ thuộc hàm dựa vào luật Tách sao cho Vế phải
của các phụ thuộc hàm chỉ chứa 1 thuộc tính.
Bước 2: Loại bỏ các thuộc tính dư thừa ở vế trái của các phụ thuộc
hàm.
Ở bước này ta chỉ xét các phụ thuộc hàm mà vế trái chứa từ hai thuộc
tính trở lên(ví dụ:ab-->c).
giả sử f:X-->Y thuộc vào tập phụ thuộc hàm F.
B là tập con của X và B-->Y thuộc vào F+.
Khi đó X:=B.
Bước 3::Loại bỏ các phụ thuộc hàm dư thừa.
giả sử f thuộc vào F, và G=F-f
Mà G+=F+ thì f là 1 phụ thuộc hàm dư thừa và khi đó, ta loại bỏ f đi
bằng cách gán F:=G.
BƯỚC 2: loại bỏ tất cả các thuộc tính không liên quan đến bất kỳ phụ thuộc
hàm nào của F
BƯỚC 3: Nếu có một phụ thuộc hàm nào của F mà liên quan đến tất cả các
thuộc tính của R thì kết quả chính là R
BƯỚC 4: Phép tách các phụ thuộc hàm có dạng X-->A thành lược đồ con
Ri(XA).
Nếu X-->A1, X-->A2,....,X->An thuộc vào F thì thay
XA=XA1A2A3....An.
Chủ yếu là sử dụng bước đầu tiên, quan trọng nhất.
Sau đây là 1 ví dụ: Bài 9: Tìm phủ tối thiểu của F.
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
F={ MSCD-->CD
CD-->MSCD;
CD,MSSV-->HG;
MSCD,HG--> MSSV;
CD,HG--> MSSV;
MSCD, MSSV-->HG;
}
ÁP DỤNG :
BƯỚC 1: Tách tất cả các phụ thuộc hàm về dạng vế phải chỉ chứa 1 thuộc
tính, theo bài ra thì bước này không cần làm nữa.
BƯỚC 2: Loại bỏ các thuộc tính dư thừa ở vế phải các phụ thuộc hàm.
- Ta chỉ xét các phụ thuộc hàm 3,4,5,6.
- Xét phụ thuộc hàm CD,MSSV--> HG.
+ giả sử loại bỏ thuộc tính CD .
tính MSSV+=MSSV không chứa HG nên thuộc tính CD là không
dư thừa.
+ giả sử loại bỏ thuộc tính MSSV.
tính CD+=CD,MSCD không chứa HG nên thuộc tính này cũng
không dư thừa.
- Xét phụ thuộc hàm MSCD,HG-->MSSV.
+ giả sử loại bỏ thuộc tính MSCD.
tính HG+= HG ko chứa thuộc tính MSSV nên tt MSCD ko dư
thừa.
+ giả sử loại bỏ thuộc tính HG.
tính MSCD+=CD,MSCD ko chứa MSSV nên thuộc tính này ko dư
thừa.
- Xét tương tự cho các phụ thuộc hàm 5,6: ko có thuộc tính dư thừa.
Vậy sau bước này, tập phụ thuộc hàm F vẫn giữ nguyên.
BƯỚC 3: Loại bỏ các phụ thuộc hàm dư thừa.
Ta phải xét từng phụ thuộc hàm.
- Xét CD-->MSCD:
Loại bỏ pth này ra khỏi F để tính CD+.
CD+=CD khác U nên pth này ko dư thừa.
-tương tự thì pth MSCD-->CD cũng ko dư thừa.
- Xét pth CD,MSSV-->HG.
Loại bỏ phụ thuộc hàm này ra khỏi F để tính (CD, MSSV)+
(CD, MSSV)+=CD,MSCD,MSSV,HG=U .
Mặt khác ta có:
CD-->MSCD
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
CD,MSSV-->MSCD,MSSV (Tăng trưởng)
MSCD,MSSV-->HG
(giả thiết)
CD,MSSV-->HG
(Bắc cầu).
Vì vậy phụ thuộc hàm này dư thừa nên bị loại bỏ ra khỏi F.
Khi đó:
F={
MSCD-->CD
CD-->MSCD;
MSCD,HG--> MSSV;
CD,HG--> MSSV;
MSCD, MSSV-->HG;
}
-XÉT tương tự ta tìm được thêm 1 phụ thuộc hàm dư thừa là:
MSCD,HG-->MSSV.
Vậy phủ tối thiểu của F là:
MSCD-->CD
CD-->MSCD;
CD,HG--> MSSV;
MSCD, MSSV-->HG;
II. CHUẨN HÓA LƯỢC ĐỒ QUAN HỆ VỀ DẠNG BCNF
1.Định nghĩa
- Lược đồ quan hệ R(U) đạt dạng chuẩn BCNF nếu phụ thuộc hàm XA thỏa
mãn A ko thuộc X và X là khóa.
2. Thuật toán
-B1: Ban đầu phép tách chỉ có R.
-B2: Cho lược đồ quan hệ R(U) với tập phụ thuộc hàm F.
Nếu tồn tại 1 phụ thuộc hàm f:XA không là BCNF thì tách lược đồ
quan hệ thành hai lược đồ con là: R1=XA và R2=U- {A}.
Lúc này R1 đạt BCNF với khóa là X.
Lặp lại b2 với lược đồ R2.
Ở mỗi bước kiểm tra xem các lược đồ con đã đạt BCNF chưa.
III. THUẬT TOÁN TÌM 1 KHÓA.
Định nghĩa khóa: Cho lược đồ quan hệ R(U), với U là tập thuộc tính.
K là tập con của U, K gọi là khóa nếu thỏa mãn hai điều kiện:
KU thuộc vào F+ ( nếu K+=U thì K gọi là siêu khóa).
và Không tồn tại K1 là con của K mà K1+=U.
Cho lược đồ quan hệ R(U), với tập phụ thuộc hàm F.
Bước 1: Gán K=U;
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
Bước 2: Gán K=K-A nếu (K-A)+=U, A thuộc U.
Bước 3: Lặp lại bước 3 cho đến khi không thể loại thêm được 1 phần tử nào
nữa.
Kết luận: K chính là khóa cần tìm.
Chú ý: Thay đổi thứ tự loại các thuộc tính sẽ dẫn đến việc tìm được một khóa
khác của lược đồ quan hệ.
Chú ý:
1. Các thuộc tính chỉ nằm bên trái phụ thuộc hàm chắc chắn tham
gia vào khóa.
2. Các thuộc tính chỉ nằm bên phải phụ thuộc hàm chắc chắn không
tham gia vào khóa.
3. Các thuộc tính nằm ở hai bên phụ thuộc hàm có thể tham gia vào
khóa hoặc không.
Ví dụ:
Bài 8: cho lược đồ quan hệ R(ABCD)
F={ABC, DB, CABD }
Bài làm:
Bước 1: Gán K=ABCD;
Bước 2: Gán K=ABCD- A=BCD
Tính K+= (BCD)+= ABCD
Do đó có thể loại được thuộc tính A.
Bước 3: Gán K=BCD-B= CD
Tính K+=(CD)+= ABCD
Do đó có thể loại được thuộc tính B.
Bước 4: Gán K=CD – C=D
Tính K+=D+=DB #ABCD
Do đó không thể loại được thuộc tính C.
Bước 5: Gán K=CD-D=C.
Tính K+=C+=ABCD.
Do dó có thể loại được thuộc tính D.
Vậy 1 khóa cả R(U) vừa tìm được là: C
IV.THUẬT TOÁN TÌM NHIỀU KHÓA
Cho lược đồ quan hệ R(U), với tập phụ thuộc hàm F.
Bước 1: tìm tất cả các tập con của tập thuộc tính U khác tập rỗng.
Giả sử U={A1A2A3..An} thì có 2^n -1 tập con của U khác rỗng.
Đó là: X={X1,X2,X3,.., Xn}
Bước 2: Tính Xi+.
Bước 3: Nếu Xi+=U thì Xi gọi là siêu khóa. Giả sử tập các siêu khóa là
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
S={S1,S2,…, Sk}.
Bước 4: Từ tập các siêu khóa ta tìm tập các khóa như sau:
Với mọi Si, Sj thuộc tập siêu khóa , i # j, i ,j=1,k.
Nếu như Si là tập con của Sj thì loại Sj.
Tập còn lại là tập các khóa.
Ví dụ:
Bài 13: Cho lược đồ quan hệ Q(ABCD)
F={AD, DA, ABC}
Tìm tất cả các khóa của Q.
Bài làm:
Xi
A
B
C
D
AB
AD
AC
BD
BC
CD
ABC
ABD
ACD
BCD
ABC
D
Xi+
Siêu khóa
Khóa
AD
B
C
AD
ABCD
AD
ADC
ABCD
BC
ACD
ABCD
ABCD
ACD
ABCD
ABCD
AB
AB
BD
BD
ABC
ABD
BCD
ABCD
Vậy khóa của lược đồ quan hệ Q là AB và BD.
V.THUẬT TOÁN TÌM KHÓA CẢI TIẾN.
1.Định nghĩa
Tập nguồn(TN): là tập tất cả các thuộc tính chỉ nằm ở bên trái phụ thuộc
hàm hoặc không tham gia vào bất cứ phụ thuộc hàm nào.
Tập trung gian(TG): là tập tất cả các thuộc tính nằm ở cả hai bên phụ thuộc
hàm.
Tập đích(TĐ): là tập tất cả các thuộc tính chỉ nằm bên phải phụ thuộc hàm.
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
2.Thuật toán
Bước 1: Tìm tập trung gian.
Bước 2: Nếu tập trung gian= Rỗng thì Khóa= tập nguồn.
Nếu tập trung gian khác rỗng thì tìm tất cả các tập con của tập trung
gian. Giả sử các tập con đó là: X1,X2,.. Xn.
Bước 3: tính (Xi U TN). Tìm (Xi U TN)+?
Bước 4: Nếu (Xi U TN)+= U thì Xi U TN là siêu khóa.
Bước 5: Từ tập các siêu khóa ta tìm được tập các khóa như thuật toán trên.
Ví dụ: bài 8 tìm khóa của Q(ABCD)
F={AB C, D B, C ABD}
TẬP NGUỒN: RỖNG
TẬP TRUNG GIAN= ABCD
Xi
Xi U TN
(Xi U TN)+
Siêu khóa
Khóa
O
O
O
A
A
A
B
B
B
C
C
ABCD
C
C
D
D
BD
AB
AB
ABCD
AB
AB
AC
AC
ABCD
AC
AD
AD
ABCD
AD
BC
BC
ABCD
BC
BD
BD
BD
CD
CD
ABCD
CD
ABC
ABC
ABCD
ABC
AD
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
ABD
ABD
ABCD
ABD
ACD
ACD
ABCD
ACD
BCD
BCD
ABCD
BCD
ABC
D
ABCD
ABCD
ABCD
Vậy Q có 3 khóa là: C, AB, AD.
VI. THUẬT TOÁN TÌM BAO ĐÓNG CỦA TẬP THUỘC TÍNH.
1.Định nghĩa
Bao đóng của tập phụ thuộc hàm: cho lược đồ quan hệ R(U) và tập phụ
thuộc hàm F, bao đóng của tập phụ thuộc hàm F, ký hiệu F+, là tập tất cả các
phụ thuộc hàm được suy rộng từ F theo hệ tiên đề Amstrong.
Bao đóng của tập thuộc tính: cho X là tập con của tập thuộc tính U.
Bao đóng của X, ký hiệu là X+, là tập tất cả các thuộc tính A sao cho phụ
thuộc hàm XA có thể được suy diễn logic từ F nhờ hệ tiên đề Amstrong.
X+={A|XA thuộc F+}.
Bài toán thành viên:
Cho R(U), tập phụ thuộc hàm F, xác định xem f: X Y có thuộc F+ hay
không?
BG:
X Y thuộc F+ khi và chỉ khi Y thuộc X+.
2. Thuật toán tìm bao đóng của tập thuộc tính
Input: R(U), F,X là tập con của U.
Output: X+?
Bước 1: gán X0=X;
Bước 2: gán Xi+1=Xi U A nếu tồn tại tập thuộc tính Y là con của Xi mà YZ
thuộc vào F+, A thuộc Z.
Bước 3: Ta xây dựng được 1 dãy các tập thuộc tính Xn chứa Xi+1 chứa Xi..
chứa X1 chứa X0.
Thuật toán dừng khi Xi=Xi+1.
Ví dụ: bài 6a:cho R(ABCD), F={A D, D A, AB C}
TÍNH AC+?
BG:
Bước 1: X0=X=AC vì ACAC
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
Bước 2: X1=X0 U D =ACD vì AD
Bước 3: X2=X1 U A=ACD vì DA
Do Xi+1=Xi nên dừng.
Kết luận : AC+= ACD.
*Các khái niệm cơ bản và hệ tiên đề Amstrong cho tập phụ thuộc hàm
1.Phụ thuộc hàm: Cho lược đồ quan hệ R(U), X,Y là tập con của U.
Ta nói X xác định Y hay XY nếu r là một quan hệ của R và với mọii bộ t1, t2
bất kỳ sao cho t1[X]=t2[X] thì t1[Y]= t2[Y].
Hay:
Không tồn tại các bộ giống nhau tại các thuộc tính của X mà khác nhau 1
hay nhiều thuộc tính của Y.
2. Hệ tiên đề Amstrong
a- Phản xạ:
nếu Y là tập con của X thì XY.
b- Tăng trưởng:
Nếu XY, Z là tập con của U thì XZYZ.
c- Bắc cầu:
Nếu XY, YZ thì XZ.
3.Bổ đề:
a- Luật tách:
XY và Z là tập con của Y thì XZ.
b- Luật hợp:
Nếu X Y và X Z thì X YZ.
c- Luật tựa bắc cầu:
Nếu XY và WY Z thì WXZ
.
VI. CÁC DẠNG CHUẨN CỦA LƯỢC ĐỒ QUAN HỆ.
1. DẠNG CHUẨN 1NF.
Lược đồ quan hệ R(U) đạt 1NF nếu và chỉ nếu toàn bộ các miền có mặt
trong lược đồ quan hệ chỉ chứa các giá trị nguyên tố.
Chú ý: nếu không nói gì thêm thì lược đồ đã cho đạt chuẩn 1NF.
2. DẠNG CHUẨN 2NF.
Lược đồ quan hệ R(U) đạt 2NF nếu và chỉ nếu R đạt 1NF và mọi thuộc tính
không khóa phụ thuộc hàm đầy đủ vào khóa chính.
Tức là: mọi thuộc tính không khóa không phụ thuộc vào tập con của khóa
chính.
Chú ý: -Tập thuộc tính không khóa = rỗng 2NF.
- Khóa chỉ có 1 thuộc tính 2NF.
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
Phụ thuộc hàm đầy đủ: Cho lược đồ quan hệ R(U), tập phụ thuộc hàm F,X,Y
là tập con của U. Ta nói Yphụ thuộc hàm đầy đủ vào X hay XY là 1 phụ
thuộc hàm đầy đủ nếu Y phụ thuộc vào X Và Y không phụ thuộc vào tập con
của X.
3.DẠNG CHUẨN 3NF.
R(U) đạt dạng chuẩn 3NF nếu R đạt 2NF và mọi thuộc tính không khóa
không phụ thuộc hàm bắc cầu vào khóa chính.
Chú ý:- tập thuộc tính không khóa = rỗng 3NF.
BCNF 3NF.
Phụ thuộc hàm bắc cầu: X là tập con của U, A là 1 thuộc tính của U.
Ta nói A phụ thuộc hàm bắc cầu vào X nếu tồn tại 1 tập con Y của tập thuộc
tính U, sao cho XY và YA, đồng thời Y! X.
4.DẠNG CHUẨN BCNF
R(U) đạt BCNF nếu XA thỏa trên R,nếu A không thuộc X và X là khóa của
R.
Chú ý: BCNF 3NF.
5. Tách lược đồ quan hệ.
Cho lược đồ quan hệ R(U), R được tách thành các lược đồ Ri, i=1k;
R=R1 U R2 U..U Rk.
Các Ri không nhất thiết phải giống nhau.
Bài tập: kiểm tra phép tách có kết nối không mất mát thông tin.
Input: R(U), Ri, i=1,k
Output: kiểm tra phép tách có kết nối không mất mát thông tin.
Bước 1: Lập bảng hai chiều gồm n cột và k dòng tương ứng với n thuộc tính
và k lược đồ con.
Điền các giá trị của bảng như sau:
Nếu Aj thuộc vào Ri thì điền aj, ngược lại điền bij vào dòng i, cột j.
Bước 2:Áp dụng các phụ thuộc hàm lên bảng.
Nếu XY thuộc vào F+ , bằng nhau tại X thì làm bằng nó tại Y.
Nếu 1 trong các giá trị tại Y là aj thì ưu tiên làm bằng aj, ngược lại làm
bằng 1 trong các bij.
Áp dụng cho lần lượt các phụ thuộc hàm, kể cả các phụ thuộc hàm đã áp dụng
rồi.
Bước 3: nếu xuất hiện một bộ chứa đầy đủ các a1,a2, ..an thì kết luận phép
tách có kết nối không mất mát thông tin.
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
6. Tìm kiếm sử dụng ngôn ngữ SQL
a. Tạo bảng
CREATE_TABLE(danh_sách_thuộc_tính kiểu_dữ_liệu, ….)
Xóa bảng
DROP_TABLE Tên bảng
Thêm dữ liệu
INSERT INTO Tên bảng
VALUE ()
b. Tìm kiếm
Cấu trúc chung của 1 khối lệnh tìm kiếm là:
SELECT[*/distinct] ds_thuộc_tính/ biểu thức.
FROM ds_bảng.
WHERE biểu _thức_điều_kiện
GROUP BY ds_thuộc_tính
HAVING biểu_thức_điều_kiện.
ORDER BY thuộc_tính ASC/DESC.
Trong đó:
SELECT: xác định nội dung cần đưa ra kết quả.
*: chọn tất cả các cột .
Distinct: loại bớt các dòng dữ liệu trùng nhau.
Biểu thức là sự kết hợp của các thuộc tính, toán tử, hàm gom nhóm
như Min, Max, Avg, Count…
FROM: Xác định các bảng cần lấy ra thông tin.
WHERE: xác định điều kiện của việc truy xuất dữ liệu.
Sau mệnh đề where là 1 biểu thức điều kiện, chỉ những bộ nào thỏa
mãn điều kiện thì mới xuất hiện trong bảng kết quả.
Trong mệnh đề Where thường sử dụng:
- Toán tử so sánh: >,<,=,<>,>=,<=…
- Toán tử tập hợp: minus, like, not like, in, not in…
- Toán tử phạm vi: between… and…
- Các phép toán logic: +,-,*,/,^, mod.
GROUP BY: dùng để phân hoạch dữ liệu vào trong các nhóm, các hàm nhóm
sẽ thực hiện thao tác trên các nhóm và thống kê dữ liệu theo các nhóm.
- Biểu thức nào điều khiển việc phân nhóm dữ liệu thì biểu thức đó được
thống kê sau Group by.
HAVING: mệnh đề Having là mệnh đề đặt điều kiện lên các nhóm dữ liệu,
Điểm khác biệt của Where và having là mệnh đề where ko cho phép sử dụng
hàm nhóm thì mệnh đề Having lại cho phép dùng hàm nhóm trong các điều
kiện của mình.
________________________________________________________________________
Hoàng Hà-TINK6
TOLIVEISTOFIGHT!
________________________________________________________________________
Các hàm nhóm thường dùng là:
SUM(biểu thức ): tính tổng các giá trị.
AVG(biểu thức): tính trung bình cộng các giá trị.
COUNT(biểu thức): đếm số các giá trị trong biểu thức.
COUNT(*): đếm số các bộ được chọn.
MAX(biểu thức): tính giá trị lớn nhất.
MIN(biểu thức): tính giá trị nhỏ nhất.
Chú ý: - Các hàm sum, avg chỉ làm việc với các biểu thức số.
- hàm count(*) không bỏ qua giá trị null khi tính toán.
ORDER BY : sắp xếp kết quả truy vấn theo 1 trường nào đó tăng dần hoặc
giảm dần. Sau order by là danh sách các cột cần sắp xếp, tăng dùng ASC,
giảm dùng DESC.Mặc định là sắp xếp theo chiều tăng.
________________________________________________________________________