H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 31 DẠNG 9: CHUẨN HÓA LƯỢC ĐỒ QUAN HỆ Bài toán: Cho quan hệ R(U, F). Hãy chuẩn hóa quan hệ về 3 NF (hoặc BCNF). Các kiến thức liện quan: Thuộc tính khóa: A là thuộc tính khóa của R nếu nó nằm trong 1 khóa tối thiểu của R. Ngược lại A gọi là thuộc tính không khóa. Thuộc tính suy diễn: Thuộc tính A được gọi là suy diễn nếu giá trị của nó được tính toán ra từ giá trị của các thuộc tính khác. Ví dụ: ĐơnGiá, SốLượng, ThànhTiền thì ThànhTiền là thuộc tính suy diễn. NgàySinh, Tuổi thì Tuổi là suy diễn… Thuộc tính lặp: với 2 bản ghi bất kỳ trong quan hệ, nếu hai bản ghi đó trùng nhau về giá trị trên trường khóa mà có thể có giá trị khác nhau trên trường A thì A là thuộc tính lặp. Ví dụ: xét quan hệ SinhVien(MaSV, TenSV, GioiTinh, MaMon, TenMon, Diem) Với MaSV là khóa. Để xác định thuộ tính lặp ta làm như sau: Đánh chỉ số cho các thuộc tính: Khóa có chỉ số 1. TênSV có chỉ số 1 do một MaSV chỉ xác định 1 tên SV. GioiTinh có chỉ số 1 do một MaSV chỉ xác định 1 giới tính. MaMon có chỉ số ∞ do một MaSV có thể có nhiều MaMon (do 1 SV học nhiều môn)… TenMon, Diem có chỉ số ∞ do một MaSV có thể có nhiều TenMon va Diem. Vậy ta thu được: 1 1 1 ∞ ∞ ∞ SinhVien(MaSV, TenSV, GioiTinh, MaMon, TenMon, Diem) Các thuộc tính có chỉ số ∞ là thuộc tính lặp ! Phụ thuộc bộ phận, phụ thuộc toàn thể: Nếu AB → C ta nói C phụ thuộc toàn thể vào AB, nhưng nếu trong chỉ có B → C thì C chỉ phụ thuộc toàn thể vào B và phụ thuộc bộ phận vào AB. Phụ thuộc bắc cầu: Nếu A → B và B → C ta nói C phụ thuộc bắc cầu vào A và B là thuộc tính trung gian tạo sự bắc cầu. Dạng chuẩn 1NF: Quan hệ R ở dạng chuẩn 1NF thì nó không có thuộc tính lặp và thuộc tính suy diễn. Dạng chuẩn 2NF: Quan hệ R ở 2NF nếu nó đã ở 1NF và không tồn tại thuộc tính không khóa phụ thuộc bộ phận vào khóa. Nói cách khác: mọi thuộc tính không khóa đều phụ thuộc đầy đủ vào khóa. Dạng chuẩn 3NF: Quan hệ R ở 3NF nếu nó ở 2 NF và không tồn tại thuộc tính không khóa phụ thuộc bắc cầu vào khóa. Dạng chuẩn BCNF: Quan hệ R ở BCNF nếu mọi phụ thuộc hàm của R đều có dạng Khóa → Không khóa. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 32 Cách chuẩn hóa: F Chuẩn hóa về 1NF: Nếu R không có thuộc tính suy diễn và lặp thì mặc nhiên nó đã ở 1 NF. Ngược lại ta làm theo 2 bước sau: B1: Loại bỏ thuộc tính suy diễn trong R (nếu có) B2: Tách, nhóm các thuộc tính lặp (nếu có). Tách R thành: R 1 (Khóa + Các thuộc tính không lặp). Khóa của R 1 là khóa của R. R 2 (Khóa + Các thuộc tính lặp). Khóa của R 2 là khóa của R và 1 thuộc tính lặp nào đó. R 1 và R 2 đã ở 1NF. VD: Bảng SinhVien(MaSV, TenSV, GioiTinh, MaMon, TenMon, Diem) được tách thành: R 1 (MaSV, TenSV, GioiTinh). Khóa là MaSV R 2 (MaSV, MaMon, TenMon, Diem). Khóa là MaSV, MaMon. F Chuẩn hóa về 2NF: B1. Tìm phủ tối thiểu của F (nếu F chưa tối thiểu). B2. Tìm khóa tối thiểu của R. B3. Vẽ đồ thị phụ thuộc hàm B4. Nhìn vào đồ thị phụ thuộc hàm, nếu tồn tại thuộc tính không khóa, phụ thuộc bộ phận vào khóa thì tách R thành: R 1 (Khóa tạo sự phụ thuộc bộ phận + thuộc tính không khóa phụ thuộc bộ phận vào khóa). Khóa của R 1 là "Khóa tạo sự phụ thuộc bộ phận". R 2 (Khóa của R + thuộc tính không khóa không phụ thuộc bộ phận vào khóa). Khóa của R 2 là khóa của R. R 1 và R 2 đã ở 2NF. F Chuẩn hóa về 3NF: B1: Vẽ đồ thị phụ thuộc hàm. B2: Nhìn vào đồ thị phụ thuộc hàm, nếu có thuộc tính không khóa phụ thuộc bắc cầu vào khóa thì tách R thành: R 1 (Thuộc tính trung gian tạo sự bắc cầu + thuộc tính không khóa phụ thuộc bắc cầu vào khóa). Khóa của R 1 là "Thuộc tính trung gian tạo sự bắc cầu ". R 2 (Khóa của R + thuộc tính không khóa không phụ thuộc bắc cầu vào khóa). Khóa của R 2 là khóa của R. R 1 và R 2 đã ở 3NF. F Chuẩn hóa về BCNF: B1: Vẽ đồ thị phụ thuộc hàm. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 33 B2: Nhìn vào đồ thị phụ thuộc hàm, nếu có phụ thuộc hàm X → Y mà không có dạng Khóa → Không khóa thì tách R thành: R 1 (XY). Khóa của R 1 là X ; tập phụ thuộc hàm F 1 ={X → Y} R 2 (X+Khóa của R + các thuộc tính không khóa còn lại). Khóa của R 2 là khóa của R+ {X} . R 1 và R 2 đã ở BCNF. Ví dụ: Cho quan hệ R(U, F): U={A B C D E G H} và tập F= {AB→C, B → EG, C→H, E → G, BC→ H} Chuẩn hóa R về 3NF. Nhận xét: Với quan hệ R cho như trên thì không thể kết luận là R đã ở 1NF chưa. Do vậy, ta mặc nhiên công nhận R đã ở 1NF. Thông thường các quan hệ khi chuẩn hóa về 3NF thì đã ở BCNF rồi. Do vậy thao tác chuẩn hóa về BCNF ít khi phải làm. (Sinh viên tự tham khảo) Bài giải: B1: Loại bỏ phụ thuộc hàm dư thừa trong F, vậy: F= {AB→CD, B → E, C→H, E → G} B2: Tìm khóa tối thiểu: Đặt K 0 = {ABCDEGH} K 1 = {ABCDEG} vì C → H và C ∈ K 0 K 2 = {ABCDE} vì E → G và E ∈ K 1 K 3 = {ABCD} vì B → E và B ∈ K 1 K 4 = {AB} vì AB → CD và AB ∈ K 2 K 5 ≡ K 4 Vậy khóa của R là {AB}. Thuộc tính khóa: A, B. Thuộc tính không khóa: C, D, E, G. B3: Vẽ đồ thị phụ thuộc hàm: (vẽ trên tập F đã tối thiểu) A B C D E G H Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 34 B4: R chưa chuẩn 2 NF do tồn tại E và G là thuộc tính không khóa phụ thuộc bộ phận vào khóa. (vì B → E và E → G nên ở đây mặc dù không còn B → G ta vẫn có thể xem như có B → G). Tách R thành: R 1 (B E G). Khóa B ; F 1 = {B → E, E → G} R 2 (A B C D H). Khóa AB ; F 2 = {AB → CD, C → H} R 1 và R 2 đã ở 2NF. B5: Chuẩn hóa về 3 NF. Xét R 1: có đồ thị phụ thuộc hàm: B E G R 1 chưa ở 3NF do tồn tại G là thuộc tính không khóa lại phụ thuộc bắc cầu vào khóa. Tách R 1 thành: R 11 (E G). Khóa E ; F 11 ={E → G}. R 12 (B E). Khóa B ; F 12 ={B → E} R 11 và R 12 đã ở 3NF. Xét R 2: đồ thị phụ thuộc hàm: A B C D H R 2 chưa ở 3NF do tồn tại H là thuộc tính không khóa lại phụ thuộc bắc cầu vào khóa. Tách R 2 thành: R 21 (C H). Khóa C ; F 21 ={C → H} R 22 (A B C D). Khóa AB ; F 22 ={AB → CD} R 21 và R 22 đã ở 3NF. Vậy từ quan hệ R, ta tách thành 4 quan hệ: R 11 (E G). Khóa E ; F 11 ={E → G}. R 12 (B E). Khóa B ; F 12 ={B → E} R 21 (C H). Khóa C ; F 21 ={C → H} R 22 (A B C D). Khóa AB ; F 22 ={AB → CD} Các quan hệ này đã ở 3NF. Chú ý: Khi tách quan hệ và tập phụ thuộc hàm, nếu trong tập thụ thuộc hàm kết quả có chứa thuộc tính mà nó không có mặt trong tập thuộc tính của quan hệ mới thì ta gọi thuộc tính đó là thuộc tính "lạ" trong quan hệ. Khi đó cần biến đổi tập phụ thuộc Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 35 hàm để loại bỏ thuộc tính lạ đó ra khỏi tập phụ thuộc hàm. Thao tác này gọi là: chiếu thuộc tính "lạ" lên quan hệ. Một phương pháp chuẩn hóa nhanh khác cũng có thể được sử dụng. Tuy nhiên phương pháp nhanh này không phải bao giờ cũng cho ta phép tách (cách chuẩn hóa) ít quan hệ nhất. Phương pháp chuẩn hóa nhanh như sau : B1. Loại bỏ tất cả các phụ thuộc hàm dư thừa và thuộc tính vế trái dư thừa trong F. B2. Tách quan hệ R theo các phụ thuộc hàm : Nếu F có bao nhiêu phụ thuộc hàm thì tách R thành bấy nhiêu quan hệ con. Với quan hệ R trong ví dụ trên, ta xét tập F : F= {AB→C, B → EG, C→H, E → G, BC→ H} Loại bỏ BC → H và thuộc tính G trong B → EG ta còn : F= {AB→C, B → E, C→H, E → G} Và tách R thành : R 1 (ABC) Khóa AB, F 1 = {AB → C} R 2 (BE) Khóa B, F 2 = {B → E} R 3 (CH) Khóa C, F 3 = {C → H} R 4 (EG) Khóa E F 4 = {E → G} Tuy nhiên nếu làm theo cách này có 2 vấn đề cần chú ý : [1]. Số quan hệ thu được sau khi chuẩn hóa đôi khi không phải là ít nhất. [2]. Sau khi tách cần kiểm tra để chắc chắn mọi quan hệ con đều có thể kết nối tự nhiên với nhau. Nếu có một quan hệ con nào đó không kết nối được với các quan hệ còn lại thì việc tách như vậy sẽ dẫn tới mất mát thông tin (cách chuẩn hóa thứ nhất ở trên không có hiện tượng này). Khi phát hiện ra vấn đề đó, ta chỉ việc thêm một quan hệ mới mà quan hệ này chỉ chứa các thuộc tính khóa của R. Quan hệ mới này không có tập phụ thuộc hàm và nó đóng vai trò làm cầu nối quan hệ bị tách rời với các quan hệ còn lại. Ví dụ : Cho R(U, F) : U = {A, B, C, D, E, G, H} và F = {AB → C, B → DE, G → H} Dễ thấy khóa của quan hệ là {ABG} Khi chuẩn hóa R về 3NF, ta tách R thành : R 1 (ABC) Khóa AB, F 1 = {AB → C} R 2 (BDE) Khóa B, F 2 = {B → DE} R 3 (GH) Khóa G, F 3 = {G → H} Quan hệ R 3 không thể kết nối tới 2 quan hệ R 1 và R 2 do nó không có thuộc tính chung với R 1 và R 2 . Do vậy, ta cần bổ sung quan hệ : R 4 (ABG) Khóa ABG, F 4 = ∅ Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 36 PHỤ LỤC 1 CÁC LỖI THƯỜNG GẶP KHI GIẢI BÀI TẬP CSDL Dạng 1: - Kết nối (*) thiếu bản ghi. - Phép chiếu: không loại bản trùng nhau. - Không trình bày chi tiết các bước mà chỉ viết bảng kết quả. Dạng 2: - Thiếu dấu ngoặc “(“ và/ hoặc “)” - Phép chọn: Sai biểu thức điều kiện chọn: ∧ thành AND; ∨ thành OR - Chiếu trước chọn. (thông thường phép chọn sẽ được thực hiện trước) Dang 3: - Hằng xâu và hằng ngày tháng không đặt trong dấu nháy đơn‘’. - Hằng số đặt trong dấu nháy đơn. - Select trên nhiều bảng thiếu điều kiện kết nối. - Select lồng nhau không đặt câu Select con trong dấu ngoặc (). - Sử dụng hàm trong mệnh đều Where. - Sai cú pháp. Dạng 4: - Tách vế trái: VD: AB → C tách thành A → C và B → C. Dạng 5: Hiếm khi xảy ra lỗi. Dạng 6: - Không loại bỏ hết hoặc loại bỏ nhầm phụ thuộc hàm dư thừa. - Không loại bỏ hết hoặc loại bỏ nhầm thuộc tính vế trái dư thừa. Dạng 7: Hiếm khi xảy ra lỗi. Dang 8: - Điền nhầm bảng ban đầu. - Làm bằng sai. - Chỉ vẽ bảng mà không chú dẫn trong quá trình làm bằng. - Thiếu kết luận hoặc kết luận sai. Dang 9: - Không theo đúng trình tự các bước. - Không tìm phủ tối thiểu nếu tập F chưa tối thiểu. - Tách quan hệ sai. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 37 PHỤ LỤC 2 MỘT SỐ BÀI TẬP SINH VIÊN TỰ ÔN TẬP. Bài 1: Cho các quan hệ sau : R A B C S B C D a1 b2 1 b2 1 d1 a2 b1 2 b2 1 d2 a3 b1 1 b1 2 d3 a1 b3 2 Hãy thực hiện các biểu thức đại số quan hệ sau : a. Π AB (δ A=a1 V B = b1 (R*S) b. Π BC (R) ∪ Π BC (δ B=b1 (S)) c. Π A (δ B≠ b1 V C >1 (R)) d. Π BC (δ A=a2 V B = b3 (R)) ∩Π BC (S) Bài 2: Cho quan hệ với lược đồ sau : CT (MaCT, TenCT, DiaChi, NgayTL) NV (MaNV, TenNV, NgaySinh, Luong, MaCT) Bảng CT chứa thông tin về các công ty. Bảng NV chứa các thông tin về các nhân viên, mỗi nhân viên thuộc một công ty nào đó được xác định thông qua MaCT của nhân viên đó. Hãy biểu diễn các yêu cầu sau bằng biểu thức đại số quan hệ: a. Cho biết Tên các công ty có địa chỉ là Hà Tây và thành lập trước ngày 1/1/2000. b. Cho biết Tên các nhân viên sinh năm 1978. c. Cho biết Tên Các công ty thành lập trong nửa đầu năm 1998. d. Cho biết Tên công ty và tên các nhân viên làm việc trong các công ty đó. e. Cho biết Tên các nhân viên làm việc cả trong công ty LG và công ty Samsung. f. Cho biết Tên các nhân viên chỉ làm việc trong công ty có mã CT01 mà không làm việc trong công ty có mã CT02. g. Cho biết Tên các nhân viên làm việc trong công ty LG hoặc công ty Sony. h. Cho biết Tên nhân viên có mức lương ∈ [300, 500]. Bài 3: Cho quan hệ R(U, F) : U = {A, B, C, D, E, G} và F = {AB → C, B → C, C → EG, CE → D, G → A}. a. Chứng minh rằng nếu R thoả F thì R cũng thoả B → DA. b. Tìm bao đóng của tập thuộc tính {A, B} và tập thuộc tính {CG}. c. Tập F đã tối thiểu chưa? vì sao? nếu chưa hãy tìm một phủ tối thiểu của F. Bài 4: Cho quan hệ R(U, F): U = {A, B, C, D, E, G) và F = {AB→ C, AC→D, D→EG, G→B, A→D, CG→A}. a. Chứng minh rằng nếu R thoả mãn F thì R cũng thoả mãn các phụ thuộc hàm AB→ E và AD → BC. b. Tính bao đóng {A} + của tập thuộc tính {A}. c. Tập các phụ thuộc hàm F đã là tối thiểu chưa? Vì sao? Nếu chưa, tìm một phủ tối thiểu của F. Bài 5: Cho quan hệ R(U, F): U = {A, B, C, D, E, G, H} và F = {AB→ C, C→D, DE→GH, G→H, D →BH, A→C}. a. Chứng minh rằng nếu R thoả mãn F thì R cũng thoả mãn các phụ thuộc hàm AB→ DH và CE → BG. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. H-íng dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 38 b. Tính bao đóng {A, B} + của tập thuộc tính {A, B}. c. Tập các phụ thuộc hàm F đã là tối thiểu chưa? Vì sao? Nếu chưa, hãy tìm một phủ tối thiểu của F. Bài 6: Cho quan hệ R(U, F): U = {A, B, C, D, E, G, H} và F = {AB→ C, C→D, DC→ G, G→HE, D →BH, A→D}. a. Chứng minh rằng nếu R thoả mãn F thì R cũng thoả mãn các phụ thuộc hàm AB→ DG và C → EH. b. Tính bao đóng {A, B } + của tập thuộc tính {A, B}. c. Tập các phụ thuộc hàm F đã là tối thiểu chưa? Vì sao? Nếu chưa, tìm một phủ tối thiểu của F. Bài 7: Cho quan hệ R(U, F) : U = {A, B, C, D, E, G, H} và F = {AB → D, B → CG, D → EH}. a. Kiểm tra tính mất mát khi tách R thành : R 1 (ABD) ; R 2 (ABG) ; R 3 (BCEGH} b. Chuẩn hoá quan hệ R về 3NF. Bài 8: Cho quan hệ R(U, F): U = { A, B, C, D, E, G, H } và F = {A→C, AB→G, B→DE, G→H, GH→A }. a. Tìm một khoá tối thiểu của quan hệ R. b. Kiểm tra tính mất mát thông tin khi tách R thành các quan hệ : R 1 (AC); R 2 (BDE); R 3 (ABGH). c. Chuẩn hoá quan hệ R về dạng chuẩn 3NF. Bài 9: Cho quan hệ R(U, F): U = {A, B, C, D, E, G} và F = {AB → D, B → C, D → E, AB→ G}. a. Tìm một khoá tối thiểu của quan hệ R. b. Kiểm tra tính mất mát thông tin khi tách R thành các quan hệ : R 1 (ABD); R 2 (BCD), R 3 (ABEG). c. Chuẩn hoá quan hệ R về dạng chuẩn 3NF. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only. . dÉn «n tËp CSDL quan hÖ Tµi liÖu tham kh¶o Trang 31 DẠNG 9: CHUẨN HÓA LƯỢC ĐỒ QUAN HỆ Bài toán: Cho quan hệ R(U, F). Hãy chuẩn hóa quan hệ về 3 NF (hoặc. một quan hệ mới mà quan hệ này chỉ chứa các thuộc tính khóa của R. Quan hệ mới này không có tập phụ thuộc hàm và nó đóng vai trò làm cầu nối quan hệ bị