1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đặc tả thuật toán môn thiết kế cơ sở dữ liệu

26 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

1 ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA HỆ THỐNG THƠNG TIN ĐẶC TẢ THUẬT TỐN MƠN THIẾT KẾ CƠ SỞ DỮ LIỆU Sinh viên thực :  Trần Hưng Nghiệp – 07520245  Nguyễn Thành Phương – 07520285  Nguyễn Ngọc Linh – 07520194 GIÁO VIÊN HƯỚNG DẪN: Phan Nguyễn Thụy An Thành phố Hồ Chí Minh, tháng năm 20 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƯƠNG 1: TỔNG QUAN Đặt vấn đề: Cơ sở liệu quan hệ xây dựng theo lý thuyết E.F.Codd giới thiệu năm 1970 Mơ hình quan hệ có nhiều ưu điểm hẳn mơ hình trước từ năm 1980 trở thành mơ hình dùng rộng rãi để phát triển hệ quản trị CSDL Cùng với phát triển mô hình liệu quan hệ, có nhiều vấn đề lý thuyết thực nghiệm nảy sinh giải Khi thiết kế CSDL quan hệ ta thường đứng trước vấn đề lựa chọn lược đồ quan hệ: lược đồ tốt hơn? Tại sao? … Có thể nói tổng quát lược đồ quan hệ có cấu trúc tốt lược đồ không chứa đựng vấn đề liệt kê sau đây: a Dư thừa liệu Là trùng lặp thơng tin CSDL Ví dụ: Xét lược đồ quan hệ NHACC(Ten_NCC, Hang, DonGia, Diachi_NCC) Nếu nhà cung cấp cung cấp nhiều mặt hàng địa nhà cung cấp phải lặp lại nhiều lần  kéo theo dư thừa liệu Ngoài việc gây lãng phí dung lượng lưu trữ, dư thừa liệu gây hậu nghiêm trọng liệu người dùng cập nhật liệu làm cho liệu khơng tương thích, thiếu quán Ví dụ: Xét lại lược đồ NHACC Ta sửa địa nhà cung cấp mà khơng sửa khác gây địa không quán nhà cung cấp b Dị thường thêm liệu Không thể chèn vào quan hệ khơng có đầy đủ liệu Ví dụ: Ta ghi nhận địa nhà cung cấp nhà cung cấp khơng cung cấp mặt hàng Ten_NCC, Hang tạo thành khố cho quan hệ c Dị thường xóa liệu LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Ngược lại với vấn đề c, ta xoá hết mặt hàng hãng cung cấp, ta theo dõi địa hãng Trong ví dụ trên, vấn đề khơng cịn ta thay quan hệ NHACC hai quan hệ: NCC_ĐC(TÊN_NCC, ĐC_NCC) NCC_HG(TÊN_NCC, TÊN_HG, GIA) Cách giải vấn đề thiết kế lược đồ quan hệ xây dựng lược đồ đạt dạng chuẩn Cơ sở kiến thức: a Phụ thuộc hàm: Phụ thuộc hàm (functional dependancy) công cụ dùng để biểu diễn cách hình thức ràng buộc tồn vẹn Phương pháp biểu diễn có nhiều ưu điểm, công quan trọng, gắn chặt với lý thuyết thiết kế sở liệu Phụ thuộc hàm có ứng dụng việc giải tốn như: tìm khố, tìm phủ tối thiểu, xác định dạng chuẩn… Định Nghĩa Phụ Thuộc Hàm: Cho R(A1,…,An) sơ đồ quan hệ với tập thuộc tính U={A1,…,An} X Y tập U Xét quan hệ cụ thể r nao Ta nói X  Y (đọc là: X xác định hàm Y Y phụ thuộc hàm vào X) với cặp u, v r thỏa: u[X] = v[X]  u[Y] = v[Y] Để chứng minh suy phụ thuộc hàm khác từ phụ thuộc hàm có ta dùng hệ tiên đề Armstrong: Gọi R(U) lược đồ quan hệ với U = {A1,…,An} tập thuộc tính X, Y, Z, W  U Hệ tiên đề Armstrong bao gồm: F1) Tính phản xạ: YXXY LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com F2) Tính tăng trưởng: X  Y  XZ  YZ F3) Tính bắc cầu: X  Y, Y  Z  X  Z b Bao đóng: Bao đóng (closure) tập phụ thuộc hàm F (ký hiệu F+) tập hợp tất phụ thuộc hàm suy từ F dựa vào tiên đề Armstrong Tức phải thoả hai tính chất sau: i) F+  F ii) Khi áp dụng hệ tiên đề Armstrong cho F+ ta không thu phụ thuộc hàm nằm ngồi F+ Bao Đóng Của Tập Thuộc Tính : Cho tập phụ thuộc hàm F tập thuộc tính U X  U Bao đóng tập thuộc tính X (đối với F), ký hiệu X+, tập sau: X+ = {A | X  A  F+} c Bài toán thành viên: Qua phần ta nhận thấy X+ định nghĩa thông qua F+ Vấn đề nảy sinh nghiên cứu lý thuyết CSDL là: Cho trước tập phụ thuộc hàm F phụ thuộc hàm f, tốn kiểm tra có hay khơng f ∈ F+ gọi tốn thành viên d Siêu khóa, khóa: Cho quan hệ R(U, F), với U tập thuộc tính, F tập phụ thuộc hàm Cho K ⊆ U Định nghĩa Siêu Khoá Của Quan Hệ : K siêu khoá R thoả điều kiện sau: K xác định hàm thuộc tính U Tức K+ = U Định nghĩa Khoá Của Quan Hệ : LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com K khoá R thỏa: K siêu khóa khơng có siêu khóa nhỏ K Tức K+ = U H⊂K ⇒ H+ ≠ U Một lược đồ quan hệ có nhiều siêu khố, nhiều khố e Phủ tối thiểu: Tập phụ thuộc hàm tối thiểu tập phụ thuộc hàm thoả mãn điều kiện sau: 1) Vế phải phụ thuộc hàm F có thuộc tính 2) Mọi phụ thuộc hàm X  A  F không dư thừa, tức tập phụ thuộc hàm có từ F loại bỏ phụ thuộc hàm X  A: F \ {X  A} không tương đương với F 3) Với phụ thuộc hàm X  A  F, thuộc tính B  X khơng dư thừa, tức tập phụ thuộc hàm có từ F việc thay phụ thuộc hàm X  A phụ thuộc hàm (X \{B})  A : (F \ {X  A})  {X \ {B})  A} không tương đương với F Tập phụ thuộc hàm tương đương F: Tập phụ thuộc hàm G gọi tương đương với F F+ = G+ Ký hiệu: F ≡ G Phủ tối thiểu F: Là tập phụ thuộc hàm tối thiểu tương đương với F Ký hiệu : PTT(F) f Các dạng chuẩn: Như nói trên, lược đồ quan hệ bị dư thừa liệu, dị thường thêm, dị thường xóa Những vấn đề giải qua việc xây dựng dạng chuẩn Xét lược đồ quan hệ R(U, F), với U tập thuộc tính, F tập phụ thuộc hàm LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com i) Dạng chuẩn 1: R xem đạt dạng chuẩn thuộc tính R khác rỗng, phụ thuộc hàm vào khố có miền trị ngun tố (tức không đa hợp đa trị) ii) Dạng chuẩn 2: R xem đạt dạng chuẩn đạt dạng chuẩn thuộc tính khơng khóa phải phụ thuộc đầy đủ vào khóa iii) Dạng chuẩn 3: R xem đạt dạng chuẩn đạt dạng chuẩn thuộc tính khơng khóa khơng phụ thuộc bắc cầu vào khóa Một cách định nghĩa khác : R xem đạt dạng chuẩn phụ thuộc hàm khơng hiển nhiên F có vế trái chứa khóa hay vế phải nằm khóa iv) Dạng chuẩn B – C : R xem đạt dạng chuẩn B – C phụ thuộc hàm không hiển nhiên F có vế trái chứa khóa Yêu cầu cho đề tài:  Đề tài phải trình bày rõ ràng thuật tốn sau thuật tốn bổ trợ: o Thuật tốn tìm Bao đóng o Thuật toán kiểm tra Phụ thuộc hàm thành viên o Thuật tốn tìm Khóa o Thuật tốn tìm Phủ tối thiểu o Thuật toán xác định Dạng chuẩn  Cài đặt thử nghiệm thuật toán phần mềm có giao diện đồ họa, nhập liệu trực tiếp hay từ file liệu nhập LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƯƠNG 2: CHI TIẾT CÁC THUẬT TỐN Thuật tốn tìm Bao đóng cho tập thuộc tính: Cho lược đồ quan hệ R(U, F), tập thuộc tính U, tập phụ thuộc hàm F Tìm X+F? a Ý tưởng: - Bao đóng X có X - Duyệt qua tất phụ thuộc hàm, vế trái nằm Bao đóng thêm vế phải vào Bao đóng - Lặp lại đến hết lượt mà khơng có thêm thuộc tính thêm vào Bao đóng b Mơ hình hóa:  Input: Tập thuộc tính cần tìm bao đóng X, Tập phụ thuộc hàm F  Output: Bao đóng X+F LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com TimBaoDong(X, F) { TapCu = null TapMoi = X While (TapCu TapMoi) TapCu = TapMoi for each (pth P->Q) in F If P  TapMoi Then TapMoi = TapMoi  Q End If Next (pth P->Q) End While Return TapMoi } c Độ phức tạp, nhận xét, cải tiến: Thuật tốn có độ phức tạp tính tốn O(n2) với n số thuộc tính lược đồ quan hệ R Thuật tốn cải tiến cách: Sau thêm Q vào TapMoi, ta loại bỏ pth P->Q khỏi F Vì ta thêm Q nên khơng cần xét thêm Ta xây dựng thuật tốn với độ phức tạp tuyến tính, sử dụng LIST Thuật toán kiểm tra phụ thuộc hàm thành viên: Cho lược đồ quan hệ R(U, F), tập thuộc tính U, tập phụ thuộc hàm F Cho phụ thuộc hàm f: X->Y Kiểm tra xem f có thuộc F+ không? a Ý tưởng: - X->Y  F+  X+F  Y b Mơ hình hóa:  Input: Phụ thuộc hàm cần kiểm tra f: X→Y, Tập phụ thuộc hàm F  Output: true f thành viên F+, false ngược lại KiemTraPTHThanhVien(X, Y, F) { X+F = TimBaoDong(X, F) LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com if Y  X+F then return true else return false } c Độ phức tạp, nhận xét, cải tiến: Thuật tốn có độ phức tạp tính tốn O(n2) với n số thuộc tính lược đồ quan hệ R Đó độ phức tạp thuật tốn tìm Bao đóng tập thuộc tính, cốt lõi thuật tốn Thuật tốn tìm khóa: Cho lược đồ quan hệ R(U, F), tập thuộc tính U, tập phụ thuộc hàm F Tìm tất khóa R? a Ý tưởng: (Tìm khóa Vét cạn) - Tìm tất siêu khóa : o Liệt kê tất tập U o Tìm bao đóng tập o Nếu Bao đóng = U tập siêu khóa - So sánh siêu khóa, loại bỏ lớn khóa b Mơ hình hóa:  Input: Tập thuộc tính U, Tập phụ thuộc hàm F  Output: Tập khóa K TimKhoaVetCan(U,F) { Dim CacTapCon, CacSieuKhoa CacTapCon = TimCacTapCon(U) for each TapCon in CacTapCon { if TimBaoDong(TapCon, F) = U then LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 10 CacSieuKhoa = CacSieuKhoa  {TapCon} end if } 'loại bỏ siêu khóa khơng nhỏ for each SieuKhoa1 in CacSieuKhoa for each SieuKhoa2 in CacSieuKhoa { if SieuKhoa2  SieuKhoa1 then CacSieuKhoa = CacSieuKhoa \ SieuKhoa1 break; end if } Return CacSieuKhoa ' Tập khóa cuối sau bỏ siêu khóa khơng nhỏ } c Độ phức tạp, nhận xét, cải tiến: Thuật tốn có độ phức tạp tính tốn O(2nn2) với n số thuộc tính lược đồ quan hệ R Bảo đảm tìm tất Siêu khóa Khóa Khi số thuộc tính U lớn việc duyệt qua tất tập không khả thi Nên ta đưa thuật tốn tìm khóa đồ thị sau để giới hạn số tập xét Thuật tốn để tham khảo, chương trình nhóm khơng sử dụng thuật tốn d Ý tưởng: (Tìm khóa đồ thị) - Dựa biểu diễn đồ thị R: Gốc thuộc tính nằm bên vế trái, Cơ lập thuộc tính khơng phụ thuộc hàm nào, Trung gian thuộc tính nằm hai vế, Lá thuộc tính nằm bên vế phải - Các thuộc tính gốc lập chắn nằm khóa - Các thuộc tính trung gian khóa khơng - Các thuộc tính chắn khơng khóa e Mơ hình hóa: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 12 Bảo đảm tìm tất Khóa Nhưng khơng bảo đảm tìm tất siêu khóa Thuật tốn tìm Phủ tối tiểu cho tập phụ thuộc hàm: Cho lược đồ quan hệ R(U, F), tập thuộc tính U, tập phụ thuộc hàm F Tìm PTT(F)? d Ý tưởng: - Tách vế phải thành thuộc tính đơn - Thay phụ thuộc hàm không đầy đủ - Loại bỏ phụ thuộc hàm dư thừa e Mơ hình hóa:  Input: tập phụ thuộc hàm F  Output: Phủ tối thiểu F: PTT(F) TimPTT(F) { F = TachPTH(F) F = LoaiPTHDuThua(F) F = ThayThePTHKhongDayDu(F) Return F } ' -TachPTH(F) { for each (pth P->Q) in F { CacPhanTu = TimTungPhanTu(Q) F = F \ (P->Q) For Each PhanTu in CacPhanTu F = F  (P->PhanTu) } } ThayThePTHKhongDayDu(F) { for each (pth P->Q) in F { LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 13 for each Pi in P1P2…Pk ->Q { if F=(F-{P1…Pi…Pk-> Q}){P1…Pi-1Pi+1 …Pk->Q}then P=P\Pi end if } } } ' -LoaiPTHDuThua(F) { for each (pth f = P->Q) in F { P+(F\f) = TimBaoDong(P, (F \ f)) if P+(F\f)  Q then F = F \ f } } ' -f Độ phức tạp, nhận xét, cải tiến: Thuật toán cho ta PTT(F), phủ tối thiểu khác có ta thay đổi thứ tự tập thay phụ thuộc hàm khơng đầy đủ Thuật tốn xác định Dạng Chuẩn: Cho lược đồ quan hệ R(U, F), tập thuộc tính U, tập phụ thuộc hàm F Xác định dạng chuẩn? a Ý tưởng: - Tìm tất khóa - Kiểm tra dạng chuẩn BC - Kiểm tra dạng chuẩn - Kiểm tra dạng chuẩn - Kiểm tra dạng chuẩn b Mơ hình hóa: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 14  Input: Tập thuộc tính U, Tập phụ thuộc hàm F, TatCaThuocTinhCoMienTriNguyenTo  Output: o Không đạt dạng chuẩn return o Đạt dạng chuẩn return o Đạt dạng chuẩn return o Đạt dạng chuẩn return o Đạt dạng chuẩn BC return XacDinhDangChuan(U, F, TatCaThuocTinhThoaMienTriNguyenTo) { TapKhoa = TimKhoaDoThi(U, F) F’ = TachPTH(F) If DCBC(TapKhoa, F’) then Return Else if DC3(TapKhoa, F’) then Return Else if DC2(TapKhoa, F’) then Return Else if TatCaThuocTinhCoMienTriNguyenTo then Return Else Return } ' DCBC(TapKhoa, F’) { for each (fth P->Q) in F’ { if (Q  P) then Re = false for each K in TapKhoa { if (P  K) then Re = true Break; end if } If Re = false then Return false End If end if } LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 15 return true } ' DC3(TapKhoa, F’) { for each (fth P->Q) in F’ { if (Q  P) then Re1 = false Re2 = false for each K in TapKhoa { if (P  K) then Re1 = true Break; end if } for each K in TapKhoa { if (Q  K) then Re2 = true Break; end if } If ((Re1 = false) AND (Re2 = false)) then Return false end if end if } return true } ' DC2_New(TapKhoa, F’) 'F’ F có vế phải thuộc tính { for each (pth P->Q) in F' for each K in TapKhoa if (P  K) AND (P K) then return false end if return true } ' DC2_Old(TapKhoa, F, U) { TTKK = U LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 16 for each K in TapKhoa TTKK = TTKK \ K for each KK in TTKK for each K in TapKhoa { TapCon = TimTapCon(K) TapCon = TapCon \ K for each TC in TapCon if (TC+F  KK) then return false end if } return true } c Độ phức tạp, nhận xét, cải tiến: Thuật toán phụ thuộc nhiều vào thuật tốn thành phần Thơng thường lược đồ quan hệ ta xét có miền trị nguyên tố đạt dạng chuẩn Các thuật tốn hỗ trợ: Tìm tập a Ý tưởng: Xây dựng tập có số thuộc tính tăng dần để khơng phải xếp b Mơ hình hóa:  Input: Tập thuộc tính U  Output: Tất tập U LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 17 U gồm n phần tử TapCon gồm 2^n-1 phần tử TapCon = U For i = to 2^n -1 For j = last(TapCon (i)) to n-1 TapCon.Add(TapCon (i) + U (j)) Next Next * ( last(AB) = vị trí B U, last(AB)=1 , last(AC) =2) Debug mẫu a A B C D b AB AC AD BC BD CD c ABC ABD ACD BCD d ABCD CHƯƠNG 3: CÀI ĐẶT CÁC THUẬT TOÁN I Cấu trúc liệu List dùng làm cấu trúc lưu trữ cấu trúc động, sử dụng tối ưu cho nhớ, có hàm cần thiết hỗ trợ : Add, Addrange, index, RemoveAt … Tập thuộc tính U: Dim str_U As List(Of String) LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 18 Mục đích: Mỗi thuộc tính string riêng biệt, có khoảng trắng Phụ thuộc hàm : Class F Class F Public PTH, gồm Public PTH, gồm Left As New List(Of String) 'Vế trái danh sách string Right As New List(Of String) 'Vế phải danh sách string Tập phụ thuộc hàm : Dim lst_F As List(Of F) Tập (Tập hợp gồm nhiều tập thuộc tính): Dim lst_Tap_Con As List(Of List(Of String)) Tập khóa (Tập hợp gồm nhiều tập khóa) Dim lst_Khoa As List(Of List(Of String)) II Các thuật tốn a Tìm bao đóng Public Function XPlusF(ByVal X As List(Of String), ByVal F As List(Of F)) As List(Of String) Dim Dim Dim Dim str_old As New List(Of String) str_kq As New List(Of String) flag As Boolean count As Integer = F.Count - For i As Integer = To X.Count - str_kq.Add(X(i)) Next Do str_old.Clear() For i As Integer = To str_kq.Count - str_old.Add(str_kq(i)) Next For dem As Integer = To count flag = True LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 19 For dem2 As Integer = To F(dem).Left.Count If str_kq.Contains(F(dem).Left(dem2)) = False Then flag = False End If If flag = False Then Exit For End If Next If flag Then For dem2 = To F(dem).Right.Count - If str_kq.Contains(F(dem).Right(dem2)) = False Then str_kq.Add(F(dem).Right(dem2)) End If Next End If Next Loop Until str_old.Count = str_kq.Count Return str_kq End Function b Tìm khóa Private Function Tim_Khoa(ByVal lst_U As List(Of String), ByVal lst_F As List(Of F)) As List(Of List(Of String)) Dim lst_Goc As New List(Of String) 'Các thuộc tính gốc (1) Dim lst_TG As New List(Of String) ' Các thuộc tính trung gian (3) Dim lst_R As New List(Of String) ' Các thuộc tính lập ( rời) (4) Dim lst_key As New List(Of String) ' Kết Dim lst_kq As New List(Of List(Of String)) Dim int_kt As Integer 'Thiết lập tập gốc, trung gian, rời rạc For i As Integer = To lst_U.Count - int_kt = Kiem_Tra_TT(lst_U(i), lst_F) If int_kt = Then lst_Goc.Add(lst_U(i)) ElseIf int_kt = Then lst_TG.Add(lst_U(i)) ElseIf int_kt = Then lst_R.Add(lst_U(i)) End If Next LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 20 For i = To lst_Goc.Count - lst_key.Add(lst_Goc(i)) Next For i = To lst_R.Count - lst_key.Add(lst_R(i)) Next If lst_key.Count Then lst_kq.Add(lst_key) End If If XPlusF(lst_key, lst_F).Count = lst_U.Count Then 'Kiểm tra xem tập Gốc giao Rời có phải khóa không Return lst_kq Else If lst_kq.Count > Then lst_kq.RemoveAt(0) End If Dim lst_Tap_Con As New List(Of List(Of String)) lst_Tap_Con = Tim_tap_Con_New(lst_TG) Dim test As Integer For i = To lst_Tap_Con.Count - test = Dim lst_key_tmp As New List(Of String) lst_key_tmp.AddRange(lst_key) lst_key_tmp.AddRange(lst_Tap_Con(i)) 'Add tập vào khóa If XPlusF(lst_key_tmp, lst_F).Count = lst_U.Count Then If lst_kq.Count = Then lst_kq.Add(lst_key_tmp) Else 'Không add siêu khóa For j As Integer = To lst_kq.Count If list_in(lst_kq(j), lst_key_tmp) Then test = End If Next If test = Then lst_kq.Add(lst_key_tmp) End If End If End If Next Return lst_kq LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 21 End If End Function c Tìm phủ tối tiểu Private Function Tim_Phu_TT(ByVal lst_F As List(Of F)) As List(Of F) 'Chuyển dạng vế phải thuộc tính Dim lst_tmp As New List(Of String) Dim lst_F_tmp As New List(Of F) Dim i, j As Integer For i = To lst_F.Count - If lst_F(i).Right.Count > Then For j = To lst_F(i).Right.Count - Dim F_tmp As New F F_tmp.Left.AddRange(lst_F(i).Left) F_tmp.Right.Add(lst_F(i).Right(j)) lst_F.Add(F_tmp) Next lst_F.RemoveAt(i) i -= End If Next 'Ta kiểm tra điều kiện không đầy đủ trước, điều kiện dư thừa sau 'Kiểm tra loại bỏ thuộc tính khơng đầy đủ For i = To lst_F.Count - j = While j < lst_F(i).Left.Count lst_tmp.Clear() lst_tmp.AddRange(lst_F(i).Left) lst_tmp.RemoveAt(j) If XPlusF(lst_tmp, lst_F).Contains(lst_F(i).Right(0)) Then lst_F(i).Left.RemoveAt(j) j = -1 End If j += End While Next 'Kiểm tra loại bỏ phụ thuộc hàm dư thừa i = While i < lst_F.Count lst_F_tmp.Clear() lst_F_tmp.AddRange(lst_F) lst_F_tmp.RemoveAt(i) If XPlusF(lst_F(i).Left, lst_F_tmp).Count = XPlusF(lst_F(i).Left, lst_F).Count Then LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 22 lst_F.RemoveAt(i) i = -1 End If i += End While Return lst_F End Function d Xác định dạng chuẩn Private Function KT_Dang_Chuan_2(ByVal lst_F As List(Of F), ByVal lst_U As List(Of String)) As Integer Dim lst_Khoa As New List(Of List(Of String)) lst_Khoa = Tim_Khoa(lst_U, lst_F) lst_F = Tim_Phu_TT(lst_F) Dim bool_in As Integer For i As Integer = To lst_F.Count - For j As Integer = To lst_Khoa.Count - bool_in = For k As Integer = To lst_F(i).Left.Count If lst_Khoa(j).Contains(lst_F(i).Left(k)) = False Then bool_in = End If Next If bool_in = And lst_F(i).Left.Count lst_Khoa(j).Count Then Return False End If Next Next Return True End Function Private Function KT_Dang_Chuan_3(ByVal lst_F As List(Of F), ByVal lst_U As List(Of String)) As Integer Dim lst_Khoa As New List(Of List(Of String)) lst_Khoa = Tim_Khoa(lst_U, lst_F) Dim bool_test As Integer lst_F = Tim_Phu_TT(lst_F) For i As Integer = To lst_F.Count - bool_test = ' Vế trái siêu khóa LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 23 For j As Integer = To lst_Khoa.Count - If list_in(lst_Khoa(j), lst_F(i).Left) Then bool_test = Exit For End If Next If bool_test = Then For j As Integer = To lst_Khoa.Count - 'Vế phải nằm khóa, vế phải chứa tt If lst_Khoa(j).Contains(lst_F(i).Right(0)) Then bool_test = Exit For End If Next End If If bool_test = Then Exit For End If Next If bool_test = Then Return Else Return End If End Function Private Function KT_Dang_Chuan_BC(ByVal lst_F As List(Of F), ByVal lst_U As List(Of String)) As Integer Dim lst_Khoa As New List(Of List(Of String)) lst_Khoa = Tim_Khoa(lst_U, lst_F) Dim bool_test As Integer = lst_F = Tim_Phu_TT(lst_F) For i As Integer = To lst_F.Count - bool_test = ' Vế trái siêu khóa For j As Integer = To lst_Khoa.Count - If list_in(lst_Khoa(j), lst_F(i).Left) Then bool_test = Exit For End If Next If bool_test = Then Exit For End If Next If bool_test = Then LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 24 Return Else Return End If End Function CHƯƠNG 4: NHẬN XÉT, KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 25 Ở tìm hiểu kiến thức mơ hình sở liệu quan hệ, thuật tốn tảng thao tác thành phần lược đồ sở liệu quan hệ Các thuật toán chủ yếu tập trung vào phần thứ lý thuyết thiết kế sở liệu quan hệ xác định xem lược đồ quan hệ có tốt khơng Có tránh vấn đề nảy sinh dư thừa liệu, bất thường thêm, xóa… Tuy nhiên cịn phần vơ quan trọng lý thuyết thiết kế sở liệu xây dựng dạng chuẩn cao cách phân rã lược đồ quan hệ có chúng khơng đạt dạng chuẩn cao Chúng ta nên lưu ý nguyên tắc khác Khi lược đồ đạt dạng chuẩn cao dư thừa liệu giảm xuống công việc xử lý để lấy liệu lại nhiều Lược đồ đạt dạng chuẩn BC khơng có liệu dư thừa Nhưng liệu bị phân tán nhiều quan hệ, việc lấy liệu phải kết nhiều quan hệ chọn chiếu Nếu đạt dạng chuẩn thấp liệu tập trung chỗ ta cần chọn chiếu không cần thực phép kết Như xác định phân rã đến dạng chuẩn có lợi? Làm tìm thay tốt đẹp cho sơ đồ quan hệ tồi tệ? Trong thực tế người ta thường phân rã lược đồ quan hệ đến dạng chuẩn đạt yêu cầu TÀI LIỆU THAM KHẢO [1] Trịnh Minh Tuấn , “Giáo trình thiết kế sở liệu” NXB Đại học Quốc gia TP Hồ Chí Minh, 2009 [2] “Giáo trình sở liệu”, Trường Cao đẳng Công nghiệp [3] Phạm Thị Xuân Lộc, “Bài giảng Cơ sở liệu” Khoa Công nghệ thông tin, Trường Đại học Cần Thơ [4] Đỗ Trung Tuân, “Cơ sở liệu” NXB Đại học quốc gia Hà Nội [5] PGS.TSKH Trần Quốc Chiến, “Giáo trình Cơ sở liệu” Đà Nẵng [5] Lê Tiến Vương, “Nhập môn Cơ sở liệu quan hệ” NXB Khoa học Kỹ thuật, 1995 [6] Jeffrey D Ullman – Stanford University, “Principles of Database and Knowledge – Base systems” (Volume 1&2) Computer Science Press LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 26 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... Trung Tuân, ? ?Cơ sở liệu? ?? NXB Đại học quốc gia Hà Nội [5] PGS.TSKH Trần Quốc Chiến, “Giáo trình Cơ sở liệu? ?? Đà Nẵng [5] Lê Tiến Vương, “Nhập môn Cơ sở liệu quan hệ” NXB Khoa học Kỹ thuật, 1995... trình bày rõ ràng thuật toán sau thuật tốn bổ trợ: o Thuật tốn tìm Bao đóng o Thuật toán kiểm tra Phụ thuộc hàm thành viên o Thuật tốn tìm Khóa o Thuật tốn tìm Phủ tối thiểu o Thuật toán xác định... Tuấn , “Giáo trình thiết kế sở liệu? ?? NXB Đại học Quốc gia TP Hồ Chí Minh, 2009 [2] “Giáo trình sở liệu? ??, Trường Cao đẳng Công nghiệp [3] Phạm Thị Xuân Lộc, “Bài giảng Cơ sở liệu? ?? Khoa Công nghệ

Ngày đăng: 01/11/2022, 15:11

Xem thêm:

w