Việc thiết kế cơ sở dữ liệu quan trọng nhất là phải tạo ra được các lược đồ quan hệ tốt, đảm bảo không dư thừa dữ liệu cũng như có các bất thường trong thao tác. Chương này sẽ thảo luận về một số vấn đề lý thuyết nhằm tạo được quan hệ tốt đó, và cần quan tâm đặc biệt đến khái niệm ràng buộc giữa các dữ liệu trong quan hệ đó chính là phụ thuộc hàm.
Trang 1Cơ sở dữ liệu - Bài 4 Trang 1
BÀI 4 PHỤ THUỘC HÀM
Mục tiêu:
Trong bài này, Anh/Chị cần đạt được những mục tiêu sau:
1 Biết được sự cần thiết của việc nghiên cứu về phụ thuộc hàm và ý nghĩa của nó
2 Nắm được khái niệm phụ thuộc hàm, cách biểu diễn bằng sơ đồ
3 Nắm vững các luật của hệ tiên đề Armstrong
4 Hiểu và áp dụng để kiểm tra một phụ thuộc hàm có là thành viên của một tập phụ thuộc hàm cho trước
5 Nắm vững khái niệm bao đóng tập phụ thuộc hàm và bao đóng tập thuộc tính từ đó tìm được bao đóng của tập thuộc tính cho trước
6 Khái niệm khóa, siêu khóa và các thuật toán để tìm một khóa và tất cả các khóa của phụ thuộc hàm
Nội dung:
Việc thiết kế cơ sở dữ liệu quan trọng nhất là phải tạo ra được các lược
đồ quan hệ tốt, đảm bảo không dư thừa dữ liệu cũng như có các bất thường trong thao tác Chương này sẽ thảo luận về một số vấn đề lý thuyết nhằm tạo được quan hệ tốt đó, và cần quan tâm đặc biệt đến khái niệm ràng buộc giữa các
dữ liệu trong quan hệ đó chính là phụ thuộc hàm
I Phụ thuộc hàm
Khái niệm phụ thuộc hàm là khái niệm cơ bản và quan trọng nhất trong thiết kế cơ sở dữ liệu Nó là thước đo để đánh giá một thiết kế cơ sở dữ liệu có tốt hay không Phụ thuộc hàm chính là những ràng buộc dữ liệu được suy ra từ
ý nghĩa và các mối liên quan giữa các thuộc tính
I.1 Định nghĩa phụ thuộc hàm
Cho R(U), với R là quan hệ và U là tập thuộc tính
Cho X,Y thuộc U, phụ thuộc hàm X → Y (đọc là X xác định Y) được định
Trang 2Cơ sở dữ liệu - Bài 4 Trang 2
nghĩa là:
Với mọi bộ t, t’ thuộc R nếu t.X = t’.X thì t.Y = t’.Y
(Có nghĩa là: Nếu hai bộ có cùng giá trị trên thuộc tín X thì có cùng giá
trị trên thuộc tính Y hay giá trị của các bộ tại thuộc tính X xác định duy nhất các giá trị tại thuộc tính Y)
Ý nghĩa toán học của phụ thuộc hàm X->Y: một giá trị của tập X xác định duy nhất 01 giá trị của tập Y
Và ta nói X xác định Y hay Y phụ thuộc hàm vào X Phụ thuộc hàm được suy ra từ những quy tắc dữ liệu khi ta khảo sát yêu cầu của bài toán
Phụ thuộc hàm viết tắt là FD (Functional Dependency), trong đó X được gọi là vế trái của phụ thuộc hàm và Y là vế phải phụ thuộc hàm
Để biểu diễn các phụ thuộc hàm trong một lược đồ quan hệ, chúng ta sử dụng khái niệm sơ đồ phụ thuộc hàm Mỗi FD được biểu diễn bằng một đường nằm ngang Các thuộc tính ở vế trái của FD được nối với đường biểu diễn FD bằng các đường thẳng đứng, các thuộc tính ở vế phải của FD được nối với đường biểu diễn FD bằng mũi tên chỉ đến các thuộc tính
Ví dụ: Ta có lược đồ cơ sở dữ liệu
MƯỢN(Sốthẻ, Mãsốsách, Tênngườimượn, Tênsách, Ngàymượn)
Với các phụ thuộc hàm:
Sốthẻ → Tênngườimượn Mãsốsách → Tênsách
Sốthẻ, Mãsốsách → Ngàymượn Biểu diễn phụ thuộc hàm dưới dạng sơ đồ ta có:
Trang 3Cơ sở dữ liệu - Bài 4 Trang 3
Nhận xét: cho một phụ thuộc hàm X -> Y thì không thể nói gì về Y -> X
Ví dụ: Có MãSV -> TênSV nhưng không thể khẳng định có phụ thuộc TênSV -> MãSV vì tên sinh viên có thể trùng nhau
I.2 Hệ tiên đề Armstrong
Năm 1974 Armstrong đã đưa ra hệ luật dẫn hay là tính chất của phụ thuộc hàm gọi là hệ tiên đề Armstrong, đó chính là các quy tắc biến đổi của phụ thuộc hàm
Cho lược đồ quan hệ r(U), U là tập thuộc tính, F là tập các phụ thuộc hàm được định nghĩa trên quan hệ r
Ta có phụ thuộc hàm X → Y được suy diễn logic từ F nếu mọi quan hệ r
trên U thỏa các phụ thuộc hàm trong F thì cũng thỏa phụ thuộc hàm X → Y
Kí hiệu:
Ví dụ:
Tập phụ thuộc hàm: F = { A → B, B → C}
Ta có phụ thuộc hàm A → C là phụ thuộc hàm được suy từ F
Hệ tiên đề Armstrong
Các tính chất của phụ thuộc hàm
Cho X, Y, Z, W ⊆ U, ta có:
Trang 4Cơ sở dữ liệu - Bài 4 Trang 4
1 Phản xạ: Nếu Y ⊆ X thì X → Y
2 Tăng trưởng: Nếu Z ⊆ U và X → Y thì XZ → YZ
(Ký hiệu XZ là X∪Z)
3 Bắc cầu: Nếu X → Y và Y → Z thì X → Z
4 Giả bắc cầu: Nếu X → Y và WY → Z thì XW → Z
Luật hợp: Nếu X → Y và X → Z thì X →YZ
6 Luật phân rã: Nếu X → Y và Z ⊂Y thì X → Z
Nhận xét: Trong sáu luật trên thì các luật 4, 5, 6 suy được từ 1, 2, 3 Người ta cũng đã chứng minh được là từ các luật 1, 2, 3 có thể suy ra được tất
cả các luật khác Vì vậy các luật 1, 2, 3 là một hệ tiên đề, có tên là Hệ tiên đề Armstrong
Ví dụ 1: Cho R(ABC) và tập phụ thuộc hàm F {AB →C , C →A }
Áp dụng hệ tiên đề Armstrong chứng minh rằng BC→ABC
Ta có:
• C →A tăng cường vào hai vế thêm B ta được BC →AB (1)
• AB →C tăng cường thêm AB vào hai vế ta được AB →ABC (2)
• Từ (1,2) áp dụng luật bắc cầu suy ra điều phải chứng minh BC→ABC
Ví dụ 2: Chứng minh nếu Nếu X → Y và U → V thì XU → YV
Ta có:
1 Từ X → Y ( giả thiết) có XU → YU, (tăng trưởng U)
2 Từ U → V (giả thiết) có YU → YV (tăng trưởng Y)
3 Có XU → YV ( bắc cầu (1) và (2) )
Trang 5Cơ sở dữ liệu - Bài 4 Trang 5
II Bao đóng và bài toán thành viên
Cho lược đồ quan hệ trên tập thuộc tính U và tập phụ thuộc hàm F, cùng phụ thuộc hàm f = X → Y ∉ F Bài toán thành viên giúp xác định các quan hệ r của lược đồ có thoả f hay không?
Để giải quyết bài toán trên ta có hai phương án:
Phương án 1: Sử dụng định nghĩa phụ thuộc hàm, khi đó ta phải kiểm tra
tất cả các quan hệ có thể có trên lược đồ quan hệ, nhưng số lượng các quan hệ là
vô cùng lớn (có thể vô hạn) vì vậy không thể kiểm tra được
Phương án 2: Sử dụng hệ tiên đề Armstrong để biến đổi F, nếu sau một
số hữu hạn bước biến đổi ta nhận được f thì kết luận các quan hệ r trên lược đồ thoả mãn f Tuy nhiên với phương án này trong trường hợp các quan hệ trên lược đồ không thoả mãn f thì không thể chứng minh được
Như vậy cả hai phương án trên đều chưa đủ giải quyết bài toán đặt ra
Khái niệm bao đóng sẽ giúp ta giải quyết triệt để bài toán
II.1 Bao đóng
a Bao đóng của tập phụ thuộc hàm Cho R(U), U là tập thuộc tính và F là tập các phụ thuộc hàm trên tập thuộc tính U, tập tất cả các phụ thuộc hàm được suy dẫn ra từ tập F được gọi là bao đóng của tập phụ thuộc hàm và kí hiệu là F+, F+ được viết là:
Nếu F+ = F thì F được gọi là họ đầy đủ của các phụ thuộc hàm
Ý nghĩa của bao đóng tập phụ thuộc hàm: Bao đóng của tập phụ thuộc
hàm F là tập tất cả các phụ thuộc hàm có thể nhận được sau khi áp dụng các luật phản xạ, bắc cầu và gia tăng đối với các phụ thuộc hàm trong F
Để giải quyết bài toán thành viên ta chỉ cần xác định phụ thuộc hàm fi : X->Y có thuộc F+ hay không?
Trang 6Cơ sở dữ liệu - Bài 4 Trang 6
b Bao đóng của tập thuộc tính X Tập tất cả các thuộc tính có thể suy diễn ra từ X nhờ hệ tiên đề Armstrong gọi là bao đóng của tập thuộc tính X
Định nghĩa: Cho một lược đồ quan hệ trên tập thuộc tính U, tập phụ
thuộc hàm F và một tập thuộc tính X⊆U Bao đóng của 1 tập thuộc tính X (ký hiệu X+) là tập tất cả các thuộc tính A thuộc U sao cho phụ thuộc hàm X->A∈
F+
X+F = { A | A∈ U , X → A ∈ F+ }
Các tính chất :
1 (Phản xạ) X ⊆ X+
2 (Đơn điệu ) Nếu X ⊆ Y ⇒ X+ ⊆ Y+
3 (Luỹ đẳng) X++ = X+
4 X+ Y+ ⊆ (XY)+ (X+ Y)+ = (XY+)+ = (XY)+
6 X → Y ∈ F+ & Y → X ∈ F+ ⇔ X+ = Y+
7 X → Y ∈ F+ ⇔ Y⊆ X+
Ý nghĩa của tính chất 7: Để giải quyết bài toán thành viên ta chỉ cần xác
định phụ thuộc hàm fi : X->Y có thuộc F+ hay không và tương đương với việc xác định Y⊆ X+ hay không?
Để giải quyết yêu cầu này ta phải xác định được X+ (bao đóng của tập thuộc tính X)
c Thuật toán xác định bao đóng của tập thuộc tính X (Closure(X,F)): Input: Tập thuộc tính X và tập phụ thuộc hàm F
Output: Bao đóng của X+F?
Thực hiện: lần lượt tính các X0, X1,… theo các bước:
! Bước 1: Đặt X0 = X
Trang 7Cơ sở dữ liệu - Bài 4 Trang 7
! Bước 2: Lần lượt xét các phụ thuộc hàm của F nếu tồn tại pth Y →Z∈F
mà Y⊂Xi thì X i+1 = X i ∪ {Z}, ngược lại, đặt X i+1 = X i
! Bước 3: Nếu ở bước 2 mà không tính được Xi+1 thì Xi chính là bao đóng của tập thuộc tính X, ngược lại lặp lại bước 2
Trang 8Cơ sở dữ liệu - Bài 4 Trang 8
Giả mã của thuật toán CLOSURE(X,F)
Begin
X+ = X;
Do
Old X+ = X+ ; với mỗi phụ thuộc hàm Y → Z trong F thực hiện nếu X+⊃ Y thì X+= X+ Z;
While ( X+ = Old X+ );
End
Ví dụ 1: Xét lược đồ quan hệ
R = {MãsốNV, HọtênNV, MãsốDA, TênDA, ĐịađiểmDA, Sốgiờ}
và tập phụ thuộc hàm
F = {MãsốNV → HọtênNV,
MãsốDA → TênDA, ĐịađiểmDA, MãsốNV, MãsốDA → Số giờ}
Tính bao đóng {MãsốNV}+, {MãsốNV, MãsốDA}+
Giải: Áp dụng thuật toán ta có:
{MãsốNV}+ = { MãsốNV}
Xét F1: MãsốNV → HọtênNV nên có {MãsốNV}+ = {MãsốNV}+ HọtênNV
Và kết luận: {MãsốNV}+ = {MãsốNV, HọtênNV}
Trang 9Cơ sở dữ liệu - Bài 4 Trang 9
• {MãsốNV, MãsốDA}+ = {MãsốNV, MãsốDA}
∗ Xét F1: MãsốNV → HọtênNV nên có
{MãsốNV, MãsốDA}+= {MãsốNV, MãsốDA} HọtênNV= {MãsốNV, MãsốDA, HọtênNV}
∗ Xét F2: MãsốDA → TênDA, ĐịađiểmDA nên có
{MãsốNV, MãsốDA}+={MãsốNV, MãsốDA HọtênNV} {TênDA, ĐịađiểmDA}
={MãsốNV, MãsốDA, HọtênNV, TênDA, ĐịađiểmDA}
∗ Xét F3: MãsốNV, MãsốDA → Số giờ nên có:
{MãsốNV, MãsốDA}+={MãsốNV, MãsốDA, HọtênNV, TênDA, ĐịađiểmDA} Số giờ
={MãsốNV, MãsốDA, HọtênNV, TênDA, ĐịađiểmDA, Số giờ} Kết luận:
{MãsốNV, MãsốDA}+={MãsốNV, MãsốDA, HọtênNV, TênDA, ĐịađiểmDA, Số giờ}
Ví dụ 2: Xét lược đồ quan hệ
Cho R = (A, B, C, D, E, G) và tập phụ thuộc hàm
F = {AB →C, C →A, BC →D, ACD →B, D →EG, BE →C, CG →BD,
CE →AG} Tính: (BD)+
Giải:
X0 = BD
∗ Xét phụ thuộc hàm D → EG => thêm E và G vào X0 " X1 = X0 EG= BDEG
∗ Phụ thuộc hàm BE → C => thêm C vào X1 " X2 = X1 C =BCDEG
∗ Phụ thuộc hàm CE → AG => thêm A vào X2 " X3 = X2 A = ABCDEG
Trang 10Cơ sở dữ liệu - Bài 4 Trang 10
Áp dụng tất cả các phụ thuộc hàm không làm thay đổi X+, nên (BD)+ = ABCDEG
II.2 Bài toán thành viên
Định nghĩa: Một phụ thuộc hàm X→Y là thành viên của F nếu X→Y∈
F+
Về nguyên tắc ta sẽ tìm bao đóng F+ sau đó kiểm tra xem phụ thuộc hàm X→Y có thuộc F+ hay không nhưng việc tìm F+ là một việc tốn nhiều thời gian
và công sức vì thế thay vì tìm F+ chúng ta có thể dùng thuật toán sau để kiểm tra phụ thuộc hàm X→Y có là thành viên của F hay không
Input: phụ thuộc hàm cần kiểm tra X→Y và tập phụ thuộc hàm F
Output: X→Y là thành viên của F đúng hay sai
Các bước thực hiện:
- Bước 1: Tính X+
F
- Bước 2: So sánh X+F với Y nếu Y ⊆X+ thì khẳng định X → Y là thành viên của tập phụ thuộc hàm F, ngược lại không là thành viên của F
Ví dụ 1:
Cho R(ABCDE) và tập phụ thuộc hàm F= { A → CD; C → E; D → BC } Xác định xem A → B có là thành viên của F
Giải:
- Tính A+F ={ACDEBC}
- Nhận thấy B ⊆ A+ nên khẳng định phụ thuộc hàm A → B là thành viên của F
Ví dụ 2:
Trang 11Cơ sở dữ liệu - Bài 4 Trang 11
Cho R(ABEGHI) và tập phụ thuộc hàm F= { AB → E; AG → I; BE → I;
E → G; BE → I; GI → H; }
Xác định xem AB → GH có là thành viên của F
Giải:
- Tính AB+F={ABEIGH}
- Nhận thấy GH ⊆ AB+F nên khẳng định phụ thuộc hàm AB
→ GH là thành viên của F
III Khóa của lược đồ quan hệ
Định nghĩa:
- Cho R(A1, …,An) là lược đồ quan hệ;
- Tập các thuộc tính U = { A1, A2, , An}
- Tập các phụ thuộc hàm F= { f1, f2, ,fn} xác định trên R
- K ⊆ U là khoá của R nếu thoả mãn hai điều kiện sau :
(1): K+F = U
(2): Không tồn tại K' ⊂ K mà (K')+F = U
Tập thuộc tính S được gọi là siêu khóa nếu S ⊇ K
Thuộc tính A được gọi là thuộc tính khóa nếu A ∈ K, với K là khóa bất
kì của lược đồ R, ngược lại A là thuộc tính không khóa
Một lược đồ quan hệ có thể có nhiều khóa và tập thuộc tính không khóa
có thể là rỗng
Khi thiết kế một hệ thống thông tin thì việc tạo được một lược đồ quan hệ đạt một tiêu chuẩn nào đó là rất quan trọng và việc xác định chuẩn của một lược
đồ quan hệ liên quan mật thiết với thuật toán tìm khóa
Trang 12Cơ sở dữ liệu - Bài 4 Trang 12
Thuật toán tìm một khóa của lược đồ quan hệ R
Input:
• Lược đồ quan hệ R(A1,A2,…An)
• Tập thuộc tính U {A1,A2,…An}
• Tập PTH F Output: Khóa K của quan hệ R
Ý tưởng: Bắt đầu từ tập U vì U+ = U Ta bớt dần các phần tử của U để nhận được tập bé nhất mà bao đóng của nó vẫn bằng U
Các bước:
Bước 1: Gán K = U Bước 2: Loại khỏi K lần lượt từng thuộc tính A mà ( K\A)+ =U Lặp lại bước 2 đến khi không loại khỏi K được nữa
Nhận xét: Thuật toán trên chỉ tìm được một khoá trong sơ đồ quan hệ Nếu cần tìm nhiều khoá, ta thay đổi trật tự loại bỏ các phần tử của K
Ví dụ:
Cho R(ABCD) và tập phụ thuộc hàm F = { AB → C; D → B; C → ABD}
Giải:
Bước 1: K=ABCD
Bước 2: Lần lượt loại các thuộc tính của K
Loại A ta có (BCD)+ = {BCDA} = U nên K= BCD
Loại B ta có (CD)+ = {CDAB} = U nên K = CD
Loại C ta có D+ = {DB} ≠ U nên không thể loại C
Trang 13Cơ sở dữ liệu - Bài 4 Trang 13
Loại D ta có C+ = {CABD} = U nên K = C
Kết luận: C là một khóa của lược đồ R đã cho
Nhận xét: Ta có thể cải thiện tốc độ thực hiện thuật toán trên bằng cách trong bước 1 ta thay K = U bởi K=Left(U) ∪ (U\(Left ∪ Right)) – tập các thuộc tính xuất hiện ở vế trái và không xuất hiện ở cả hai vế của phụ thuộc hàm
Thuật toán tìm khóa cải tiến
• Bước 1: Gán K = Left(U) ∪ (U\(Left ∪ Right))
• Bước 2: Loại khỏi K lần lượt từng thuộc tính A mà ( K\A)+ = U
• Lặp lại bước 2 đến khi không loại khỏi K được nữa
Ví dụ:
Cho R(ABCD) và tập F = {AB → C, B → D, D → B}
Giải:
• Loại A ta có BD+ = {BD} ≠ U nên không loại được A
• Loại B ta có AB+ = {ABCD}= U nên K= AD
• Loại D ta có A+ = {A} ≠ U nên không loại được D
Kết luận khóa của lược đồ đã cho là AD
Thuật toán tìm tất cả các khóa
Một số khái niệm cơ bản:
- Tập thuộc tính nguồn (TN): bao gồm các thuộc tính chỉ xuất hiện
ở vế trái, không xuất hiện ở vế phải của phụ thuộc hàm và các thuộc tính không xuất hiện ở vế trái lẫn vế phải của phụ thuộc hàm
- Tập thuộc tính đích (TĐ): bao gồm các thuộc tính chỉ xuất hiện ở
vế phải không xuất hiện ở vế trái của phụ thuộc hàm
- Tập thuộc tính trung gian (TG): Chứa thuộc tính xuất hiện ở cả
vế trái lẫn vế phải của phụ thuộc hàm
Trang 14Cơ sở dữ liệu - Bài 4 Trang 14
Input: Lược đồ R(U) và tập phụ thuộc hàm F
Output: Tất cả các khóa của phụ thuộc hàm
Các bước:
Bước 1: Tạo tập nguồn TN và tập trung gian TG
Bước 2: Tính TN+, nếu TN+ = U, kết luận chỉ có một khóa duy nhất là
TN Ngược lại qua bước 3
Bước 3: Tìm tất cả tập con Xi của tập trung gian
Bước 4: Tìm siêu khóa Si bằng cách với mọi Xi, nếu (TN∪Xi)+=U thì Si
= TN ∪ {Xi}
Bước 5:
- Tìm khóa bằng cách loại bỏ các siêu khóa không tối thiểu
Gọi tập các siêu khóa là S = {Si, Sj,…} nếu Si chứa trong Sj thì loại bỏ tập Sj ra khỏi tập siêu khóa S
Ví dụ: Si=AB, Sj=ABC thì loại bỏ Sj ra khỏi tập siêu khóa
S còn lại chính là tập khóa cần tìm
Ví dụ: Cho lược đồ quan hệ R(CSZ) và tập phụ thuộc hàm
F={CS → Z; Z → C} Tìm tất cả các khóa của lược đồ quan hệ trên
Giải:
Bước 1: TN={S}, TG={CZ}
Bước 2: TN+ ≠ U nên qua bước 3
Bước 3: Tập con Xi của tập trung gian X={∅,C,Z,CZ}
Bước 4:
S+=S Khác R có nghĩa không có siêu khóa
SC+=SCZ bằng với R nên siêu khóa SC
SZ+=SZC bằng với R nên Siêu khóa là CZ
SCZ+= bằng với R nên Siêu khóa là CSZ
Bước 5:
Vậy tập siêu khóa S={SC, CZ, CSZ}