logoMột hệ thống khó hiểu thì cũng khó thay đổi
Phụ thuộc hàm - Functional dependency

Functional Dependency (FD) là lý thuyết quan trọng trong Relational Database (RD), làm tiền đề cho các Normal Forms: 2NF, 3NF, và BCNF.

Định nghĩa

FD là một khái niệm quan trọng trong lý thuyết RD, được sử dụng để xác định mối quan hệ giữa các thuộc tính (attributes) trong một bảng dữ liệu (relation):

Giá trị của một thuộc tính (hoặc một tập hợp thuộc tính) có thể xác định duy nhất giá trị của một thuộc tính khác.

Ký hiệu:

FD giữa hai tập hợp thuộc tính X và Y trong một relation: X ⇒ Y:

  • Giá trị của X xác định duy nhất giá trị của Y.

  • X được gọi là tập xác định (determinant), Y được gọi là tập phụ thuộc (dependent)

FD tầm thường - trivial FD

Một FD X ⇒ Y được gọi là tầm thường nếu Y ⊂ X. (Y là tập con của X). Y là tập con của X khi và chỉ khi mọi phần tử trong Y đều thuộc X.

Ví dụ: X = {A, B, C, D}, Y = {C, D}

Giả sử ta có relation sau:

roll_no name age
42 abc 17
43 pqr 18
44 xyz 18

Ta có các FD tầm thường sau:

{roll_no, name} ⇒ {name}

{roll_no, name} ⇒ {roll_no}

{roll_no, age} ⇒ {age}

{roll_no} ⇒ {roll_no}

FD không tầm thường - nontrivial FD

Một FD X ⇒ Y được gọi là không tầm thường nếu Y ⊄ X.

Với relation bên trên, ta có các FD không tầm thường sau:

{roll_no} ⇒ {name}

{roll_no} ⇒ {age}

{roll_no, name} ⇒ {age}

Phụ thuộc một phần - Partial Dependency (PD)

Một FD X⇒Y trở thành một PD khi Y được xác định bởi X và Y cũng được xác định bởi một tập con của X, với X là một Candidate Key.

Tham khảo Candidate key ở đây.

Ví dụ, có relation:

OrderID ProductID ProductName Quantity ProductPrice
1 101 Laptop 2 1000
1 102 Mouse 5 20
2 101 Laptop 1 1000
2 103 Keyboard 3 50
3 101 Laptop 1 1000

Candidate key: {OrderID, ProductID}.

Ta có các PD sau:

{ProductID} ⇒ {ProductName}

{ProductID} ⇒ {ProductPrice}

{ProductID} ⇒ {ProductName, ProductPrice}

do ProductID là subkey của candidate key {OrderID, ProductID}.

Một số tính chất

Tính phản xạ - reflexive

A ⇒ A: Nếu biết A, có thể suy ra A.

Ngoài ra, ta còn biết: AA ⇒ A và A ⇒ AA

Tính gia tăng - augmentation

Nếu A ⇒ B thì AC ⇒ B. 

Nghĩa là nếu thêm thông tin vào LHS (left hand side) thì ta vẫn có thể suy ra RHS (right hand side).

Tính phân rã - decomposition

Nếu A ⇒ BCD thì ta có A ⇒ B, A ⇒ C, và A ⇒ D.

Tính hợp - union

Nếu A ⇒ B và A ⇒ C thì A ⇒ BC.

Tính bắc cầu - transitive

Nếu A ⇒ B và B ⇒ C thì A ⇒ C.

Tập con - subset

Nếu A là một tập con của tập cha F thì F ⇒ A.

Bài tập

Bài 1: Cho R(ABCD) với các FD:

A ⇒ B

B ⇒ C

AB ⇒ D

Tìm các PD nếu có.

Bài 2: Cho R(ABC) với các FD:

AB ⇒ C

C ⇒ A

Tìm các PD nếu có.

Bài 3: Cho R(ABCD) với các FD:

A ⇒ B

AB ⇒ C

BC ⇒ D

Tìm các PD nếu có.

Bài 4: Cho R(ABCD) với các FD:

A ⇒ B

B ⇒ C

C ⇒ D

AD => B

Tìm các PD nếu có.

Đáp án

Với các bài toán tìm Partial Dependency (PD), cách làm của ta là phải tìm Candidate key do PD được định nghĩa với vế trái là subkey của Candidate key đó. Sau đó, ta đối chiếu từng FD xem có FD nào có vế trái là Subkey không.

Bài 1:

Từ A ⇒ B và B ⇒ C ta có A ⇒ BC (áp dụng tính bắc cầu và tính hợp).

Từ A ⇒ BC ta cũng có AA ⇒ ABC (tính phản xạ), và ta còn có AB ⇒ D nên sử dụng tính bắc cầu ta có A+ => BCD.

Vậy A là Candidate Key. 

Từ B ⇒ C ta có AB => AC và tiếp theo ta có AB => ABC (tính gia tăng và phản xạ).

Do AB ⇒ D nên sử dụng tính hợp, ta có: AB ⇒ ABCD hay AB+ ⇒ CD.

Nhưng AB không phải là Candidate key do ta có A là Candidate key rồi.

Tóm lại, A là Candidate key của relation trên.

Đối chiếu từng FD trong đề bài, ta thấy không có FD nào có vế trái là subkey của A. Vậy relation không tồn tại FD.

Bài 2: Cho R(ABC) với các FD:

AB ⇒ C

C ⇒ A

Tìm các PD nếu có.

Tương tự, ta xét 

AB ⇒ C nên dĩ nhiên AB+ ⇒ C tức AB là Candidate key.

Từ C ⇒ A ta có CB ⇒ AB hay BC+ ⇒ ABC. Vậy ta có tiếp một Candidate key nữa là BC.

Đối chiếu hai FD ban đầu với hai Candidate key vừa tìm được, ta có các PD sau:
C ⇒ A

Các bài tiếp theo tương tự.

Tham khảo:

Bình luận
Gửi bình luận
Bình luận