Tổ chức việc tích lũy và xử lý dữ liệu một cách khoa học đòi hỏi con người sử dụng một hệ thống các thông tin có cấu trúc được lưu trữ trên các thiết bịlưu trữ thông tin thứ cấp như băng
Trang 1MỤC LỤC
Chương 1 GIỚI THIỆU ĐỀ TÀI 2
I Bối cảnh của đề tài: 2
II Giới thiệu chung về đề tài: 5
III Công cụ: 5
Chương 2 LÝ THUYẾT VỀ CƠ SỞ DỮ LIỆU 5
I Một số khái niệm: 5
1 Thuộc tính (Attribute): 5
2 Quan hệ: 6
3 Lược đồ quan hệ (Relation shema): 6
4 Khóa – Siêu khóa: 6
5 Phụ thuộc hàm: 7
6 Ràng buộc toàn vẹn: 7
II Ràng buộc toàn vẹn và phụ thuộc hàm: 8
1 Ràng buộc toàn vẹn: 8
2 Phụ thuộc hàm: 12
3 Hệ tiên đề Amstrong: 13
4 Phủ và phủ tối tiểu: 16
5 Các dạng chuẩn của lược đồ quan hệ: 18
III Chuẩn hóa quan hệ: 22
1 Các tiêu chuẩn của quá trình chuẩn hóa: 22
2 Các phương pháp chuẩn hóa một lược đồ CSDL: 23
IV Đồ thị quan hệ: 26
1 Dẫn nhập: 26
2 Một số khái niệm trong lý thuyết đồ thị: 27
3 Đồ thị con đường truy xuất: 28
V Tổ chức dữ liệu: 29
1 Tập thuộc tính: 29
2 Phụ thuộc hàm: 30
3 Tập phụ thuộc hàm: 30
4 Quan hệ: 30
Trang 25 Lược đồ quan hệ: 30
6 Node: 31
Chương 3 CÀI ĐẶT MỘT SỐ THUẬT TOÁN 31
1 Thuật toán tìm bao đóng: 31
2 Thuật toán tìm tất cả các khóa của quan hệ: 33
3 Kiểm tra phụ thuộc hàm tương đương: 35
4 Tìm phủ tối tiểu của một tập phụ thuộc hàm: 37
5 Xác định dạng chuẩn: 40
6 Chuẩn hóa: 45
7 Biểu diễn một cấu trúc CSDL quan hệ sang lược đồ quan hệ: 49
Chương 4 GIỚI THIỆU CHƯƠNG TRÌNH 51
I Các chức năng của chương trình: 51
II Giới thiệu chương trình: 52
1 Giao diện chính của chương trình: 52
2 Các chức năng trên thanh Menu: 52
Chương 5 TỔNG KẾT VÀ ĐỊNH HƯỚNG PHÁT TRIỂN 58
1 Những chức năng chương trình đã làm được: 58
2 Hướng phát triển: 58
Tài liệu tham khảo: 58
Chương 6 PHỤ LỤC 58
I Giới thiệu về NET: 58
II Ngôn ngữ C#: 60
1 Sơ lược về C#: 60
2 Nạp chồng phương thức: 61
3 Một số kiểu dữ liệu: 62
Trang 3Chương 1 GIỚI THIỆU ĐỀ TÀI
I Bối cảnh của đề tài:
Trong đời sống, mọi hoạt động của con người đều liên quan đến dữ liệu.Ngay cả một bài toán nhỏ cũng cần đến dữ liệu, nhưng không nhất thiếtphải quản lý dữ liệu này theo các phương pháp khoa học Do khả năng tổnghợp của người xử lý, các dữ liệu được lấy ra, được xử lý mà không vấp phảikhó khăn nào Tuy nhiên khi bài toán có kích thước lớn hơn hẳn và sốlượng dữ liệu cần phải xử lý tăng lên thì e rằng tầm bao quát của con ngườibình thường khó có thể quản lý hết được Ấy là chưa kể đến một số loại dữliệu đặc biệt, chúng đòi hỏi được quản lý tốt không phải vì kích thước mà vì
sự phức tạp của bản thân chúng Do đó, nhu cầu tích lũy và xử lý các dữliệu đã nảy sinh
Tổ chức việc tích lũy và xử lý dữ liệu một cách khoa học đòi hỏi con người
sử dụng một hệ thống các thông tin có cấu trúc được lưu trữ trên các thiết bịlưu trữ thông tin thứ cấp (như băng từ, đĩa từ …) để có thể thỏa mãn yêucầu khai thác thông tin đồng thời của nhiều người sử dụng hay nhiềuchương trình ứng dụng với nhiều mục đích khác nhau Hệ thống đó đượcgọi là cơ sở dữ liệu
Trong những năm gần đây thuật ngữ “CƠ SỞ DỮ LIỆU” (CSDL) đã trởnên khá quen thuộc không chỉ với những người làm Tin học mà còn đối với
cả những người làm trong nhiều lĩnh vực khác như Kinh tế, Quản lý Doanhnghiệp … Các ứng dụng của tin học vào công tác quản lý ngày càng nhiềuhơn và càng đa dạng hơn Có thể nói hầu hết các lĩnh vực kinh tế, xã hội,giáo dục, y tế … đều đã ứng dụng các thành tựu mới của Tin học vào phục
vụ công tác chuyên môn của mình Chính vì lẽ đó mà ngày càng nhiềungười quan tâm đến lĩnh vực thiết kế và xây dựng các CSDL Và có thểthấy mục tiêu chính của việc thiết kế CSDL là làm thế nào chuyển đổi cácnhu cầu lưu trữ và khai thác dữ liệu của người sử dụng thành một hệ thốngCSLD hiệu quả Người thiết kế CSDL có thể chia nhỏ hệ thống dữ liệu tổngquát thành các lược đồ quan hệ (hay còn gọi là các table) Đó là một kỹthuật dựa vào khinh nghiệm của người thiết kế còn trong thực tế để có được
Trang 4một CSDL tốt người thiết kế phải ứng dụng nhiều thuật toán như: thuật toánxác định khóa, thuật toán xác định các dạng chuẩn, thuật toán phân rã lược
đồ quan hệ… để đi tìm khóa, xác định dạng chuẩn, chuẩn hóa mỗi quan hệtrong CSDL, nhằm đảm bảo cho hệ dữ liệu có thể quản lý đầy đủ, chính xáccác thông tin trong thực tế tránh tình trạng trùng lắp thông tin, không để xảy
ra tình trạng thừa hoặc thiếu thông tin Trong quá trình đó, người thiết kếthường gặp một số vấn đề sau:
kế sẽ liệt kê tất cả các thuộc tính cần quản lý của đối tượng mà không quan tâmđến vấn đề liệu khi thêm thuộc tính đó thì có bị trùng lắp thông tin không, dữliệu có nhất quán không Chẳng hạn như trong hệ thống bán hàng, chúng ta lưutrữ thông tin của nhà cung cấp để đặt hàng thì một số thông tin ta cần là: mãnhà cung cấp, tên nhà cung cấp, địa chỉ, số điện thoại, mã hàng, tên hàng…Vớiđối tượng nhà cung cấp nếu ta quản lý rằng mỗi nhà cung cấp chỉ cung cấp mộtmặt hàng thì ta biết được nhà cung cấp nào cung cấp mặt hàng tên gì nhưng dữliệu về tên mặt hàng không nhất quán Khi nhập liệu ta có thể nhập như sau:
Mã nhà cung cấp … Mã hàng Tên hàng
Bảng 1 Quan hệ nhà cung cấpĐiều đó sẽ gây khó khăn cho ta trong quá trình truy xuất thông tin
qui tắc quản lý (phụ thuộc hàm), áp dụng hệ luật dẫn Amstrong trên các phụthuộc hàm để xác định mối liên hệ giữa các thuộc tính trong một đối tượnghoặc giữa các đối tượng trong một CSDL Sau đó, sử dụng thuật toán tìm khóacủa đối tượng Dựa vào khóa và các phụ thuộc hàm, người thiết kế sẽ đi xácđịnh dạng chuẩn để đánh giá tính chất của lược đồ quan hệ hay là đối tượng cầnquản lý Trong thực tế, người ta chỉ đánh giá cao các lược đồ quan hệ đạt từdạng chuẩn 3 trở lên vì ở dạng chuẩn này CSDL sẽ tránh được sụ trùng lắpthông tin Do đó, khi lược đồ quan hệ không đạt được dạng chuẩn 3, ngườithiết kế phân rã lược đồ quan hệ đó thành những lược đồ con đảm bảo dạng
Trang 5chuẩn cao hơn, dữ liệu không bị trùng lắp mà vẫn giữ được tính bảo toàn, tínhchính xác của dữ liệu, không gây mất thông tin.
Chỉ với một đối tượng mà người thiết kế phải làm biết bao công việcnhư vậy, trong thực tế có muôn vàn đối tượng cần được quản lý thìngười thiết kế phải tốn rất nhiều thời gian và công sức cho mỗi đốitượng Vì để làm tất cả các công việc đó, người thiết kế vẫn phải làmtrên giấy chứ chưa có 1 chương trình nào hỗ trợ cả Trước thực tế đó,chúng em xin thực hiện đề tài này để giúp người thiết kế thực hiệncác công việc trên một cách nhanh chóng và chính xác
II Giới thiệu chung về đề tài:
Nội dung chính của đề tài là xây dựng một chương trình cho phép ngườidùng tạo ra một lược đồ quan hệ và thực hiện một số chức năng như:
Tìm khóa của quan hệ
Tìm phủ tối tiểu của quan hệ
Xác định dạng chuẩn của quan hệ
Chuẩn hóa quan hệ
Tìm con đường truy xuất của một nút
III Công cụ:
Chương trình được viết bằng ngôn ngữ C# trên môi trường NET
Trang 6Chương 4 LÝ THUYẾT VỀ CƠ SỞ DỮ LIỆU
IV Một số khái niệm:
Một quan hệ R có n ngôi được định nghĩa trên tập các thuộc tính
U = {A1, A2, …, An} (thứ tự các thuộc tính không quan trọng) và kèmtheo nó là một tân từ, tức là một quy tắc để xác định mối quan hệ giữacác thuộc tính Ai và được ký hiệu R(A1, A2, …, An) tập thuộc tính củaquan hệ R đôi khi còn được ký hiệu là R+
Lược đồ quan hệ (Relation shema):
Lược đồ quan hệ là sự trừu tượng hóa của quan hệ, một sự trừu tượnghóa ở mức độ cấu trúc của một bảng hai chiều Khi nói đến lược đồ quan
hệ là đề cập đến cấu trúc tổng quát của một quan hệ; khi đề cập tới quan
hệ thì điều đó được hiểu rằng đó là một bảng có cấu trúc cụ thể hoặcmột định nghĩa cụ thể trên một lược đồ quan hệ với các bộ giá trị của nó
Khóa – Siêu khóa:
a Khóa (Key):
Quan hệ R định nghĩa trên tập các thuộc tính U={A1,A2,…,An}
Trang 7K U là khóa của quan hệ R nếu thỏa 2 điều kiện sau:
với mọi
j = 1, 2, …, n
Nghĩa là K là tập con nhỏ nhất mà giá trị của nó có thể xác định duynhất một bộ giá trị của quan hệ K còn được gọi là khóa chỉ định(Candidate) và là khóa nội của quan hệ
a Siêu khóa:
K được gọi là siêu khóa của quan hệ R nếu K’ K là một khóa củaquan hệ
Một lược đồ quan hệ Q của quan hệ R luôn có ít nhất một siêu khóa
và có thể có nhiều siêu khóa
Thuộc tính khóa là các thuộc tính tham gia vào khóa
c Thuộc tính không khóa:
Thuộc tính không khóa là các thuộc tính không tham gia vào bất kỳkhóa nào
Trang 8X, Y U là hai tập con của tập thuộc tính U Nếu f: X Y thì ta nóirằng X xác định Y hay Y phụ thuộc hàm vào X và ký hiệu là X Y.
Ràng buộc toàn vẹn:
Trong mỗi CSDL luôn tồn tại nhiều mối liên hệ giữa các thuộc tính,giữa các bộ Sự liên hệ này có thể xảy ra trong một lườc đồ quan hệhoặc trong các lược đồ quan hệ của một CSDL Các mối liên hệ này lànhững điều kiện bất biến mà tất cả các bộ của những quan hệ có liênquan trong CSDL đều phải thỏa mãn ở mọi thời điểm Những điều kiệnbất biến đó được gọi là ràng buộc toàn vẹn (RBTV) Trong thực tếRBTV là các quy tắc quản lý được áp đặt trên các đối tượng của thế giớithực Đó là quy tắc để đảm bảo tính nhất quán của dữ liệu trong CSDL.Mỗi RBTV được định nghĩa bằng một thuật toán trong CSDL
Trên đây là những khái niệm cơ bản, bây giờ chúng ta đi sâu vào tìm hiểumột số vấn đề cốt lõi của quá trình thiết kế CSDL
Trang 9V Ràng buộc toàn vẹn và phụ thuộc hàm:
d Các yếu tố của RBTV:
Mỗi RBTV có 3 yếu tố ảnh hưởng: điều kiện, bối cảnh, tầm ảnhhưởng
Điều kiện của một RBTV R có thể được biểu diễn bằng ngônngữ tự nhiên, thuật giải, ngôn ngữ đại số quan hệ, …ngoài rađiều kiện của một RBTV cũng có thể được biểu diễn bằngphụ thuộc hàm
Là những quan hệ mà ràng buộc đó có hiệu lực hay nói mộtcách khác, đó là những quan hệ cần phải được kiểm traRBTV Bối cảnh của một RBTV có thể là một hoặc nhiềuquan hệ
Trong quá trình phân tích thiết kế một CSDL, người thiết kếcần lập bảng tầm ảnh hưởng cho một RBTV nhằm xác địnhthời điểm cần phải tiến hành kiểm tra các RBTV đó Các thờiđiểm cần phải kiểm tra RBTV chính là những thời điểm cậpnhật dữ liệu (thêm, sửa, xóa) Một bảng tầm ảnh hưởng củamột RBTV có dạng sau:
(Tên RBTV) Thêm(T) Sửa(S) Xóa(X)
-r2
Trang 10
rnBảng này chứa toàn các ký hiệu + hoặc –Chẳng hạn + tại ô tương ứng với dòng r1, cột thêm thì cónghĩa là khi thêm một bộ vào quan hệ r1 thì cần phải kiểm traRBTV
Dấu – tại ô tương ứng với dòng r1, cột sửa thì có nghĩa là khisửa một bộ trên quan hệ r1 thì không cần kiểm tra RBTV này
a Phân loại RBTV:
Trong quá trình phân tích thiết kế CSDL, người phân tích phải pháthiện tất cả các RBTV tiềm ẩn trong CSDL đó Việc phân loại cácRBTV là rất có ích, nó nhằm giúp cho người phân tích có được mộtđịnh hướng, tránh bỏ sót những RBTV Các RBTV có thể được chialàm hai loại chính như sau:
RBTV trên phạm vi một quan hệ: RBTV miền giá trị, RBTVliên thuộc tính, RBTV liên bộ
RBTV trên phạm vi nhiều quan hệ: RBTV phụ thuộc tồn tại,RBTV liên bộ - liên quan hệ, RBTV liên thuộc tính - liênquan hệ
Ví dụ: với r là một quan hệ của Khách ta có RBTV nhưsau:
R1: t1, t2 r
t1 MAKH t2 MAKHCuối
Trang 11Bảng tầm ảnh hưởng:
-ii RBTV về phụ thuộc tồn tại:
RBTV về phụ thuộc tồn tại còn được gọi là RBTV về khóa ngoại.Cũng giống như RBTV về khóa chính, RBTV về phụ thuộc tồntại rất phổ biến trong CSDL
iii RBTV về miền giá trị:
RBTV về miền giá trị có liên quan đến miền giá trị của các thuộctính trong một quan hệ RBTV này thường gặp một số hệ quảntrị CSDL đã tự động kiểm tra một số ràng buộc loại này
Ví dụ:
Với r là một quan hệ của HoaDon ta có RBTV sau:
R3: t r
t.TRIGIAHD > 0Cuối
Bảng tầm ảnh hưởng:
-iv RBTV liên thuộc tính:
RBTV liên thuộc tính là mối liên hệ giữa các thuộc tính trongmột lược đồ quan hệ
Trang 12Ví dụ:
Với r là một quan hệ của HoaDon ta có RBTV sau:
R4: t r
t.NGAYLAP <= t.NGAYXUATCuối
Bảng tầm ảnh hưởng:
-v RBTV liên thuộc tính – liên quan hệ:
RBTV loại này là mối liên hệ giữa các thuộc tính trong nhiềulược đồ quan hệ
Phụ thuộc hàm:
Phụ thuộc hàm có tầm quan trọng rất lớn trong việc phân tích và thiết kế
mô hình dữ liệu phụ thuộc hàm được ứng dụng trong việc giải quyết cácbài toán tìm khóa, tìm phủ tối tiểu và chuẩn hóa CSDL
Định nghĩa hình thức của phụ thuộc hàm như sau:
Trang 13Quan hệ Q (A, B, C) có phụ thuộc hàm A xác định B (ký hiệu làA→B) nếu:
q, q’ Q, sao cho q.A = q’.A thì q.B = q’.B(Nghĩa là: ứng với 1 giá trị của A thì có một giá trị duy nhất của B)
A là vế trái của phụ thuộc hàm, B là vế phải của phụ thuộc hàm
A→B được gọi là phụ thuộc hàm hiển nhiên nếu BA Nghĩa là,
một tập A lớn hơn và bao tập con B thì A xác định được giá trị củacác thuộc tính trong tập B lad điều hiển nhiên
A→B được gọi là phụ thuộc hàm nguyên tố, hoặc nói cách khác B
được gọi là phụ thuộc hàm đầy đủ (fully functional defendence) vào
A nếu A’ A đều không có A’→B
Ví dụ:
SốChủngLoạiMặtHàng, TổngTrịGiá) có các phụ thuộc hàmsau:
if1: SốHóaĐơn → SốChủngLoạiMặtHàng;
iif2: SốHóaĐơn → TổngTrịGiá;
SốHóaĐơn là khóa của lược đồ quan hệ HóaĐơn Nếu biết số hóađơn thì ta có thể xác định được tất cả các thông tin còn lại liênquan đến hóa đơn đó, trong đó có thông tin vềSốChủngLoạiMặtHàng và TổngTrịGiá tất cả các mặt hàng củahóa đơn Các phụ thuộc hàm trên đều là nguyên tố
Quan hệ ChiTiếtHóaĐơn (SốHóaĐơn, MãHàng,SốLượngĐặt, ĐơnGiá, TrịGiá) có các phụ thuộc hàm sau:iiif1: SốHóaĐơn, MãHàng → SốLượngĐặt;
ivf2: SốHóaĐơn, MãHàng → ĐơnGiá;
vf3: SốHóaĐơn, MãHàng → TrịGiá;
vi f4: SốLượngĐặt, ĐơnGiá → TrịGiá
Thuộc tính ĐơnGiá phụ thuộc hàm không đầy đủ vào khóa(SốHóaĐơn, MãHàng), bỡi vì nó chỉ phụ thuộc vào mặt hàng(thông qua MãHàng)
Trang 14Trên một lược đồ quan hệ có thể tồn tại nhiều phụ thuộc hàm.Tập các phụ thuộc hàm thường được ký hiệu bằng chữ F
Từ hệ tiên đề Amstrong suy ra một số luật bổ sung sau:
x Tính phân rã (hoặc luật tách):
X+ = {A | X → A F+}
Ví dụ:
Trang 15thuộc hàm: thay vì đi tìm bao đóng (Closure) của tập phụ thuộc
hàm F (ký hiệu là F+, đó là tập các phụ thuộc hàm có thể đượcsuy dẫn logic từ F) để kiểm tra xem một phụ thuộc hàm X→Y cóthuộc F+ hay không, người ta chỉ cần đi tìm bao đóng của X dựatrên tập các phụ thuộc hàm F (ký hiệu là XF+, đó là tập các thuộctính có thể suy diễn từ X nhờ F), rồi kiểm tra xem Y có thuộc XFhay không
Ví dụ:
Cho lược đồ quan hệ R (A,B,C,D,E,G,H) và tập phụ thuộc
hàm F={ABC, BD, CDE, CEGH, GA} Áp dụng hệ
tiên đề Amstrong, tìm một chuỗi suy diễn ABE
Giải:
1 ABC (cho trước phụ thuộc hàm f1)
Trang 162 ABAB (tính chất phản xạ)
3 ABB (luật tách)
4 BD (cho trước phụ thuộc hàm f2)
5 ABD (bắt cầu 3 & 4)
6 ABCD (hợp 1 & 5)
7 CDE (cho trước phụ thuộc hàm f3)
8 ABE (bắt cầu 6 & 7) Kết thúc
Ví dụ:
Cho lược đồ quan hệ R (A,B,C,D,E,G,H,I,J) và tập các phụ
thuộc hàm F = {ABE, AGJ, BEI, EG, GIH } Tìm
chuỗi suy diễn ABGH
Giải:
1 ABE (cho trước phụ thuộc hàm f1)
2 ABAB (phản xạ)
3 ABB (luật tách)
4 ABBE (hợp của 1 & 3)
5 BEI (cho trước phụ thuộc hàm f3)
6 ABI (bắt cầu 4 & 5)
7 EG (cho trước phụ thuộc hàm f4)
8 ABG (bắt cầu 1 & 7)
9 ABGI (hợp 6 & 8)
10 GIH(cho trước phụ thuộc hàm f5)
11 ABH (bắt cầu 9 & 10)
12 ABGH (hợp 8 & 11)
Phủ và phủ tối tiểu:
Trong rất nhiều bài toán liên quan đến CSDL thì độ phức tạp tùy thuộcvào số phụ thuôc hàm cũng như các thuộc tính bên vế trái, vế phải củaphụ thuộc hàm Do đó, để giảm bớt độ phức tạp người ta thường xâydựng các tập phụ thuộc hàm tương đương với tập phụ thuộc hàm banđầu nhưng đơn giản hơn
Trang 17b Phụ thuộc hàm tương đương:
Hai tập phụ thuộc hàm F và G được gọi là tương đương với nhau nếu F+ = G+ Ký hiệu: F G
e Phụ thuộc hàm không dư thừa:
F là tập phụ thuộc hàm không dư thừa nếu F’ F sao cho F’ = F.Ngược lại F là tập phụ thuộc hàm dư thừa
Ví dụ:
Cho F = {A → BC, B → D, AB → D}
F dư thừa vì: F F’ = {A → BC, B → D}
f Phủ tối tiểu:
Mục đích của việc tìm phủ tối tiểu là:
Giảm lược bớt số thuộc tính của vế phải
Giảm số phụ thuộc hàm
Định nghĩa:
Cho tập PTH F, G là phủ tối tiểu của F nếu G là phủ của F đồng thờithỏa 3 điều kiện sau:
iVế phải của các PTH trên G chỉ chứa 1 thuộc tính
iiG chỉ gồm những phụ thuộc hàm đầy đủ
iiiKhông chứa phụ thuộc hàm thừa
Thuật toán xác định phủ tối tiểu:
Bước 1 :
Loại khỏi F các phụ thuộc hàm có vế trái dư thừa
Trang 18 Lần lượt thực hiện các bước sau cho các phụ thuộc hàm X→Ycủa F.
Với mọi tập con thật sự X’→Y F+ thì thay X→Y trong Fbằng X’ → Y, thực hiện lại bước này
Bước 2 :
Tách phụ thuộc hàm có vế phải lớn hơn một thuộc tính thành cácphụ thuộc hàm có vế phải có một thuộc tính
Bước 3 :
Loại khỏi F các phụ thuộc hàm dư thừa
Lần lượt xét các phụ thuộc hàm X Y của F
Nếu X Y là thành viên của F – { X Y } thì loại X Ykhỏi F
Thực hiện bước trên cho các phụ thuộc hàm tiếp theo của F
Các dạng chuẩn của lược đồ quan hệ:
Trong thực tế, một ứng dụng có thể được phân tích thành nhiều lược đồCSDL khác nhau và dĩ nhiên chất lượng thiết kế của các lược đồ nàycũng khác nhau
Chất lượng thiết kế của một lược đồ CSDL được đánh giá dựa trên cáctiêu chuẩn như:
ivSự trùng lắp thông tin: vì nó sẽ làm tăng không gian lưu trữ và gâynên tình huống thông tin bị mâu thuẫn sau những lần cập nhậtCSDL
vChi phí kiểm tra ràng buộc toàn vẹn
viBảo toàn quy tắc quản lý tức là bảo toàn các phụ thuộc hàm
viiBảo toàn thông tin
Trang 19f4: TenMonHoc → MaMonHoc.
f5: MaSV, MaMonHoc → Diem.}
Quan hệ trên có sự trùng lắp thông tin Sự trùng lắp thông tin này cóthể gây một số vấn đề khi thao tác trên quan hệ
viiiGiả sử: có 1 sinh viên thay đổi địa chỉ, thì hệ thống cần phảiduyệt trên toàn bộ quan hệ để tìm và sửa địa chỉ các bộ liên quanđến sinh viên này Nếu để xót thì sẽ dẫn đến tình trạng thông tinkhông nhất quán
ixGiả sử sinh viên có mã số 1180 hiện nay chỉ đăng ký học mônCSDL Nếu muốn xóa kết quả điểm của môn này thì dẫn đến mấtluôn thông tin của sinh viên
xKhóa của quan hệ là: {MaSV, MaMonHoc}, {MaSV,TenMonHoc} nên ta không thể thêm một sinh viên vào nếu sinhviên đó chưa đăng ký môn học
Qua ví dụ trên, chúng ta thấy sự trùng lắp thông tin là nguyên nhânlàm cho CSDL có chất lượng kém
Để hạn chế sự trùng lắp thông tin, người ta đưa ra các yêu cầu thiết
kế cần thiết cho một quan hệ dựa trên khái niệm phụ thuộc hàm,được gọi là các dạng chuẩn của một quan hệ
g Dạng chuẩn 1:
iThuộc tính đơn: là thuộc tính mà giá trị của nó không phải là sự kếthợp bỡi nhiều thông tin có ý nghĩa khác nhau và hệ thống luôntruy xuất trên toàn bộ giá trị của nó ít khi truy xuất đến từng phần
dữ liệu của nó
Ví dụ:
Quan hệ VatTu (MãVậtTư, TênVậtTư, ĐơnVịTính)Nếu TênVậtTư bao gồm cả tên vật tư và quy cách của nó.Như vậy, TênVậtTư là thuộc tính kép
iiĐịnh nghĩa dạng chuẩn 1:
Một lược đồ quan hệ Q đạt dạng chuẩn 1 nếu mọi thuộc tính của
Q đều là thuộc tính đơn
Trang 20h Dạng chuẩn 2:
iPhụ thuộc đầy đủ:
Thuộc tính A được gọi là phụ thuộc đầy đủ vào tập thuộc tính Xnếu:
o A X+
F
o X A là PTH nguyên tố
Ví dụ:
Quan hệ LopHoc (Lop, Mon, NgayKhaiGiang, HocPhi)
F = { f1: Lop, Mon → NgayKhaiGiang ;
f2: Mon → HocPhi}
Dựa vào F ta có khóa của quan hệ là {Lop, Mon}
Do đó: Lop, Mon → HocPhi là phụ thuộc hàm không đầy đủ
vì chỉ cần Mon là xác định được HocPhi: Mon→HocPhi.iiĐịnh nghĩa dạng chuẩn 2:
Một lược đồ quan hệ Q đạt dạng chuẩn 2 nếu:
Quan hệ LopHoc (Lop, Mon, NgayKhaiGiang)
F = {Lop, Mon → NgayKhaiGiang}
Ta nói quan hệ LopHoc đạt dạng chuẩn 2 vì thuộc tính khôngkhóa NgayKhaiGiang phụ thuộc hàm đầy đủ vào khóa
i Dạng chuẩn 3:
iPhụ thuộc bắt cầu:
Thuộc tính A Q+ được gọi là phụ thuộc bắt cầu vào thuộc tính
X nếu tồn tại nhóm thuộc tính Y Q+ thỏa mãn 4 điều kiện sau:
o X Y F+
Trang 21iiĐịnh nghĩa dạng chuẩn 3:
Một lược đồ quan hệ Q đạt dạng chuẩn 3 nếu:
j Dạng chuẩn BCK:
iĐịnh nghĩa:
Một lược đồ quan hệ Q ở dạng chuẩn BCK nếu mọi phụ thuộchàm không hiển nhiên đều có vế trái chứa khóa
X A F+ : A X và phải chứa khóa của Q
iiHệ quả : Nếu Q đạt dạng chuẩn BCK thì mọi vế trái của phụ thuộchàm đều là siêu khóa
Ví dụ : Quan hệ TonKho (MaHangHoa, MaKho, SoLuongTon)
Ta nói quan hệ TonKho đạt dạng chuẩn BCK
Trang 22VI Chuẩn hóa quan hệ:
Xuất phát từ giai đoạn phân tích yêu cầu, ta có thể có 1 trong 2 kết quảsau:
Một cấu trúc CSDL ban đầu gồm các quan hệ con Qi cùng cácphụ thuộc hàm F
Hoặc chỉ có một quan hệ phổ quát duy nhất Q chứa tất cả cácthuộc tính cần được lưu trữ và các phụ thuộc hàm F
Chúng ta cần kiểm tra và chuẩn hóa các kết quả đầu tiên này dựa trênmột số tiêu chuẩn thiết kế để có được một cấu trúc quan niệm CSDLđược đánh giá tốt hơn, phù hợp hơn với yêu cầu của môi trường ứngdụng
Các tiêu chuẩn của quá trình chuẩn hóa:
Hai tiêu chuẩn quan trọng cần đạt được trong quá trình chuẩn hóa mộtCSDL ở mức quan niệm là:
k CSDL kết quả cần đạt dạng chuẩn cao nhất:
Dạng chuẩn được đề ra nhằm đáp ứng 2 yêu cầu sau:
Cập nhật: hạn chế tối đa sự trùng lắp thông tin trong CSDL
Kiểm tra ràng buộc toàn vẹn: tạo điều kiện thuận lợi cho việckiểm tra ràng buộc toàn vẹn ở dạng phụ thuộc dữ liệu
l CSDL kết quả phải tương đương với CSDL phân tích lúc ban đầu:
Với tiêu chuẩn này, các thông tin lưu trữ CSDL ban đầu đều phảiđược tìm thấy đầy đủ trong CSDL kết quả
Có ba quan niệm khác nhau về tiêu chuẩn này:
Quan điểm 1: bảo toàn phụ thuộc hàm
Quan điểm này cho rằng các thông tin được lưu trữ trong CSDL
là những thông tin được thể hiện thông qua các phụ thuộc hàm
Do đó cần phải bảo toàn phụ thuộc hàm trong khi biến đổi
Quan điểm 2: bảo toàn thông tin
Trang 23Quan điểm này cho rằng các thông tin được lưu trữ trong CSDLban đầu đều phải được tìm thấy đầy đủ trong CSDL kết quả.Quan điểm 3: biểu diễn tron vẹn.
Yêu cầu CSDL kết quả vừa bảo toàn thông tin, vừa bảo toàn phụthuộc hàm
Các phương pháp chuẩn hóa một lược đồ CSDL:
m Phương pháp phân rã:
Định lý Delobel (1973):
Cho lược đồ quan hệ Q và tập phụ thuộc hàm F
Nếu f: X → A F+ sao cho X A là tập con thật sự của Q+ thì phépphân rã Q thành 2 lược đồ quan hệ con:
Nếu F* = thì C = C {Q} và kết thúc {Điểm dừng}
Ngược lại, thực hiện phân rã
Tìm tất cả các khóa của quan hệ
Trang 24 Chọn f: X → Y F với X không là siêu khóa và Ykhông chứa thuộc tính khóa.
Phân rã thành 2 lược đồ con:
Cho Q(S,D,I,M) F={SID;SDM}
Hãy phân rã Q thành các lược đồ con đạt dạng chuẩn 3 (dạngchuẩn BCK) bảo toàn thông tin
Giải:
Bước 1: tìm tất cả khóa của Q
X i TNX i (TNX i ) + Siêu khóa Khóa
Bước 2: phụ thuộc hàm SD M F có SD không là siêukhóa Ta được phân rã như bên dưới
Nhược điểm của phương pháp này:
Không bảo toàn phụ thuộc hàm
Có thể chứa một quan hệ con mà ngữ nghĩa của nó không cóích cho ứng dụng
Trang 25 Thuật toán này chỉ tiện trong trường hợp khối lượng tính toántrong việc tìm tất cả các khóa của quan hệ Q không lớn.
n Phương pháp tổng hợp:
Mục tiêu của phương pháp:
Tìm một cấu trúc CSDL gồm các Qi sao cho:
Dễ dàng kiểm tra các phụ thuộc hàm
Tối thiểu đạt dạng chuẩn 3
Thuật toán: TongHop(Q, F)
Vào: <Q, F>
Ra: C = {<Qi, FQi>}
BeginBước 1:
Tìm phủ tối tiểu của F
Trang 26f6 = MSCĐ, MSSV HG}
Hãy phân rã quan hệ trên theo thuật toán tổng hợp
Giải:
Bước 1: tìm phủ tối tiểu của F: Ftt = {f1, f2, f3, f4}
Bước 2: phân nhóm Ftt mỗi nhóm chứa các phụ thuộc hàm cócùng vế trái
F1 f1 = MSCĐ CĐF2 f2 = CĐ MSCĐF3 f3 = CĐ, MSSV HGF4 f4 = MSCĐ, HG MSSVBước 3: gộp các phụ thuộc hàm F’i có vế trái phụ thuộc lẫn nhau:
F12 f1 = MSCĐ CĐ, f2 = CĐ MSCĐ
F34 f3 = CĐ, MSSV HG,f4 = MSCĐ, HG MSSVBước 4: tạo các quan hệ con Qi từ các phụ thuộc hàm F’i
hệ thống và CSDL sẽ hoạt động chậm chạp
Để có thể xác định đúng các chỉ mục cần thiết, người ta sử dụng phươngpháp biểu diễn quan hệ ở dạng đồ thị Dạng đồ thị này cho phép làm nổibậc các thuộc tính chung giữa hai hay nhiều quan hệ (vì đây là cơ sở củaphép kết) qua đó giúp cho người thiết kế sau này dễ dàng đánh giá vàchọn lựa đúng các chỉ mục
Trang 273 Một số khái niệm trong lý thuyết đồ thị:
2 cung c1, c2 được gọi là kề cận nhau khi:
Đồ thị có hướng: nếu nút đến của cung c1 là nút đi của cung c2
Đồ thị vô hướng: nếu chúng có cùng 1 nút xuất phát
c Khuyên:
Cung c là khuyên nếu 2 nút đi và đến của c là một
d Đường đi trên đồ thị vô hướng:
Đường đi trên đồ thị vô hướng là một chuỗi cung (c1,c2,…,cp) saocho:
ci và ci+1 có chung một nút xuất phát
Nút xuất phát của c1, không chung nút xuất phát của c2, c1 đượcgọi là nút đầu của đường đi
Nút xuất phát của cp, không chung với nút xuất phát của cp+1, cpđược gọi là nút cuối của đường đi
e Mạch đi trên đồ thị có hướng:
Mạch đi trên đồ thị có hướng là một chuỗi cung (c1,c2,…,cp) sao cho:
Nút đến của ci là nút đi của ci+1
Nút đi của c1 được gọi là nút đầu của mạch đi
Nút đến của cp được gọi là nút cuối của mạch đi
Trang 28f Chu trình:
Chu trình là đường đi hay mạch đi trong đó:
Nút đầu và nút cuối trùng nhau
Một cung không xuất hiện 2 lần trong chuỗi
g Một dòng có gốc n 1 :
Một dòng có gốc ni là một tập cung D = (c1,c2,…,cp) sao cho:
Một cung trong tập đó có nút xuất phát (hoặc nút đi) là ni
ci, ni, nút xuất phát (hoặc nút đi đến) của ci, 1 đường đi(hoặc 1 mạch đi) có nút đầu là n1, nút cuối là ni và gồm các cungcủa tập D
Ví dụ:
(c1,c2) là dòng có gốc n1.(c1,c2) không là dòng có gốc n2
4 Đồ thị con đường truy xuất:
Đồ thị con đường truy xuất (N, C, R, Cđ, f, g, h, i, j) là đồ thị có hướngvới:
Ánh xạ g: C R: g(ci) = Qc mỗi cung ứng với 1 quan hệ Qc, gọi
là quan hệ cung Ngược lại, tồn tại tối đa 2 cung này có 2 chiềungược nhau, nút đi của cung thứ nhất là nút đến của cung thứ 2
và ngược lại
Điều kiện: f(N) g(N) = R
Cđ: tập con đường truy xuất
Song ánh h: C Cđ: mỗi cung ứng với 1 con đường truy xuất
n1 c1 n2 c2 n3
Cij
Trang 29 ni nj : từ 1 quan hệ nút f(ni), có thể truy xuất đến 1 bộ củaquan hệ nút f(nj) thông qua con đường truy xuất h(cij).
ni nj: từ 1 quan hệ nút f(ni), có thể truy xuất đến n bộ củaquan hệ nút f(nj) thông qua con đường truy xuất h(cij)
Ánh xạ i: Cđ N x N x N: trên mỗi con đường truy xuất cij cógắn 1 tổ hợp (m, A, M) thể hiện số bộ có tối thiểu (m), trung bình(A), tối đa (M) của quan hệ nút f(nj) có thể truy xuất được từ 1 bộcủa quan hệ nút f(ni)
Ánh xạ j: N {0, 1}: khi j(ni) = 1 thì ni là một nút
VIII Tổ chức dữ liệu:
Để dễ dàng nắm bắt các thuật toán và tận dụng sức mạnh của các công cụlập trình hiện đại, chúng em đề xuất một vài cấu trúc dữ liệu mới, hướngđối tượng trên nền Net nhằm phục vụ cho việc triển khai các thuật toán
Ưu điểm của cấu trúc dữ liệu này dễ dàng nắm bắt, nhưng nhược điểm làhao tốn không gian bộ nhớ và tốn năng lực xử lý của hệ thống
Tập thuộc tính:
Tập thuộc tính được mô tả bằng một mảng chứa một loạt các string mô
tả cho từng thuộc tính Ta xây dựng một lớp TapThuocTinh để chứamảng thuộc tính, lớp này kế thừa từ đối tượng Object và interfaceIEnumerable (để sử dụng hàm foreach trên tập thuộc tính bằng cách khaibáo thêm phương thức public IEnumerator<string> GetEnumerator())như sau:
public ArrayList MangThuocTinh;
Phụ thuộc hàm:
Trong một số cấu trúc dữ liệu cũ trước đây, phụ thuộc hàm được biểudiễn bằng các bit mô tả vị trí của thuộc tính, yếu điểm của phương phápnày là việc biểu diễn phụ thuộc hàm phụ thuộc rất nhiều vị trí của cácthuộc tính được sắp đặt trong phụ thuộc hàm Nhưng ở đây tập thuộctính của chúng ta được biểu diễn bằng một danh sách các thuộc tính, cónghĩa là người dùng có quyền sắp xếp, thêm bớt các phần tử, cũng cónghĩa là vị trí của các thuộc tính chỉ mang tính tương đối
Cij
Trang 30Ta có thể thấy rằng phụ thuộc hàm chính là mối quan hệ giữa các thuộctính theo hai vế: vế trái và vế phải, vì vậy ta có thể tận dụng cấu trúc dữliệu của tập thuộc tính đã trình bày ở trên để mô tả phụ thuộc hàm Taxây dựng một lớp PhuThuocHam gồm các thuộc tính như sau:
Quan hệ kế thừa từ lớp tập thuộc tính có các thành phần: một chuỗi mô
tả tên của quan hệ, một mảng mô tả tập khóa của quan hệ được khai báonhư sau:
private string _name;
public ArrayList tapkhoa;
LK_thuaNi: mảng lồng khóa thừa
Index: chỉ mục có kiểu số nguyên
CungNi: mảng chỉ cung Ni
Trang 31Chương 10 CÀI ĐẶT MỘT SỐ THUẬT TOÁN
Thuật toán tìm bao đóng:
a Thuật toán gốc:
Thuật toán tìm bao đóng của X dựa trên tập phụ thuộc hàm Fđối với quan hệ R được mô tả bằng ngôn ngữ Pascal như sau: iProcedure Closure (X, F)
vii OldDep := NewDep;
viii For every FD: WZ F Do
ii Tham biến TapThuocTinh tapX, TapPhuThuocHam F
iii TapThuocTinh baodong = new TapThuocTinh();
iv baodong.AddItem(tapX);
v TapThuocTinh olddep = new TapThuocTinh();
vi while (baodong != olddep)
vii {
viii olddep.AddItem(baodong);
Trang 32Trong khi baodong <> olddep thìOlddep = baodong nghĩa là olddep = {H, R}
Xét lần lượt các phụ thuộc hàm từ f1 đến f5
Vì vế trái của f2 = {H, R} nên đưa vế phải của f2 là {C} vào baodong, lúc này baodong = {H, R, C}
Trang 33Bước 3:
baodong = {H, R, C} <> olddep = {H, R} nên lặp lại bước 2đưa {T} vào baodong
Vậy: Closure({H,R}) = {C,T,H,R}
Thuật toán tìm tất cả các khóa của quan hệ:
Function: TimKhoa(F, TapKhoa)
KhongBo = 0; //số lượng các phần tử không thể loại bỏ
Foreach ( thuộc tính A trong VX){
Tập thuộc tính Y = VX – A;
Tập thuộc tính BaoDong = tính bao đóng (Y,F);
If (VX là tập con của bao đóng (Y, F)) //Y là siêu khóa.{
Tìm khóa;
}Else{KhongBo ++;
}}
If (KhongBo = = số phần tử trong XA){
Trang 34Cont = false;
Break;
}}
If (Cont){
Thêm VX vào TapKhoa;
}}}Return TapKhoa;
H,R,S có bao đóng C,H,R,S Siêu khóa
R,S có bao đóng R,S không đi xuống
H,S có bao đóng C,H,R,S Siêu khóa
S có bao đóng S
H có bao đóng H
H,C,R có bao đóng C,H,R không đi xuống
C,R,S có bao đóng C,R,S không đi xuống
C,H,S có bao đóng C,H,R,S Siêu Khóa