Chuyển tới nội dung chính

Chương 6: Phụ thuộc hàm và dạng chuẩn

Cơ sở khoa học để tối ưu cấu trúc bảng khi thiết kế cơ sở dữ liệu, tổ chức dữ liệu hợp lý, loại bỏ sự trùng lặp và đảm bảo tính toàn vẹn thông tin xuyên suốt trong các mô hình cơ sở dữ liệu.


1. Các khái niệm liên quan đến phụ thuộc hàm

1.1. Ví dụ mở đầu

Phụ thuộc hàm (function dependency) là một công cụ dùng để biểu diễn hình thức một cách hình thức các ràng buộc toàn vẹn. Đây là một công cụ cực kỳ quan trọng, gắn chặt với lý thuyết thiết kế cơ sở dữ liệu.

Ta có thể xem một ví dụ về Ràng buộc toàn vẹn sau:

Cho một quan hệ MONAN\text{MONAN} sau:

MONANIDTENMONANGIATIEN
01Banh My10000
02Bun Rieu Cua50000
03Xoi Thit20000

Một số ràng buộc có thể kể đến trong quan hệ trên: Mỗi món ăn phải có một mã số duy nhất để phân biệt (PRIMARY KEY CONSTRAINT - MonAnIDMonAnID), TenMonAnTenMonAn không được phép để trống (NOT NULL CONSTRAINT), GiaTienGiaTien không được phép bé hơn 0... Tất cả đều là các ràng buộc toàn vẹn, giúp dữ liệu trong bảng luôn thống nhất và hợp lệ.

Phụ thuộc hàm được ứng dụng trong việc giải quyết các bài toán tìm kiếm khóa cho bài toán.

Cho quan hệ TRUYENHINH\text{TRUYENHINH} - cho biết các chương trình được phát sóng trên kênh truyền hình A

NHANVIENCHUONGTRINHNGAYGIO
AnKamen Rider Zeztz10/117:30a
ToanEm Yeu Khoa Hoc12/116:30p
HungThe Gioi Dong Vat12/112:00p
NgaBuoi Trua Vui Ve13/1113:00p
AnKamen Rider Zeztz15/117:30a
NgaThe Gioi Dong Vat15/112:00p
HungEm Yeu Khoa Hoc16/116:30p
NhiNguoi Ta Noi18/1110:00a
AnCode Khuya Cung An19/1100:00a

Quan hệ TRUYENHINH\text{TRUYENHINH} diễn tả nhân viên nào sẽ phụ trách chương trình nào, và chương trình đó sẽ phát sóng vào thời gian nào. Không phải sự phối hợp bất kỳ nào giữa Nhân Viên, Chương trình, và Giờ Phát Sóng nào cũng đều được chấp thuận mà chúng có các điều kiện ràng buộc qui định sau:

  • Mỗi chương trình có một giờ phát sóng duy nhất
    Ví dụ Kamen Rider Zeztz luôn chiếu vào lúc 7g30a, Code Khuya Cung An luôn chiếu vào lúc 00:00a...
  • Nếu biết nhân viên phụ trách, ngày, giờ phát sóng thì biết được tên chương trình
    Ví dụ Biết được {Hung, 16/11 , 6:30p} thì biết được chương trình đó là Em Yeu Khoa Hoc
  • Nếu biết tên chương trình, ngày, giờ phát sóng thì biết được nhân viên phụ trách chương trình đó
    Ví dụ Biết được {Buoi Trua Vui Ve, 13/11, 13:00p} thì biết được nhân viên phụ trách là Nga.

Các ràng buộc này là các ví dụ về phụ thuộc hàm và được phát biểu lại như sau:

  • ChuongTrinhChuongTrinh xác định GioGio
  • {NhanVien,Ngay,Gio}\{NhanVien, Ngay, Gio\} xác định {ChuongTrinh} \{ChuongTrinh\}
  • {ChuongTrinh,Ngay,Gio}\{ChuongTrinh, Ngay, Gio\} xác định {NhanVien} \{NhanVien\}

hay:

  • GioGio phụ thuộc hàm vào ChuongTrinhChuongTrinh
  • ChuongTrinhChuongTrinh phụ thuộc hàm vào {NhanVien,Ngay,Gio}\{NhanVien, Ngay, Gio\}
  • NhanVienNhanVien phụ thuộc hàm vào {ChuongTrinh,Ngay,Gio}\{ChuongTrinh, Ngay, Gio\}

và được kí hiệu như sau:

  • {ChuongTrinh}{Gio}\{ChuongTrinh\} \rightarrow \{Gio\}
  • {NhanVien,Ngay,Gio}{ChuongTrinh}\{NhanVien, Ngay, Gio\} \rightarrow \{ChuongTrinh\}
  • {ChuongTrinh,Ngay,Gio}{NhanVien}\{ChuongTrinh, Ngay, Gio\} \rightarrow \{NhanVien\}

1.2. Phụ thuộc hàm

1.2.1. Khái niệm

Cho X,YX, Y là hai tập thuộc tính trên quan hệ R\text{R}. t1,t2t_1, t_2 là 2 bộ bất kỳ trên R\text{R}. Ta nói XX xác định YY, kí hiệu XYX \rightarrow Y, nếu và chỉ nếu t1[X]=t2[X]t_1[X] = t_2[X] thì t1[Y]=t2[Y]t_1[Y] = t_2[Y]

Ta nói XX xác định YY hay YY phụ thuộc hàm vào XX. (XX là vế trái của phụ thuộc hàm, YY là vế phải của phụ thuộc hàm).

Ví dụ: cho quan hệ SINHVIEN\text{SINHVIEN} như sau:

SINHVIEN(MSSV,Ten,Mon,SoDT,ChuyenNganh,GiangVien,Diem)\text{SINHVIEN}(MSSV, Ten, Mon, SoDT, ChuyenNganh, GiangVien, Diem)

MSSVTENMONSODTCHUYENNGANHGIANGVIENDIEM
245200HuyCSDL0913157875HTTTThuy5
245206HoangCTRR0913154521CNPMLan4
201293TinhCSDL0166397547CNPMThuy3
211234MinhNMLT012145475MangMTViet1

Một số tính chất sau:

  • Với mỗi Tên, xác định được duy nhất một số điện thoạichuyên ngành
  • Với mỗi Môn học, có duy nhất một Giảng viên
  • Với mỗi Tên, Môn học có duy nhất một điểm

Kí hiệu:

  • {Ten}{SoDT,ChuyenNganh}\{Ten\} \rightarrow \{SoDT, ChuyenNganh\}
  • {Mon}{GiangVien}\{Mon\} \rightarrow \{GiangVien\}
  • {Ten,Mon}{Diem}\{Ten, Mon\} \rightarrow \{Diem\}

1.2.2. Phụ thuộc hàm hiển nhiên (Trivial Dependencies)

Nếu YXY \subseteq X thì XYX \rightarrow Y : Nếu XX bao hàm YY (tức YY là một thành phần của XX) thì XX sẽ luôn xác định YY

Ví dụ: X={MSSV,HoTen}X = \{MSSV, HoTen\}, Y={Ten}Y = \{Ten\} thì XYX \rightarrow Y. Hiển nhiên đúng vì biết MSSV + Tên thì tất nhiên biết Tên

1.2.3. Tập phụ thuộc hàm

Tập phụ thuộc hàm (FF) là một tập hợp gồm nhiều phụ thuộc hàm của một lược đồ quan hệ R\text{R}. Nó mô tả các ràng buộc về mối quan hệ giữa các thuộc tính trong quan hệ đó. Ta có thể đánh số các phụ thuộc hàm của FFf1,f2,,fmf_1, f_2, \ldots, f_m.

Ký hiệu:

F={X1Y1,X2Y2,...}={f1,f2,,fm}F = \{ X_1 \rightarrow Y_1, X_2 \rightarrow Y_2, ... \} = \{ f_1, f_2, \ldots, f_m \}

1.3. Luật dẫn Armstrong

1.3.1. Khái niệm

Gọi FF là tập các phụ thuộc hàm, ta nói phụ thuộc hàm XYX \rightarrow Y được suy diễn logic từ FF, nếu một quan hệ đã thỏa mãn tất cả các phụ thuộc hàm của FF thì cũng thỏa mãn phụ thuộc hàm XYX \rightarrow Y.

Kí hiệu:

FXYF \vdash X \rightarrow Y

1.3.2. Tính chất

Với mọi tập thuộc tính X,Y,ZX, Y, Z. Phụ thuộc hàm có các tính chất sau:

  • F1. Tính phản xạ: Nếu YXY \subseteq X thì XYX \rightarrow Y
  • F2. Tính tăng trưởng: {XY}\{X \rightarrow Y\} \models XZYZXZ \rightarrow YZ
  • F3. Tính bắc cầu: {XY,YZ}\{ X \rightarrow Y , Y \rightarrow Z \} \models XZX \rightarrow Z
  • F4. Tính kết hợp: {XY,XZ}\{ X \rightarrow Y , X \rightarrow Z \} \models XYZX \rightarrow YZX
  • F5. Tính phân rã: {XYZ\{ X \rightarrow YZ, XY}X \rightarrow Y \} \models XZX \rightarrow Z
  • F6. Tính tựa bắc cầu: {XY,WYZ}\{ X \rightarrow Y , WY \rightarrow Z \} \models WXZWX \rightarrow Z

Ví dụ: Cho F={AB,AC,BCDF = \{ A \rightarrow B, A \rightarrow C, BC \rightarrow D. Chứng minh ADA \rightarrow D

Lời giải

  • {AB,AC}ABC\{ A \rightarrow B , A \rightarrow C \} \models A \rightarrow BC (tính kết hợp) (F4)

  • {ABC,BCD}AD\{ A \rightarrow BC , BC \rightarrow D \} \models A \rightarrow D (tính bắc cầu) (F3)

Ví dụ: Cho F={AC,BDF = \{ A \rightarrow C, B \rightarrow D. Chứng minh ABABCDAB \rightarrow ABCD

Lời giải

  • {AC}ABABC\{ A \rightarrow C \} \models AB \rightarrow ABC (thêm vào ABAB - Tính tăng trưởng) (F2)

  • {BD}ABCABCD\{ B \rightarrow D \} \models ABC \rightarrow ABCD (thêm vào ABCABC - Tính tăng trưởng) (F2)

  • {ABABC,ABCABCD}ABABCD\{ AB \rightarrow ABC, ABC \rightarrow ABCD \} \models AB \rightarrow ABCD (Tính bắc cầu) (F3)

1.4. Bao đóng

1.4.1. Khái niệm

Bao đóng của tập phụ thuộc hàm: Bao đóng của tập phụ thuộc hàm FF, kí hiệu là F+F^+, là tập tất cả các phụ thuộc hàm được suy ra từ FF. Nếu F=F+F = F^+ thì FF là họ đầy đủ của các phụ thuộc hàm

Bao đóng của tập thuộc tính: Bao đóng của tập thuộc tính XX đối với tập phụ thuộc hàm FF, kí hiệu là X+X^+ là tập tất cả các thuộc tính có thể suy dẫn từ XX nhờ tập bao đóng của các phụ thuộc hàm.

Ta sẽ chủ yếu quan tâm đến cách tìm bao đóng của một tập thuộc tính, sẽ được trình bày thông qua Thuật toán dưới đây.

1.4.2. Thuật toán tìm bao đóng của tập thuộc tính

Bài toán 1: Tìm bao đóng
Chúng ta sẽ cùng nghiên cứu thuật toán thông qua một bài toán minh họa:

Bài tập 1: Cho lược đồ quan hệ R(A,B,C,D,E,F,G,H)\text{R}(A,B,C,D,E,F,G,H) và tập phụ thuộc hàm

F=f1:BA,f2:DACE,f3:DH,f4:GHC,f5:ACDF = {f_1: B \rightarrow A, f_2: DA \rightarrow CE, f_3: D \rightarrow H, f_4: GH \rightarrow C, f_5: AC \rightarrow D }

Hãy tìm bao đóng của ACAC (Kí hiệu: AC+AC^+)

Bước 1: X0=ACX_0 = AC
Gọi bao đóng cần tìm là X0X_0, đầu tiên chắc chắn X0X_0 luôn bằng tập thuộc tính mà đề bài yêu cầu chúng ta tìm X0=ACX_0 = AC

Bước 2: Lặp qua các phụ thuộc hàm của fif_i mà đề bài cho

Ta đang có: X0=ACX_0 = AC. Ở đây, tôi sẽ tạm gọi vế bên phải là X0X_0, vế bên trái là ACAC để dễ dàng truyền đạt.

Giả sử ta đang xét một phụ thuộc hàm có dạng XYX \rightarrow Y thì điều kiện để thêm tập thuộc tính YY vào vế trái của X0X_0 là tập thuộc tính XX phải xuất hiện ở vế bên trái của bao đóng cần tìm.

Hãy lần lượt xét các phụ thuộc hàm của đề bài cho theo thứ tự từ trái sang phải:

  • Xét f1:BAf_1: B \rightarrow A
    Vế trái của chúng ta hiện tại là ACAC, chưa xuất hiện BB nên không thể thêm AA vào bao đóng.

  • Xét f2:DACEf_2: DA \rightarrow CE
    Vế trái của chúng ta hiện tại là ACAC, chưa xuất hiện DADA nên không thể thêm CECE vào bao đóng.

  • Xét f3:DHf_3: D \rightarrow H
    Vế trái của chúng ta hiện tại là ACAC, chưa xuất hiện DD nên không thể thêm HH vào bao đóng.

  • Xét f4:GHCf_4: GH \rightarrow C
    Vế trái của chúng ta hiện tại là ACAC, chưa xuất hiện GHGH nên không thể thêm CC vào bao đóng.

  • Xét f5:ACDf_5: AC \rightarrow D
    Lúc này, vế trái trong bao đóng hiện tại đã có đủ thuộc tính ACAC nên ta có thể thêm thuộc tính DD vào bao đóng. Lúc này X0=ACDX_0 = ACD

Bước 3. Lặp lại việc xét tập phụ thuộc hàm (lặp lại bước 2)

Việc lặp lại này sẽ kết thúc cho đến khi ta không thể thêm bất cứ thuộc tính nào vào bao đóng nữa.

Hiện tại: X0=ACDX_0 = ACD

  • Xét f2:DACEf_2: DA \rightarrow CE
    Vế trái của chúng ta hiện tại đã có ADAD nên có thể thêm CECE vào bao đóng. X0=ACDEX_0 = ACDE

  • Xét f3:DHf_3: D \rightarrow H
    Vế trái của bao đóng đã có DD nên ta có thể thêm HH vào bao đóng. X0=ADCEHX_0 = ADCEH

  • Xét f4:GHCf_4: GH \rightarrow C
    Vế trái của chúng ta chưa có GHGH nên không thể thêm CC vào bao đóng. X0X_0 vẫn giữ nguyên.

Phụ thuộc hàm f5f_5 đã xét ở Bước 2 rồi nên ta không cần xét lại nữa.

Tiếp tục lặp lại việc xét các phụ thuộc hàm, bắt đầu lại từ f1...fmf_1...f_m, … . Bao đóng cuối cùng thu được là: ACF+=ACDEHAC^+_F = ACDEH

Lưu ý: Các thuộc tính không cần phải viết theo thứ tự, chỉ cần đủ số lượng là được.

Bài toán 2: Cho biết XYX \rightarrow Y có là phụ thuộc hàm thành viên của FF không?

Bài tập 2: Cho lược đồ quan hệ R(A,B,C,D,E,F,G,H,I)\text{R}(A,B,C,D,E,F,G,H,I) và tập phụ thuộc hàm

F=f1:BE,f2:BDIG,f3:GECH,f4:DEBC,f5:GAF = {f_1: B \rightarrow E, f_2: BD \rightarrow IG, f_3: GE \rightarrow CH, f_4: DE \rightarrow BC, f_5: G \rightarrow A }

a) Phụ thuộc hàm BGAIBG \rightarrow AI có là phụ thuộc hàm thành viên của FF không? Giải thích

Kiến thức: Cho tập thuộc tính QQ, tập phụ thuộc hàm FF trên QQ và một phụ thuộc hàm XYX \rightarrow Y trên QQ. Ta có:

XYF+    YX+X \rightarrow Y \in F^+ \iff Y \subseteq X^+

Nghĩa là nếu ta tính ra được bao đóng của XX và kết luận được YY thuộc vào bao đóng đó, thì ta có thể kết luận XYX \rightarrow Y là một phụ thuộc hàm thành viên của FF.

Bước 1: Tìm bao đóng của XX

BGF+=X0=BGBG^+_F = X_0 = BG

  • Xét f1:BEX0=BGEf_1: B \rightarrow E \Longrightarrow X_0 = BGE
  • Xét f2:BDIGBGEf_2: BD \rightarrow IG \Longrightarrow BGE (Vế phải của bao đóng chưa xuất hiện BDBD nên không thể thêm IGIG vào bao đóng)
  • Xét f3:GECHX0=BGECHf_3: GE \rightarrow CH \Longrightarrow X_0 = BGECH
  • Xét f4:DEBCX0=BGECHf_4: DE \rightarrow BC \Longrightarrow X_0 = BGECH (Vế phải của bao đóng chưa xuất hiện DEDE nên không thể thêm CHCH vào)
  • Xét f5:GAX0=BGECHAf_5: G \rightarrow A \Longrightarrow X_0 = BGECHA

Tiếp tục lặp lại việc xét các phụ thuộc hàm của fif_i. Cuối cùng, ta thu được bao đóng: BGF+={BGECH}BG^+_F = \{ BGECH \}

Bước 2: Xét điều kiện thành viên

Nếu như AIBGF+AI \subseteq BG^+_F mà ta đã tính được ở trên thì ta có thể kết luận BGAIF+BG \rightarrow AI \in F^+, hay đây là một phụ thuộc hàm thành viên của FF.

Tuy nhiên, ở ví dụ này ta có thấy: AIBGF+(AIBGECHA)AI \nsubseteq BG^+_F (AI \nsubseteq BGECHA)

2. Khóa

2.1. Khái niệm

Cho lược đồ quan hệ Q(A1,A2,A3,...,An)Q(A_1, A_2, A_3, ... , A_n), A+A^+ là tập thuộc tính của quan hệ QQ. Khi đó, KK được gọi là một khóa của QQ nếu:

  • K+=A+K^+ = A^+
  • Không tồn tại KKK' \subset K sao cho KF+=Q+K^+_F = Q^+

2.2. Thuật toán tìm khóa

Ta sẽ xét lại Bài tập 2Phần 1 để nghiên cứu thuật toán tìm khóa

Bài tập 2: Cho lược đồ quan hệ R(A,B,C,D,E,F,G,H,I)\text{R}(A,B,C,D,E,F,G,H,I) và tập phụ thuộc hàm

F=f1:BE,f2:BDIG,f3:GECH,f4:DEBC,f5:GAF = {f_1: B \rightarrow E, f_2: BD \rightarrow IG, f_3: GE \rightarrow CH, f_4: DE \rightarrow BC, f_5: G \rightarrow A }

b) Tìm tất cả các khóa của lược đồ quan hệ trên. Giải thích?

Bước 1. Tìm tập nguồn và tập trung gian

Xét một phụ thuộc hàm: fi:XYf_i: X \rightarrow Y, ta sẽ quy ước XX là vế trái, YY là vế phải của phụ thuộc hàm.

Tập nguồn: Tập hợp các thuộc tính chỉ xuất hiện ở vế bên trái của các phụ thuộc hàm (Kí hiệu DD)

N={D} N = \{D\}

Tập trung gian: Tập hợp các thuộc tính xuất hiện ở cả vế bên trái và vế bên phải của phụ thuộc hàm (Kí hiệu TGTG)

Xét các phụ thuộc hàm f1,f2,...mff_1,f_2, ... m f. Các thuộc tính của tập trung gian là:

  • BB: xuất hiện ở vế trái của f2f_2, vế phải của f4f_4
  • GG: xuất hiện ở vế trái của f3f_3, vế phải của f2f_2
  • EE: xuất hiện ở vế trái của f4f_4, vế phải của f1f_1
TG={BGE} TG = \{BGE\}

Bước 2. Tìm bao đóng của tập nguồn

DF+=DD_F^+ = D

Mẹo xét nhanh: Nếu bao đóng của nguồn chứa tất cả thuộc tính của quan hệ, hay DF+={ABCDEFGHI}D^+_F = \{ABCDEFGHI\} thì tập nguồn chính là khóa.

Nếu như bao đóng của tập nguồn không chứa tất cả thuộc tính của quan hệ, ta tiếp tục thuật toán với các bước bên dưới.

Bước 3. Xác định tất cả tập con (khác rỗng) của tập trung gian

Gọi tập hợp con của tập trung gian là:

M={B,G,E,BG,GE,BE,BGE}M = \{B, G, E, BG, GE, BE, BGE\}

Bước 4. Xét các tổ hợp của tập nguồn \cup MiM_i để kết luận khóa

Lần lượt lấy tổ hợp của tập nguồn với từng phần tử con của tập MM hay NMiN \cup M_i để kết luận khóa.

Ta sẽ kẻ dạng bảng dưới đây để dễ dàng giải quyết bài toán:

NNMiM_iNMiN \cup M_i(NMi)F+(N \cup M_i)^+_FKết luận

Giải thích:

  • Cột NN: Nguyên cả tập nguồn
  • Cột MiM_i: Các phần tử trong tập MM (tập hợp các tập con khác rỗng của tập trung gian)
  • Cột NMiN \cup M_i: Tính NMiN \cup M_i
  • Cột (NMi)+(N \cup M_i)^+: Tính bao đóng của (NMiN \cup M_i)
  • Kết luận: Kết luận xem SIiS \cup I_i có phải là khóa của quan hệ hay không

Bây giờ xét bài toán trên. Ta hãy xét S{B}S \cup \{B\}. Ta sẽ có một phần của bảng như sau:

NNMiM_iNMiN \cup M_i(NMi)F+(N \cup M_i)^+_FKết luận
DBDBDB+=DBEIGCHA=U+DB^+ = DBEIGCHA = U^+DB là một khóa của quan hệ

DBDB đã là một khóa của quan hệ nên ta sẽ bỏ đi tất cả các tập con của MM mà có chứa BB (Tập con M1M_1 đã xét ở trên). Lúc này, tập còn lại là:

M = {B , G , E , BG , GE , BE , BGE } = {G,E,GE}\{G , E , GE \}

Xét tập con tiếp theo với S{G}S \cup \{G\}

NNMiM_iNMiN \cup M_i(NMi)F+(N \cup M_i)^+_FKết luận
DBDBDB+=DBEIGCHA=U+DB^+ = DBEIGCHA = U^+DB là một khóa của quan hệ
DGDGDG+=DGADG^+ = DGADG không phải là khóa

DGDG không phải là khóa nên ta không bỏ đi các tập con của MM có chứa GG. Tập MM hiện tại còn cái phần tử:

M={E,GE}M = \{E , GE \}

Xét tập con tiếp theo với M3={E}M_3 = \{E\}

NNMiM_iNMiN \cup M_i(NMi)F+(N \cup M_i)^+_FKết luận
DBDBDB+=DBEIGCHA=U+DB^+ = DBEIGCHA = U^+DB là một khóa của quan hệ
DGDGDG+=DGADG^+ = DGADG không phải là khóa
DEDEDE+=DEIBCGHADE^+ = DEIBCGHADE là một khóa của quan hệ

DEDE đã là một khóa của quan hệ nên ta sẽ bỏ đi tất cả các tập con của MM mà có chứa EE. Lúc này, tập còn lại là: \varnothing

Kết luận: Khóa của quan hệ là DBDBDEDE.

Chú ý:

  • Phải xét theo thứ tự 1 thuộc tính, 2 thuộc tính, 3 thuộc tính… (Ví dụ: {A,B,C}\{A, B , C\}, sau đó mới đến {AB,AC,BC}\{AB , AC , BC\}, cuối cùng mới đến {ABC}\{ABC\}),... không được xét ngược lại.
  • Nếu một tập thuộc tính đã là khóa thì ta có thể bỏ đi các tập con MiM_i chứa tập thuộc tính đó. (Ví dụ: ABAB là khóa thì ta có thể bỏ đi ABC,ABD,ABABC, ABD, AB; không được bỏ đi tập con MiM_ichỉ chứa mỗi $$ hay chỉ chứa mỗi BB, ví dụ: AC,BC,ADAC, BC, AD )

2.3. Siêu khóa. Thuộc tính khóa

2.3.1. Siêu khóa

Tập thuộc tính XX được gọi là siêu khóa (superkey) nếu tồn tại một khóa KK của quan hệ sao cho: KXK \subseteq X. Nghĩa là tập thuộc tính này có chứa khóa

Xét ở Bài toán 2, ta có K={DE,DB}K = \{DE, DB\} (đã tính được ở 2.2), ta có thể nêu một số siêu khóa như sau: S={ADE,ADB,CEDB,IDB,...}S = \{ADE, ADB, CEDB, IDB, ...\}

Một khóa cũng được coi là một siêu khóa.

2.3.1. Thuộc tính khóa

Thuộc tính AA được gọi là thuộc tính khóa nếu: AKA \in K, với KK là một khóa bất kỳ của quan hệ RR. Ngược lại, AA được gọi là thuộc tính không khóa.

Xét ở ví dụ trên, với khóa DEDE thì thuộc tính khóaD,ED, E. Khóa DBDB thì thuộc tính khóa là D,BD, B. Ngược lại, các thuộc tính A,B,C,G,H,IA,B,C,G,H,Ithuộc tính không khóa.

3. Các dạng chuẩn

Trong thực tế, một ứng dụng cụ thể được thiết kế thành nhiều lược đồ cơ sở dữ liệu khác nhau, và tất nhiên chất lượng thiết kế của các lược đồ CSDL này cũng khác nhau. Chất lượng thiết kế của một lược đồ CSDL có thể được đánh giá dựa trên nhiều tiêu chuẩn, trong đó có sự trùng lắp thông tin và chi phí kiểm tra các ràng buộc toàn vẹn là hai tiêu chuẩn quan trọng.

Sau đây, ta sẽ tìm hiểu một số tiêu chí để đánh giá độ tốt / xấu của một lược đồ quan hệ. Trước tiên, ta hãy tìm hiểu sơ lược về một số khái niệm liên quan.

3.1. Khái niệm về xác định dạng chuẩn

Trong chương trình, ta sẽ tìm hiểu qua 4 loại dạng chuẩn: Dạng chuẩn 1 🡪 Dạng chuẩn 2 🡪 Dạng chuẩn 3 🡪 Dạng chuẩn BC.

Một lược đồ muốn đạt được dạng chuẩn thì trước hết phải đạt được dạng chuẩn trước đó.
Ví dụ: Muốn kiểm tra lược đồ đạt dạng chuẩn 3 không, trước tiên ta phải chứng minh được lược đồ đó đã đạt được dạng chuẩn 2. Nhưng để đạt được dạng chuẩn 2 trước hết lược đồ đó phải đạt được dạng chuẩn 1. Giả sử ở dạng chuẩn 3, lược đồ không đạt thì dạng chuẩn cao nhất lược đồ có thể đạt được là dạng chuẩn 2.

Ta sẽ tiếp tục xét Bài toán 2 để minh họa:

Bài tập 2: Cho lược đồ quan hệ R=(U,F)R = (U, F) trong đó UU là tập thuộc tính và FF là tập phụ thuộc hàm

U={A,B,C,D,E,F,G,H,I}U = \{A , B , C , D , E , F ,G , H , I\} F={f1:BE,f2:BDIG,f3:GECH,f4:DEBC,f5:GA}F = \{f_1: B \rightarrow E , f_2: BD \rightarrow IG , f_3: GE \rightarrow CH , f_4: DE \rightarrow BC , f_5: G \rightarrow A\}

c) Hãy tìm dạng chuẩn cao nhất mà lược đồ có thể đạt được. Giải thích?

Chú ý: Với bài tập tìm dạng chuẩn, bắt buộc phải tìm khóa của lược đồ trước.

Sau đây ta sẽ đi qua tìm hiểu các dạng chuẩn

3.2. Dạng chuẩn 1

Lược đồ ở dạng chuẩn 1 nếu mọi thuộc tính đều mang giá trị nguyên tố

Giá trị nguyên tố là giá trị không phân nhỏ được nữa. Ngược lại, các thuộc tính đa trị (multi-valued), đa hợp (composite) không là nguyên tố.

Ví dụ 1: Thuộc tính DIACHI của một quan hệ:
DIACHI: Số 7, Nguyễn Bỉnh Khiêm, TDP, Phường Ninh Hiệp, Ninh Hòa, Khánh Hòa 🡪 (Số nhà, Đường, Phường, Thị xã, Tỉnh). Đây không là thuộc tính nguyên tố.

Ví dụ 2: Cho quan hệ DONHANG

MAHDMAKHTên hàngSố lượngĐVTSỐ TIỀN
HD01KH02Chuột gaming1Cái200.000
HD02KH04Bàn phím cơ1Cái905.000
HD03KH03RAM4Thanh1.600.000

CHITIETMUA không là nguyên tố nên không thỏa dạng chuẩn 1

Trong thực tế, dạng chuẩn 1 rất hiếm khi xảy ra nên khi làm bài, ta có thể mặc định lược đồ cho đã thỏa mãn dạng chuẩn 1.

3.3. Dạng chuẩn 2

Lược đồ QQ thỏa dạng chuẩn 2 nếu:

  • QQ đạt dạng chuẩn 1
  • Mọi thuộc tính không khóa của đều phụ thuộc đầy đủ vào khóa

Kiểm tra dạng chuẩn 2

Bước 1: Tìm bao đóng của tất cả thuộc tính khóa

Xét Bài toán 2, ta có thuộc tính khóa là DB,DEDB, DE \Longrightarrow Thuộc tính khóa: D,B,ED,B,E.

  • BF+=BEB_F^+ = BE
  • DF+=DD_F^+ = D
  • EF+=EE_F^+ = E

Bước 2: Xét tất cả các vế bên phải là BE,D,EBE, D, E, không có bất cứ thuộc tính không khóa nào xuất hiện. Vì vậy, lược đồ đạt dạng chuẩn 2.

Ngược lại, sau khi tính bao đóng, nếu xuất hiện một thuộc tính không khóa ở vế bên phải thì lược đồ sẽ không đạt dạng chuẩn 2.

3.4. Dạng chuẩn 3

Lược đồ QQ thỏa dạng chuẩn 3 nếu:

  • QQ đạt dạng chuẩn 2
  • Mọi thuộc tính không khóa của không phụ thuộc bắc cầu vào khóa chính của QQ

Hoặc:

Lược đồ QQ ở dạng chuẩn 3 nếu mọi phụ thuộc hàm XAF+X \rightarrow A \in F^+, với AXA \subseteq X đều có:

  1. XX là siêu khóa, hoặc
  2. AA là thuộc tính khóa

Kiểm tra dạng chuẩn 3

Bước 1: Tìm mọi khóa của QQ

Xét lược đồ quan hệ trong Bài toán 2, các khóa là BDBD, BEBE.

Bước 2: Phân rã vế phải

Phân rã vế phải của mọi phụ thuộc hàm trong FF để tập FF trở thành tập phụ thuộc hàm có vế phải một thuộc tính.

Ta có:

H={f1:BE,f21:BDIf22:BDG,f31:GECf32:GEH,f41:DEBf42:DEC,f5:GA}H = \left\{f_1: B \rightarrow E , \begin{matrix}f_{21}: BD \rightarrow I \\ f_{22}: BD \rightarrow G\end{matrix}, \begin{matrix}f_{31}: GE \rightarrow C\\ f_{32}: GE \rightarrow H \end{matrix}, \begin{matrix}f_{41}: DE \rightarrow B \\ f_{42}: DE \rightarrow C \end{matrix}, f_5: G \rightarrow A\right\}

Bước 3: Kiểm tra vế trái - vế phải

Xét tập phụ thuộc hàm đã phân rã ở Bước 2, nếu ta tìm được một phụ thuộc hàm XYX \rightarrow YXX không là siêu khóa, YY không là thuộc tính khóa thì lược đồ này KHÔNG ĐẠT dạng chuẩn 3.

Xét tập phụ thuộc hàm đã phân rã, ta có f31f_{31} có vế trái GEGE (không phải siêu khóa), vế phải AHAH (không phải thuộc tính khóa). Lược đồ không đạt dạng chuẩn 3.

3.5. Dạng chuẩn BC (Boyce – Codd)

Lược đồ ở dạng chuẩn BC nếu mọi phụ thuộc hàm XAF+X \rightarrow A \in F^+, với AXA \notin X đều có XX là siêu khóa.

Kiểm tra dạng chuẩn BC

Bước 1: Tìm mọi khóa của QQ

Thực hiện thuật toán tìm khóa của một lược đồ quan hệ đã được trình bày ở Phần 2.2

Bước 2: Phân rã vế phải

Thực hiện tương tự việc Kiểm tra dạng chuẩn 3. Phân rã vế phải của mọi phụ thuộc hàm trong FF để tập FF trở thành tập phụ thuộc hàm có vế phải một thuộc tính.

Bước 3. Kiểm tra siêu khóa ở vế trái

Nếu mọi phụ thuộc hàm XYX \rightarrow Y đã phân rã ra đều thỏa điều kiện XX là siêu khóa (vế trái chứa một khóa), thì lược đồ QQ đạt dạng chuẩn BC, ngược lại QQ không đạt dạng chuẩn BC.