Trên cơ sở các định lý đã trình bầy ở trên, ta xây dựng các thuật toán để xác định dạng chuẩn cho các quan hệ và sơ đồ quan hệ cho trước.
Thuật toán 1. (kiểm tra một quan hệ có là 3NF hay không ) Input: r = { h1, h2,.., hm} là một quan hệ trên R = {a1, a2,..., an}.
Output: Kết luận r có ở dạng chuẩn 3NF hay không
Phương pháp:
Bước 1: Từ tập quan hệ r = {h1, h2,..., hm} xây dựng tập Er là hệ bằng nhau của r
theo định nghĩa:
Er = { Eij : 1 ≤ i < j ≤ m }
Trong đó Eij = { a ∈ R : hi(a) = hj (a) }
Bước 2: Từ tập Er xây dựng tập M M = { B ∈ P(R): Tồn tại Eij ∈ Er : Eij = B } Bước 3: Từ M ta xây dựng tập Mr Mr ={ B ∈ M : ∀B' ∈ M : B ⊄ B'} Bước 4: Từ Mr xây dựng tập V V = ∩ Mr
Bước 5: Quan hệ r đã ở dạng chuẩn 3NF nếu
∀ B ∈ Mr , a ∈ V: {B \ a}+
r = B \ a Ngược lại quan hệ r chưa ở dạng chuẩn 3NF Ví dụ: Xét quan hệ sau
S H D T K
DD91101 Nguyễn thị Anh 134 Nguyễn trãi TP. HCM 0
DD91103 Lê Đức Anh 134 Nguyễn trãi Hà Nội 3
DD91123 Trần Thanh Bình 19 Bến thành TP. HCM 0
DD91124 Nguyễn Cao Cường 50 Ngô quyền Hải Phòng 2
Trong đó
S : số báo danh của sinh viên H : Họ tên D : Địa chỉ T : Tỉnh K : Khu vực Bước 1: Tính Er E12 = {∅}, E13 = {∅}, E14 = {T, K}, E15 = {∅} E23 = {T, K}, E24 = {∅}, E25 = {∅} E34 = {H}, E35 = {D} E45 = {∅} Bước 2: Tính M M = {{∅}, {T,K}, {H}, {D}} Bước 3: Tính Mr Mr = {{T, K}, {H}, {D}} Bước 4: Tính V V = ∩ Mr = {∅} Bước 5: {T, K}+ = {T,K} {H}+ = {H} {D}+ = {D}
Như vậy quan hệ r trên đã ở dạng chuẩn 3NF
Có thể thấy rằng công việc chủ yếu của thuật toán này là xây dựng
Mr mà Mr đã biết tính bằng thuật toán đa thức. Vì vậy trong thuật toán này
có chi phí thời gian là đa thức.
Trong quá trình tính Mr nếu chúng ta xây dựng giao của các phần tử
Mr (gọi là Z ). Nếu Z ≠∅ thì chúng ta phải kiểm tra bao đóng {A \ b}r+ mà
b ∈ Z mà A ∈ Mr và bao đóng này không được nở ra và b lần lượt là các
phần của Z, có bao nhiêu b chúng ta kiểm tra bấy nhiêu lần. Nếu phát hiện
ra {A \ b}r+ mà nở ra thì kết luận ngay file dữ liệu đó không phải là 3NF.
Trong trường hợp Z = ∅ thì kết luận luôn file dữ liệu là 3NF.
Thuật toán 2. (kiểm tra một quan hệ có là BCNF hay không) Input: r = { h1, h2,.., hm} là một quan hệ trên R = {a1, a2,..., an}.
Output: r có phải là BCNF hay không ?
Phương Pháp:
Bước1: Từ r ta xây dựng tập Er:
Er = { Eij : 1 ≤ i < j ≤ m }
Trong đó Eij = { a ∈ R : hi(a) = hj (a) }
Bước2: Từ Er xây dựng tập M
M = { B ∈ P(R): Tồn tại Eij ∈ Er : Eij = B }
Bước3: Từ M xây dựng tập Mr
Mr ={ B ∈ M : ∀B' ∈ M : B ⊄ B'}
Bước4: Nếu với mọi B ∈ Mr , ∀a ∈ B ta có: {B \ a}r+ = B \ a ta kết luận r đã ở BCNF, ngược lại r chưa ở BCNF.
Ví dụ: Cho quan hệ r:
A B C D E 1 0 1 0 1 2 1 0 1 1
2 0 1 1 0 1 1 3 1 3 Khi đó E12 = {E}, E13 = {B, C}, E14 = {A}
E23 ={A, D}, E24 ={B, D}, E34 = {D}
Như vậy ta có Mr = {{B, C},{A, D},{E},{B, D}}
Ta có thể kiểm tra rằng {B, D} - D = B và {B}r+ = {B, C}. Vì vậy r không
là BCNF.
Thuật toán 3. (Kiểm tra một sơ đồ quan hệ có là BCNF hay không) Input: s = < R, F >, R= {a1, a2,..., an} và
A1→ B1
F = . . . . At→ Bt
Với Bi ⊆ Ai (i = 1,2,...t)
Output: s có là BCNF hay không?
Bước 1: Nếu A1+ = R thì chuyển sang bước 2.
Ngược lại s không là BCNF Bước i: (2 ≤ i ≤ t) :
Nếu Ai+ = R thì chuyển sang bước i+1 Ngược lại s không là BCNF
Bước i+1: s là BCNF.
Ví dụ: Cho sơ đồ quan hệ s = < R, F >, với R = {A1, A2, A3, A4 ,A5, A6}
{A1} → {A2 }
F = {A1, A2} → { A3, A4}
Nhìn vào ví dụ trên ta có:
{A1}+ = {A1, A2, A3, A4 ,A5, A6} = R.
{A1,A2}+ = {A1, A2, A3, A4 ,A5, A6} = R.
{A4}+ = {A4, A5, A6} ≠ R. Vậy s không là BCNF.
Vì thời gian tính bao đóng của một tập thuộc tính bất kỳ của một sơ đồ quan hệ hay quan hệ là đa thức. Cho nên chúng ta có kết luận sau.
Định lý 4.
Cho trước một quan hệ r và một sơ đồ quan hệ s. Khi đó đều tồn tại một thuật toán có độ phức tạp thời gian đa thức theo kích thước của r (s) để kiểm tra r (s) có là BCNF haykhông.
Định lý 5.
Cho trước r là một quan hệ trên R. Khi đó tồn tại một thuật toán có độ phức tạp thời gian đa thức để kiểm tra r có là 3NF hay không.
Tuy vậy, đối với đầu vào là s thì đây lại là bài toán NP đầy đủ.
Định lý 6.
Cho trước s là một sơ đồ quan hệ trên R. Khi đó bài toán xác định s có là 3NF hay không là NP - đầy đủ.
Có nghĩa là cho đến nay, độ phức tạp của bài toán này không còn là đa thức nữa.
CHƯƠNG III
CHUẨN HÓA DỮ LIỆU TRONG THỰC TẾ
Khi xây dựng cơ sở dữ liệu trong thực tế, việc chuẩn hoá dữ liệu sẽ loại bỏ bớt dữ liệu dư thừa và tránh được những điểm không nhất quán về dữ liệu do trùng lặp thông tin gây ra.
Tuy nhiên áp dụng tất cả những điều đã nói đến trong lý thuyết chuẩn hoá vào trong thực tế là một điều không tưởng, vì đòi hỏi một khối lượng tính toán quá lớn, cho nên trong thực tế người ta tìm cách giảm nhẹ các điều kiện đã nói đến trong lý thuyết. Chẳng hạn, khi xét xem quan hệ đã chuẩn hoá chưa người ta chỉ tìm một khoá và gọi đó là khóa chính để
quản lý. Do vậy trong chương này ta sẽ nhắc lại những vấn đề chuẩn hoá đã nói đến trong các chương trước nhưng đã được đơn giản hóa cho phù hợp với yêu cầu của thực tế. Trong thực tế thường người ta mong muốn các quan hệ được chuẩn hóa đến dạng chuẩn 3NF.
Trong mục này chúng ta trình bầy một số ý nghĩa của phụ thuộc hàm và mối liên hệ của nó với việc chuẩn hóa trong thực tế.
Một quan hệ ( bảng ) tập các thuộc tính A xác định hàm với tập các thuộc tính B hay tập tập các thuộc tính B phụ thuộc hàm vào các tập thuộc tính A nếu với mọi giá trị của A tương ứng với một giá trị duy nhất của B.
Nhận xét:
Sự phụ thuộc hàm giữa các tập thuộc tính thường được chỉ ra căn cứ vào ngữ nghĩa của mỗi thuộc tính đó, chứ không hoàn toàn được tính một cách máy móc từ dữ liệu, cũng không phải là sự áp đặt như trong định nghĩa phụ thuộc hàm đối với sơ đồ quan hệ.
Ví dụ: Trong một danh sách tuyển sinh bao gồm các thuộc tính 'Số báo danh', 'Họ tên', 'Địa chỉ', 'Tỉnh', 'Khu vực'.
S H D T K
DD00001 Nguyễn Thị Anh 134 Nguyễn trãi TP. HCM 0
DD00002 Hoàng Anh 57 Thái hà Hà Nội 3
DD00003 Lê Đức Anh 134 Nguyễn trãi Hà Nội 3
DD00004 Trần Thanh Bình 19 Bến thành TP. HCM 0
DD00005 Nguyễn Cao Cường 50 Ngô quyền Hải Phòng 2
Với giả thiết mỗi khu vực có số tỉnh nhất định, và mỗi tỉnh chỉ có thể thuộc một khu vực, thì rõ dàng có sự phụ thuộc hàm giữa Tỉnh và
Khu vực cho dù xét trên quan hệ hiện thời hay trên quan hệ đã thực hiện hàng loạt các cập nhật dữ liệu ( với giả thiết dữ liệu vào đúng ).
Một thực thể hay một quan hệ được xem là dạng chuẩn thứ nhất khi tất cả các thuộc tính của nó chỉ chứa các giá trị nguyên tố ( giá trị nguyên tố là những giá trị được coi là không thể chia nhỏ hơn được nữa ) tức là tất cả các thuộc tính của thực thể là sơ cấp.
Ví dụ: Một cửa hàng bách hóa mỗi ngày có một bảng tổng kết bán hàng như sau:
Bảng tổng kết bán hàng một ngày từ những hóa đơn bán ra (Đơn vị tính 1000đ )
Ngày tháng Mã hàng Tên Hàng Đơn vị tính Số lượng 23/5/98 T1 Đài đĩa 2000 2 T3 Quạt 300 6 T6 Phích 100 2 Tổng giá tiền : 6000 Đã thanh toán: 5000
Giả sử chúng ta có một bảng tổng kết bán hàng như ở trên, chúng ta sẽ có một biểu bán hàng gồm 7 cột để mô tả việc bán hàng trong một tru kỳ thời gian nào đó (ví dụ: 1 tháng).
Chúng ta nhìn vào bảng tổng kết bán hàng ta thấy nó chưa phải là file dữ liệu cho nên ta có biểu bán hàng như sau:
HÓA ĐƠN
Ngày tháng
Mã hàng
Tên hàng Đơn giá
(nghìn) Số lượng Tổng Thanh toán 23/5/98 T1 Đài đĩa 2000 2 6000 5000 23/5/98 T3 Quạt 300 6 6000 5000 23/5/98 T6 Phích 100 2 6000 5000 24/5/98 T2 Bàn là 150 2 300 300 25/5/98 T1 Đài đĩa 2000 3 16300 9300 25/5/98 T4 Máy bơm 1500 5 16300 9300 25/5/98 T9 Nồi cơm 400 7 16300 9300
Dễ thấy rằng cột Ngày tháng và cột Mã hàng là một khóa tối tiểu của file dữ liệu HÓA ĐƠN ta chọn nó làm khóa chính vì một ngày có thể bán được nhiều loại hàng, và nhiều loại hàng bán trong nhiều ngày ( vì không có hai dòng con trên hai cột đó mà giá trị bằng nhau ), nếu đứng riêng từng cột một thì không được vì có nhiều dòng trùng nhau.
Dễ thấy rằng file HÓA ĐƠN là dạng chuẩn 1NF vì các giá trị của nó đều là sơ cấp.