Báo cáo Môn thiết kế cơ sở dữ liệu

Tất cả các thành phần AttSet (tập thuộc tính), AttSetList (danh sách các tập thuộc tính), FD (phụ thuộc hàm), FDSet (danh sách các phụ thuộc hàm hay tập phụ thuộc hàm) đều được tổ chức dưới dạng mảng Boolean với chiều dài tối đa là 255. Tất cả các phép toán liên quan đến quan hệ như: hợp, trừ, giao, so sánh bằng, xét là con. và các thuật toán đ ều được xây dựng dựa trên cấu trúc dữ liệu dạng này.

pdf15 trang | Chia sẻ: lvbuiluyen | Lượt xem: 2314 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Báo cáo Môn thiết kế cơ sở dữ liệu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ĐẠ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 Lớp: HTTT02 BÁO CÁO MÔN THIẾT KẾ CSDL GIÁO VIÊN HƯỚNG DẪN:Phan Nguyễn Thụy An. Trương Quang Khánh. MSSV: 07520175 Nguyễn Tùng Sơn. MSSV: 07520305 Lê Quốc Vương. MSSV: 07520423 TP.HCM, tháng 12 năm 2009 2 I. Các thuật toán cài cài đặt trong chương trình: 1. Cấu trúc dữ liệu: Tất cả các thành phần AttSet (tập thuộc tính), AttSetList (danh sách các tập thuộc tính), FD (phụ thuộc hàm), FDSet (danh sách các phụ thuộc hàm hay tập phụ thuộc hàm) đều được tổ chức dưới dạng mảng Boolean với chiều dài tối đa là 255. Tất cả các phép toán liên quan đến quan hệ như: hợp, trừ, giao, so sánh bằng, xét là con... và các thuật toán đều được xây dựng dựa trên cấu trúc dữ liệu dạng này. 2. Các thuật toán: 2.1. Thuật toán tìm bao đóng: +Input: _Tập thuộc tính cần tìm bao đóng (a). _Tập phụ thuộc hàm dựa trên đó để tìm bao đóng (fSet). _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _Tập thuộc tính bao đóng (X’). Tên hàm xây dựng tương ứng: Public Function closure(ByVal a As AttSet, ByVal fSet As FDSet, ByVal u As String) As AttSet +Thuật toán: _B1: Gán X’=A (với A là tập thuộc tính cần tìm bao đóng). _B2: 3 Do { X=X’ Với mọi phụ thuộc hàm (PTH) p->q thuộc fSet {If (p là con có thể bằng với X’) X’=X’ hợp với {q} } }while(X’ không bằng U và X không bằng X’) _B3: Trả về X’. 2.2. Thuật toán kiểm tra phụ thuộc hàm thành viên: +Input: _PTH cần kiểm tra thành viên (f). _Tập PTH dựa trên đó để kiểm tra thành viên (fSet). _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _Giá trị True/False. +Tên hàm xây dựng tương ứng: Public Function FDMember(ByVal f As FD, ByVal fSet As FDSet, ByVal u As String) As Boolean +Thuật toán: _B1: Với mỗi PTH p->q trong fSet {Nếu tồn tại p = vế trái của f và q = vế phải của f Trả về True. } _B2: Nếu vế phải của f không thuộc tập u 4 Trả về False. _B3: Đặt Temp = fSet – f left = vế trái của f right = vế phải của f Nếu right là con của bao đóng của left dựa trên tập PTH Temp Trả về True Ngược lại Trả về False 2.3. Thuật toán tìm khóa: +Input: _Tập PTH dựa trên đó để tìm khóa (fSet). _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _Danh sách các khóa của quan hệ (Key). +Tên hàm xây dựng tương ứng: FindKey(ByVal fSet As FDSet, ByVal u As String) As AttSetList +Thuật toán: _B1: Gán các tập thuộc tính sau: Trái: Tập chứa tất cả các thuộc tính nằm bên vế trái của tất cả các PTH trong fSet. Phải: Tập chứa tất cả các thuộc tính nằm bên vế phải của tất cả các PTH trong fSet. Gốc = Trái-phải 5 Treo = u-(Trái hội Phải) Trung gian = Trái giao Phải _B2: Đặt danh sách khóa cần tìm là Key, khóa tạm thời là K, danh sách khóa tạm thời là KeyTemp _B3: K = Gốc hội Treo If bao đóng của K = u Thêm K vào Key Trả về Key Ngược lại làm B4 _B4: Tìm tất cả các tập con khác rỗng của tập Trung gian Với mọi tập con a đó { If bao đóng của (a hội với K) = u Thêm (a hội K) vào KeyTemp } _B5: Với mỗi tập khóa sK đã thêm vào KeyTemp { If không tồn tại tập nào trong KeyTemp là con không bằng sK Thêm sK vào Key } 6 Trả về Key 2.4. Thuật toán tìm một phủ tối tiểu: +Input: _Tập PTH dựa trên đó để tìm 1 phủ tối tiểu (PTT) cho nó (fSet). _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _1 PTT tìm được. +Tên hàm xây dựng tương ứng: Public Function MinimalCover(ByVal fset As FDSet, ByVal u As String) As FDSet +Thuật toán: _B1: Với mỗi PTH f trong fSet, tách vế phải của f về dạng vế phải chỉ chứa 1 thuộc tính _B2: Loại bỏ PTH dư thừa: Với mỗi PTH f trong tập PTH fSet vừa thực hiện trong B1. { Đặt fTemp = fSet-f, left là vế trái của f, right là vế phải của f. Nếu right là con của (bao đóng của left dựa trên fTemp) thì f là PTH dư thừa Loại bỏ f khỏi fSet } _B3: Loại bỏ PTH không đầy đủ: Với mỗi PTH f mà vế trái của f có nhiều hơn 2 thuộc tính trong tập PTH fSet vừa thực hiện trong B2. { Đặt fTemp = fSet-f, left là vế trái của f. 7 Với mỗi thuộc tính a trong left { Đặt sleft = left -a If a là con của (bao đóng của sleft dựa trên fTemp) Loại a khỏi left } } _B4 : Lặp lại B2 để loại bỏ dư thừa trong trường hợp B3 sinh ra PTH dư thừa _B5 : Gom những PTH có vế trái như nhau để thu gọn tập PTH 2.5. Thuật toán kiểm tra dạng chuẩn 2: +Input: _Tập PTH dựa trên đó để kiểm tra dạng chuẩn (fSet). _Danh sách các khóa của quan hệ (key). _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _Giá trị True/False. +Tên hàm xây dựng tương ứng: Public Function twoNF(ByVal fSet As FDSet, ByVal key As AttSetList, ByVal u As String) As Boolean +Thuật toán: _B1: Đặt nK là tập thuộc tính chứa các thuộc tính không là khóa của quan hệ. Với mỗi khóa K trong danh sách khóa (key) của quan hệ { 8 Tìm bao đóng của tất cả các tập con thật sự (con không bằng) của K } _B2: Với mội bao đóng S+ tìm được ở B1 { Với mội thuộc tính a thuộc nK { If a là con của S+ Trả về False } } Trả về True 2.6. Thuật toán kiểm tra dạng chuẩn 3: +Input: _Tập PTH dựa trên đó để kiểm tra dạng chuẩn (fSet). _Danh sách các khóa của qun hệ (key). +Output: _Giá trị True/False. +Tên hàm xây dựng tương ứng: Public Function ThreeNF(ByVal fset As FDSet, ByVal key As AttSetList) As Boolean +Thuật toán: Với mỗi PTH f trong fSet 9 { Đặt left = vế trái của f, right = vế phải của f Với mỗi tập khóa k trong key { If k là con left hoặc right là con k Return True } } Return False 2.7. Thuật toán kiểm tra dạng chuẩn BC: +Input: _Tập PTH dựa trên đó để kiểm tra dạng chuẩn (fSet). _Danh sách các khóa của qun hệ (key). +Output: _Giá trị True/False. +Tên hàm xây dựng tương ứng: Public Function BC(ByVal fset As FDSet, ByVal key As AttSetList) As Boolean +Thuật toán: Với mỗi PTH f trong fSet { Đặt left = vế trái của f. Với mỗi tập khóa k trong key 10 { If k là con left Return True } } Return False 2.8. Thuật toán phân rã quan hệ thành các quan hệ đạt dạng chuẩn 3, bảo toàn PTH và bảo toàn thông tin: +Input: _Tập PTH (fset) dựa trên đó để phân rã. _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _1 Tập các thuộc tính của các phân rã tìm được. _Tên hàm xây dựng tương ứng: Public Function Decomposition3NF(ByVal fset As FDSet, ByVal u As String) As AttSetList +Thuật toán: _B1: Tìm phủ tối tiểu(PTT) của fset.Các bước sau sẽ dựa trên PTT của fset _B2: Nếu có một phụ thuôc hàm(FD) trong fset chứa u thì trả về u _B3 :Tìm các thuộc tính treo, mỗi thuộc tính tạo thành một quan hệ _B4:Với các FD trong PTT có cùng vế trái tạo thành một quan hệ. _B5:Tìm khóa . Những mỗi khóa chưa thuộc một quan hệ nào sẽ tạo thành một quan hệ 11 2.9. Thuật toán phân rã quan hệ thành các quan hệ đạt dạng chuẩn BC và bảo toàn thông tin: +Input: _Tập PTH (fset) dựa trên đó để phân rã. _Chuỗi string là chuỗi chứa tất cả các tập thuộc tính của quan hệ (u). +Output: _1 Tập các thuộc tính của các phân rã tìm được. _Tên hàm xây dựng tương ứng: Public Function DecompositionBCNF(ByVal fset As FDSet, ByVal u As String) As AttSetList +Thuật toán: _B1:  Tìm FD trong fset vi phạm điều kiện BC.  Tách thành một quan hệ.Loại khỏi u các thuộc tính của FD vi phạm  Đánh dấu những FD ( sẽ không xét đến trong các lần sau)có chứa thuộc tính vế phải của FD đã tách thành 1 quan hệ Lặp lại các bước trên cho đến khi tất cả các FD trong fset đã được đánh dấu. Lưu ý các FD được tách ra không loại bỏ fset, fset sẽ được dùng đến trong B2 Nếu U khác rỗng thì sang bước 2 _B2: X U ( còn lại sau B2) IF X+ X and X+ U then X ->( (X+ - X) U) vi phạm BC 12 U = U – ((X+ - X) U) Tạo một quan hệ mới gồm X, (X+ - X) U Cuối If U then tạo một quan hệ gồm các thuộc tính còn lại của U 2.10. Thuật toán kiểm tra bảo toàn phụ thuộc hàm sau khi phân rã: +Input: _Tập PTH dựa trên đó để kiểm tra (fSet). _.Tập các thuộc tính của các quan hệ được phân rã(R) _Chuỗi string chứa tất cả các thuộc tính của quan hệ (u) +Output: _Giá trị True/False. _Tên hàm xây dựng tương ứng: Public Function PreserveDependency(ByVal fset As FDSet, ByVal R As AttSetList, ByVal u As String) As Boolean +Thuật toán: X -> Y fset A = X For each Ri R T = (A Ri)+ Ri A = A T Cuối For each 13 If Y A then Return false Cuối Return true II. Cách ghi một file txt để load trong chương trình: Cách 1: ABCDEFGH; A->B; C->D; E->F; ...; ABC->G; Cách 2: ABCDEFGH; A->B;C->D;E->F;...;BC->G; III. Phân công công việc: 1. Trương Quang Khánh: _Cài đặt cấu trúc dữ liệu cho các thành phần: AttSet (tập thuộc tính), AttSetList (danh sách các tập thuộc tính) và các xử lý liên quan (các phép toán cơ bản cần thiết khi thao tác trên tập thuộc tính: hội, giao, hợp, trừ, là con...) _Nghiên cứu và cài đặt thuật toán tìm các tập con khác rỗng của 1 tập thuộc tính. _Nghiên cứu và cài đặt thuật toán tìm khóa. 14 _Nghiên cứu và cài đặt thuật toán tìm phủ tối tiểu. _Nghiên cứu và cài đặt thuật toán phân rã quan hệ thành dạng chuẩn 3 và BC. _Nghiên cứu và cài đặt thuật toán kiểm tra bảo toàn phụ thuộc hàm. 2.Nguyễn Tùng Sơn: _Nghiên cứu thuật toán và cấu trúc dữ liệu. _Nghiên cứu và cài đặt thuật toán tìm khóa. _Nghiên cứu và cài đặt thuật toán tìm bao đóng. _Cài đặt giao diện. _Viết báo cáo. 3.Lê Quốc Vương: _Cài đặt cấu trúc dữ liệu cho các thành phần: FD (phụ thuộc hàm), FDSet(danh sách các phụ thuộc hàm) và các xử lý liên quan (các phương thức cơ bản cần thiết khi thao tác trên phụ thuộc hàm: trừ, lấy giá trị, xuất ra chuỗi...) _Nghiên cứu và cài đặt thuật toán tìm bao đóng. _Nghiên cứu và cài đặt thuật toán kiểm tra phụ thuộc hàm thành viên. _Nghiên cứu và cài đặt thuật toán tìm khóa. _Nghiên cứu và cài đặt thuật toán xác định dạng chuẩn. _Cài đặt việc nhập/xuất dữ liệu từ file. 15