Giáo trình Cơ sở dữ liệu - Vũ Đức Thi

doc 178 trang hoanguyen 8241
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Cơ sở dữ liệu - Vũ Đức Thi", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docgiao_trinh_co_so_du_lieu_vu_duc_thi.doc

Nội dung text: Giáo trình Cơ sở dữ liệu - Vũ Đức Thi

  1. PGS.TS. Vũ Đức Thi Giáo trình cơ sở dữ liệu Bài Giảng Hà Nội 5
  2. Lời nói đầu Cơ sở dữ liệu là một lĩnh vực phát triển mạnh của công nghệ thông tin. Cùng với sự phát triển công nghệ thông tin ở nước ta, việc sử dụng các kiến thức về cơ sở dữ liệu vào thực tiễn ngày càng trở lên cần thiết. Trong bài giảng này chúng tôi cung cấp cho sinh viên những kiến thức cơ bản nhất về cơ sở dữ liệu. Mục tiêu chính là với số kiến thức cơ bản này sinh viên có thể ứng dụng các kiến thức về cơ sở dữ liệu vào thực tiễn và tiếp tục nghiên cứu học tập được các môn tin học khác. Giáo trình gồm 4 chương chính (Ngoài chương mở đầu và tài liệu tham khảo ). Chương 2 cung cấp cho sinh viên những kiến thức cơ bản về cơ sở dữ liệu, mà cụ thể là về cơ sở dữ liệu quan hệ. Trong chương này, chúng tôi trình bày những khái niệm cơ bản nhất của cơ sở dữ liệu quan hệ, cũng như những thuật toán thiết kế chúng. Chương 3 trình bày các kiến thức liên quan đến các dạng chuẩn. Chương 4 giới thiệu các phép toán xử lí các bảng ( quan hệ ). Chương 5 và chương 6 là các chương trình bày các ứng dụng của cơ sở dữ liệu vào thực tiễn. Trong 6
  3. chương 5 chúng tôi nêu một số các ứng dụng của cơ sở dữ liệu trong các hệ quản trị cơ sở dữ liệu hiện có. Trong đó có những vấn đề liên quan đến các thực thể, các khoá, các dạng chuẩn trong các hệ quản trị cơ sở dữ liệu. Chương 6 trình bày một số các công đoạn xây dựng các dự án thiết kế tổng thể các hệ thống thông tin. Trong chương 7, chúng tôi trình bày một số các kiến thúc cơ bản về thuật toán và độ phức tạp thuật toán. Những kiến thức này giúp cho bạn đọc tiếp thu các kiến thức của các chương trên. Giáo trình này phục vụ cho các sinh viên ngành công nghệ thông tin hoặc các cán bộ đang công tác trong lĩnh vực tin học muốn bổ xung kiến thức cho mình. Tại tất cả các trường đại học có giảng dạy về tin học, cơ sở dữ liệu là môn học chính cho các sinh viên khoa công nghệ thông tin. Vì thế giáo trình này có thể làm tư liệu học tập cho sinh viên hệ cử nhân tin học, cử nhân cao đẳng tin học, kĩ sư tin học, hoặc có thể làm tài liệu tham khảo cho các học viên cao học, nghiên cứu sinh và các giảng viên tin học. PGS.TS. Vũ Đức Thi 7
  4. Chương mở đầu Cơ sở dữ liệu (CSDL) là một trong những lĩnh vực được tập trung nghiên cứu và phát triển của công nghệ thông tin, nhằm giải quyết các bài toán quản lí, tìm kiếm thông tin trong những hệ thống lớn, đa dạng, phức tạp cho nhiều người sử dụng trên máy tính điện tử. Cùng với sự ứng dụng mạnh mẽ công nghệ thông tin vào đời sống xã hội, kinh tế, quốc phòng Việc nghiên cứu CSDL đã và đang phát triển ngày càng phong phú và hoàn thiện. Từ những năm 70, mô hình dữ liệu quan hệ do E.F. Codd đưa ra với cấu trúc hoàn chỉnh đã tạo lên cơ sở toán học cho các vấn đề nghiên cứu lí thuyết về CSDL. Với ưu điểm về tính cấu trúc đơn giản và khả năng hình thức hoá phong phú, CSDL quan hệ dễ dàng mô phỏng các hệ thống thông tin đa dạng trong thưc tiễn, tạo điều kiện lưu trữ thông tin tiết kiệm, có tính độc lập dữ liệu cao, dễ sửa đổi, bổ sung cũng như khai thác dữ liệu. Mặt khác, việc khai thác và áp dụng các kĩ thuật tổ chức và sử dụng bộ nhớ cho phép việc cài đặt các CSDL quan hệ đưa lại hiệu quả cao và làm cho CSDL quan hệ chiếm ưu thế trên thị trường. Nhiều hệ quản trị CSDL đã được xây dựng và đưa vào sử dụng rộng rãi như : DBASE, FOXBASE, 8
  5. FOXPRO, PARADOX, ORACLE, MEGA, IBM DB2, SQL for WINDOWS NT Mô hình dữ liệu quan hệ đặt trọng điểm hàng đầu không phải là khai thác các tiềm năng của máy mà ở sự mô tả trực quan dữ liệu theo quan điểm của người dùng, cung cấp một mô hình dữ liệu đơn giản, trong sáng, chặt chẽ, dễ hiểu và tạo khả năng tự động hoá thiết kế CSDL quan hệ. Có thể nói lí thuyết thiết kế và cài đặt CSDL, nhất là mô hình dữ liệu quan hệ đã phát triển ở mức độ cao và đạt được những kết quả sâu sắc. Hàng loạt vấn đề đã được nghiên cứu giải quyết như: - Lí thuyết thiết kế CSDL, các phương pháp tách và tổng hợp các lược đồ quan hệ theo tiêu chuẩn không tổn thất thông tin hay bảo toàn tính nhất thể của các ràng buộc trên dữ liệu . - Các loại ràng buộc dữ liệu, cấu trúc và các tính chất của chúng, ngữ nghĩa và khả năng áp dụng phụ thuộc dữ liệu ví dụ như phụ thuộc hàm, phụ thuộc đa trị, phụ thuộc kết nối, phụ thuộc lôgic - Các vấn đề tối ưu hoá: ở mức vật lí trong việc tổ chức quản lí các tệp; ở mức đường truy nhập với các tệp chỉ số hay các danh sách sắp xếp; ở mức lôgic trên cơ sở rút gọn các biểu thức biểu diễn các câu hỏi, vv 9
  6. Trong Giáo trình này sẽ trình bày một số kiến thức cơ bản nhất về CSDL bao gồm các kiến thức liên quan đến phụ thuộc hàm, khoá và dạng chuẩn, các thuật toán nhận dạng và thiết kế chúng, việc xây dựng các khái niệm này trong các hệ CSDL lớn như MEGA, ORACLE , việc nghiên cứu và áp dụng chúng để xây dựng các dự án thiết kế tổng thể các hệ thống CSDL hiện nay. 10
  7. Chương 2 Các kiến thức cơ bản về cơ sở dữ liệu 2.1. Khát quát về mô hình dữ liệu Thông thường đối với việc thiết kế và xây dựng các hệ thông tin quản lí, chúng ta cần xử lí các file dữ liệu. Những file này bao gồm nhiều bản ghi (record) có cùng một cấu trúc xác định (loại bản ghi). Đồng thời, mỗi bản ghi được phân chia thành các trường dữ liệu (fild). Một cơ sở dữ liệu là một hệ thống các file dữ liệu, mỗi file này có cấu trúc bản ghi khác nhau, nhưng về mặt nội dung có quan hệ với nhau. Một hệ quản trị cơ sở dữ liệu là một hệ thống quản lí và điều hành các file dữ liệu. Nói chung một hệ quản trị cơ sở dữ liệu thường có những đặc tính sau : - Có tính độc lập với các công cụ lưu trữ, - Có tính độc lập với các chương trình phần mềm của người sử dụng (có nghĩa là các ngôn ngữ lập trình khác nhau có thể được dùng trong hệ này), - Có khả năng tại một thời điểm truy nhập vào nhiều nơi trong hệ này , - Có khả năng khai thác tốt tiềm năng của máy, 11
  8. - Người dùng với kiến thức tối thiểu cúng có thể xử dụng được hệ này, - Bảo đảm an toàn dữ liệu và bảo mật dữ liệu, - Thuận lợi và mềm dẻo trong việc bổ xung, loại bỏ, thay đổi dữ liệu - Giảm bớt sự dư thừa dữ liệu trong lưu trữ, Trong quá trình thiết kế và xây dựng các hệ quản trị cơ sở dữ liệu, người ta tiến hành xây dựng các mô hình dữ liệu. Mô hình dữ liệu phải thể hiện được các mối quan hệ bản chất của các dữ liệu mà các dữ liệu này phản ánh các mối quan hệ và các thực thể trong thế giới hiện thực. Có thể thấy mô hình dữ liệu phản ánh khía cạnh cấu trúc lôgic mà không đi vào khía cạnh vật lí của các cơ sở dữ liệu. Khi xây dựng các mô hình dữ liệu cần phân biệt các thành phần cơ bản sau : - Thực thể (Entity): Đó là đối tượng có trong thực tế mà chúng ta cần mô tả các đặc trưng của nó. - Thuộc tính: Đó là các dữ liệu thể hiện các đặc trưng của thực thể. - Ràng buộc: Đó là các mối quan hệ lôgic của các thực thể. Tuy vậy, ba thành phần cơ bản trên được thể hiện ở hai mức : 12
  9. - Mức loại dữ liệu (Type): Đó là sự khái quát hoá các ràng buộc, các thuộc tính, các thực thể cụ thể. - Mức thể hiện: Đó là một ràng buộc cụ thể, hoặc là các giá trị thuộc tính, hoặc là một thực thể cụ thể Thông thường chúng ta sẽ nhận được các loại dữ liệu (Type) của các đối tượng cần khảo sát trong quá trình phân tích các thể hiện cụ thể của chúng. yếu tố quan trọng nhất của cấu trúc cơ sở dữ liệu là dạng cấu trúc dữ liệu mà trong đó các mối quan hệ giữa các dữ liệu lưu trữ được mô tả. Có thể thấy rằng loại dữ liệu nền tảng của việc mô tả các mối quan hệ là loại bản ghi (Record type). Bởi vì các ràng buộc giữa các loại bản ghi tạo ra bản chất cấu trúc của cơ sở dữ liệu. Vì thế, dựa trên việc xác định các ràng buộc giữa các loại dữ lịêu được cho như thế nào mà chúng ta phân loại các mô hình dữ liệu. Có nghĩa là từ cách nhìn của người xử dụng việc mô tả các dữ liệu và các ràng buộc giữa các dữ liệu được thực hiện như thế nào. Trên thực tế chúng ta phân biệt hai loại mô hình dữ liệu: - Mô hình dữ liệu mạng: Trong đó chúng ta thể hiện trực tiếp các ràng buộc tuỳ ý giữa các loại bản ghi, 13
  10. - Mô hình dữ liệu quan hệ: Trong mô hình này các ràng buộc trên được thể hiện qua các quan hệ (bảng). Mô hình dữ liệu quan hệ là một công cụ rất tiện lợi để mô tả cấu trúc lôgic của các cơ sở dữ liệu. Như vậy, ở mức lôgic mô hình này bao gồm các file được biểu diễn dưới dạng các bảng. Do đó đơn vị của CSDL quan hệ là một bảng (Một quan hệ được thể hiện trong Định nghĩa 1), trong đó các dòng của bảng là các bản ghi dữ liệu cụ thể (Đó là các thể hiện cụ thể của loại bản ghi), còn tên các cột là các thuộc tính. Theo cách nhìn của người xử dụng thì một cơ sở dữ liệu quan hệ là một tập hợp các bảng biến đổi theo thời gian. 2.2. Các khái niệm cơ bản và hệ tiên đề Armstrong: Trong mục này, chúng ta trình bày những khái niệm cơ bản nhất về mô hình dữ liệu quan hệ của E.F. Codd. Những khái niệm cơ bản này gồm các khái niệm về quan hệ, thuộc tính, phụ thuộc hàm, hệ tiên đề Armstrong, khóa, dạng chuẩn Những khái niệm này đóng vai trò rất quan trọng trong mô hình dữ liệu quan hệ. Chúng được áp dụng 14
  11. nhiều trong việc thiết kế các hệ quản trị cơ sở dữ liệu hiện nay. Những khái niệm này có thể tìm thấy trong [1,2,3,4,7,9,10,15,16,17]. Định nghĩa 1. (Quan hệ) Cho R = {a1, , an} là một tập hữu hạn và không rỗng các thuộc tính. Mỗi thuộc tính a i có miền giá trị là Dai. Khi đó r là một tập các bộ {h1, , hm} được gọi là một quan hệ trên R với hj (j = 1, m ) là một hàm : hj : R  Dai ai R sao cho: hj ( ai) Dai Chúng ta có thể biểu diễn quan hệ r thành bảng sau: a1 a2 an h1 h1(a1) h1(a2) h1(an) h2 h2(a1) h2(a2) h2(an) . . . hm hm(a1) hm(a2) hm(an) 15
  12. Ví dụ: Trong một cơ quan, chúng ta quản lý nhân sự theo biểu gồm các thuộc tính sau: Nhân sự Số Họ tên Giới Nă Trình Lương TT tính m độ đào sinh tạo 001 Nguyễn Văn Na 197 Đại 300000 A m 0 học 002 Nguyễn Nữ 197 Trung 210000 Kim Anh 1 cấp 003 Trần Văn Na 196 Đại 500000 ánh m 9 học 004 Trần Bình Na 196 PTS 450000 m 5 120 Trần Thị Nữ 196 PTS 455000 yến 7 Chúng ta quy định kích thước cho các thuộc tính (các trường) như sau: Tên thuộc tính Kiểu Kích thước STT Kí tự 3 16
  13. HOTEN Ký tự 30 GIOITINH Ký tự 3 NAMSINH Số 4 TRINHDO Ký tự 10 LUONG Số 7 Có nghĩa là qui định cho thuộc tính STT là các dãy gồm 3 kí tự, thuộc tính HOTEN là các dãy gồm 30 kí tự, , cho thuộc tính LUONG là các số có nhiều nhất 7 chữ số. Như vậy chúng ta có tập thuộc tính NHANSU = {STT, HOTEN, GIOITINH, NAMSINH, TRINHDO, LUONG} ở đây DSTT là tập các dãy gồm 3 kí tự, , DLUONG là tập các số có nhiều nhất 7 chữ số. Khi đó chúng ta có quan hệ r = {h1, h2, , h120}, ở đây ví dụ như đối với bản ghi thứ 2 (dòng thứ 2) chúng ta có: h2 (STT) = 002, h2 (HOTEN) = Nguyễn Kim ánh h2 (GIOITINH) = Nữ, h2 (NAMSINH) = 1971 h2 (TRINHDO) = Trung cấp, h2 (LUONG) = 240000 Định nghĩa 2. ( Phụ thuộc hàm ) 17
  14. 1.Cho R = {a1, ,an} là tập các thuộc tính, r = {h1, ,hm} là một quan hệ trên R, và A, B  R. 2.Khi đó chúng ta nói A xác định hàm cho B hay f B phụ thuộc hàm vào A trong r (Kí pháp A r > B) nếu ( hi,hj r)((  a A)(hi(a)= hj(a)) ( b B) (hi(b)=hj(b))) f Đặt Fr = { (A,B): A,B  R, A r > B }. Lúc đó Fr được gọi là họ đầy đủ các phụ thuộc hàm của r. Khái niệm phụ thuộc hàm miêu tả một loại ràng buộc (phụ thuộc dữ liệu) xảy ra tự nhiên nhất giữa các tập thuộc tính. Dù hiện nay đã có nhiều loại phụ thuộc dữ liệu được nghiên cứu, xong về cơ bản các hệ quản trị cơ sở dữ liệu lớn sử dụng phụ thuộc hàm. Định nghĩa 3. Phụ thuộc hàm (PTH) trên tập các thuộc tính R là một dãy kí tự có dạng A B, ở đây A,B  R. Chúng f ta nói PTH A B đúng trong quan hệ r if A r > B. Chúng ta cũng nói rằng r thoả mãn A B. 18
  15. Dễ thấy, Fr là tập tất cả các PTH đúng trong r. Chú ý: Trong giáo trình này chúng ta có thể viết f (A,B) hoặc A B thay cho A r > B mà không bị lẫn về mặt kí pháp. Định nghĩa 4. (Hệ tiên đề của Armstrong ) Giả sử R là tập các thuộc tính và kí pháp P(R) là tập các tập con của R. Cho Y  P(R) x P(R). Chúng ta nói Y là một họ f trên R nếu đối với mọi A, B, C, D  R (1) (A,A) Y, (2) (A,B) Y, (B,C) Y (A,C) Y, (3) (A,B) Y, A  C, D  B (C,D) Y, (4) (A,B) Y, (C,D) Y (A  C, B  D) Y. Rõ ràng, Fr là một họ f trên R. Trong [l] A. A. Armstrong đã chứng minh một kết quả rất quan trọng như sau : Nếu Y là một họ f bất kì thì tồn tại một quan hệ r trên R sao cho Fr = Y. Kết quả này cùng với định nghĩa của phụ thuộc hàm chứng tỏ rằng hệ tiên đề Armstrong là đúng đắn và đầy đủ. 19
  16. Mặt khác, hệ tiên đề này cho ta những đặc trưng của họ các phụ thuộc hàm, mà các đặc trưng này không phụ thuộc vào các quan hệ (bảng) cụ thể . Nhờ có hệ tiên đề này các công cụ của toán học đựơc áp dụng để nghiên cứu làm sáng tỏ cấu trúc lôgic của mô hình dữ liệu quan hệ. Đặc biệt chúng ta xử dụng công cụ thuật toán để thiết kế các công đoạn xây dựng các hệ quản trị cơ sở dữ liệu. Chúng ta đưa ra ví dụ chỉ ra có nhiều quan hệ khác nhau xong các họ đầy đủ các phụ thuộc hàm của chúng lại như nhau. Cho r1 và r2 là các quan hệ sau: a b a b 0 0 0 0 r1 = 1 1 r2 = 1 1 2 1 2 1 3 2 3 1 Có thể thấy r1 và r2 khác nhau nhưng Fr1 = Fr2. Như vậy, tương quan giữa lớp các quan hệ với lớp các họ phụ thuộc hàm có thể được thể hiện bằng hình vẽ sau. 20
  17.    Lớp các quan hệ Lớp các phụ thuộc hàm Định nghĩa 5. Một hàm L : P(R) P(R) được gọi là một hàm đóng trên R nếu với mọi A, B P( R ) thì : - A  L(A), - Nếu A  B thì L(A)  L(B), - L(L(A)) = L(A). Địnhlí 6. Nếu F là một họ f và chúng ta đặt LF = {a : a R và (A, {a}) F} thì LF là một hàm đóng. Ngược lại, nếu L là một hàm đóng thì tồn tại duy nhất một họ f F trên R sao cho L = LF , ở đây 21
  18. F = { (A,B) : A, B  R , B  L(A) }. Như vậy, chúng ta thấy có một tương ứng 1-1 giữa lớp các hàm đóng và lớp các họ f . Chúng ta có hình vẽ sau       Lớp các họ phụ thuộc hàm Lớp các hàm đóng Định lí 6 chỉ ra rằng để nghiên cứu phân tích các đặc trưng của họ các phụ thuộc hàm chúng ta có thể dùng công cụ hàm đóng. Sau này trong mục 2.3 chúng tôi sẽ trình bày nhiều công cụ nữa để nghiên cứu cấu trúc lôgic của họ các phụ thuộc hàm. Định nghĩa 7. (Sơ đồ quan hệ) 22
  19. Chúng ta gọi sơ đồ quan hệ (SĐQH) s là một cặp , ở đây R là tập các thuộc tính và F là tập các phụ thuộc hàm trên R. Kí pháp F + là tập tất cả các PTH được dẫn xuất từ F bằng việc áp dụng các qui tắc trong Định nghĩa 4. Đặt A+ = {a: A {a} F+}. A+ được gọi là bao đóng của A trên s. Có thể thấy rằng A B F+ nếu và chỉ nếu B  A+. f + Tương tự chúng ta đặt A r = {a : A r > {a} }. + Ar được gọi là bao đóng của A trên r. Theo [1] chúng ta có thể thấy nếu s = là + sơ đồ quan hệ thì có quan hệ r trên R sao cho F r=F . Quan hệ r như vậy chúng ta gọi là quan hệ Armstrong của s. Trong trường hợp này hiển nhiên các PTH của s đúng trong r. Định nghĩa 8. (Khoá) Giả sử r là một quan hệ , s = là một sơ đồ quan hệ, Y là một họ f trên R, và A  R. Khi đó A là một khoá của r (tương ứng là một khoá của s, một f khoá của Y) nếu A r > R (A R F +, (A,R) 23
  20. Y). Chúng ta gọi A là một khoá tối tiểu của r (tương ứng của s, của Y) nếu - A là một khoá của r (s, Y), - Bất kì một tập con thực sự của A không là khoá của r (s, Y). Chúng ta kí pháp Kr, (Ks, Ky) tương ứng là tập tất cả các khoá tối tiểu của r (s, Y). Chúng ta gọi K ( ở đây K là một tập con của P(R) ) là một hệ Sperner trên R nếu với mọi A,B K kéo theo A  B). Có thể thấy Kr,Ks, Ky là các hệ Sperner trên R. Định nghĩa 9. Giả sử K là một hệ Sperner trên R. Chúng ta định nghĩa tập các phản khoá của K, kí pháp là K -1, như sau: K-1 = {A  R : (B K) (B  A) and (A  C) (B K)(B  C)} Dễ thấy K-1 cũng là một hệ Sperner trên R. Tập phản khoá đóng vai trò rất quan trọng trong quá trình nghiên cứu cấu trúc lôgic của các họ phụ thuộc hàm, khóa, dạng chuẩn, quan hệ Armstrong, đặc biệt đối với các bài toán tổ hợp trong mô hình dữ liệu quan hệ. 24
  21. Trong [5] người ta đã nêu ra rằng nếu s = là một sơ đồ quan hệ trên R, thì K s là hệ Sperner trên R. Ngược lại, nếu K là một hệ Sperner bất kì trên R, thì tồn tại một sơ đồ quan hệ s sao cho Ks = K. Ví dụ: Cho K = { A1, ,Am } là một hệ Sperner. Khi đó s = , ở đây F = { A1 R, , Am R} là sơ đồ quan hệ mà Ks = K. Nhận xét : - Có thể cho ví dụ chỉ ra rằng có nhiều sơ đồ quan hệ khác nhau nhưng tập các khoá tối tiểu của chúng giống nhau. Có nghĩa là tồn tại + s1 = , , st = ( 2 t ) mà F1 + Ft , nhưng Ks1 = = Kst . Tất nhiên, nếu F1 = F2 thì Ks1 = Ks2. Mối quan hệ giữa lớp họ phụ thuộc hàm và lớp các hệ Sperner thể hiện qua hình vẽ sau Lớp các họ phụ thuộc hàm Lớp các hệ Sperner 25
  22. - Nếu K đóng vai trò là một tập các khoá tối tiểu của một sơ đồ quan hệ nào đó, thì theo định nghĩa K -1 là tập tất cả các tập không phải khoá lớn nhất. Trong Giáo trình này, chúng ta qui ước rằng nếu hệ Sperner đóng vai trò là tập các khoá tối tiểu (tập các phản khoá), thì hệ này không rỗng (không chứa R ). Định nghĩa 10. Cho I  P(R). Khi đó I được gọi là nửa dàn giao nếu R I và A,B I A  B I . Giả sử M  P(R). Đặt M + = { M' : M'  M}. Khi đó chúng ta nói rằng M là một hệ sinh của I nếu M+ = I. Chú ý rằng R M + nhưng R không là một phần tử của M, bởi vì chúng ta theo thông lệ cho R là giao của một tập rỗng các tập con của M. Kí pháp NI = {A I : A  {A' I : A  A'}}. Trong [4] người ta đã chỉ ra rằng N I là hệ sinh nhỏ nhất và duy nhất của I. Có nghĩa là đối với mọi hệ sinh N' của I chúng ta có NI  N'. Định nghĩa 11. 26
  23. Cho r là một quan hệ trên R. Chúng ta đặt E r = {Eij : 1 i j |r|}, ở đây E ij = {a R: hi(a) = hj(a)}. Er được gọi là hệ bằng nhau của r. Đặt Mr = { A P(R) :  Eij = A,  Epq: A  Epq}. Khi đó chúng ta gọi Mr là hệ bằng nhau cực đại của r. Sau này ta sẽ thấy hệ bằng nhau và hệ bằng nhau cực đại được dùng rất nhiều trong các thuật toán thiết kế. Mối quan hệ giữa lớp các quan hệ và lớp các phụ thuộc hàm đóng một vai trò quan trọng trong quá trình nghiên cứu cấu trúc lôgic của lớp các phụ thuộc hàm. Định nghĩa 12. Cho trước r là một quan hệ r và F là một họ f trên R. Chúng ta nói rằng r là thể hiện họ F nếu F r = F. Chúng ta cũng có thể nói r là một quan hệ Armstrong của F. Bây giờ, chúng ta đưa ra một điều kiện cần và đủ để một quan hệ là thể hiện một họ f cho trước. Định lý 13. Giả sử r = {h1 , , hm } là một quan hệ, F là một họ f trên R thì r thể hiện F nếu và chỉ nếu với mọi A R  E i j nếu tồn tại E i j Er : A  E i j, 27
  24. LF(A) = A  E i j R ngược lại. ở đây L F (A) = {a R : (A, {a}) F } và Er là hệ bằng nhau của r. Lời giải: Đầu tiên chúng ta chứng minh rằng trong một quan hệ r bất kì với mọi A  R  E i j nếu tồn tại E i j Er : A  E i j, LFr(A) = A  E i j R ngược lại. Giả sử đầu tiên chúng ta công nhận rằng A là một tập mà không có E i j Er với A  E i j với mọi hi , hj r , a A : hi (a) = hj (a). Theo định nghĩa của phụ thuộc hàm điều này kéo theo A R và bởi định nghĩa của LF r ta thu được LF(A) = R. Rõ ràng là LFr () =  Ei j Eij Er Nếu A  và có một E i j E r mà A  E i j thì chúng ta đặt V = { E i j : A  E i j , E i j E r } và E =  Ei j E i j V 28
  25. Dễ dàng nhận thấy rằng A  E . Nếu V = E r thì chúng ta nhận thấy rằng (A,E) F r nếu V Er thì có thể coi như với mọi E i j V chúng ta có (Với mọi a A) (h i(a) = hj (a)) (Với mọi b B) (hi(b) = hj(b)) và với mọi E i j V có một a A mà hi (a) hj(a). Như vậy, ( A, E) Fr. Từ định nghĩa của LFr ta có E  LFr(A). bởi vì r là một quan hệ trên R, chúng ta có E  R. Sử dụng A  E  LFr(A) ta thu được (E, LFr(A)) Fr. Bây giờ, ta giả sử rằng c là một thuộc tính mà c E. Khi đó có một E i j V mà c E i j . Điều này kéo theo sự tồn tại của một cặp h i , hj r mà với mọi b E: h i (b) = hj (b) nhưng h i (c) h j (c). Có thể thấy rằng theo định nghĩa phụ thuộc hàm ( E  {c}) không phụ thuộc vào E. Như vậy, với mọi thuộc tính c E ta có ( E, E  {c}) F r. Bằng định nghĩa của LFr ta thu được : LFr (A) =  Ei j E i j V Trên cơ sở Định lí 6 chúng ta dễ dàng thấy rằng Fr = F nếu và chỉ nếu LFr = LF .  Giả sử L là một hàm đóng. Đặt Z (L) = {A  R : L (A) = A}. Rõ rằng, Z(L) là tập đóng với phép giao. 29
  26. Có thể thấy là với mọi E i i (Ei i Er ), chúng ta + có Ei i Z(LFr), có nghĩa là E r  Z(LFr) + Nhờ Định lý 13 chúng ta có Z(LFr)  E R . Như vậy chúng ta có Hệ quả 14. Giả sử r quan hệ, F là một họ  trên R. Khi đó r + thể hiện F nếu và chỉ nếu Z(LF) = E R . Trong [5] người ta đã chỉ ra rằng nếu cho một hệ Sperner không rỗng tuỳ ý K thì tồn tại một quan hệ r để K = Kr. Bây giờ, chúng ta đưa ra một định nghĩa dưới đây Định nghĩa 15. Cho trước quan hệ r và hệ Sperner K trên R. Chúng ta nói rằng r thể hiện K nếu Kr = K. Định nghĩa 16. Cho F là một họ f trên R, và (A,B) là một phần tử của F. Chúng ta nói (A,B ) là một phụ thuộc có vế phải cực đại của F nếu với mọi B' ( B B' ) và ( A,B' ) F kéo theo B = B'. Chúng ta kí pháp M(F) là tập tất cả các phụ thuộc có vế phải cực đại của F. Chúng ta nói rằng B là vế 30
  27. phải cực đại của F nếu có A sao cho (A,B) M(F). Kí pháp I(F) là tập tất cả các vế phải cực đại của F. Dưới đây chúng ta cho một điều kiện cần và đủ để một quan hệ thể hiện một hệ Sperner. Định lý 17. Giả sử K là một hệ Sperner không rỗng, r là một là một quan hệ trên R. Khi đó r thể hiện K nếu và chỉ -1 nếu K = Mr, ở đây Mr là hệ bằng nhau cực đại của r. Lời giải: Có thể xem như là nếu K là một hệ Sperner không rỗng thì K-1 tồn tại. Mặt khác, K và K-1 là xác định duy nhất. Cho nên, chúng ta có K r = K -1 -1 nếu và chỉ nếu Kr = K . Bây giờ chúng ta có thể chỉ cần chứng minh rằng - 1 K r = Mr. Rõ ràng, Fr là một họ f trên R. Đầu tiên chúng ta có thể giả thiết rằng A là một phản khoá của Kr. Rõ ràng A R. Nếu có một B sao cho A  B và A B, thì bằng định nghĩa của phản khoá, chúng ta có B R và A R. Đây là một điều phi lý. Vì vậy A I(F r). Nếu có một B' sao cho B' R, B' I(Fr) và A  B', thì B' là một khoá của r. Đây là một điều mâu thuẫn B' R. Do đó A I(F r) - R và không tồn tại B' (B' I(Fr) - R) để A  B'. Mặt khác, theo định nghĩa của một quan hệ, R Mr. Rõ ràng, Eij I(F r). Như vậy chúng ta có M r  I(Fr). Nếu Dlà một tập sao cho C M r : D  C , thì 31
  28. D là một khoá của r. Bởi vậy, M r là tập phần tử rời nhau cực đại của I(FR). Vì vậy chúng ta có A Mr Ngược lại, nếu A M r, thì theo định nghĩa của quan hệ và Mr Chúng ta có A R. Có nghĩa là  K Kr : K  A. Mặt khác, bởi vì A là một phần tử của tập bằng nhau cực đại, cho nên đối với tất cả D(A  D) chúng ta có D R. Đồng thời theo định nghĩa của -1 các phản khoá A K r.  Cho trước s = là một sơ đồ quan hệ trên R, -1 Ks là tập tất cả các khoá tối tiểu của s. Kí pháp Ks là tập các phản khoá của s. Từ Định lí 17 chúng ta có kết quả sau. Hệ quả 18. Cho trước s = là một sơ đồ quan hệ và r là một quan hệ trên R. Khi đó K r = Ks nếu và chỉ nếu -1 Ks = Mr , ở đây Mr là hệ bằng nhau cực đại của r. Chúng ta đưa ra một kết quả liên quan đến cả K-1 và K. Định lý 19. Giả sử K là một hệ Sperner trên R. Giả sử s(K) = min{m:K=Kr, |r|=m, r là quan hệ trên R}. Khi đó 2K 1 2 s(K) |K-1|+1. 32
  29. Đánh giá này chỉ ra mối quan hệ giữa kích cỡ của quan hệ tối tiểu mà thể hiện một hệ Sperner (ở đây hệ này đóng vai trò là một hệ khoá tối tiểu) cho trước với lực lượng của hệ phản khoá tương ứng của nó. Cho F là một họ f trên R. Theo Định nghĩa 16 thì dễ thấy I(F) là một nửa dàn giao. Khi đó NI(F) = {A I ( F ) : A  {A' I : A  A'}}. Trên cơ sở này chúng ta có định lí sau đánh giá quan hệ Armstrong nhỏ nhất (minimal Armstrong relation) của một họ f. Định lý 20. Giả sử F là một họ f trên R. Đặt s(F) = min{m:F=Fr, |r|=m, r là quan hệ trên R}. 2N I(F) Khi đó s(F) |NI(F)|+1. Đánh giá này cho chúng ta mối quan hệ giữa kích thước của quan hệ Armstrong nhỏ nhất của họ F với lực lượng của hệ sinh nhỏ nhất của I(F). Bây giờ, chúng ta đánh giá sâu hơn kích thước của các quan hệ Armstrong nhỏ nhất trên R, cũng như các quan hệ nhỏ nhất mà thể hiện một hệ Sperner K cho trước. Chúng ta đặt 33
  30. P(n) = max { s(K) : K là hệ Sperner tùy ý trên R = {a1, , an } } và Q(n) = max { s(F) : F là họ f tùy ý trên R = {a1, , an } } Khi đó chúng ta có Định lý 21. 2 n n - 1/n . C [n/2] P(n) C [n/2] + 1 2 n 1/2 n - 1/n . C [n/2] Q(n) ( 1 + C ( 1/n )).C [n/2] Đánh giá này cho toàn bộ các hệ Sperner (ở đây hệ này đóng vai trò là một hệ khoá tối tiểu) và các họ f có thể có trên R. Định nghĩa 22. Giả sử r là một quan hệ trên R và Kr là tập của tất cả các khoá tối tiểu của r. Chúng ta nói rằng a là một thuộc tính cơ bản của r nếu tồn tại một khoá tối tiểu K (K Kr) để a là một phần tử của K. Nếu a không thoả mãn tính chất trên thì a là thuộc tính thứ cấp. Trong chương 3 chúng ta có thể thấy các thuộc tính cơ bản và thứ cấp đóng một vai trò quan trọng trong việc chuẩn hoá các sơ đồ quan hệ và các quan hệ. Trong [24] đã chứng minh kết quả sau 34
  31. Định lí 23. Cho trước một sơ đồ quan hệ s = và một thuộc tính a. Bài toán xác định a là thuộc tính cơ bản hay không là bài toán NP- đầy đủ. Có nghĩa rằng cho đén nay không có một thuật toán có độ phức tạp thời gian đa thức để giải quyết bài toán này. Tuy vậy, chúng ta chỉ ra rằng đối với quan hệ thì bài toán này được giải bằng một thuật toán thời gian đa thức. Trước tiên chúng ta chứng minh kết quả sau. Định lý 24. Giả sử K là một hệ Sperner trên R. thì K = R - K -1. Lời giải: Nếu c K, thì tồn tại một khoá tối tiểu K sao cho c K. Đặt H = K- c. Rõ ràng H không chứa một khoá nào. Như vậy, tồn tại một phản khoá B để B chứa H. Có thể thấy c không là phần tử của B, vì ngược lại chúng ta có B chứa K. Điều này là vô lí. Vì thế chúng ta có c R - B  R -  K-1. 35
  32. Bây giờ chúng ta giả thiết c K và B K -1. Có thể thấy c B. Vì ngược lại c B, thì {c}  B hình thành một khoá chứa khoá tối tiểu K ( K K ). Như vậy K  B, và chúng ta có c K. Điều này là vô lý.  Trên cơ sở của Định lý 17 và Định lí 24 chúng ta chỉ ra rằng đối với một quan hệ, thì vấn đề về thuộc tính cơ bản có thể là giải quyết bằng một thuật toán thời gian đa thức. Đầu tiên chúng ta xây dựng một thuật toán xác định tập các thuộc tính cơ bản của quan hệ cho trước. Thuật toán 25. Vào: r = {h1, , hm }là một quan hệ trên R Ra: V là tập tất cả thuộc tính cơ bản của r Bước 1: Từ r chúng ta xây dựng một tập Er = {Ei j : m j i 1} và Ei j = { a R : hj(a) = hj(a) } Bước 2 : Từ Er chúng ta xây dựng tập M = {B P(R) : Tồn tại Ei j Er : Ei j = B} Bước 3: Từ M xây dựng tập Mr = { B M : Với mọi B' M : B  B'} Có thể thấy rằng Mr tính được bằng một thuật toán thời gian đa thức. Bước 4: Xây dựng tập V = R - Mr . 36
  33. Rõ ràng m.(m+1)/2 E r M M r . Bởi vậy thời gian tính của Thuật toán 25 là một đa thức theo số hàng và số cột của r. Từ các Định lý 17, 24 và Thuật toán 25 chúng ta có hệ quả sau. Hệ quả 26. Tồn tại thuật toán đối với một quan hệ r cho trước, xác định một thuộc tính bất kì là cơ bản hay không với thời gian tính đa thức theo số hàng và cột của r. Một vấn đề thường xuyên hay xảy ra là đối với một sơ đồ quan hệ cho trước s = , và một phụ thuộc hàm A B, chúng ta muốn biết A B có là phần tử của F+ hay không. Để trả lời câu hỏi này chúng ta cần tính bao đóng F + của tập các phụ thuộc hàm F. Tuy nhiên tính F+ trong trường hợp tổng quát là rất khó khăn và tồn kém thời gian vì tập các phụ thuộc hàm thuộc F+ là rất lớn cho dù F có thể là nhỏ. + Chẳng hạn F ={A B1, A B2 , A Bn}, F khi đó còn bao gồm cả những phụ thuộc hàm A Y với n Y {B1  B2.   Bn}. Như vậy sẽ có 2 tập con Y . Trong khi đó, việc tính bao đóng của tập thuộc tính A lại không khó. Theo kết quả đã trình bày ở trên việc kỉêm tra A B F+ không khó hơn việc tính A+. Ta có thể tính bao đóng A+ qua thuật toán sau: 37
  34. Thuật toán 27 Vào: s = , ở đây R ={ a 1 , , an } tập hữu hạn các thuộc tính, F tập các phụ thuộc hàm, A  R Ra: A+ bao đóng của A đối với F Thuật toán thực hiện như sau: Tính các tập thuộc tính A0, A1 theo qui tắc: 1) A0 = A 2) Ai = Ai-1 {a} sao cho  (C D) F,{a} Y và C  Ai-1 Vì A = A0   A i  R, và R hữu hạn nên tồn tại một chỉ số i nào đó mà A i = Ai+1, khi đó thuật toán + dừng và A = Ai Chúng ta có thể thấy độ phức tạp thời gian của thuật toán này là đa thức theo kích thước của s. Để tiện kí pháp chúng ta thay a  b bởi viết ab. Ví dụ: s = , ở đâyR = { a,b,c,d,e,g }, F bao gồm 8 phụ thuộc hàm ab c d eg c a be c bc d cg bd acd b ce ag và A = bd. 38
  35. Dùng Thuật toán 27 chúng ta có thể thấy A0 = bd, A1 = bdeg, A2 = bcdeg, A3 = abcdeg, A+ = abcdeg. Để chứng minh tính đúng đắn của Thuật toán 27 chúng ta có thể dùng phương pháp quy nạp để chỉ ra + rằng nếu a thuộc Ai thì a cũng thuộc A . Việc chỉ ra điều ngược lại cũng bằng qui nạp nhưng khó khăn hơn là nếu a nằm trong A + thì a nằm trong một số Ai nào đó. Định lý 28. Thuật toán 27 tính chính xác A+. Như vậy, để xác định một phụ thuộc hàm A B có thuộc F+ hay không chúng ta chỉ cần kiểm tra B  A+ ?. Bây giờ, chúng ta đi tìm thuật toán tìm bao đóng cho một tập các thuộc tính trên một quan hệ bất kì Đối với một quan hệ bất kì theo Định lí 13 chúng ta đã chúng minh với mọi A  R  E i j nếu tồn tại E i j Er : A  E i j, 39
  36. LFr(A) = A  E i j R ngược lại. + Có thể thấy LFr (A) = Ar . Do vậy chúng ta có ngay thuật toán sau để tính bao đóng cho một tập bất kì trên quan hệ r. Thuật toán 29 Vào: r = {h1, , hm } là một quan hệ trên R Ra: V là tập tất cả thuộc tính cơ bản của r Bước 1: Từ r chúng ta xây dựng một tập Er = {Ei j : m j i 1} và Ei j = { a R : hj(a) = hj(a) } Bước 2: Từ Er chúng ta xây dựng một tập M = {B P(R) : Tồn tại Ei j Er : Ei j = B} Bước 3:  B nếu tồn tại B M : A  B, + Ar = A  B R ngược lại. Dễ thấy, độ phức tạp thời gian của thuật toán này là một đa thức theo kích thước của r. Định nghĩa 30 Giả sử s = , t = là hai sơ đồ quan hệ trên R. Khi đó chúng ta nói s tương đương với t nếu F+ = G+ . Nếu s và t tương đương thì đôi khi chúng ta 40
  37. có thể nói rằng s là một phủ của t hoặc t là một phủ của s. Dễ dàng kiểm tra rằng s và t có tương đương với nhau không. Mỗi phụ thuộc hàm Y Z ở trong F chúng ta kiểm tra lại Y Z ở trong G + bằng vi ệc sử dụng Thuật toán 27 để tính Y+ và kiểm tra Z  Y+ . Nếu có phụ thuộc hàm Y Z không nằm trong G + hoặc ngược lại nếu có phụ thuộc hàm X W ở trong G nhưng không ở trong F + thì điều chắc chắn là F+ khác G+ . Nếu mỗi phụ thuộc hàm ở trong F thì cũng nằm trong G+ và mỗi phụ thuộc hàm nằm trong G thì cúng nằm trong F +, khi đó chúng ta có s và t là tương đương với nhau. Hiện nay chúng ta cho định nghĩa sau nói về sự tương đương của hai quan hệ. Định nghĩa 31 Giả sử r và v là hai quan hệ trên R. Khi đó ta nói r và v tương đương với nhau nếu Fr = Fv . Chúng tôi trình bày định lí sau liên quan đến sự tương đương của hai quan hệ. Định lí 32 Giả sử r và v là hai quan hệ trên R. Khi đó s tương đương với v khi và chỉ khi Nr = Nv. 41
  38. Trên cơ sở Định lí 32 chúng ta đưa ra một thuật toán kiểm tra xem r có tương đương với v hay không. Thuật toán 33 Vào: r và t là hai quan hệ trên R Ra: r có tương đương với v hay không Bước 1: Từ r tính Nr, Bước 2: Từ v tính Nv Bước 3 : So sánh Mr với Mv. Bây giờ, chúng ta quay lại với sơ đồ quan hệ. Chúng ta muốn gọt giũa các phụ thuộc hàm của sơ đồ quan hệ để có tập phụ thuộc hàm tốt hơn. Định nghĩa 34 Chúng ta nói một sơ đồ quan hệ s = là chính tắc nếu 1. Vế phải của mỗi phụ thuộc hàm trong F là thuộc tính đơn. 2. Không có X a nào ở trong F để F- {X a} tương đương với F. 3. Không có X a và một tập con Z của X để F-{X A}  {Z a} tương đương với F. Chúng ta sẽ chỉ ra rằng có thuật toán để tìm một phủ chính tắc cho một sơ đồ quan hệ bất kì. 42
  39. Trước tiên chúng ta đưa ra mệnh đề sau Mệnh đề 35: Mỗi một sơ đồ quan hệ s = đều có một phủ tương đương t = sao cho vế phải của mỗi phụ thuộc hàm trong G không có hơn một thuộc tính. Chứng minh: Đặt G là tập phụ thuộc hàm có dạng X a, với X Y nằm trong F và a là một phần tử của Y. Trên cơ sở hệ tiên đề của Armstrong, chúng ta dễ thấy t tương đương với s.  Chúng ta trình bày thuật toán dưới đây để tìm phủ chính tắc cho một sơ đồ quan hệ cho trước Thuật toán 36 Vào: s= , F = { A1 B1, , Am Bm } Ra: t = là chính tắc và tương đương với s Do Mệnh đề 35 chúng ta có thể coi s thoả mãn điều kiện 1. Bước 1: Đặt F0 = F, với i = 1, , m Fi = Fi-1 - { Ai Bi } nếu Fi-1 - { Ai Bi } tương đương với F i . Trong trương hợp ngượi lại thì Fi = Fi-1. 43
  40. Bước 2: Nhờ thuật toán tính bao đóng, từ Fm chúng ta lần lượt loại bỏ các thuộc tính thừa trong mỗi vế trái của từng phụ thuộc hàm thuộc Fm. Kết quả nhận đước chính là G. Dễ thấy rằng thuật toán trên có độ phức tạp thời gian là đa thức theo kích thước của s. Chúng ta đưa ra một khái niệm sau Định nghĩa 37 Giả sử s = là một sơ đồ quan hệ trên R. Khi đó chúng ta nói rằng s là sơ đồ quan hệ tối tiểu nếu với mọi sơ đồ quan hệ t = tương đương với s có | F | < |G|, ở đây |F| là số lượng các phụ thuộc hàm trong F. David Maier [25] đã chứng minh định lí sau Định lí 38 Tồn tại một thuật toán có độ phức tạp thời gian đa thức để tìm phủ tối tiểu cho một sơ đồ quan hệ cho trước. Ví dụ: Chúng ta xem xét tập các phụ thuộc hàm F trong ví dụ minh hoạ Thuật toán 27. Ban đầu chúng ta tách vế phải ra thành các thuộc tính đơn: ab c, 44
  41. c a, bc d, acd b, d e, d g, be c, cg b, cg d, ce a, ce g. Rõ ràng ce a là không cần thiết bởi vì nó suy ra được từ c a. cg b là dư thừa bởi vì có cg d , c a và acd b. Ngoài ra không có một phụ thuộc hàm nào là dư thừa nữa. Dễ thấy acd b có thể thay thế bởi cd b. Vậy chúng ta có một phủ chính tắc là : ab c, c a, bc d, cd b, 45
  42. d e, d g, be c, cg d, ce g. 2.3 Các mô tả tương đương của họ các phụ thuộc hàm Trong mục trên chúng ta đã định nghĩa hàm đóng. Nó là một mô tả tương đương của họ các phụ thuộc hàm. Trong mục này chúng tôi cung cấp cho bạn đọc một số các mô tả tương đương khác của họ này. Chúng chính là các công cụ để chúng ta có thể nghiên cứu phong phú hơn nữa cấu trúc lôgic của họ các phụ thuộc hàm. Định nghĩa 1 Cho R là tập các thuộc tính và P(R) là tập các tập con của R. Một hàm C: P(R) P(R) được gọi là một hàm chọn trên R nếu với mọi A P( R ) thì C (A)  A. Giả sử L là một hàm đóng trên R . Chúng ta đặt C(A) = R - L(R-A) (*) Dễ thấy C là một hàm chọn trên R Trong [6] người ta đã chứng minh được kết quả sau 46
  43. Định lí 2 Tương ứng được xác định như (*) là tương ứng 1-1 giữa tập các hàm đóng và tập các hàm chọn thoả mãn 2 điều kiện sau: với mọi A,B  R (1) C(A)  B  A kéo theo C(A) = C(B) (2) A  B kéo theo C(A)  C(B). Chúng ta có hình vẽ sau thể hiện mối quan hệ giữa lớp hàm đóng và lớp hàm chọn đặc biệt trên Lớp các hàm đóng Lớp các hàm chọn đặc biệt Định lí dưới đây chỉ ra một tương ứng 1-1 giữa lớp các hàm đóng và lớp các nửa dàn giao trên R. Định lí 4 47
  44. Giả sử L là một hàm đóng trên R. Đặt Z( L ) = { A : A P(R) và L(A) = A }. Khi đó Z(L) là một nửa dàn giao trên R. Ngược lại, nếu I là một nửa dàn giao trên R, thì tồn tại duy nhất một hàm đóng L sao cho Z(L) = I, ở đây L(A) =  {A' I : A  A'}. Lớp các hàm đóng Lớp các nửa dàn giao Như vậy, từ Định lí 6 mục trên và Định lí 4, chúng ta thấy có một tương ứng 1-1 giữa lớp các nửa dàn giao và lớp các họ các phụ thuộc hàm trên R . Định nghĩa 5 Giả sử N  P(R). Khi đó N được gọi là tập không giao nếu với mọi A N thì A  {A' N : A  A'}. 48
  45. Định lí 6 Nếu I là nửa dàn giao, thì N I là tập không giao. Ngược lại nếu N là tập không giao thì tồn tại duy nhất một nửa dàn giao I sao cho NI = N. Như vậy, chúng ta thấy có một tương ứng 1-1 giữa lớp các nửa dàn giao và lớp các tập không giao. Lớp các nửa dàn giao Lớp các tập không giao Từ Định lí 6 mục trên và các Định lí 4 và 6 chúng ta rút ra kết luận là có một tương ứng 1-1 giữa lớp các họ phụ thuộc hàm với lớp các tập không giao. Như vậy, để nghiên cứu phân tích các đặc trưng của họ các phụ thuộc hàm chúng ta có thể dùng công cụ nửa dàn giao hoặc tập không giao. 49
  46. Bây giờ chúng tôi đưa ra khái niệm họ cực đại các thuộc tính. Đồng thời chúng ta chỉ ra rằng họ này là một mô tả tương đương của họ phụ thuộc hàm. Định nghĩa 7 Giả sử R là tập các thuộc tính. Họ M={(A,{a}): A  R, a R} được gọi là họ cực đại các thuộc tính trên R nếu nó thoả mãn các điều kiện sau (1) a A, (2) Đối với mọi (B, {b}) M, a B và A  B kéo theo A = B. (3) (B,{b}) M : a B, a b, và La  B là một hệ Sperner trên R, ở đây La = {A: (A, {a}) M}. Nhận xét 8. - Có thể có (A, {a}), (B, {b}) M mà a b, nhưng A = B. - Do (1) và (2) có thể thấy đối với a R chúng ta có La là một hệ Sperner trên R. Đặc biệt có thể La là một hệ Sperner rỗng. - Trên cơ sở Định nghĩa 7 chúng ta có thể thấy tồn tại một thuật toán thời gian tính đa thức để xác định một tập Y  P(R) x P(R) có là một họ cực đại các thuộc tính trên R hay không. 50
  47. Giả sử H là một hàm đóng trên R. Đặt Z(H) = {A : H(A) = A} và M(H) = {(A, {A}) : A A, A Z(H) và B Z(H), A  B, A B kéo theo A = B}. Z(H) là họ các tập đóng của H. Dễ thấy, với mỗi (A, {a}) M(H), A là tập đóng cực đại mà không chứa a. Có thể tồn tại (A, {a}), (B, {b}) M(H) mà a b, nhưng A = B. Nhận xét 9. Giả sử r là một quan hệ trên R và Fr là họ các phụ + thuộc hàm của r. Đặt Ar = {a: A {a} Fr} và Zr + = {A: A = Ar } và Nr là hệ sinh cực tiểu của nó. Có thể thấy Nr  Er với Nr = {A Er : A {B: B Er, A  B}}, ở đây Er là hệ bằng nhau r. Chúng ta cho định lí dưới đây chỉ ra rằng giữa các hàm đóng và họ cực đạI các thuộc tính có tưong ứng 1-1. Định lí 10. Giả sử H là một hàm đóng trên R. Khi đó M(H) là họ cực đại các thuộc tính. Ngược lại, nếu M là họ cực đạI các thuộc tính trên R thì tồn tại đúng một hàm đóng H trên R để M(H) = M, ở đây với mọi B P(R). 51
  48.  A if A L(M) : B  A, H(B) = B  A R ngược lại, và L(M) = {A: (A, {a} M}. Lời giải: Giả sử H là hàm đóng trên R. Cơ sở trên định nghĩa của M(H) ta có (1) và (2). Ta đặt L'a = { A : (A, {a} M(H)}. Giả thiết có S (B, {b}) M(H) : a b, a B, L' a  B là hệ Sperner trên R (*). Khi đó ta chọn (B,{b}) M(H) sao cho B là lớn nhất cho (*). ' Do (2) trong Định nghĩa 7 ta có L a là hệ Sperner trên ' R. Do đó, không có một A nào mà A La và B  A. Phù hợp với định nghĩa của M(H) ta có (B,{a}) ' M(H). Như vậy, B L a . Điều này là vô lí. Từ đó ta có (3) trong Định nghĩa 7. Có nghĩa là M(H) là họ cực đại các thuộc tính trên R. Ngược lại, giả sử M là họ cực đại các thuộc tính trên R. Đặt L(M) = {A : (A, {a}) M}. Đầu tiên ta chứng tỏ rằng L(M) là tập không giao trên R. Đối với bất kì (A, {a}) M do Nhận xét 2.2 ta có A A'  A" và A A'  B, ở đây A', A" La và B L(M) : A B. Nếu tồn tại (B, {b}), (C, {c}) M sao cho b a, c a, A  B, A  C thì bởi (2) trong Định nghĩa 52
  49. 2.1 ta có a B, a C. Từ đó, A  B  C. Như vậy, đối với A,B,C, L(M) nếu A = B  C thì A = B hoặc A = C. Do đó, L(M) là hệ không giao trên R. Chúng ta biết rằng các họ không giao và các hàm đóng xác định duy nhất lẫn nhau. Mặt khác phù hợp với Nhận xét 8 và Định lí 13 mục trên ta có H là một hàm đóng trên R và L(M) là hệ sinh tối tiểu của Z(H). Hiện ta sẽ chứng minh M(H) = M. Nếu (A, {a}) M thì A L(M). Giả thiết rằng đối với mỗi b A có B Z(H) : A  B, b B. Có thể thấy rằng A là giao của những B như thế. Điều này mâu thuẫn với A L(M). Nếu (A, {a}) M thì có b A để (A,{b}) M(H) ( ). Nếu (A, {a}) M(H) thì phù hợp với định nghĩa của M(H) B Z(H), và A  B kéo theo a B. Vì a A, ta thấy A không là giao của các B như thế. Theo cấu trúc của H ta có A L(M). Như vậy, nếu (A,{a}) M(H) thì A L(M) ( ). Bây giờ ta giả thiết là (A,{a}) M, nhưng (A,{a}) M(H). Vì A là tập đóng của H,a A và bởi định nghĩa của M(H) thì tồn tại (B,{a}) M(H) sao chot A  B. Do ( ) ta có B L(M). Điều này mâu thuẫn với điều kiện (2) của Định nghĩa 7. Từ đó, ta có (A,{a}) M(H). 53
  50. Giả thiết (A,{a}) M(H), nhưng (A,{a}) M. Nếu có A' La để A  A' thì bởi ( ) ta có A' là một tạp đóng của H. Phù hợp với định nghĩa của M(H) ta có (A,{a}) M. Điều này là vô lí. Nếu A'  A thì do ( ) ta có (A',{a}) M, nó cũng vô lí. Nếu A  La là hệ Sperner trên R thì bởi ( ) ta có thể thấy nó trái với điều kiện (3) của Định nghĩa 7. Do đó tồn tại một A' mà A' La và A =A'. Từ đó ta có M(H) = M. Nếu ta giả thiết rằng có H' mà M(H') = M. Đặt L(H') = {A : (A,{a}) M(H'). Theo ( ) và ( ) của chứng minh trên ta có L(H') là một hệ sinh nhỏ nhất của Z(H'). Do M(H') = M(H) = M ta có L(H') = L(M) = L(H). Vì các hàm đóng và các tập không giao là xã định duy nhất lẫn nhau nên H = H'.  Lớp các hàm đóng Lớp các họ cực đại các thuộc tính 54
  51. Vì các hàm đóng và các họ các phụ thuộc hàm tương ứng xác định duy nhất lẫn mhau, từ Định lí 2.4 ta có Hệ quả 11. Tồn tại tương ứng 1-1 giữa lớp các họ cực đại các thuộc tính và họ các phụ thuộc hàm. 2.4. Các thuật toán liên quan đến các khoá Khi giải quyết các bài toán thông tin quản lí, chúng ta thường sử dụng các hệ quản trị cơ sở dữ liệu mà trong đó chứa cơ sở dữ liệu quan hệ. Các phép xử lí đối với lớp bài toán này thường là tìm kiếm bản ghi sau đó thay đổi nội dung bản ghi, thêm bản ghi mới hoặc xoá bản ghi cũ. Trong các thao tác trên việc tìm kiếm bản ghi là rất quan trọng. muốn tìm được bản ghi trong một file dữ liệu chúng ta phải xây dựng khoá cho file dữ liệu đó. Việc xây dựng khoá ở đây chính là xây dựng khoá tối tiểu. Vì thế trong mục này chúng tôi cung cấp cho bạn đọc hai thuật toán tìm khoá tối tiểu. 2.4.1 Thuật toán tìm khoá tối tiểu của một sơ đồ quan hệ Vào : sơ đồ quan hệ s = trong đó : F là tập các phụ thuộc hàm và R={ a1 , , an } là tập các thuộc tính Ra : K là một khoá tối tiểu 55
  52. Thuật toán thực hiện như sau: Tính liên tiếp các tập thuộc tính K0, K1 , Kn như sau: Ko = R = { a1 , , an } + Ki-1 nếu Ki-1 - {ai} R F , K I = Ki-1 -{ai} ngược lại K = Kn là khoá tối tiểu 2.4.2. Thuật toán tìm một khoá tối tiểu của một quan hệ Cho trước r = {h1, hm} là một quan hệ trên tập thuộc tính R = { a1 , , an } Hệ bằng nhau của quan hệ r được định nghĩa ở phần trên như sau: Er ={Eij : 1 i j m}, ở đây E i j = {a R : hi (a) = hj (a)}. Dễ dàng thấy rằng Er được tính bằng thời gian đa thức từ r Thuật toán tìm một khoá tối tiểu của một quan hệ r: Vào: r = {h1, hm} là một quan hệ trên tập thuộc tính R= { a1 , , an } 56
  53. Ra: K là một khoá tối tiểu của r Thuật toán thực hiện như sau Bước 1: Tính Er ={ A1 At} Bước 2 : Tính Mr = { A : có Aj Er : A = Aj và không có Ai : Ai Er: A  Ai } Bước 3 : Lần lượt tính các tập thuộc K 1, K2, Kn tính theo qui tắc : K0 = R= { a1 , , an } hoặc K0 = một khoá đã biết Ki = Ki-1 - { ai } nếu không tồn tại A Mr sao cho Ki-1 - {ai}  A hoặc K i = Ki-1 trong trường hợp ngược lại Bước 4: Đặt K = Kn , khi đó K là khoá tối tiểu 2.5. Mối quan hệ giữa quan hệ Armstrong và sơ đồ quan hệ Việc xây dựng quan hệ Armstrong của một sơ đồ quan hệ cho trước và ngược lại từ quan hệ cho trước ta xây dựng một SĐQH sao cho quan hệ cho trước này là quan hệ Armstrong của nó có vai trò rất quan trọng trong việc phân tích cấu trúc lôgic của mô hình dữ liệu quan hệ cả trong thiết kế lẫn trong ứng dụng. Đã có nhiều tác giả nghiên cứu vấn đề này. Trong mục này chúng tôi trình bày hai thuật toán giải quyết bài toán trên và đưa ra việc đánh giá các thuật toán này cũng như đánh giá độ phức tạp của bài toán trên. 57
  54. Trước tiên, chúng ta cho một thuật toán tìm tập tất cả các phản khoá của hệ Spernner cho trước. Thuật toán 1 ( Tìm tập phản khoá ) Vào: K = {B1, ,Bn} là hệ Sperner trên R. Ra: K-1. Bước 1: Ta đặt K1 = {R - {a}: a B 1}. Hiển -1 nhiên K1 = {B1} . Bước q + 1: (q < m). Ta giả thiết rằng K q = Fq  {X1 X tq}, ở đây X 1, ,Xtq chứa Bq+1 và Fq = { A Kq : Bq+1  A }. Đối với mỗi I ( I = 1, , t q ) ta tìm các phản khoá của { B q+1 } trên Xi tương tự như K 1. i i Kí pháp chúng là A 1, , Ari . Đặt i i Kq+1 = Fq  {A p : A Fq kéo theo A p  A,1 i tq. 1 p ri} -1 Cuối cùng ta đặt K = Km Định lí 2. -1 Với mọi q (1 q m), K q = { B1, Bq} , có -1., nghĩa là Km = K Rõ ràng, K và K-1 là xác định duy nhất lẫn nhau và từ định nghĩa của K -1 có thể thấy thuật toán của chúng ta không phụ thuộc vào thứ tự của dãy B 1, , 58
  55. Bm. Đặt Kq = Fq  {X1, , Xtq} và lq ( 1 q m-1) là số các phần tử của Kq. Khi đó ta có Mệnh đề 3 Độ phức tạp thời gian tồi nhất của Thuật toán 2.1 là m-1 2 O ( R  tq.uq). q=1 ở đây lq - tq, nếu lq > tq, uq = 1 nếu lq = tq Rõ ràng trong mỗi bước thuật toán ta có Kq là hệ Sperner trên R. Ta biết rằng[5] kích thước của hệ [n/2] Sperner bất kì trên R không vượt quá Cn , ở đây n = [n/2] n+1/2 1/2 R. Có thể thấy Cn xấp xỉ bằng 2 / (. n ). Từ đó độ phức tạp thời gian tồi nhất của thuật toán trên không nhiều hơn hàm số mũ theo n. Trong trường hợp mà lq lm (q = 1, , m-1), dễ thấy rằng độ phức tạp thuật toán không lớn hơn O( R 2 K K -12 ). Như vậy, trong các trường hợp này độ phức tạp của Thuật toán 1 tìm K-1 là đa thức theo R, K, and K -1. Có thể thấy nếu số lượng các phần tử của K là nhỏ thì Thuật toán 1 là rất hiệu quả. Nó chỉ đòi hỏi thời gian đa thức theo |R| Định nghĩa 4 59
  56. Cho s = (R,F) là SĐQH trên R và a R. Đặt Ka = { A  R:A {a},  B: (B {a})(B  A)}. Ka được gọi là họ các tập tối tiểu của thuộc tính a. Rõ ràng, R K a, {a} K a và Ka là hệ Sperner trên R. Thuật toán 5. (Tìm tập tối tiểu của thuộc tính a) Vào: Cho s = (R = {a1, , an}, F) là SĐQH, a = a1. Ra: A Ka. Bước 1: Ta đặt L(0) = R. Bước i + 1: Đặt L(i) - ai+1 nếu L(i) - ai+1 {a}, L(i+1) = L(i), ngược lại. Khi đó A = L(n). Bổ đề 6. L(n) Ka Lời giải: Bằng phương pháp chứng minh qui nạp có thể thấy L(n) {a}, và L(n)   L(0) (1). Nếu L(n) = a, thì bởi định nghĩa của tập tối tiểu của thuộc tính a ta thu được L(n) K a. Bây giờ ta giả thiết là tồn tại một B sao cho B  L(n) và B 0. Như 60
  57. vậy sẽ có a j sao cho aj  B, a j L(n). Theo các xây dựng thuật toán này ta có L(j-1) - aj {a}. Rõ ràng bởi (1) ta thu được L(n) - a j  L(j-1) - a j (2). Dễ thấy B  L(n) - aj. Từ (1), (2) ta có B {a}.  Dễ thấy, vì thuật toán xác định một phụ thuộc hàm bất kì có phải là phụ thuộc hàm của một SĐQH hay không là có độ phức tạp thời gian đa thức, nên độ phức tạp của Thuật toán 5 là O(R2 F). Bổ đề 7. Cho s = (R,F) là SĐQH trên R và a R, Ka là họ các tập tối tiểu của a, L  K a, {a} L. Khi đó L  Ka nếu và chỉ nếu tồn tại C, A B sao cho C L và A B F và  E L => E  A  ( C- B). Lời giải. =>: Ta giả thiết rằng L  Ka. Do đó, tồn tại D Ka - L. Bởi {a} L và K a là hệ Sperner trên R, chúng ta có thể xây dựng một tập cực đại Q sao cho D  Q  U và L  Q là hệ Spernner. Từ định nghĩa của Ka, chúng ta thu được Q {a} (1) và a Q (2). Nếu A B F kéo theo (A tb Q, B  Q) hoặc A  Q thì Q+ = Q. Bởi (2) ta có Q {a}. Điều này mâu thuẫn với (1). Do đó, tồn tại một phụ thuộc hàm A B sao cho A  Q, B  Q. Từ cách xây dựng của Q có C sao cho C L, A  Q, C - B  Q. Hiển nhiên rằng A  (C-B)  Q. 61
  58. Rõ ràng, E  A  (C-B) đối với mọi E L. <=: Ta giả thiết rằng có C, và A B sao cho C L, A B F và E  A  (C-B) đối với mọi E L (3). Bởi định nghĩa của L chúng ta thu được A  U(C-B) {a}. Bởi {a} thuộc L nên có D sao cho D Ka, a D, D thuộc A  (C-B). Bởi (3) ta có D Ka - L.  Cơ sở trên bổ đề này và thuật toán 5, chúng ta xây dựng một thuật toán sau đây bằng qui nạp. Thuật toán 8. Tìm họ các tập cực tiểu của thuộc tính a. Vào: Cho s = (R, F) là một sơ đồ quan hệ và a thuộc R. Ra: Ka Bước 1: Đặt L(1) = E1 = {a} Bước i + 1: Nếu có C và A B mà C L(i), A B F,  E L(i) E A  ( C - B ), thì bởi thuật toán 5 chúng ta xây dựng Ei+1, ở đây Ei+1  A  ( C - B), Ei+1 Ka . Chúng ta đặt K(i+1) = K(i)  Ei+1 . Trong trường hợp ngược lại ta đặt Ka = L(i). Bởi bổ đề 7 hiển nhiên rằng tồn tại một số tự nhiên t để Ka = L(t) Có thể thấy rằng độ phức tạp thời gian tồi nhất của thuật toán là O ( U F K a ( U + K a 62
  59. )). Như vậy, độ phức tạp thời gian của thuật toán này là đa thức theo U , F , và Ka . Rõ ràng, nếu số lượng các phần tử của K a đối với sơ đồ quan hệ s = là đa thức theo kích thước của s, thì thuật toán này là rất hiệu quả. Đặc biệt khi Ka là nhỏ. Hiển nhiên rằng nếu đối với mỗi A B F kéo theo a A hoặc a B, thì Ka ={a} Nhận xét 9 Biết rằng [27] nếu s = là một sơ đồ quan hệ, Z(F) = {A : A+ =A} và N(F) là hệ sinh nhỏ nhất của Z(F), thì N(F) = MAX (F+) =  MAX ( F+, a) a R ở đây MAX(F+,a) = {A  U : A {a} F +, A  B + B {a} F . Rõ ràng rằng, Ka là một hệ Sperner trên R. Có thể thấy MAX (F+, a) là tập các phản khoá + - của Ka đối với mọi a R. Như vậy, MAX(F , a) = K 1 a. Định lý 10 Cho r = {h1, hm } là một quan hệ, và F là một họ f trên R. Khi đó F R = F nếu và chỉ nếu với mọi A P(R) 63
  60.  Ei j nếu  Ei j Er ; A  Ei j LF(A) = AEi j R ngược lại, ở đây LF(A) = {a R : (A, {a}) F } và E r là hệ bằng nhau của r. Trên cơ sở nhận xét 9, định lý 10, các thuật toán 1, 8, chúng ta xây dựng một thuật toán tìm quan hệ Armstrong từ một sơ đồ quan hệ cho trước như sau: Thuật toán 11 (Tìm quan hệ Armstrong) Vào: Cho s = là một sơ đồ quan hệ + Ra: r là quan hệ sao cho Fr = F Bước 1: Đối với mỗi a R bởi thuật toán 2.8 chúng ta tính Ka, và từ thuật toán 2.1 xây dựng tập các -1 phản khoá Ka . -1 Bước 2: N =  Ka a R Bước 3: Giả sử các phần tử của N là A 1, ,At, chúng ta xây dựng quan hệ r = { h 0, h1, , h0 } như sau: Với mỗi a R, h0(a) = 0, i = 1, ,t hi(a) = 0 nếu a A i, hoặc hi(a) = 1 trong trường hợp ngược lại. Do nhận xét 9 rõ ràng rằng, nếu chúng ta có N(F), thì chúng ta có thể trực tiếp xây dựng r. Độ phức tạp 64
  61. của việc xây dựng này phụ thuộc vào N(F) . Dễ thấy độ phức tạp của thuật toán 11 là độ phức tạp của bước 1. Bởi bổ đề 3 và đánh giá của thuật toán 8, dễ thấy rằng độ phức tạp tồi nhất của thuật toán 11 là n mi 1   q 1 O ( n i 1 ( ti q ui q + F mi (mi + n))). ở đây R = {a1, ,an}, mi = Ka, and ui q = liq nếu liq > tiq hoặc ui q = 1 nếu li q = tiq Trong trường hợp l i q ( i,  q : 1 q m i ), độ phức tạp thuật toán của chúng ta là n  -1 2 O ( n i 1 Ka i (n F + Ka i F + n Ka )). Như vậy, độ phức tạp thuật toán 2.11 là đa thức -1 theo R , F , K a i , K a . Rõ ràng, trong các -1 trường hợp này nếu K ai và K a là đa thức (đặc biệt nếu chúng là nhỏ) theo R và F , thì thuật toán của chúng ta là hiệu quả. Bây giờ chúng ta sử dụng thuật toán 11 để xây dựng quan hệ Armstrong cho sơ đồ quan hệ trong ví dụ dưới đây. Ví dụ 13 65
  62. Cho s = là một sơ đồ quan hệ, ở đây R = {a,b,c,d} và F = {{a,d} R, {a} {a,b,c},{b,d} {b,c,d}}. Bởi thuật toán 8, chúng ta thu được Ka = {a}.Kb = {{a},{b}},Kc ={{a},{b,d},{c}}, Kd = {d}. -1 -1 Trên cơ sở thuật toán 1, ta có Ka = {b,c,d }, Kb -1 -1 = {c,d}, Kc = {{b},{d}}, K d = {a,b,c}. Do đó, N(F) = {{a,b,c }, {b,c,d}, {c,d}, {b}, {d}}. Khi đó ta xây dựng quan hệ r như sau: a b c d 0 0 0 0 0 0 0 1 2 0 0 0 3 3 0 0 4 0 4 4 5 5 5 0 Bây giờ chúng ta xây dựng một thuật toán tìm một sơ đồ quan hệ s từ một quan hệ cho trước sao cho quan hệ này là quan hệ Armstrong của s. Thuật toán 14 (Tìm một khoá tối thiểu từ tập các phản khoá). 66
  63. Vào: Cho K là một hệ Sperner, H là một hệ -1 Sperner, và C = {b1, ,bm}  R sao cho H = K và  B K : B  C. Ra : D H Bước 1: Đặt T(0) = C Bước i+1: Đặt T = T(i) - bi+1 T nếu  B K : T B T( i+1) = T(i) ngược lại Cuối cùng đặt D = T(m) Bổ đề 15. Nếu K là tập các phản khoá thì T(m) H. Bổ đề 16. Cho H là một hệ Sperner trên R, và H-1 = { B1, ,Bm} là tập các phản khoá của H, T  H .Khi đó T  H, T  nếu và chỉ nếu tồn tại B  U -1 sao cho B T , B Bi (  i : 1 i m). Cơ sở trên bổ đề 16 và thuật toán 14 chúng ta xây dựng thuật toán sau. Thuật toán 17. Tìm tập các khoá tối thiểu từ tập các phản khoá. Vào: Cho K = {B1, ,Bk } là một hệ Sperner trên R Ra: H mà H-1 = K 67
  64. Bước 1: Nhờ thuật toán 2.14 chúng ta tính A1, đặt K(1) = A1 -1 Bước i+1: Nếu có B K i sao cho B Bj (  j: 1 j k), thì bởi Thuật toán 2.14 chúng ta tính A i+1 , ở đây A i+1 H , A i+1  B. Đặt K(i+1) = K(i)  A i+1 . Trong trường hợp ngược lại ta đặt H=K(i). Mệnh đề 18. Độ phức tạp của Thuật toán 17 là O( m 1  q 1 2 n ( ( k lq + n tq uq) + k + n)) ở đây R = n, K = k, H = m, ý nghĩa của l q , tq, uq, xem trong mệnh đề 3. Rõ ràng , trong các trường hợp mà l q k ( q : 1 q m-1) độ phức tạp thời gian của thuật toán là O ( R 2 K 2 H ). Dễ thấy trong các trường hợp này thuật toán 2.17 tìm tập các khoá tối tiểu có độ phức tạp thời gian là đa thức trong kích thước của R, K, H. Nếu H là đa thức theo R và K , thì thuật toán là hiệu quả. Có thể thấy rằng nếu số lượng các phần tử của H là nhỏ thì thuật toán 17 là rất hiệu quả. Bổ đề 19. Cho F là một họ f trên R, a R. Đặt L F(A) = {a R: ( A , {a}) F}, ZF = {A : LF (A) = A}. Rõ ràng, R ZF, A,B ZF A  B ZF. Kí pháp NF là hệ 68
  65. sinh tối tiểu Z F . Đặt Ma = { A NF : a A,  B NF: a B,A  B}. Khi đó M a = MAX (F,a), ở đây MAX(F,a) = {A  U : A là một tập cực đại không rỗng mà (A,{a}) F}. Lời giải: Biết rằng [27] MAX(F,a)  N F (1). Giả thiết rằng A Ma. Bởi A NF, có nghĩa là LF (A) = A, và a A , ta thu được ( A, {a}) F. Từ (1) và phù hợp với định nghĩa của Ma ta có A MAX(F,a). Ngược lại, Nếu A MAX (F,a) thì do (1) ta có A NF (2). Do (A,{a}]) F và từ (2) ta thu được a A. Phù hợp với định nghĩa của MAX(F,a) ta có A Ma . Trên cơ sở Thuật toán 17 và Bổ đề 19, ta xây dựng thuật toán dưới đây để tìm SĐQH s = cho + một quan hệ r cho trước sao cho F = Fr. Thuật toán 20. (Tìm SĐQH) Vào: r là quan hệ trên R + Ra: s = mà F = FR Bước1: Từ r ta tính hệ bằng nhau Er Bước 2: Đặt Nr = { A Er : A  { B E r : A  B}} 69
  66. Bước 3: Với mỗi a R ta xây Na = {A Nr : a A  B Nr : a B , A B } . Sau đó, bởi Thuật -1 toán 17 ta xây họ Ha( Ha = Na) Bước 4: Xây s = , ở đây F = {A {a} :  a R , A Ha,A {a}} Mệnh đề 21. + FR = F Lời giải: Vì FR là một họ f trên R, có thể thấy NF r  Er, ở đây NFr là hệ sinh nhỏ nhất của Z Fr. Do định nghĩa của hệ sinh nhỏ nhất ta có N r = NFr. Do đó ta có Na = Ma. Từ định nghĩa của tập phản khoá và định + nghĩa của tập Ka ta có Ha= Ka. Tù đó ta thu được F  FR . Ngược lại, nếu A B = {b 1, ,bt} FR thì bởi + việc xây dựng của F ta thu được A {b i} F với mỗi i=l, ,t. Vì không có phụ thuộc hàm tầm thường {a} {a} trong F, dễ thấy với mọi i=1, ,t, nếu không có phụ thuộc hàm B {b i} F , ở đây B  + U - bi, thì bi A. Từ đó ta có A B F .  Có thể thấy E r, Nr, Na với a R được xây trong thời gian đa thức theo kích thước của r. Rõ ràng, việc xây dựng F phụ thuộc vào kích thước của H a(  a R). Do đó, độ phức tạp thời gian tồi nhất của Thuật toán 20 là 70
  67. n mi - 1 n mi 1   q 1 2 O ( n i 1 ( (kili q + nti q ui q ) + ki + n)) ở đây R = { a1, , an}, Nai = ki , Hai = mi, ý nghĩa của các li q, ti q, ui q xem các Mệnh đề 3 và 18. Dễ thấy, nếu li q ki (  i,  q : 1 q mi - 1), thì độ phức tạp thời gian của thuật toán của chúng ta là n  2 i 1 2 O (n ki mi ) Bởi vì ki là đa thức theo kích thước của r, trong các trường hợp nếu is m i là đa thức theo kích thước của r, thì thuật toán của chúng ta là hiệu quả. Lúc đó độ phức tạp của nó là đa thức theo kích thước của r. Nếu Ha là nhỏ thì thuật toán của ta rất hiệu quả. Bây giờ, nhờ Thuật toán 20 chúng ta xây dựng SĐQH s = cho quan hệ sau đây. Ví dụ 22 r là quan hệ sau đây trên R = {a, b, c, d}: a b c d 6 6 6 0 0 2 0 2 0 0 0 0 0 0 0 3 4 4 0 0 5 0 5 5 1 0 0 0 71
  68. Dễ thấy là ER = {{a,b,c}, {b,c,d}. { a,c}, { b,c}, {c,d}.{b},{c},{d}, }, NR = {[a,b,c}, {b,c,d},{a,c},{c,d},{b},{d}}, Na = {b,c,d}, Nb= {{a,c},{c,d}}, Nc = {{b},{d}}, Nd ={a,b,c} Ta có Ha = {a}, Hb = {{b}, {a,d}}, Hc = {{a},{b,d},{c}}, Hd = {d}. Ta xây dựng s = (R,F) như sau: R = {a,b,c,d}, F = {{a,d} {b},{a} {c},{b,d} {c}}. Chúng ta trình bày hai kết quả cơ bản về độ phức tạp thuật toán cho việc xây dựng quan hệ Armstrong cho một SĐQH cho trước và ngược lại. Định lí 23 Độ phức tạp thời gian cho việc tìm kiếm một quan hệ Armstrong của một SĐQH cho trước là hàm số mũ theo số lượng của các thuộc tính. Định lí 24 Độ phức tạp thời gian cho việc tìm kiếm một SĐQH s = từ một quan hệ r cho trước sao cho + Fr = F là hàm số mũ theo số lượng các thuộc tính. 72
  69. Chương 3 Các dạng chuẩn và các thuật toán liên quan Việc chuẩn hoá các quan hệ cũng như các sơ đồ quan hệ đóng một vai trò cực kì quan trọng trong việc thiết kế các hệ quản trị cơ sở dữ liệu trên mô hình dữ liệu của Codd. Nhờ có chuẩn hoá các quan hệ và các sơ đồ quan hệ chúng ta tránh được việc dư thừa dữ liệu và tăng tốc độ của các phép toán xử lí quan hệ. 3.1 Các khái niệm cơ bản Chúng ta định nghĩa các dạng chuẩn như sau. Cho r = {h1, ,hm} là quan hệ trên R = {a1 , an} Định nghĩa 1. (Dạng chuẩn 1 - 1NF): r là dạng chuẩn 1 nếu các phần tử của nó là sơ cấp. Khái niệm sơ cấp hiểu ở đây là giá trị h i(aj) (i=1, ,m; j=1, ,n) không phân chia được nữa. 73
  70. Định nghĩa 2 (Dạng chuẩn 2 - 2NF) r là dạng chuẩn 2 nếu: - r là dạng chuẩn 1 - A {a} Fr đối với mọi khoá tối thiểu K, A  K và a là thuộc tính thứ cấp. Định nghĩa 3. ( Dạng chuẩn 3 - 3NF): r là dạng chuẩn 3 nếu: + A {a} F r đối với A mà A R, a A, a  K Có nghĩa rằng : - K là một khoá tối tiểu - a là thuộc tính thứ cấp - A không là khoá - A {a} không đúng trong r Định nghĩa 4. (Dạng chuẩn Boye-Codd - BCNF) r là dạng chuẩn của Boye-Codd nếu: + A {a} Fr đối với A mà A R, a A Nhận xét 5 Qua định nghĩa, ta có thể thấy dạng chuẩn BCNF là 3NF và 3NF là 2NF. Tuy vậy, chúng ta có thể đưa ra các ví dụ chứng tỏ có quan hệ là 2NF 74
  71. nhưng không là 3NF và có quan hệ là 3NF nhưng không là BCNF. Nói cách khác là lớp các quan hệ BCNF là lớp con thực sự của lớp các quan hệ 3NF và lớp các quan hệ 3NF này lại là lớp con thực sự của lớp các quan hệ 2NF. Đối với s = thì các dạng chuẩn 2NF, 3NF, + BCNF trong đó ta thay Fr bằng F . Chú ý là đối với sơ đồ quan hệ ta không có dạng 1NF. Nhận xét 5 cũng đúng cho các dạng chuẩn của sơ đồ quan hệ. Chúng ta xem ví dụ sau Ví dụ 6. Cho s = , s' = là hai SĐQH trên R = {a, b, c, d} và F = {{a} {c}, {b} {d}, {c} {a, b, d}}. F' = {{a, b} {c}, {d} {b}, {c} {a, b, d}}. Dễ thấy {a}, {c} là các khoá tối tiểu của s, {b} là thuộc tính thứ cấp. Do đó, s là 2NF, nhưng không là 3NF. Rõ ràng, {a, b}, {c} là các khoá tối tiểu của s'. Hiển nhiên s là 3NF. Vì ta có {d} {b}, nên s không là BCNF. 75
  72. Như vậy việc phân lớp các dạng chuẩn có thể được thể hiện quan hình vẽ sau BCNF 3NF 2NF 1NF 2NF 3.2 Dạng chuẩn 2NF Bây giờ chúng ta nêu ra loại phụ thuộc hàm đặc biệt, mà phụ thuộc dữ liệu này đóng vai trò quan trọng trong dạng chuẩn 2. Định nghĩa 1. Một phụ thuộc hàm A B được gọi là sơ cấp nếu không tồn tại một tập hợp A'  A sao cho A' B. Trong trường hợp này ta cũng nói B phụ thuộc hoàn 76
  73. toàn vào A. Như vậy nếu A là một thuộc tính sơ cấp thì phụ thuộc hàm A B cũng là sơ cấp. Trong trường hợp ngược lại, ta nói B phụ thuộc bộ phận vào A Định lí 2. Cho r là một quan hệ trên R. Khi đó r là 2NF khi và chỉ khi - r là 1NF - Mỗi thuộc tính thứ cấp của r đều phụ thuộc hoàn toàn vào mọi khoá tối tiểu. Vì SĐQH không có dạng chuẩn 1, từ Định lí 2 ta có mệnh đề sau Mệnh đề 3. Cho s là một sơ đồ quan hệ trên R. Khi đó s là 2NF khi và chỉ khi mọi thuộc tính thứ cấp của s đều phụ thuộc hoàn toàn vào khoá tối tiểu bất kì. Có thể thấy, bản chất dạng chuẩn 2NF là loại bỏ các phụ thuộc bộ phận giữa các thuộc tính thứ cấp với các khoá tối tiểu. Định lí 4. Giả sử s = là sơ đồ quan hệ. Đặt M s = {A - a; a A, A K s}, và Fn là tập tất cả các thuộc tính 77
  74. + thứ cấp của s. Đặt l s = {B : B = C , C Ms}. Khi đó ta có các tương đương sau: (1) s là 2NF. + (2) Với mỗi C Ms: C  Fn = ; + (3) Với mỗi B ls và a Fn : (B - a) = B - a. Lời giải: Giả sử s là 2NF. Nếu Fn =  thì (2) là rõ ràng. Giả thiết rằng F n . Do định nghĩa của F n và của Ms, (3) là hiển nhiên. Giả sử rằng chúng ta có (2) và F n . Nếu có B + ls, và a Fn : B - a  (B - a ). Từ định nghĩa của ls + + có C Ms : C = B. Rõ ràng rằng a (B - a) . Phù hợp với định nghĩa của bao đóng ta có (B - a) + = C+ = + + B. Từ đó ta thu được a C . Do vậy, C  Fn . Điều này là vô lý. Do đó ta thu được (3). Bây giờ, giả sử chúng ta có (3) và F n . Giả thiết rằng tồn tại D  A, A K s(*) và a Fn, a D, nhưng D {a} F+. Do (*) và phù hợp với việc xây dựng của Ms và ls thì có C Ms : D  C. Hiển nhiên rằng a C. Rõ ràng, D+  C+ và a C+. Đặt B = C+. + + Có thể thấy C  B - a. Do đó, B - a  C = (B - a) . Điều này mâu thuẫn với (B - a)+ = B - a. Như vậy chúng ta có (1).  Từ định lý 4 trực tiếp suy ra kết quả sau: 78
  75. Hệ quả 5. Giả sử s = (R, F) là một sơ đồ quan hệ. Ký pháp Fn là tập tất cả những thuộc tính thứ cấp của s, và Gs = -1 {B - Fn : B Ks }. Khi đó nếu đối với mọi C G s : C+ = C thì s là 2NF. Cho s = là một sơ đồ quan hệ trên R. Đặt Z(s) = {X+ : X  R}. Chúng ta nói rằng s là đơn nếu F chứa chỉ các phụ thuộc hàm dạng {a} {b}. Biết rằng [16] s là đơn nếu và chỉ nếu đối với mọi A, B Z(s) : A  B Z(s). Rõ ràng, từ điều đó ta có (A  B)+ = A+  B+. Mệnh đề 6. Cho s = là một sơ đồ quan hệ đơn. Đặt F n là tập tất cả những thuộc tính thứ cấp của s, và G s = -1 {B - Fn : B K s }. Khi đó s là 2NF nếu và chỉ nếu + với mọi C Gs : C = C. Lời giải: Giả sử rằng s là 2NF. Nếu F n =  thì bởi + định nghĩa của phản khoá ta có C = C. Nếu Fn  thì + giả thiết rằngcó C G s : C C. Bởi định nghĩa của -1 Gs thì tồn tại B Ks : C  Fn = B. Biết rằng [9] Fn là giao của tất cả các phản khoá chúng ta có C  B. Do + + đó, C  B, C  Fn . Ta ký pháp các phần tử của + C là c1, , cl. Bởi vì s là đơn chúng ta thu được {c 1} + + +   {cl} = C . Do đó tồn tại c 1 C sao cho {c1} 79
  76.  Fn . Hiển nhiên c 1 là thuộc tính cơ bản. Điều này trái với việc s có 2NF. Do đó, C+ = C. Ngược lại bởi hệ quả 5 nếu ta có C + = C đối với mọi C Gs, thì s là 2NF.  + Cho r là một quan hệ trên R. Đặt A r = {a : a R, f A r {a}}, r là quan hệ đơn nếu đối với mọi A, B  + + + R : (A  B) r = A r  B r. Biết rằng đối với một quan hệ r cho trước thì tập hợp tất cả các phản khoá của r được xây dựng trong thời gian đa thức. Trong [9] chúng ta đã chỉ ra rằng giao của tất cả các phản khoá đúng bằng tập tất cả các thuộc tính thứ cấp. Mặt khác biết rằng [6] nếu sơ đồ quan hệ s = là đơn thì độ phức tạp thời gian + tìm quan hệ r sao cho F = Fr là đa thức. Từ điều này và mệnh đề 6 ta có Mệnh đề 7. Cho s là một sơ đồ quan hệ đơn và r là một quan hệ đơn trên R. Khi đó tồn tại một thuật toán đa thức xác định rằng s (r, tương ứng) có là 2NF. 3.3 Dạng chuẩn 3NF Trong mục này, chúng ta đưa ra một khái niệm quan trọng thường dùng để mô tả dạng chuẩn 3NF 80
  77. Định nghĩa 1. Một phụ thuộc hàm A C được gọi là trực tiếp nếu không có B (B A và B C) sao cho A B và B C nhưng B không phụ thuộc hàm vào A hoặc C không phụ thuộc hàm vào B. Trong trường hợp nếu có B như vậy thì B được gọi là tập thuộc tính bắc cầu và A C là phụ thuộc bắc cầu. Ta có một đặc trưng sau cho dạng chuẩn 3. Định lí 2. Cho r là một quan hệ trên R. Khi đó r là 3NF nếu và chỉ nếu - r là 2NF - Không có một thuộc tính thứ cấp nào của r phụ thuộc bắc cầu vào một khoá tối tiểu. Từ Định lí 2 đối với SĐQH ta cũng có kết quả sau Mệnh đề 3. Giả sử s là một sơ đồ quan hệ trên R. Khi đó s là 3NF nếu và chỉ nếu - s là 2NF - Mọi thuộc tính thứ cấp của s phụ thuộc trực tiếp vào mỗi khoá tối tiểu. 81
  78. Trong dạng chuẩn 3NF chúng ta loại bỏ các phụ thuộc bộ phận, phụ thuộc bắc cầu giữa các thuộc tính thứ cấp với các khoá tối tiểu. Chúng ta trình bày thêm một số đặc trưng của các SĐQH dạng 3NF. Cho s = là một sơ đồ quan hệ trên R. Từ s chúng ta xây dựng Z(s) = {X + : X  R}, và tính hệ sinh Ns của Z(s). Chúng ta đặt Ts ={A Ns :  B Ns : A  B} Biết rằng [1] đối với một sơ đồ quan hệ s cho trước thì tồn tại một quan hệ r là quan hệ Amstrong của s. Mặt khác bởi Định lý 17 và Hệ quả 18 mục 2.2, mệnh đề dưới đây là rõ ràng Mệnh đề 4. -1 S là một SĐQH. Khi đó Ks = Ts . Định lí 5. Cho s = là một sơ đồ quan hệ. Đặt F n là tập tất cả các thuộc tính thứ cấp của s. Khi đó s là -1 + 3NF nếu và chỉ nếu  B Ks , a Fn : (B - a) = B - a. Lời giải: Giả sử Fn . Có thể thấy rằng s là -1 3NF thì đối với mỗi B K s , a Fn : B - a = (B - a)+ . 82
  79. Ngược lại, nếu s không là 3NF thì tồn tại một tập + + A và a Fn : a A sao cho A {a} F và A R. -1 + Phù hợp với Mệnh đề 4 có B K r sao cho A  B. Từ a A+ chúng ta có a B. Do a A ta có A  B - a. Do đó ta thu được B - a  (B - a)+.  Định lí 6. Giả sử r là một quan hệ trên R. Khi đó r là 3NF nếu và chỉ nếu với mọi A E r , a A và a là thuộc + tính thứ cấp thì {A- a } r = A- a, ở đây E r là hệ bằng nhau của r. Từ Định lí 5 ta có hệ quả sau Hệ quả 7. Giả sử s là một sơ đồ quan hệ trên R. Khi đó s là + 3NF nếu và chỉ nếu với mọi A : A = A , a A và a là thuộc tính thứ cấp thì {A - a }+ = A- a. 3.4. Dạng chuẩn BCNF Trong mục này, chúng ta đưa ra một số các đặc trưng của dạng chuẩn BCNF cho sơ đồ quan hệ và quan hệ. Định nghĩa 1. 83
  80. Giả sử r là một quan hệ trên R, A,B  R và A B. Khi đó ta nói A là tập sinh của B nếu - | A | là một sơ đồ quan hệ. Đặt F n là tập tất cả các thuộc tính thứ cấp của s. Khi đó 1 s là BCNF nếu và chỉ nếu  B K s , a B : (B - a)+ = B - a. Lời giải: Dễ thấy nếu s là BCNF thì (B - a)+ = B - -1 a đối với B Ks và a B. Ngược lại giả thiết s không là BCNF. Khi đó tồn tại A {a} F + ở đây A + R và a A. Bởi mệnh đề 4 mục trên, ta có B K-1 sao cho A+  B. Rõ ràng, a B và A  B - a. Từ đó, ta có (B - a)+ = B.  Định lí 4. 84
  81. Giả sử r là một quan hệ trên R. Khi đó r là BCNF + nếu và chỉ nếu với mọi A M r , a A thì {A- a }r = A- a, ở đây Mr là hệ bằng nhau cực đại của r. Giả sử A B là một phụ thuộc hàm. Chúng ta gọi phụ thuộc hàm này là tầm thường nếu B  A. Ngược lại trong trường hợp này, chúng ta gọi nó là phụ thuộc hàm không tầm thường. Định lí 5 Giả sử s = là một sơ đồ quan hệ trên R. Khi đó s là BCNF nếu và chỉ nếu với mọi A B F và A B không tầm thường thì A+ = R. 3.5. Các thuật toán liên quan Trên cơ sở các định lí đã trình bày ở các mục trên, chúng ta xây dựng các thuật toán để xác định dạng chuẩn cho các quan hệ hoặc sơ đồ quan hệ cho trước. Đầu tiên chúng ta xây dựng thuật toán xác định một quan hệ cho trước có là 3NF hay không. Thuật toán 1. Đầu vào: r = {h1, , hm }là một quan hệ trên R Đầu ra : r là 3NF ? 85
  82. Bước 1: Từ r chúng ta xây dựng một tập Er = {Ei j : m j i 1}, ở đây Ei j = { a R : hj(a) = hj(a)}. Bước 2: Từ Er chúng ta xây dựng một tập M = {B P(R) : Tồn tại Ei j Er : Ei j = B}. Bước 3: Từ M xây dựng tập Mr = { B M : Với mọi B' M : B  B'}. Có thể thấy rằng Mr tính được bằng một thuật toán thời gian đa thức. Bước 4: Xây dựng tập V = Mr. Bước 5: r là 3NF nếu với mọi B M r , a V : + {B - a }r = B - a. Ngược lại r không là 3NF. Ví dụ : Cho quan hệ r sau A B C D E 0 0 1 0 1 1 1 0 0 1 2 2 0 1 3 1 2 3 1 0 1 1 1 0 2 Khi đó E12= DE, E13= , E14= , E15= D, E23= C, E24= A, E25=AB, E34=BD, E35=, E45=A. 86
  83. Như vậy ta có Mr= {DE,AB,BD,C}. Dễ thấy DE  AB  BD  C = . Cho nên r là 3NF. Trên cơ sở Định lí 4 mục trên chúng ta xây dựng thuật toán dưới đây Thuật toán 2. Đầu vào: r = {h1, , hm }là một quan hệ trên R Đầu ra: r là BCNF ? Bước 1: Từ r chúng ta xây dựng một tập Er = {Ei j : m j i 1} và Ei j = {a R : hj(a) = hj(a)} Bước 2: Từ Er chúng ta xây dựng một tập M = {B P(R) : Tồn tại Ei j Er : Ei j = B} Bước 3: Từ M xây dựng tập Mr = {B M : Với mọi B' M : B  B'}. Có thể thấy rằng M r tính được bằng một thuật toán thời gian đa thức. Bước 4: r là BCNF nếu với mọi B Mr , a B : + {B - a }r = B - a. Ngược lại r không là BCNF. Ví dụ : Cho quan hệ r : A B C D E 2 0 1 1 1 87
  84. 1 1 0 0 1 2 2 0 3 3 1 2 3 3 0 1 1 1 0 2 Khi đó E 12= {E}, E13= {A}, E14= , E15= {C}, E23= {C}, E24= {A}, E25={A,B}, E34={B,D}, E35=, E45={A}. Như vậy ta có Mr= {{A,B},{B,D},{C},{E}}. Có + thể kiểm tra rằng {A,D} - A = D và {D} r = {B,D}. Vì thế r không là BCNF. Nhờ Định lí thuật toán dưới đây được xây dựng Thuật toán 3. Đầu vào: s = là một sơ đồ quan hệ trên R, với F = { A1 B1, , Am Bm } Đầu ra: s là BCNF ? Bước 1: Nếu A 1 B1 là phụ thuộc hàm không + tầm thường và A1 # R thì dừng và kết luận s không là BCNF. Ngược lại thì chuyển sang bước tiếp theo. Bước m: Giống như bước 1 nhưng đối với A m Bm . Bước m+1: s là BCNF. 88
  85. Ví dụ : Cho sơ đồ quan hệ s = R = {a,b,c,d,e} F={{a,b} {d},{b,c} {e}, {d} {c}} Ta có {a,b}+ = R, nhưng {b,c}+ 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ệ hoặc một quan hệ là đa thức. Cho nên chúng ta có cá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 hay khô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 đủ. 89
  86. Có nghĩa là cho đến nay, độ phức tạp thời gian của bài toán này không là đa thức. - Với trường hợp 2NF, các câu hỏi tương tự cho cả r lẫn s còn là bài toán mở (Chúng tôi phỏng đoán có độ phức tạp thời gian là hàm mũ trở lên) 3.6 Dạng chuẩn của các hệ khoá Bây giờ chúng ta khảo sát các sơ đồ quan hệ mà tập các khoá tối thiểu của nó là một hệ Sperner cho trước. Định nghĩa 1. Cho K là hệ Sperner trên R. Ta nó rằng K là 2NF (3NF, BCNF, tương ứng) nếu với mỗi sơ đồ quan hệ s = mà Ks = K thì s là 2NF (3NF, BCNF tương ứng). Bây giờ chúng ta cho một điều kiện cần và đủ để một hệ Sperner bất kỳ là 2NF. Cho K là một hệ Sperner trên R. Đặt K p= {a R : A K : a A}, và Kn = R - Kp. Kp ( Kn ) được gọi là tập các thuộc tính cơ bản ( thứ cấp) của K. Cho trước sơ đồ quan hệ s = , chúng ta nói rằng phụ thuộc hàm A B F là thừa nếu hoặc A = B hoặc có C D F sao cho C  A và B  D. Định lí 2. Cho K là hệ Sperner trên R. Khi đó K là 2NF nếu và chỉ nếu Kn = . 90
  87. Lời giải: Theo định nghĩa của quan hệ 2NF, hệ Sperner 2NF và Kn ta có thể thấy nếu K n =  thì K là 2NF. Bây giờ ta giả thiết là K là 2NF. Kí pháp K -1 là tập các phản khoá của K. Từ K, K-1 ta xây một SĐQH như sau Đối với mỗi A  R có B K -1 sao cho A  B . Đặt C =  {B K-1 :A  B}. Ta lập A C . Kí pháp T là tập tất cả các phụ thuộc hàm như thế. Đặt F = { E R : E K}  (T - Q ) , ở đây Q = {X Y T : X Y là phụ thuộc hàm thừa}. Từ Định lí 13 phần 2.2 và định nghĩa của hệ Sperner ta thu được K s = K . Rõ ràng, với mỗi SĐQH bất kì s 1 = (R, F1) sao + + + cho Ks1 = K và A  R ta có A s1  A s , ở đây A s1 + = {a: A {a} F 1 }. Chúng ta đã chứng minh rằng [9] Kn là giao của các phản khoá của s. Trên cơ sở việc xây dựng s = và phù hợp với định nghĩa của hệ Sperner 2NF ta có Kn = .  Dễ thấy SĐQH 3NF là 2NF và nếu tập các thuộc tính thứ cấp là rỗng thì SĐQH này 3NF. Do đó từ Định lí 2 ta suy ra ngay hệ quả sau Hệ quả 3. Cho K là hệ Sperner trên R. Khi đó K là 3NF nếu và chỉ nếu Kn=. 91
  88. Định nghĩa 4. Cho K là hệ Sperner trên R. Ta nói K là đơn nhất nếu K xác định duy nhất SĐQH s = , theo nghĩa đối với mọi SĐQH s' = mà Ks' = K thì ta có F+ = F'+ . Từ định nghĩa hệ Sperner BCNF và Định nghĩa 4 ta có Mệnh đề 5. K là BCNF nếu và chỉ nếu K là đơn nhất. Như đã biết [5] đối với hệ Sperner cho trước K tồn tại SĐQH s (tương ứng quan hệ r) sao cho K s =K (tương ứng Kr =K). Ta nói s (tương ứng r) là đơn nhất nếu Ks (tương ứng Kr) xác định duy nhất s (tương ứng r). Có nghĩa là Ks (tương ứng Kr) là đơn nhất. Bây giờ ta cho một điều kiện cần và đủ để một SĐQH là đơn nhất. Định lí 6. Cho s = (R,F) là SĐQH trên R. Khi đó s là đơn -1 nhất nếu và chỉ nếu đối với mọi a A, A K s: A-a -1 =  {B K s : ( A- a)  B} Lời giải: 92
  89. Chúng ta biết rằng hệ Sperner K là đơn nhất khi và chỉ khi đối với mọi B  A,A K -1, B là giao của -1 các phản khoá. Đặt Ps = {A-a: K s, a A} Có thể thấy nếu s= là đơn nhất thì B P s kéo theo B là giao của các phản khoá. Có nghĩa là B = -1  {A Ks :B  A}. Ngược lại giả sử với mỗi B P s ta có B =  {A -1 Ks :B  A}(*) Do mệnh đề 3 mục 3.4 và Mệnh -1 đề 4 mục 3.3 ta có Ns  ( Ps  Ks ). Có thể thấy s là BCNF. Trên cơ sở định nghĩa của N s và Mệnh đề 4 -1 mục 3.3 ta có Ks  Ns. Phù hợp với (*) ta thu được -1 Ks = Ns . Vì s là BCNF nên đối với mọi B  A, A -1 + Ks : B = B. Như vậy B là giao của các phản khoá của s.  Theo định nghĩa của hệ Sperner BCNF, Định lí 6 và Mệnh đề 5 ta cho một điều kiện cần và đủ để một hệ Sperner là BCNF. Địnhlí 7. Giả sử K là hệ Sperner trên R. Khi đó K là BCNF nếu và chỉ nếu đối với mọi a A, A K -1 : A - a =  {B K-1 : (A - a)  B}. Phù hợp với Định lí 6 và thuật toán đa thức tìm tập các phản khoá của một quan hệ cho trước, ta có mệnh đề sau 93
  90. Mệnh đề 8. Tồn tại thuật toán xác định một quan hệ cho trước có là đơn nhất hay không. Độ phức tạp thời gian của thuật toán này là đa thức theo kích thước của R và r. Từ Định lí 7 và Mệnh đề 8 trực tiếp kéo theo mệnh đề sau Mệnh đề 9. Tồn tại thuật toán đa thức xác định tập các khoá tối tiểu của một quan hệ cho trước là BCNF hay không. Từ Định lí 6 suy ra ngay hệ quả sau Hệ quả 10. Cho K là hệ Sperner trên R . Khi đó có thuật toán đa thức xác định hệ Sperner H có là đơn nhất hay không, ở đây H-1 = K. 3.7. Ví dụ Dưới đây chúng ta cho ví dụ minh hoạ việc phân tách một bảng (quan hệ) thành các bảng ở dạng chuẩn 3NF. Trong một nhà máy, hàng ngày người ta xuất vật tư theo phiếu xuất kho như sau: Phiếu xuất kho 94
  91. Số Ngày Người Địa chỉ Mã vật phiếu xuất nhận người nhận tư 10100 26/10/ Phạm 2 Phố Huế, 10100 01 96 An Hà Nội 20018 10703 10200 12/01/ Trần 14 Lê Lợi, 30101 04 97 Hà TP. HCM 11700 17/03/ Trần 14 Lê Lợi, 10100 03 97 Hà TP. HCM 20904 Trong ví dụ này có hai thuộc tính không sơ cấp. Đó là : - 'Địa chỉ người nhận' là một thuộc tính tổng hợp những thuộc tính sơ cấp sau: 'Số và phố', 'Tên TP'. - 'Mã vật tư' là danh sách các vật tư của một hoá đơn, có chiều dài không nhất định, cần được tách riêng ra từng vật tư. Ta có thể biến đổi quan hệ phiếu xuất kho sang dạng chuẩn 1 như sau Phiếu xuất kho Số Ngày Người Số và Thành Mã phiếu xuất nhận phố phố vật tư 95
  92. 10100 26/10/ Phạm 2 Phố Hà 1010 01 96 An Huế Nội 0 10100 26/10/ Phạm 2 Phố Hà 2001 01 96 An Huế Nội 8 10100 26/10/ Phạm 2 Phố Hà 1070 01 96 An Huế Nội 3 10200 12/01/ Trần Hà 14 Lê TPHC 3010 04 97 Lợi M 1 11700 17/03/ Trần Hà 14 Lê TPHC 1010 03 97 Lợi M 0 11700 17/03/ Trần Hà 14 Lê TPHC 2090 03 97 Lợi M 4 Trong quan hệ Phiếu xuất kho ta nhận thấy là tập {Số phiếu, Mã vật tư} là khoá tối tiểu. Dễ thấy các thuộc tính Ngày xuất, Người nhận, Số và phố, Thành phố phụ thuộc hàm vào thuộc tính số phiếu. Như vậy, quan hệ Phiếu xuất kho không là 2NF (Nếu lưu trữ và xử lí trên quan hệ này sẽ dẫn đến trùng lặp dữ liệu). Do đó, ta tách thành 2 quan hệ riêng biệt: Phiếu kho Số Ngày Người Số và Thành phiếu xuất nhận phố phố 101000 26/10/96 Phạm An 2 Phố Hà Nội 1 Huế 96
  93. 102000 12/01/97 Trần Hà 14 Lê TPHCM 4 Lợi 117000 17/03/97 Trần Hà 14 Lê TPHCM 3 Lợi Vật tư Số phiếu Mã vật tư 1010001 10100 1010001 20018 1010001 10703 1020004 30101 1170003 10100 1170003 20904 Ta có thể thấy quan hệ vật tư là 3NF. Trong quan hệ Phiếu kho là 2NF ở trên, ta thấy trên đồ thị của các phụ thuộc hàm có hai con đường để đi từ Số phiếu đến {Số và phố, Thành phố} hoặc đi qua thuộc tính Người nhận. Như vậy tồn tại phụ thuộc bắc cầu trong quan hệ này. 97
  94. Số phiếu Ngày xuất Người nhận Số và phố Thành phố Điều này chứng tỏ quan hệ này chưa là 3NF, Nếu ta lưu quan hệ này thì khi xử lí sẽ dẫn đến trùng lặp địa chỉ của người nhận. Do vậy ta tách nó thành hai thực thể riêng biệt: Phiếu Số phiếu Ngày xuất Người nhận 1010001 26/10/96 Phạm An 1020004 12/01/97 Trần Hà 1170003 17/03/97 Trần Hà Người nhận Người nhận Số và phố Thành phố Phạm An 2 Phố Huế Hà Nội 98
  95. Trần Hà 14 Lê Lợi TP. HCM Như vậy, ta đã tách quan hệ phiếu xuất kho thành 3 quan hệ dạng chuẩn 3 là phiếu, người nhận, vật tư. Chương 4 Một số phép toán xử lí bảng Ngôn ngữ xử lí dữ liệu là một phần quan trọng trong các hệ quản trị cơ sở dữ liệu. Ngay từ năm 1970 E.F.Codd đã đưa ra hai ngôn ngữ xử lí dữ liệu chính. Đó là ngôn ngữ đại số quan hệ và ngôn ngữ tính toán quan hệ (Chủ yếu dựa vào phép toán tân từ ). Hầu hết ngôn ngữ xử lí của các hệ quản trị cơ sở dữ liệu lớn hiện nay đều chứa ngôn ngữ đại số quan hệ. Trong chương này chúng tôi trình bày các phép toán cơ bản của ngôn ngữ đại số quan hệ này. Trong Giáo trình này chúng ta coi bảng, file dữ liệu, quan hệ (theo dạng Codd) là tương đương nhau. 4.1 Các phép toán cơ bản Để minh hoạ bằng các ví dụ làm sáng tỏ tính chất của các phép toán xử lí bảng chúng ta cho 2 quan hệ sau: 99
  96. A B C D A E a a b a a b a c b b c d b c d e f g a a d Quan hệ r Quan hệ t Hình 1 1. Phép hợp ( r  t) Giả sử r và t là các quan hệ n cột Khi đó quan hệ hợp r  t là quan hệ n cột bao gồm các bản ghi ( dòng) của cả r lẫn t. Chú ý những bản ghi giống nhau chỉ giữ lại một. Nếu r và t là các quan hệ có tên các cột khác nhau thì quan hệ hợp không có tên các cột Với r, t trong hình 1, ta có r  t = a a b a c b 100
  97. b c d a a d e f g 2. Phép trừ (r - t) Giả sử r và t là hai quan hệ n cột. Quan hệ hiệu (kí hiệu là r-t) là quan hệ n cột mà bao gồm các dòng của r nhưng không có mặt trong t Nếu r và t có các tên cột khác nhau, thì quan hệ hiệu không có tên các cột. Ví dụ: r - t = a c b a a d 3. Phép giao (r  t) Giả sử t và t là hai quan hệ n cột. Khi đó quan hệ giao của r và t là quan hệ n cột bao gồm các bản ghi có mặt cả ở trong r lẫn t. Trong trường hợp nếu r và t có các tên cột khác nhau ( tên các thuộc tính) thì các cột của quan hệ giao không có tên. Ví dụ: r  t = 101
  98. a a b b c d 4. Tích Đề các Giả sử có quan hệ r có n cột (R 1= {a1, ,an}) và t có m cột (R2= {b1, ,bm}) a1 an b1 bm r = t = Tích Đề các: r x t nếu (r1 rn) r và (t1 tm) t Thì (r1, ,rn, t1, , tm ) rxt Ví dụ: A B C D A E a a b a a b r = a c b t = b c d b c d e f g 102
  99. a a d Tích Đề các: r.A B C D t.A E r x t = a a b a a b a a b b c d a a b e f g a c b a a b a c b b c d a c b e f g b c d a a b b c d b c d b c d e f g a a d a a b a a d b c d a a d e f g Tích Đề các là một quan hệ. Trong trường hợp có cột giống nhau (tên giống nhau) cần đánh dấu để phân biệt. Trong ví dụ trên đó là r.A và t.A Số lượng bản ghi (dòng) là n.m. 5. Phép chiếu 103
  100. Giả sử có r là một quan hệ gồm m cột (R1 = {a1 am}). Khi ấy phép chiếu (Ký hiệu là: ) lên tập r: i1,i2 ip (r) ij là số thứ tự lấy trong tập từ 1 đến m j = 1, ,p, ở đây chỉ số p m. hoặc  a,b, , t (r), ở đây a, b, t là tên các thuộc tính. Khi đó ta thực hiện phép chiếu như sau: Giữ lại p cột có số hiệu là i1, i2, ip, loại bỏ các dòng bị trùng nhau. Ví dụ: (lấy ví dụ trước). A B 1,2 (r) = a a a c b c 6. Phép chọn Phép toán này rút ra các bản ghi thoả mãn điều kiện nào đấy. Gọi F là một điều kiện nếu nó bao gồm: - Các toán hạng (hằng, tên thuộc tính) - Các quan hệ số học ( , , , #) 104
  101. - Các phép toán logic: và (), hoặc () và phủ định. Riêng với hằng ta bao bằng dấu ' ' Ví dụ: F là điều kiện A = 'a' v C = 'b' Ký hiệu phép chọn: F (r) (F: điều kiện). Khi đó  F là phép chọn được thực hiện bằng việc rút ra từ r (và loại bỏ các dòng trùng) các bản ghi thoả mãn F. Ví dụ: A = 'a'  C= 'b' (r) = A B C a a b a c b a a d 4.2 Các phép toán khác Các phép toán trình bày tiếp theo đây được biểu diễn qua các phép toán ở mục trên. 1. Phép chia ( r  s ): Giả sử r là quan hệ n cột, t là quan hệ m cột ở đây n > m và t . Quan hệ thương của r và t là quan hệ được tạo ra như sau: - Tích A1 = 1,2, , n-m (r) - Tích A2 = A1 x t 105
  102. - Tích A3 = A2 - r - Tích A4 = 1, 2, , n-m ( A3) Cuối cùng r  s = 1, 2, , n-m (r) - A4 Như vậy chúng ta có: r  s = 1, 2, , n-m ( r) - 1, 2, , n-m (( 1, 2, , n-m (r) x t) - r) Ví dụ: a b c d c d a b a b e f e f e d b c e f e d c d e d e f a b d c b b b b Quan hệ r Quan hệ t Quan hệ r  t 2. Phép nối  106
  103. Giả sử r là quan hệ n cột, t là quan hệ m cột,  là một trong các quan hệ số học: , i và j là tên hoặc là số cột tương ứng của r và t Khi đó kết quả của phép nối  hai quan hệ r và t là quan hệ ( n + m ) cột bao gồm các bản ghi của tích đề các r x t, mà các bản ghi này thoả mãn quan hệ số học  giữa các giá trị thuộc tính i và j. Ký pháp nó là r t  Có thể thấy r t = i  (n+j) ( r x t) ij Với ví dụ như ở mục trên ta có: r.A B C D t.A E a a b a a b a c b a a b a a d a a b b c d b c d r t r.A=D 3. Phép nối 107
  104. Giả sử có r là một quan hệ n cột (R1 = {a1 an}), r là quan hệ m cột (R2 = {b1, ,bm}). Khi đó chúng ta ký hiệu r t là phép nối. - Nó được thực hiện bởi biểu thức trên cơ sở các phép toán sau: r t =  i1, i2 in+m-q (r.A1 = t.A1   r.Aq = t.Aq (r x t)) A1, ,Aq là q cột có tên trùng nhau ở hai quan hệ r và t. - Phép toán được thực hiện: + Tích Đề các r và t. + Chọn trong tích Đề các những bản ghi thoả mãn những cột giống tên nhau phải trùng giá trị trên p cột. + Phép chiếu loại bỏ p cột giống nhau (Chỉ giữ lại một). Ví dụ như hai quan hệ trong hình 1 của phần này, chúng ta có thể thấy r t là bảng sau. A B C D E a a b a b a c b a b 108
  105. a a d a b Phép nối là một phép xử lý bảng rất quan trọng. Thông thường chúng ta phân tách file dữ liệu lớn ban đầu thành các file dữ liệu nhỏ ở dạng chuẩn 3NF. Nhờ phép nối các file dữ liệu nhỏ với nhau chúng ta có thể phục hồi file dữ liệu lớn ban đầu và dung tích bộ nhớ để lưu trữ các file dữ liệu nhỏ thường nhỏ hơn dung tích dùng để lưu trữ file dữ liệu lớn ban đầu. Như vậy, nhờ phép nối chúng ta tiết kiệm được việc lưu trữ các bảng. 4.3. Các ví dụ Bây giờ chúng ta đưa ra ví dụ minh hoạ việc sử dụng các phép toán xử lý bảng Một cửa hàng tổng hợp mỗi ngày có bản tổng kết bán hàng như sau: 1. Bản tổng kết bán hàng một ngày từ những hoá đơn bán ra Đơn vị tính 1000đ Ngày Mã Tên Đơn vị Số lượng tháng hàng hàng tính 210397 M1 Radio 1 000 1 M3 TV 4 000 2 109
  106. M6 Xe 1 000 1 đạp Tổng giá tiền: 10 000 Đã thanh toán: 6 000 ở đây 210397 là ngày bán: Ngày 21 tháng 03 năm 1997. Trên cơ sở của bản tổng kết này chúng ta xây dựng một quan hệ (bảng) bán hàng như sau gồm 7 cột và cho các số liệu cụ thể. Bán hàng Ngày Mã Tên Đơn Số Tổn Thanh tháng hàn hàng giá lượn g toán g g 21039 M1 Radio 1 1 10 6 000 7 000 000 21039 M3 TV 4 2 10 6 000 7 000 000 21039 M6 Xe 1 1 10 6 000 7 đạp 000 000 110
  107. 22039 M2 Máy 3 2 6 2 000 7 giặt 000 000 23039 M1 Radio 1 3 15 11 000 7 000 000 23039 M4 Vide 5 2 15 11 000 7 o 000 000 23039 M9 Máy 2 1 15 11 000 7 ảnh 000 000 Có thể thấy quan hệ bán hàng có khoá tối tiểu là Ngày tháng, Mã hàng. 2. Chúng ta sẽ tách từ bảng bán hàng thành 4 bảng sau: khối lượng Ngày tháng Mã hàng Số lượng 210397 M1 1 210397 M3 2 210397 M6 1 220397 M2 2 111
  108. 230397 M1 3 230397 M4 2 230397 M9 1 Khoá tối tiểu của quan hệ Khối lượng là Ngày tháng, Mã hàng Doanh số Ngày tháng Tổng Thanh toán 210397 10000 6000 220397 6000 2000 230397 15000 11000 Khoá tối tiểu là Ngày tháng Hàng Mã hàng Tên hàng M1 Radio M2 Máy giặt M3 TV M4 Video M6 Xe đạp 112
  109. M9 Máy ảnh Khoá tối tiểu là Mã hàng Mặt hàng Tên hàng Đơn giá Radio 1000 Máy giặt 3000 TV 4000 Video 5000 Xe đạp 1000 Máy ảnh 2000 Khoá tối tiểu là Tên hàng 3. Có thể thấy (Nếu không kể đến thứ tự của cột và hàng): bán hàng = khối lượng doanh số Hàng Mặt hàng Không khó khăn lắm chúng ta thấy 4 quan hệ khối lượng, doanh số, Hàng, mặt hàng là 3NF, còn quan hệ bán hàng chưa được chuẩn hoá. Để thực hiện việc xử lí thông tin, chúng ta lưu trữ 4 quan hệ đã được chuẩn hóa, chứ không lưu trữ quan hệ bán hàng. 113
  110. Như vậy nhờ phép nối chúng ta có thể hồi phục được quan hệ Bán Hàng Bây giờ chúng ta xử dụng các phép toán xử lí bảng để tìm kiếm và in ra các thông tin sau - Chúng ta muốn biết doanh số bán ra sau ngày 21 tháng 03 năm 1997 đó là  Ngày tháng,Tổng( Ngày tháng' > '210397' (doanh số)) và in ra bảng sau: Ngày tháng Tổng 220397 6 000 230397 15 000 - Chúng ta muốn biết các tên hàng và số lượng đã bán trong ngày 21 tháng 03 năm 1997.  Tên hàng, số lượng (  Ngày tháng='210397' (Khối lượng) Hàng) Tên hàng Số lượng Radio 1 TV 2 Xe đạp 1 - Tìm các ngày mà trong các ngày đó doanh số bán ra ít nhất là 10.000.000đ 114
  111.  Ngày tháng (  Tổng' '10 000' (doanh số)) Ngày tháng 210197 230397 - In ra các mã và tên hàng mà đơn giá của nó nhỏ hơn 3.000.000đ  Tên hàng, Mã hàng ( Đơn giá'<'3 000' (Mặt hàng)). Tên hàng Mã hàng Radio M1 Xe đạp M6 Máy ảnh M9 - Cho các mã hàng và đơn giá của chúng trong ngày 23 tháng 03 năm 1997. Mã hàng ( Ngày tháng = '230397' (khối lượng))  Mã hàng, Đơn giá (Hàng Mặt Hàng). Mã hàng Đơn giá 115
  112. M1 1000 M4 5000 M9 2000 - Tìm tên, đơn giá của mã hàng M1 và số lượng bán ra của mặt hàng này trong ngày 23 tháng 03 năm 1997  Tên hàng, Đơn giá, Số lượng ( Mã hàng, Số lượng ( Ngày tháng = '230397'  Mã hàng = M1 (khối lượng) hàng Mặt hàng). Tên hàng Đơn giá Số lượng Radio 1000 3 Ví dụ: Cho 2 quan hệ r1 = Chuyến bay Máy bay 83 727 116
  113. 83 747 84 727 84 747 109 707 r2 = Phi công Máy bay Tuấn 707 Tuấn 727 Thành 747 Thắng 727 Thắng 747 Chúng ta cần in ra một bảng chỉ ra các phi công có thể lái cho mỗi chuyến bay. Khi đó chúng ta chỉ cần thực hiện phép nối tự nhiên giữa r1 và r2. r3 = r1 r2 117
  114. Chuyến bay Máy bay Phi công 83 727 Tuấn 83 727 Thắng 83 747 Thành 83 747 Thắng 84 727 Tuấn 84 727 Thắng 84 747 Thành 84 747 Thắng 109 707 Tuấn Đơn giản hơn ta thực hiện  Chuyến bay, Phi công (r3) 118
  115. Chuyến bay Phi công 83 Tuấn 83 Thắng 83 Thành 84 Tuấn 84 Thắng 84 Thành 109 Tuấn 119
  116. Chương 5 Một số áp dụng mô hình dữ liệu trong các hệ quản trị CSDL hiện có 5.1. Mô tả chung Chương này mô tả việc áp dụng các khái niệm của chương 2, 3 trong các hệ QTCSDL hiện có trên thị trường. Các khái niệm này bao gồm thực thể, thuộc tính, khoá , quan hệ, phụ thuộc hàm, các dạng chuẩn. 5.2. Những khái niệm cơ bản Trong phần này chúng tôi nêu lại một vài khái niệm đã được trình bày sơ bộ ở chương 2. 5.2.1. Thực thể Thực thể là một hình ảnh tượng trưng cho một đối tượng cụ thể hay một khái niệm trừu tượng nhưng có mặt trong thế giới thực. Ví dụ: Dự án, con người, sản phẩm, 120
  117. Thông thường khi xây dựng mô hình dữ liệu các thực thể được biểu diễn bằng những hình chữ nhật ví dụ như Sản phẩm 5.2.2. Thuộc tính Trong một hệ thông tin, ta cần lựa chọn một số tính chất đặc trưng để diễn tả một thực thể, các tính chất này được gọi là thuộc tính của thực thể được mô tả và đây cũng chính là các loại thông tin dữ liệu cần quản lí. Ví dụ: Họ tên, địa chỉ, ngày sinh của thực thể 'sinh viên' Nhãn hiệu, giá của thực thể 'sản phẩm' Giá trị các thuộc tính của một thực thể cho phép diễn tả một trường hợp cụ thể của thực thể, gọi là một thể hiện của thực thể đó . Ví dụ: ('Trần Văn Sơn', '204 Triệu Việt Vương - Hà Nội', 12-5-1975) là một thể hiện của 'sinh viên' ('Máy vi tính ACER', 1349) là một thể hiện của 'sản phẩm' 121
  118. Một thuộc tính là sơ cấp khi ta không cần phân tích nó thành nhiều thuộc tính khác, tuỳ theo nhu cầu xử lí trong hệ thông tin đối với một thực thể. Thông thường một thực thể tương ứng với một bảng (hay một quan hệ của Codd). Mỗi thực thể phải có ít nhất một thuộc tính mà mỗi giá trị của nó vừa đủ cho phép nhận diện một cách duy nhất một thể hiện của thực thể, gọi là thuộc tính nhận dạng hay là khoá. Có nhiều trường hợp chúng ta phải dùng một tập các thuộc tính để nhận diện thực thể. Khi một thực thể có nhiều khoá, người ta chọn một trong số đó làm khoá chính (khóa tối tiểu). Giá trị của một khoá luôn luôn được xác định. Ví dụ: Số hoá đơn là thuộc tính nhận dạng của thực thể "Hoá đơn". Không thể có hai hay nhiều hoá đơn có cùng số hoá đơn trong cùng một hệ thông tin. Ví dụ: 122
  119. Hoá Đơn Số Hoá Đơn Khách Hàng Giá Tiền 5.2.3. Quan hệ Khái niệm quan hệ ở mục này (khác với khái niệm quan hệ của Codd) được dùng để nhóm họp 2 hay nhiều thực thể với nhau nhằm biểu hiện một mối liên quan tồn tại trong thế giới thực giữa các thực thể này. Kích thước của một quan hệ là số thực thể đã cấu thành nên quan hệ, và có thể là một số nguyên bất kỳ. Tuy vậy, trong thực tiễn, người ta luôn tìm cách tránh dùng đến những quan hệ có kích thước lớn hơn 3. Trong một mô hình dữ liệu các quan hệ được biểu diễn bằng những hình tròn hoặc elipse. Trong một số trường hợp, mối quan hệ cũng có thể có những thuộc tính riêng. Ví dụ: Hoá đơn dùng để thanh toán một số sản phẩm bán ra. Mỗi dòng hoá đơn cho biết tổng giá của mỗi sản phẩm.Đây là một quan hệ có kích thước là 2, còn gọi là quan hệ nhị nguyên. 123
  120. Hoá đơn Sản phẩm Dòng hoá đơn - Tổng giá sản phẩm Người ta đưa ra khái niệm những vai trò khác nhau của cùng một thực thể để có thể biểu diễn mối quan hệ giữa thực thể này với chính nó. Vì loại quan hệ này ít dùng nên trong Giáo trình này chúng tôi không trình bày loại quan hệ đó. 5.2.4. Phân loại các quan hệ Xét R là một tập quan hệ và E là một thực thể cấu thành của R, mỗi cặp (E,R) được biểu thị trên sơ đồ khái niệm dữ liệu bằng một đoạn thẳng. Với thực thể E, ta có thể xác định được: - X là số tối thiểu các thể hiện tương ứng với E mà R có thể có trong thực tế. Giá trị của X như vậy chỉ có thể bằng 0 hay 1. - Y là số tối đa các thể hiện tương ứng với E mà R có thể có trong thực tế. Giá trị của Y có thể bằng 1 hay một số nguyên N > 1 . 124
  121. Cặp số (X, Y) được định nghĩa là bản số của đoạn thẳng (E,R) và có thể lấy các giá trị sau: (0,1), (1,1), (0,N) hay (1,N), với N > 1. Đối với loại quan hệ nhị nguyên R liên kết giữa hai thực thể A và B, ta phân thành ba loại quan hệ cơ bản sau: - Quan hệ 1-1 (một - một): mỗi thể hiện của thực thể A được kết hợp với 0 hay 1 thể hiện của B và ngược lại. X,1 R Y,1 A B X và Y có thể lấy các giá trị 0 và 1 Ví dụ: Mỗi độc giả ở một thời điểm chỉ được đọc một quyển sách. 1,1 0,1 Đ ộ c gi ả Đọc Cuốn sách - Quan hệ 1 - N (một - nhiều): Mỗi thể hiện của thực thể A được kết hợp với 0,1 hay nhiều thể hiện của B và mỗi thể hiện của B được kết hợp với một thể hiện duy nhất của A. Đây là một loại quan hệ thông dụng và đơn giản nhất. 125
  122. X,N 1,1 A R B X có thể lấy các giá trị 0 và 1 Ví dụ: Một khách hàng có thể có nhiều hoá đơn Một hoá đơn chỉ có thể mang tên một khách hàng. 0, n 1, 1 Khách hàng Dòng hoá đơn Hoá đơn - Quan hệ N - P (nhiều - nhiều): Mỗi thể hiện của một thực thể A được kết hợp với 0, 1 hay nhiều thể hiện của B và ngược lại, mỗi thể hiện của B được kết hợp 0, 1 hay nhiều thể hiện của A X, N Y, N A R B X và Y có thể lấy các giá trị 0 hoặc 1 Ví dụ: Một hoá đơn dùng để thanh toán một hay nhiều sản phẩm Một sản phẩm có thể xuất hiện trong 0, 1 hay nhiều hoá đơn. 126
  123. Thông thường quan hệ N - P chứa các thuộc tính. Chúng ta biến đổi loại quan hệ này thành thực thể và thực thể này cần được nhận dạng bởi một khoá chính. 5.3. Các dạng chuẩn trong các hệ QTCSDL hiện có Trong mục này chúng tôi 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 hoá trong thực tiễn 5.3.1. Một số phụ thuộc hàm đặc biệt Trên cơ sở của định nghĩa phụ thuộc hàm đã trình bày ở chương 2 chúng ta có thể thấy: - Nếu B phụ thuộc hàm vào A (A B), thì với mỗi giá trị của A tương ứng với một giá trị duy nhất của B. Hay nói cách khác, tồn tại một hàm (ánh xạ) từ tập hợp những giá trị của A đến tập hợp những giá trị của B. Ví dụ: Trong một hoá đơn bao gồm các thuộc tính 'số hoá đơn', 'tên khách hàng', 'mã sản phẩm', 'tổng giá trị sản phẩm' Ta thấy 'Số hoá đơn' 'Tên khách hàng' 'Số hoá đơn', 'Mã sản phẩm' 'Tổng giá trị sản phẩm' Chúng ta có thể mở rộng khái niệm phụ thuộc hàm khi cho phép A hoặc B là một thực thể hoặc là một quan hệ. 127
  124. Ví dụ: Ta có hai thực thể 'Hoá đơn' và 'Khách hàng' Khi đó: Thực thể 'Hoá đơn' 'Thuộc tính 'Tên khách hàng' Thực thể 'Hoá đơn' thực thể 'Khách hàng' Thuộc tính 'Số hoá đơn' thực thể 'Khách hàng' Trong chương 3 ta trình bày phụ thuộc hàm hoàn toàn và phụ thuộc hàm trực tiếp. Hai loại phụ thuộc hàm này đóng vai trò quan trong các dạng chuẩn. Các dạng chuẩn được đề ra với mục đích để đảm bảo tính nhất quán và tránh việc trùng lặp các thông tin. Trong mục này chúng ta sẽ quay trở lại với các dạng chuẩn. Các dạng chuẩn này có những biến đổi điều kiện ràng buộc đơn giản hơn so với các dạng chuẩn đã trình bày trong chương 3. 5.3.2. Dạng chuẩn 1 Chúng ta nói rằng một thực thể hay quan hệ ở dạng chuẩn 1 nếu tất cả giá trị các thuộc tính của nó là sơ cấp. Điều kiện ràng buộc giống như 1NF của chương 3. Định nghĩa của dạng chuẩn 1 mang tính mô tả. Thông thường giá trị các thuộc tính là các dãy kí tự hoặc là các số như trong FOXPRO, khi đó chúng ta cho các giá trị này là sơ cấp 128
  125. Để minh họa ta đưa ra thực thể sau đã trình bày trong mục 4.3. Bán hàng Ngày Mã Tên Đơn Số Tổng Thanh tháng hàn hàng giá lượn toán g g 2103 M1 Radio 1 1 10 6 000 97 000 000 2103 M3 TV 4 2 10 6 000 97 000 000 2103 M6 Xe 1 1 10 6 000 97 đạp 000 000 2203 M2 Máy 3 2 6 000 2 000 97 giặt 000 2303 M1 Radio 1 3 15 11 000 97 000 000 2303 M4 Vide 5 2 15 11 000 97 o 000 000 2303 M9 Máy 2 1 15 11 000 97 ảnh 000 000 Chúng ta chọn khoá chính (nó là một khoá tối tiểu) cho thực thể bán hàng là tập {Ngày tháng, Mã hàng} 129
  126. 5.3.3. Dạng chuẩn 2 Một thực thể hay quan hệ là 1NF được xem là dạng chuẩn 2 nếu tất cả các phụ thuộc hàm giữa khoá chính và các thuộc tính khác của nó đều là hoàn toàn . Chú ý rằng định nghĩa dạng chuẩn 2 trong chương 2 chặt hơn vì điều kiện phụ thuộc hoàn toàn liên quan đến mọi khoá tối tiểu, chứ không chỉ liên quan đến một khoá tối tiểu được chọn làm khoá chính. Trong ví dụ trên, thực thể Bán hàng đã là 1NF, ta nhận thấy đối với khoá chính {số phiếu, mã vật tư} các thuộc tính Tổng và Thanh toán phụ thuộc hàm vào thuộc tính Ngày tháng, các thuộc tính Tên hàng, Đơn giá phụ thuộc hàm vào thuộc tính Mã hàng. Ngày tháng, Mã hàng là hai thuộc tính của khóa chính. Do đó dẫn đến trùng lặp dữ liệu. Thực thể Bán hàng không là 2NF. Để thoả dạng chuẩn 2NF, ta phải tách nó thành 3 thực thể riêng biệt: hàng hoá Mã hàng Tên hàng Đơn giá M1 Radio 1 000 M2 Máy giặt 3 000 M3 TV 4 000 130
  127. M4 Video 5 000 M6 Xe đạp 1 000 M9 Máy ảnh 2 000 Ta chọn khoá chính của thực thể hàng hoá là Mã hàng khối lượng Ngày tháng Mã hàng Số lượng 210397 M1 1 210397 M3 2 210397 M6 1 220397 M2 2 230397 M1 3 230397 M4 2 230397 M9 1 Ta chọn khoá chính (nó là khoá tối tiểu) cho thực thể Khối lượng là Ngày tháng, Mã hàng Doanh số Ngày tháng Tổng Thanh toán 210397 10000 6000 131
  128. 220397 6000 2000 230397 15000 11000 Khoá chính là Ngày tháng Có thể thấy thực thể Khối lượng thực thể Hàng hoá Ta có biểu diễn sau: 1, n 1,1 Hàng hóa R Khối lượng 5.3.4. Dạng chuẩn 3 (3NF) Một thực thể (hay quan hệ) đã là 2NF được xem là dạng chuẩn 3NF nếu tất cả các phụ thuộc hàm giữa khoá chính và các thuộc tính khác của nó đều là trực tiếp. Hay nói cách khác, mọi thuộc tính không nằm trong khoá chính đều không phụ thuộc hàm vào một thuộc tính không phải là khóa chính. Ta có thể rút ra nhận xét: Một thực thể có nhiều khoá nhận dạng không thể thoả mãn dạng chuẩn 3NF. Mặt khác định nghĩa 3NF trong chương 2 chặt hơn vì điều kiện phụ thuộc hoàn toàn và phụ thuộc trực tiếp liên quan đến mọi khoá tối tiểu, chứ không chỉ liên quan đến một khoá tối tiểu được chọn làm khoá chính. 132
  129. Trong thực thể Hàng hoá là 2NF ở trên, ta thấy trên đồ thị của các phụ thuộc hàm có hai con đường để đi từ ‘Mã hàng’ đến ‘Đơn giá’ hoặc đi qua thuộc tính ‘Tên hàng’ Mã hàng Tên hàng Đơn giá Điều này chứng tỏ thực thể chưa là 3NF, dẫn đến trùng lặp đơn giá của tên hàng. Để là dạng 3NF, ta tách nó thành hai thực thể riêng biệt: Hàng Mã hàng Tên hàng M1 Radio M2 Máy giặt M3 TV M4 Video M6 Xe đạp M9 Máy ảnh 133
  130. Khoá chính là Mã hàng Mặt hàng Tên hàng Đơn giá Radio 1000 Máy giặt 3000 TV 4000 Video 5000 Xe đạp 1000 Máy ảnh 2000 Khoá chính là Tên hàng Có thể thấy thực thể Hàng thực thể Mặt hàng Tổng hợp với phần trên, ta có sơ đồ sau: 1, n 1,1 Hàng R Khối lượng 1,1 0, n R1 M ặ t hàng 134
  131. 5.3.5. Dạng chuẩn của Boyce - Codd (BCNF) Dạng chuẩn 3NF cho phép một thuộc tính thành phần của khoá chính phụ thuộc hàm vào một thuộc tính không phải là khoá Ví dụ : Lớp Môn Thầy 12 Toán A 11 Toán D 10 Toán A 12 Địa C 11 Địa C 10 Địa D Thực thể này thoả dạng 3NF. Khoá chính của nó gồm các thuộc tính 'Lớp' và 'Môn'. Nhưng do qui tắc 'Mỗi thầy chỉ dạy một môn', ta thấy có sự phụ thuộc hàm của Môn (Là một thành phần của khoá chính) vào Thầy (Là một thuộc tính bình thường): 'Thầy' 'Môn' 135
  132. Ta nói rằng thực thể thoả mãn dạng chuẩn Boyce-Codd (BCNF) khi tất cả các phụ thuộc hàm của nó đều thuộc dạng K a, trong đó K là khoá chính và a là một thuộc tính bất kỳ. Để thoả dạng BCNF, ta có thể tách thực thể trên thành hai thực thể riêng biệt như sau: Thực thể 'Lớp': Lớp 12 11 10 Thực thể 'Thầy': Thầy Môn A Toán B Toán C Sử Địa D Sử Địa 136
  133. Chúng ta có biểu diễn sau: 1, n 1, n Th ầ y R Lớp 5.3.6. Nhận xét về việc chuẩn hoá Khi không có yêu cầu gì đặc biệt, người ta thường tìm cách chuẩn hoá mô hình dữ liệu nhằm tăng hiệu hiệu năng và giảm sơ xuất trong các giai đoạn phát triển hệ thông tin về sau. Tuy vậy, việc chuẩn hoá không phải lúc nào cũng đạt đến mức tối đa. Thông thường chúng ta chuẩn hoá đến dạng chuẩn 2NF và 3NF. 137