Cơ sở dữ liệu đại học

10,284 views

Published on

Good.

Published in: Education

Cơ sở dữ liệu đại học

  1. 1. CƠ SỞ DỮ LIỆU GV: ThS.VŨ VĂN ĐỊNH TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN *************************
  2. 2. B ài 1. TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU <ul><li>1. Tại sao cần phải có một CSDL? </li></ul><ul><li>- Hệ thống các tập tin cổ điển : </li></ul><ul><li>Được tổ chức riêng rẽ, phục vụ một mục đích hay một bộ phận nào đó của doanh nghiệp. </li></ul><ul><li>Nhược điểm: </li></ul><ul><li>- Tính phụ thuộc giữa chương trình và dữ liệu . </li></ul><ul><li>- Lưu trữ trùng lặp dữ liệu </li></ul><ul><li>- Việc chia sẻ dữ liệu bị hạn chế </li></ul><ul><li>- Tốn thời gian xây dựng </li></ul><ul><li>- Chi phí cho bảo trì chương trình lớn </li></ul>
  3. 3. <ul><li>2. Ví dụ về CSDL. </li></ul><ul><li>-Cơ sở dữ liệu cho một công ty chuyên kinh doanh : </li></ul><ul><li>Gồm các bảng: KHACH HANG, SANPHAM, DON_DAT_HANG, NHA_CUNG_CAP,... và một số quy tắc nghiệp vụ áp đặt lên các bảng. </li></ul><ul><li>Ví dụ về bảng KHACHHANG : </li></ul><ul><li>STT MKH Tên KH Ma hang So luong </li></ul><ul><li>1 CN22 Hoàng Hà MK02 8 </li></ul><ul><li>2 CT20 Bến Nghé CT01 200 </li></ul><ul><li> … … … … </li></ul>
  4. 4. <ul><li>3. Cơ sở dữ liệu là gì? </li></ul><ul><li>ĐN: CSDL là một tập hợp các dữ liệu có cấu trúc về một tổ chức nào đó được lưu trữ trên các thiết bị lưu trữ thông tin thứ cấp như băng từ, đĩa từ,.. </li></ul><ul><li>Mục đích: Nhằm thoả mãn nhu cầu khai thác thông tin của một hay nhiều người sử dụng phục vụ cho nhiều mục đích khác nhau </li></ul><ul><li>Điểm khác nhau nổi bật giữa CSDL và hệ thống File là : Các dữ liệu trong CSDL được lưu trữ tại một vị trí. Với cùng một CSDL có thể được nhiều người sử dụng và phục vụ cho nhiều mục đích khác nhau. </li></ul>
  5. 5. <ul><li>Ưu điểm của CSDL: </li></ul><ul><li>Tối thiểu hoá dư thừa thông tin </li></ul><ul><li>Tính độc lập chương trình- ứng dụng </li></ul><ul><li>Nâng cao tính nhất quán dữ liệu </li></ul><ul><li>Nâng cao tính chia sẻ dữ liệu </li></ul><ul><li>Nâng cao chất lượng dữ liệu </li></ul><ul><li>Nâng cao khả năng truy cập và trả lại dữ liệu </li></ul><ul><li>Giảm chi phí bảo trì chương trình. </li></ul>
  6. 6. <ul><li>Tính bảo mật </li></ul><ul><li>Tính độc lập </li></ul><ul><li>Tránh sự dư thừa thông tin </li></ul><ul><li>Có khả năng lưu trữ, phục hồi khi gặp sự cố </li></ul><ul><li>Hiệu suất sử dụng tốt, đảm bảo chế độ ưu tiên khi truy nhập dữ liệu. </li></ul><ul><li>Tiêu chuẩn của một CSDL: </li></ul>
  7. 7. 4. Các đối tượng sử dụng CSDL <ul><li>Những người sử dụng không chuyên về lĩnh vực tin học </li></ul><ul><li>Các chuyên viên tin học biết khai thác CSDL </li></ul><ul><li>Những người quản trị CSDL: là người tổ chức CSDL, cấp quyền hạn khai thác dữ liệu và giải quyết các tranh chấp khi gặp sự cố </li></ul>
  8. 8. 5. Các mức biểu diễn một CSDL. <ul><li>Gồm 3 mức : </li></ul><ul><li>Mức ngoài : là tập tất cả các dữ liệu mà người sử dụng cụ thể có thể nhìn thấy và được phép truy cập, là mức của người sử dụng và các chương trình ứng dụng. </li></ul><ul><li>Mức quan niệm : giải quyết vấn đề lưu trữ dữ liệu loại gì, lưu trữ bao nhiêu, mối quan hệ trong CSDL và mối quan hệ giữa các loại dữ liệu này như thế nào? </li></ul><ul><li>Mức trong( mức vật lý): Đây là mức lưu trữ dữ liệu. Mục đích của mức này giải quyết vấn đề dữ liệu là gì, dữ liệu được lưu trữ như thế nào và nhằm mục đích gì. </li></ul>
  9. 9. Hình biểu diễn Sự phân mức một CSDL CSDL mức khái niệm Mức ngoài Mức trung gian Mức vật lý View ( khung nhìn) của một user là một tập hợp tất cả các dữ liệu mà user đó nhìn thấy, được phép truy cập vào. View 1 View 2 View k CSDL mức vật lý …… ………… . User 1 User 2 User k
  10. 10. 6. Tính độc lập giữa dữ liệu và chương trình <ul><li>Một CSDL là độc lập dữ liệu nếu nó có hoặc có thể có khả năng phát triển mà không ảnh hưởng tới các hệ ứng dụng. </li></ul><ul><li>Tính độc lập dữ liệu là &quot; tính bất biến của các hệ ứng dụng đối với các thay đổi trong cấu trúc lưu trữ và chiến lược truy nhập&quot; </li></ul><ul><li>Có hai mức độc lập dữ liệu: </li></ul>
  11. 11. <ul><li>Độc lập dữ liệu mức vật lý : Có thể tổ chức lại CSDL vật lý (như thay đổi các tổ chức, cấu trúc dữ liệu) để làm thay đổi hiệu quả tính toán của các chương trình ứng dụng nhưng không đòi hỏi phải viết lại chương trình ứng dụng. </li></ul><ul><li>Độc lập dữ liệu mức logic: Có thể thay đổi lược đồ khái niệm như thêm, xoá , bớt thông tin của các thực thể đang tồn tại trong CSDL nhưng không làm ảnh hưởng tới các lược đồ con, do đó không cần phải viết lại các chương trình ứng dụng. </li></ul>
  12. 12. <ul><li>II. Hệ quản trị CSDL </li></ul><ul><li>1. Kh ái niệm </li></ul><ul><li>- Là một phần mềm điều khiển mọi truy nhập đối với CSDL. Nó giúp người sử dụng có thể dùng được hệ thống mà không cần quan tâm tới thuật toán chi tiết hoặc biểu diễn dữ liệu trong máy. </li></ul><ul><li>- Mỗi hệ QT CSDL được cài đặt dựa trên mô hình dữ liệu cụ thể và hỗ trợ tối đa cho người dùng thực hiện các thao tác trên đó. </li></ul><ul><li>- VD : FOXPRO, ACCESS, ORACLE, v.v.. </li></ul>
  13. 13. <ul><li>2.Tính năng của hệ QTCSDL: </li></ul><ul><li>Tạo cấu trúc lưu trữ dữ liệu trên máy. Cho phép đưa dữ liệu vào máy tính theo cấu trúc đã tạo ra. </li></ul><ul><li>Cho phép khai thác CSDL đã lưu trữ </li></ul><ul><li>Tạo cơ chế đảm bảo an toàn, bí mật cho dữ liệu trong quá trình thao tác </li></ul>
  14. 14. - 3. Các thành phần trong hệ QT CSDL: Ngôn ngữ giao tiếp với người sử dụng: Gồm :ngôn ngữ mô tả , thao tác , truy vấn và quản lý dữ liệu. - Từ điển dữ liệu : là một CSDL của hệ QT CSDL sử dụng để lưu trữ cấu trúc CSDL, các thông tin bảo mật, bảo đảm an toàn dữ liệu và các cấu trúc ngoài - Các biện pháp bảo mật - Cơ chế giải quyết tranh chấp dữ liệu. Các biện pháp: + Cấp quyên ưu tiên cho NSD + Đánh dấu yêu cầu truy xuất, phân chia thời gian, người nào yêu cầu trước thì có quyền truy xuất trước.
  15. 15. <ul><li>Cơ chế phục hồi, sao lưu dữ liệu khi có sự cố: + Định kỳ kiểm tra CSDL, sau một thời gian nhất định tự động tạo bản sao. </li></ul><ul><li>+ Tạo nhật kí thao tác, khi có sự cố thì tự động lật ngược lại để phụ hồi. </li></ul><ul><li>Đảm bảo tính độc lập giữa dữ liệu và chương trình. </li></ul><ul><li>Cung cấp giao diện thân thiện với người dùng không chuyên </li></ul>
  16. 16. Bài 2 NHỮNG CÁCH TIẾP CẬN MỘT CSDL <ul><li>M ô hình dữ liệu là sự trừu tượng hoá môi trường thực, nó là biểu diễn dữ liệu ở mức quan niệm. </li></ul><ul><li>Mỗi loại mô hình dữ liệu đặc trưng cho một cách tiếp cận dữ liệu khác nhau của những nhà phân tích thiết kế CSDL. </li></ul><ul><li>Một số loại mô hình dữ liệu phổ biến : </li></ul>
  17. 17. 1. Mô hình dữ liệu quan hệ <ul><li>Mô hình dữ liệu quan hệ do E.F. Codd đề xuất. </li></ul><ul><li> Nền tảng cơ bản của nó là khái niệm lý thuyết tập hợp trên các quan hệ, tức là tập các bộ giá trị. </li></ul>
  18. 18. 2. Cách tiếp cận theo mô hình dữ liệu mạng <ul><li>Mô hình dữ liệu mạng (lưới) là mô hình được biểu diễn bởi một đồ thị có hướng. </li></ul><ul><li>Loại mẫu tin (Record Type): là mẫu đặc trưng cho từng loại đối tượng riêng biệt, được biểu diễn bởi một hình chữ nhật. </li></ul><ul><li>Loại liên hệ ( Set Type): là sự liên kết giữa một loại mẫu tin chủ với một loại mẫu tin thành viên, được biểu diễn bởi một hình bầu dục. </li></ul><ul><li>Sự liên kết giữa 2 loại mẫu tin được thể hiện bởi các cung có hướng đi từ loại mẫu tin chủ tới loại liên hệ và từ loại liên hệ tới loại mẫu tin thành viên. </li></ul>
  19. 19. <ul><li>Trong loại liên kết, cần chỉ ra số lượng các mẫu tin tham gia trong mỗi kết hợp. Các loại liên hệ: </li></ul><ul><ul><li>1-1 </li></ul></ul><ul><ul><li>1-n </li></ul></ul><ul><ul><li>n-1 </li></ul></ul><ul><ul><li>Đệ quy </li></ul></ul>
  20. 20. PHÒNG CÔNG VIỆC LÝ LỊCH NHÂN VIÊN Có Gồm Cùng làm quản lý 1-n n-1 1-n 1-1 Hình 3. Mô hình dữ liệu mạng ( Network Model)
  21. 21. 3. Mô hình dữ liệu phân cấp <ul><li>Mô hình dữ liệu phân cấp là một cây ( Tree) trong đó mỗi nút của cây biểu diễn một thực thể, giữa nút con và nút cha được liên hệ với nhau theo một mối quan hệ xác định. </li></ul><ul><li>Loại mẫu tin : Giống trong mô hình mạng </li></ul><ul><li>Loại liên hệ : Kiểu liên hệ là phân cấp, theo cách: </li></ul><ul><ul><li>Mẫu tin thành viên chỉ đóng vai trò thành viên của một mối liên hệ duy nhất, tức là thuộc một chủ duy nhất. </li></ul></ul><ul><ul><li>Như vậy, mối liên hệ từ mẫu tin chủ tới các mẫu tin thành viên là 1-n, và từ mẫu tin thành viên tới mẫu tin chủ là 1-1. </li></ul></ul><ul><ul><li>Giữa hai loại mẫu tin chỉ tồn tại một mối liên hệ duy nhất </li></ul></ul>
  22. 22. Ví dụ : TOÀN QUỐC HÀ NỘI HẢI PHÒNG NAM ĐỊNH … … NAM HỒNG CỔ LOA … BA ĐÌNH ĐÔNG ANH NK 1 HỘ 2 … NK 1 … HỘ 1
  23. 23. 4. Mô hình dữ liệu hướng đối tượng <ul><li>- Cho phép biểu diễn các đối tượng khá tự nhiên và sát với thực tế. </li></ul><ul><li>- Hỗ trợ các ngôn ngữ thao tác hướng đối tượng mạnh, cho phép người sử dụng dễ dàng biểu diễn cả các truy vấn phức tạp </li></ul>
  24. 24. Bài 3. Mô hình quan hệ của E.F. Codd <ul><li>I. Khái quát chung </li></ul><ul><li>Mô hình quan hệ : </li></ul><ul><li>Biểu thị dữ liệu trong một CSDL như một tập các quan hệ. </li></ul><ul><li>Một quan hệ là một bảng các giá trị gồm các dòng và các cột. </li></ul><ul><li>Mỗi dòng trong bảng là một tập các giá trị có liên quan đến nhau, biểu thị một sự kiện tương ứng với một thực thể hay một mối quan hệ tương ứng với thế giới thực. </li></ul>
  25. 25. VD: Quan hệ : SINH_VIEN (Ma SV, Hoten, Nam sinh, DiaChi, Diem) t3 8 Tây Hồ 1985 Hoàng Hà 003 t2 10 Ba Đình 1980 Minh Tuấn 002 t1 9 Hoàn Kiếm 1986 Ngọc Anh 001 Điem Diachi Namsinh Hoten Mã SV
  26. 26. II. Các khái niệm của mô hình quan hệ <ul><li>1. Thuộc tính : </li></ul><ul><li>Mỗi đối tượng quản lý đều có các đặc tính riêng biệt, gọi là các thuộc tính. Kí hiệu các thuộc tính là A, B, C, A1, A2,... </li></ul><ul><li>VD: Mã sinh viên, họ tên, quê quán, ngày sinh, ... </li></ul><ul><li>Các thuộc tính được đặc trưng bởi một tên gọi, kiểu giá trị, miền giá trị của chúng. </li></ul><ul><li>2. Lược đồ quan hệ : </li></ul><ul><li>Một lược đồ quan hệ được đặc trưng bởi tên lược đồ và một tập hữu hạn các thuộc tính U={A1, A2, ..., An}. Lược đồ R với tập thuộc tính là U= { A1, A2,... An} được kí hiệu là R(U) hay R ( A1, A2, ... An). </li></ul>
  27. 27. <ul><li>Miền giá trị : </li></ul><ul><li> - Là tập hợp các giá trị nguyên tử mà thuộc tính có thể nhận </li></ul><ul><li> - Để đặc tả một miền, người ta dùng: </li></ul><ul><li> tên miền, một kiểu dữ liệu và khuôn dạng dữ liệu. </li></ul><ul><li>VD: Miền Mã SV là tập hợp các dãy kí tự có độ dài từ 5 ki tự Miền Điểm là tập các giá trị số thuộc [0..10] </li></ul>
  28. 28. <ul><li>4. Quan hệ : </li></ul><ul><li>Một quan hệ trên một tập thuộc tính là một tập con của tích Desscartes cuả một hay nhiều miền. </li></ul><ul><li>Cho một quan hệ r xác định trên tập thuộc tính  ={ A1, A2, ..,An}. </li></ul><ul><li>Khi đó r  Dom(A1) x Dom(A2) x ...x Dom(An), trong đó Dom(Ai ) là miền của thuộc tính Ai </li></ul><ul><li>Như vậy, quan hệ r là một tập hợp các n_ bộ có dạng : </li></ul><ul><li>r = {( a1, a2,.., an) | ai  Dom(Ai), i= 1, 2,..,n } </li></ul>
  29. 29. <ul><li>Có thể quan niệm quan hệ là một bảng hai chiều, mỗi cột là một thuộc tính thường gọi là trường, mỗi dòng là một bộ n. VD: Quan hệ R= {(di1,di2,...,din ) / i=1..m} </li></ul>A n ... A 2 A 1 d mn ... d m2 d m1 ... ... ... ... d 2n ... d 22 d 21 d 1n ... d 12 d 11
  30. 30. <ul><li>Một số chú ý : - Các tập D 1 = Dom ( A 1 ),.., D n =Dom ( A n ) là tập các miền trị của R - n được gọi là bậc của quan hệ r - M được gọi là lực lượng của r - Quan hệ bậc 1 là quan hệ nhất nguyên, quan hệ bậc hai là quan hệ nhị nguyên, quan hệ bậc n là qua hệ n nguyên. </li></ul>
  31. 31. <ul><li>Các tính chất dặc trưng của một quan hệ. </li></ul><ul><li>Một quan hệ có một tên phân biệt với các quan hệ khác </li></ul><ul><li>Mỗi ô trong bảng quan hệ chứa một giá trị nguyên tố </li></ul><ul><li>Mỗi thuộc tính trong một quan hệ có một tên phân biệt </li></ul><ul><li>Các giá trị của một thuộc tính thuộc cùng một miền </li></ul><ul><li>Thứ tự của các thuộc tính, các bộ là không quan trọng </li></ul><ul><li>Các bộ trong quan hệ là phân biệt </li></ul>
  32. 32. VD: Quan hệ TKB( Ngày, tiết thứ, môn, phòng, GV} là một quan hệ 5 ngôi. <ul><li>t1 (24/3, 1, CSB2, 202, Ngoc Anh)= t1(R) </li></ul><ul><li>Chú ý : Các khái niệm tương đương </li></ul>t3 Hoàng Hà 200 CSDL 3 26/3 t2 Minh Tuấn 102 NN 2 25/3 t1 Ngọc Anh 202 CSB2 1 24/3 GV Phòng Môn Tiết thứ Ngày (Fox) (SQL-Access) (NN ĐSQH) Bản ghi Dòng Bộ Trường Cột Thuộc tính Tệp Bảng Quan hệ
  33. 33. 4. Khoá và siêu khoá <ul><li>a. Siêu khoá </li></ul><ul><li>Siêu khoá của một quan hệ R là một tập hợp gồm một hay nhiều thuộc tính của lược đồ R có tính chất xác định duy nhất một bộ trong mỗi thể hiện của R. </li></ul><ul><li>Nếu SK là siêu khoá của R=<  ,F> thì SK   và trong một quan hệ bất kỳ của lược đồ R không thể có hai bộ khác nhau nhưng có cùng một giá trị trên SK. </li></ul><ul><li>Mỗi quan hệ có ít nhất một siêu khoá, đó là  - tập tất cả các thuộc tính của quan hệ. </li></ul><ul><li>Mọi tập con của  chứa một siêu khoá cũng là siêu khoá. </li></ul>
  34. 34. b.Khoá Khoá của một lược đồ quan hệ R là một siêu khoá của lược đồ này sao cho mọi tập con thực sự của nó không là siêu khoá. Như vậy, một khoá là một siêu khoá tối thiểu hiểu theo nghĩa, đó là một siêu khoá mà chúng ta không thể bỏ bớt thuộc tính nào ra khỏi nó mà vẫn giữ được tính chất xác định duy nhất cho mỗi bộ. VD: Xét quan hệ SINH_VIEN - Các siêu khoá : {Mã SV, Họ tên} hay {Mã SV, ngày sinh, điểm,},... - Khoá : {Mã SV}
  35. 35. <ul><li>- M ột lược đồ quan hệ có nhiều hơn một khoá, khi đó mỗi khoá được gọi là một khoá dự tuyển. </li></ul><ul><li>Thông thường có một khoá dự tuyển được chọn làm khoá chính . Ta nên chọn khoá dự tuyển có một thuộc tính hoặc có ít thuộc tính nhất làm khoá chính. </li></ul><ul><li>Khoá chính là khóa được dùng để nhận diện một bộ trong quan hệ do đó các giá trị của các bộ ở các thuộc tính trong khoá chính không được null. </li></ul><ul><li>Thuộc tính khoá : là các thuộc tính có tham gia vào một khoá ( khoá dự tuyển hay khoá chính). </li></ul><ul><li>Ngược lại, thuộc tính không tham gia vào một khoá nào gọi là thuộc tính không khoá. </li></ul>
  36. 36. VD: Quan hệ KHOA - Quan hệ trên có 3 khoá dự tuyển là { Mã khoa }, { Tên khoa }, {Điện thoại }. Người ta thường chọn Mã khoa làm khoá chính. Như vậy, thuộc tính không khoá chỉ còn là : Địa chỉ và Chủ nhiệm khoa Nguyễn Anh A3 04.768343 CNTT SPCN Hoài Nam A4 04.768945 Văn SPV Nguyễn Anh A3 04.768459 Toán SPT Chủ nhiệm khoa Địa chỉ Điện thoại Tên khoa Mã khoa
  37. 37. c. Khoá ngoài : Một tập thuộc tính K là khoá ngoài của một quan hệ r nếu K không là khoá chính của quan hệ r nhưng lại là khoá chính của một quan hệ khác . VD: Có hai quan hệ: SINHVIEN (Mã SV, Tên SV,..., Mã lớp) LOP( Mã lớp, Tên lớp,...) Mã lớp là khoá ngoài của quan hệ SINHVIEN.
  38. 38. Bài 4. Đại số quan hệ I. Đại số quan hệ Đại số quan hệ là cơ sở của một ngôn ngữ bậc cao để thao tác trên các quan hệ. Đại số quan hệ gồm 8 phép toán cơ bản. Bằng các phép toán này, ta có thể trích dữ liệu từ một hay nhiều quan hệ để tạo ra các quan hệ mới.
  39. 39. II. Các phép toán lý thuyết tập hợp -Gọi r là quan hệ trên tập thuộc tính R={A1, ..,An}. Giả thiết rằng r là tập hữu hạn các bộ. - Khái niệm khả hợp : Hai lược đồ quan hệ R1 và R2 được goị là khả hợp nếu có cùng bậc n và DOM(Ai) = DOM(Bi) (1  i  n) - Cho hai quan hệ R1=(A1,A2,..An) và R2=(B1,B2,..,Bn) là hai quan hệ khả hợp, ta có định nghĩa:
  40. 40. 1.Phép hợp Hợp của hai quan hệ r và s khả hợp, kí hiệu là r  s là tập các bộ thuộc r hoặc s hoặc thuộc cả hai quan hệ. Biểu diễn hình thức: r  s = { t/ t  r hoặc t  s hoặc t  r và s } Ví dụ : r ( A B C) s ( A B C) r  s = ( A B C) ___________ __________ _________________ a1 b1 c1 a1 b1 c1 a1 b1 c1 a2 b1 c2 a2 b2 c2 a2 b1 c2 a2 b2 c1 a2 b2 c2 a2 b2 c1
  41. 41. 2. Phép giao Giao của hai quan hệ r và s khả hợp, kí hiệu là r  s là tập các bộ thuộc cả quan hệ r và s . Biểu diễn hình thức : r  s = { t/ t  r và t  s } Ví dụ : Với hai quan hệ ở ví dụ trên, giao của chúng là: r  s = ( A B C ) a1 b1 c1
  42. 42. 3. Phép trừ Hiệu của hai quan hệ r và s khả hợp, kí hiệu là r - s là tập các bộ thuộc r nhưng không thuộc s . Biểu diễn hình thức : r - s = { t/ t  r và t  s } Ví dụ : Cũng với ví dụ trên, hiệu của chúng là: r - s = ( A B C ) a2 b1 c2 a2 b2 c1 Chú ý : phép giao của hai quan hệ có thể biểu diễn qua phép trừ: r  s = r- ( r - s )
  43. 43. 4. Tích Đề -Các - Gọi r là quan hệ xác định trên tập thuộc tính { A1, A2,..,An} và s là quan hệ xác định trên tập thuộc tính { B1, B2,..,Bm} . Tích Đề - Các r x s của r và s là tập ( n + m ) - bộ với n thành phần đầu có dạng một bộ thuộc r và m thành phần sau có dạng của một bộ thuộc s. - Biểu diễn hình thức : r x s = { t/ t có dạng (a1, a2, .., an, b1, b2,..,bm) trong đó ( a1, ..,an )  r và (b1,.. ,bm)  s } - Ví dụ : r ( A B C) s ( D E F) r x s = ( A B C D E F) a1 b1 c1 d e f a1 b1 c1 d e f a2 b2 c2 d1 e1 f 1 a1 b1 c1 d1 e1 f1 a2 b2 c2 d e f a2 b2 c2 d1 e1 f1
  44. 44. 5. Phép chiếu <ul><li>Phép chiếu trên một quan hệ thực chất là loại bỏ đi một số thuộc tính và giữ lại những thuộc tính còn lại của quan hệ đó. Dạng tổng quát :  < ds_thuộc tính> (< tên quan hệ >) </li></ul><ul><li> là kí hiệu phép chiếu. </li></ul><ul><li>< ds_thuộc tính> : danh sách các thuộc tính được lấy ra </li></ul><ul><li>Nếu < ds_thuộc tính > chỉ có những thuộc tính không khoá thì phép chiếu sẽ tự bỏ đi những bộ lặp. </li></ul><ul><li>Phép chiếu không có tính giao hoán. </li></ul><ul><li>Nếu <ds1 >  < ds2> thì </li></ul><ul><li> <ds1>(  <ds2>(R)) =  <ds1>(R) </li></ul>
  45. 45. Ví dụ : Cho quan hệ SV ( Mã SV, Họ tên, Ngày sinh, điểm) như sau : Thì phép chiếu  Mã Sv, Điểm (SV) sẽ cho ta một quan hệ mới chỉ gồm hai thuộc tính là Mã SV và Điểm . DIEM ( Mã SV, Điểm ) : 10 004 7 003 9 002 8 001 Điểm Mã SV 10 21/6/85 Hồng Vân 004 7 25/3/87 Xuân Mai 003 9 13/4/85 Ngọc Bích 002 8 23/4/86 Trần Anh 001 Điểm Ngày sinh Họ tên Mã SV
  46. 46. 6. Phép chọn <ul><li>Phép chọn dùng để trích chọn một tập con trong một quan hệ, các bộ được trích chọn phải thoả mãn điều kiện chọn. ( Phép chọn trích ra các hàng trong quan hệ) </li></ul><ul><li>Dạng tổng quát :  < điều kiện > (< Tên quan hệ >) </li></ul><ul><li> là kí hiệu phép chọn. </li></ul><ul><li>Kết quả thu được từ phép chọn là một quan hệ có danh sách thuộc tính được chỉ ra trong Tên quan hệ </li></ul><ul><li>Điều kiện : là các biểu thức điều kiện cần thoả mãn.. Các biểu thức này được nối với nhau bằng các phép:  ( phủ định ),  (giao),  (hợp) </li></ul><ul><li>Phépchọn có tính giao hoán. </li></ul>
  47. 47. 7. Phép kết nối <ul><li>Phép kết nối : Dùng để kết hợp hai bộ có liên quan từ hai quan hệ thành một bộ. </li></ul><ul><li>Trước hết ta làm quen với khái niệm xếp cạnh nhau: </li></ul><ul><li>Cho bộ d =( d1, d2,..,dm) và bộ e= (e1, e2,.., em). Phép xếp cạnh nhau được định nghĩa qua : </li></ul><ul><li>d  e = ( d1, d2,.., dm,e1, e2,..,em). </li></ul>
  48. 48. Gọi  là một trong các phép so sánh . Phép kết nội được định nghĩa: Phép kết nối của quan hệ r đối với thuộc tính A với quan hệ s đối với thuộc tính B được định nghĩa qua. r  s = { (t  u ) | t  r và u  s và t[A]  u[B] } A  B
  49. 49. <ul><li>Kết quả của phép kết nối là một quan hệ Q có ( n+m) thuộc tính, mỗi bộ trong Q thoả mãn điều kiện kết nối. </li></ul><ul><li>Các bộ có giá trị rỗng tại thuộc tính kết nối thì không xuất hiện trong kết quả của phép kết. </li></ul><ul><li>Bản chất của phép kết nối là phép lấy tích Đề - Các của hai quan hệ và chọn ra các bộ thoả mãn điều kiện kết. </li></ul>
  50. 50. Ví dụ : r ( A B C ) s( C D E ) r  s = ( A B C C D E) a1 1 1 1 d1 e1 a1 1 1 1 d1 e1 a2 2 1 2 d2 e2 a2 2 1 1 d1 e1 a1 2 2 3 d3 e3 a2 2 1 2 d2 e2 a1 2 2 1 d1 e1 a1 2 2 2 d2 e2 B ≥ C
  51. 51. <ul><li>Nếu điều kiện kết nối chứa phép so sánh (=) bằng thì phép kết nối được gọi là phép kết nối bằng. </li></ul><ul><li>Trường hợp kết nối bằng tại thuộc tính cùng tên của hai quan hệ và một trong hai thuộc tính đó bị loại bỏ, thì phép kết nối được gọi là kết nối tự nhiên . Kí hiệu là &quot; * &quot;. </li></ul><ul><li>Biểu diễn của phép kết nối tự nhiên : </li></ul><ul><ul><li>r(ABC) * s(CDE) = { t[ABCDE]/ t[ABC]  r và t[CDE ]  s} </li></ul></ul><ul><ul><li>VD : với hai quan hệ r và s nêu trên thì : </li></ul></ul><ul><ul><li>r(ABC) * s(CDE) = ( A B C D E) </li></ul></ul><ul><ul><li>a1 1 1 d1 e1 </li></ul></ul><ul><ul><li>a2 2 1 d1 e1 </li></ul></ul><ul><ul><li>a1 2 2 d2 e2 </li></ul></ul>
  52. 52. 8. Phép chia Gọi r là quan hệ n- ngôi và s là quan hệ m ngôi ( n > m, s   ). Phép chia r  s là tập tất cả các ( n-m )- bộ t sao cho với mọi bộ u  s thì bộ t  u  r. Ví dụ : r ( A B C D ) s ( C D) r  s = ( A B) 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 c a d e
  53. 53. Cơ sở dữ liệu minh hoạ Cho một cơ sở dữ liệu Thực tập gồm 3 quan hệ sau đây: SV( SV#, HT, NS, QUE, HL) DT(DT#, TDT, CN, KP) SD(SV#, DT#, NTT, KM, KQ) -Quan hệ SV chứa thông tin về các sinh viên trong một lớp của một trường đại học. Trong đó: SV# : mã số sinh viên HT : Họ và tên sinh viên NS : Năm sinh của sinh viên QUE: quê quán HL : Học lực thể hiện qua điểm trung bình
  54. 54. - Quan hệ DT chứa thông tin về đề tài nhà trường quản lý . Trong đó : DT# : mã số đề tài TDT : tên đề tài CN : họ và tên chủ nhiệm đề tài KP : Kinh phí cấp cho đề tài ( triệu đồng) - Quan hệ SD chứa thông tin về tình hình thực tập của các sinh viên theo các đề tài. Trong đó : NTT : nơi thực tập KM : khoảng cách từ nơi thực tập đến trường KQ : kết quả thực tập theo đề tài đã chọn . * Giả thiết là mỗi sinh viên có thể tham gia nhiều đề tài, mỗi đề tài sinh viên đó thực tập tại một địa điểm.
  55. 55. SV DT
  56. 56. SD
  57. 57. Yêu cầu : <ul><li>- Hãy viết các biểu thức đại số quan hệ biểu diễn các yêu cầu sau : </li></ul><ul><li>Cho thông tin về những sinh viên sinh trước năm 1985 có quê ở Hà Nội. </li></ul><ul><li>Cho biết các địa điểm thực tập xa trường (KM >100) của đề tài số 5. </li></ul><ul><li>Cho thông tin về các đề tài có sinh viên thực tập. </li></ul><ul><li>Cho biết mã của các đề tài không có sinh viên nào tham gia. </li></ul><ul><li>Cho danh sách các tỉnh có sinh viên đến thực tập. </li></ul><ul><li>Cho thông tin về việc thực tập tại Hải Phòng của sinh viên. </li></ul><ul><li>Cho biết mã của những đề tài có kinh phí lớn hơn 1 triệu và nhỏ hơn 2 triệu </li></ul><ul><li>Cho biết mã của sinh viên dưới 20 tuổi, thực tập khá ( có điểm kết quả thực tập >=6.5) </li></ul>
  58. 58. III. Các phép toán quan hệ bổ sung <ul><li>Các hàm kết tập: Có nhiều truy vấn mà đại số quan hệ không thể thực hiện được như: đưa ra tổng lương, tìm lương lớn nhất ,v.v.. </li></ul><ul><li>Ta có các hàm sau: </li></ul><ul><li>Hàm tính trung bình cộng ( AVERAGE ) </li></ul><ul><ul><li> Hàm tính tổng ( SUM ) </li></ul></ul><ul><ul><li>Hàm tìm giá trị lớn nhất ( MAX) , nhỏ nhất ( MIN ) </li></ul></ul><ul><ul><li>Hàm đếm các bộ giá trị ( COUNT) </li></ul></ul>
  59. 59. <ul><li>Các phép gộp nhóm: Nhóm các bộ trong một quan hệ theo một giá trị của một số các thuộc tính và sau đó áp dụng các hàm kết tập trên từng nhóm một cách độc lập. </li></ul><ul><li>Phép gộp nhóm được định nghĩa như sau: </li></ul><ul><li>< các tt cơ sở để gộp nhóm>  < ds các hàm kết tập > (r) </li></ul><ul><li>Trong đó : -  là kí hiệu của phép gộp nhóm </li></ul><ul><li>- < các tt cơ sở để gộp nhóm >: là danh sách các thuộc tính của quan hệ. </li></ul><ul><li>- < ds hàm kết tập >: là danh sách các cặp ( <hàm>< thuộc tính> . </li></ul>
  60. 60. <ul><ul><li>Kết quả của phép gộp nhóm là một quan hệ. Ngoài các thuộc tính cơ sở để gộp nhóm, quan hệ kết quả còn có các thuộc tính tương ứng với các phần tử trong danh sách hàm kết tập. </li></ul></ul><ul><ul><li>Nếu ds các thuộc tính cơ sở để gộp nhóm là rỗng thì các hàm kết tập được áp dụng cho các giá trị thuộc tất cả các bộ trong quan hệ. Khi đó quan hệ kết quả chỉ có một bộ. </li></ul></ul>
  61. 61. Ví dụ : Giả sử có quan hệ NHAN_VIEN
  62. 62. Nếu thực hiện phép gộp nhóm MA_PHONG  COUNT MA_NV, AVERAGE LUONG (NHAN_VIEN) Thì quan hệ kết quả sẽ là : Nếu thực hiện phép gộp nhóm :  COUNT MA_NV, AVERAGE LUONG (NHAN_VIEN) Thì quan hệ kết quả sẽ là :
  63. 63. Bài tập: Xét các CSDL gồm các lược đồ quan hệ được cho bởi các thể hiện của chúng như sau: NHAN_VIEN PHONG
  64. 64. DU_AN CHAM_CONG
  65. 65. Yêu cầu : 1. Tìm tên dự án có mã là D20 2.Cho biết tên các thành phố có dự án thực hiện. 3. Cho biết tên phòng thực hiện dự án có mã là D20 4. Cho biết tên và lương của những nhân viên thực hiện dự án D8 và làm việc trên 20 giờ 5. Cho biết họ tên và lương của những nhân viên thuộc phòng &quot; Nghiên cứu & PT&quot; 6. Đếm số nhân viên trong công ty và tính mức lương trung bình của các nhân viên. 7. Đếm số dự án mà công ty đã thực hiện
  66. 66. Bài 5. Ngôn ngữ CSDL – SQL <ul><li>Để người sử dụng có thể giao tiếp được với CSDL phải có một hệ thống ngôn ngữ giao tiếp bao gồm: </li></ul><ul><ul><li>Ngôn ngữ định nghĩa dữ liệu . </li></ul></ul><ul><ul><li>Ng ôn ngữ thao tác dữ liệu </li></ul></ul><ul><ul><li>Ngôn ngữ truy vấn dữ liệu </li></ul></ul><ul><ul><li>Ngôn ngữ quản lý dữ liệu </li></ul></ul><ul><ul><li>M ỗi hệ quản trị CSDL đều có cách cài đặt các ngôn ngữ khác nhau nhưng đều dựa trên chuẩn của ngôn ngữ truy vấn có cấu trúc SQL ( Structured- Query Language) </li></ul></ul>
  67. 67. I. Ngôn ngữ định nghĩa dữ liệu SQL <ul><li>Là ngôn ngữ mô tả dữ liệu , cho phép người dùng định nghĩa cấu trúc CSDL, sửa đổi cấu trúc, liên kết các thành phần trong CSDL </li></ul><ul><li>Ngoài ra , nó còn cung cấp các khả năng khác như : định nghĩa khung nhìn, kiểm soát tính toàn vẹn dữ liệu, cấp phát quyền truy cập, … </li></ul>
  68. 68. <ul><li>Quy ước : </li></ul><ul><ul><li>T ên tên bảng, thuộc tính đối tượng không chứa dấu cách, không trùng tên với nhau. </li></ul></ul><ul><ul><li>Các phạm trù cú pháp bắt buộc phải điền được đặt trong cặp dấu < > </li></ul></ul><ul><ul><li>Các thành phần tuỳ chọn được viết trong cặp dấu [ ] </li></ul></ul><ul><ul><li>Mỗi câu lệnh SQL có thể được viết trên nhiều dòng và được kết thúc bằng dấu ; </li></ul></ul>
  69. 69. Các kiểu dữ liệu đơn giản trong SQL <ul><li>Kiểu dữ liệu số: integer , float, decimal(n,p) - số thực với độ dài tối đa là n chữ số với p chữ số thập phân , number(n)- kiểu số có độ dài tối đa là n </li></ul><ul><li>Kiểu dữ liệu chuỗi : </li></ul><ul><li>- varchar (n) - chuỗi có độ dài biến đổi từ 0 đến n </li></ul><ul><li>- Char (n) : xâu kí tự có độ dài cố định n ( n<=255) </li></ul><ul><li>Kiểu dữ liệu ngày tháng: date, time </li></ul><ul><li>Kiểu luận lí : boolean </li></ul>
  70. 70. II. Các câu lệnh tạo cấu trúc bảng <ul><li>1. Lệnh tạo bảng tổng quát </li></ul><ul><li>CREATE TABLE <Tên_bảng> </li></ul><ul><li>( <tên_ cột_1> <loại dữ_liệu_1> < kích thước 1>, </li></ul><ul><li>………………… . </li></ul><ul><li> <tên_ cột_n> <loại dữ_liệu_n> < kích thước n>, </li></ul><ul><li>); </li></ul>
  71. 71. Ví dụ : Tạo bảng SINH_VIEN có các thuộc tính: - mã sinh viên ( kiểu số có độ dài <5) - họ tên ( kiểu xâu kí tự có độ dài <25) - ngày sinh (kiểu date) - giới tính ( kiểu xâu có độ dài <3) - địa chỉ ( kiểu xâu có độ dài < 30 ) - điểm TB ( kiểu số thực có độ dài <4, trong đó có 2 chữ số sau phần thập phân)
  72. 72. CREATE TABLE SINH_VIEN ( ma_sv NUMBER(5) , ho_ten VARCHAR(25), ng_sinh DATE, gioi_tinh VARCHAR (3), đia_chi VARCHAR (30), diem_tb DECIMAL (4,2), );
  73. 73. 2. Lệnh tạo bảng với một số điều kiện ràng buộc <ul><li>CREATE TABLE <Tên_bảng> </li></ul><ul><li>( <tên_ cột_1> <loại dữ_liệu_1> < kích thước 1>, </li></ul><ul><li>………………… . </li></ul><ul><li> <tên_ cột_n> <loại dữ_liệu_n> < kích thước n>, </li></ul><ul><li>[ CONSTRAINT < tên ràng buộc toàn vẹn>]| NULL| NOT NULL | </li></ul><ul><li>Primary Key ( Khoá chính ) </li></ul><ul><li>[ Unique ( khoá )] </li></ul><ul><li>[ Foreign Key (Khoá _ ngoài) References Tên_bảng] </li></ul><ul><li>[ Check <Điều_ kiện_ràng_buộc>] </li></ul><ul><li>); </li></ul>
  74. 74. <ul><li> Trong đó : </li></ul><ul><li>NOT NULL : chỉ rằng cột không nhận giá trị rỗng. Ngầm định là Null. Thuộc tính khoá ngầm định là Not Null. </li></ul><ul><li>COSNTRAINT < tên các ràng buộc toàn vẹn> : khai báo các ràng buộc toàn vẹn của CSDL. </li></ul><ul><li>Primary Key ( Khoá chính ): Khai báo khoá chính của mảng </li></ul><ul><li>Unique ( Khoá ) : Khai báo các khoá khác nếu có </li></ul><ul><li>Foreign Key Khoá_ ngoài References Tên_ bảng : Khai báo các khoá ngoài của bảng </li></ul><ul><li>Check Điều_kiện_ràng_buộc : Khai báo các ràng buộc dữ liệu . </li></ul>
  75. 75. Ví dụ : Tạo bảng SINH_VIEN có: - khoá chính là thuộc tính mã sinh viên ( kiểu số) - họ tên ( kiểu xâu kí tự có độ dài <=25) không được để trống, - ngày sinh (kiểu date) - giới tính ( kiểu xâu có độ dài <=3, mặc định là 'Nam') - mã lớp là một khoá ngoài, mã lớp thuộc bảng LOP. - điểm TB ( kiểu số thực có độ dài <=4)
  76. 76. Câu lệnh : <ul><li>CREATE TABLE SINH_VIEN </li></ul><ul><li>( ma_sv NUMBER(5) PRIMARY KEY, </li></ul><ul><li>ho_ten VARCHAR(25) NOT NULL, </li></ul><ul><li>ng_sinh DATE, </li></ul><ul><li>gioi_tinh VARCHAR (3) DEFAULT ' Nam', </li></ul><ul><li>ma_lop CHAR (3) , </li></ul><ul><li>diem_tb DECIMAL (4,2), </li></ul><ul><li>FOREIGN KEY ma_lop REFERENCES LOP </li></ul><ul><li>); </li></ul>
  77. 77. Hoặc : <ul><li>CREATE TABLE SINH_VIEN </li></ul><ul><li>( ma_sv NUMBER(5) , </li></ul><ul><li>ho_ten VARCHAR(25) NOT NULL, </li></ul><ul><li>ng_sinh DATE, </li></ul><ul><li>gioi_tinh VARCHAR (3) DEFAULT ' Nam', </li></ul><ul><li>ma_lop CHAR (3) , </li></ul><ul><li>diem_tb DECIMAL (4,2), </li></ul><ul><li>PRIMARY KEY ( ma_sv ), </li></ul><ul><li>FOREIGN KEY ma_lop REFERENCES LOP </li></ul><ul><li>); </li></ul>
  78. 78. 3. Bổ sung -xoá một cột trong bảng <ul><li>a. Bổ sung một cột : </li></ul><ul><li>ALTER TABLE < tên bảng > </li></ul><ul><li>ADD < tên cột > < kiểu dữ liệu > < kích thước >; </li></ul><ul><li>VD : Thêm cột số điện thoại vào bảng SINH_VIEN ở trên. </li></ul><ul><li>ALTER TABLE SINH_VIEN </li></ul><ul><li> ADD dien_thoai NUMBER(10); </li></ul>
  79. 79. <ul><li>a.Xoá một cột : </li></ul><ul><li>ALTER TABLE < tên bảng > DROP < tên cột > ; </li></ul><ul><li>VD : Xoá cột điểm TB trong bảng SINH_VIEN ở trên. </li></ul><ul><li>ALTER TABLE SINH_VIEN DROP diem_tb; </li></ul>
  80. 80. 4. Xoá một bảng khỏi CSDL <ul><li>DROP TABLE < tên bảng >; </li></ul><ul><li>VD : Xoá bảng SINH_VIEN trong CSDL </li></ul><ul><li> DROP TABLE SINH_VIEN; </li></ul><ul><li>Khi đó toàn bộ thông tin về bảng SINH_VIEN( gồm cả lược đồ và các bản ghi ) đều bị xoá, khác với lệnh </li></ul><ul><li>DELETE FROM SINH_VIEN ; </li></ul><ul><li>chỉ xoá các bản ghi trong bảng, vẫn giữ lại cấu trúc (lược đồ ) của bảng </li></ul>
  81. 81. III. Các câu lệnh truy vấn <ul><li>1. Truy vấn theo câu hỏi đơn giản </li></ul><ul><li>Cấu trúc cơ sở của một biểu thức hỏi ( còn gọi là biểu thức truy vấn) SQL gồm : </li></ul><ul><ul><li>SELECT [ DISTINCT | ALL] { * | <cột> AS [<tên mới>],..} </li></ul></ul><ul><ul><li>FROM < tên bảng> [ < bí danh >],... </li></ul></ul><ul><ul><li>[WHERE < điều kiện chọn>] </li></ul></ul><ul><ul><li>[GROUP BY < ds tên cột>] [ HAVING <điều kiện>] </li></ul></ul><ul><ul><li>[ORDER BY < ds cột> ]; </li></ul></ul>
  82. 82. Trong đó : - Từ khoá DISTINCT : để loại bỏ sự trùng lặp ( các bộ trùng lặp chỉ giữ lại một bộ) - < biểu thức cột> : là tên của một cột hoặc của biểu thức - < tên bảng > : là tên của một bảng trong CSDL hay một khung nhìn mà ta có thể truy cập vào - GROUP BY : dùng để gộp nhóm các bộ cùng giá trị tương ứng ở các cột xuất hiện trong ds tên cột. - HAVING: dùng để lọc các nhóm thoả điều kiện - ORDER BY : quy định thứ tự trong các cột trả ra gồm : ASC ( tăng dần) và DESC ( giảm dần). Mặc định là ASC
  83. 83. Ví dụ 1: <ul><li>Tìm tên các dự án và mã các phòng quản lý dự án tương ứng </li></ul><ul><li>SELECT ten_da, ma_p </li></ul><ul><li>FROM DU_AN; </li></ul><ul><li>Kết quả tra ra : </li></ul>P1 Giáo trình điện tử P3 Mạng B P2 Phần mềm A Ma_p Ten_da
  84. 84. Chú ý : a . Muốn hiển thị tất cả các cột trong bảng , ta có thể dùng dấu * để thay thế <ul><li>Ví dụ 2. Cho biết thông tin về nhân viên trong công ty . </li></ul><ul><li>C1 : SELECT ma_nv, ho_ten, ng_sinh, gioi_tinh, ma_p, luong </li></ul><ul><li>FROM NHAN_VIEN; </li></ul><ul><li>C2: SELECT * </li></ul><ul><li>FROM NHAN_VIEN ; </li></ul>
  85. 85. b. Trong bảng kết quả, nếu muốn ta có thể đặt tên mới cho cột sau từ khoá As <ul><li>Ví dụ3 : Cho biết tên và lương mới của mỗi nhân viên biết họ được tăng 10% . </li></ul><ul><li>Câu lệnh : </li></ul><ul><li>C1: </li></ul><ul><li>SELECT ho_ten, luong + luong*0.1 </li></ul><ul><li>FROM NHAN_VIEN; </li></ul><ul><li>C2: </li></ul><ul><li>SELECT ho_ten, luong+luong*0.1 AS luong_moi </li></ul><ul><li>FROM NHAN_VIEN; </li></ul>
  86. 86. <ul><li>c. SQL dùng các phép so sánh : </li></ul><ul><li><= ( nhỏ hơn hoặc bằng) , </li></ul><ul><li>>= ( lớn hơn hoặc bằng) , </li></ul><ul><li>< > ( khác) </li></ul><ul><li>- Có thể kết hợp nhiều biểu thức logic bằng các phép AND, OR, NOT. </li></ul>
  87. 87. Ví dụ 4: Tìm các nhân viên thuộc phòng có mã phòng là P2 và có lương >=2tr. <ul><li>SELECT ma_nv, ho_ten, ma_p, luong </li></ul><ul><li>FROM NHAN_VIEN </li></ul><ul><li>WHERE ma_p= 'P2' AND luong>=2000000; </li></ul>
  88. 88. Ví dụ 5: Lập danh sách ( gồm mã sinh viên,họ tên, ngày sinh, giới tính) của các sinh viên nữ có học lực từ khá trở lên và các sinh viên nam học lực giỏi. <ul><li>SELECT SV#, HT, NS, GT </li></ul><ul><li>FROM SV </li></ul><ul><li>WHERE (GT= 'Nữ' AND HL>=6.5) </li></ul><ul><li>OR ( GT= 'Nam' AND HL >=8.0 ); </li></ul>
  89. 89. d. Tìm kiếm có xử lý xâu kí tự <ul><li>SQL dùng toán tử LIKE để so sánh xâu. </li></ul><ul><li>SQL sử dụng kí tự ' %' để thay thế cho một xâu con, dấu phân cách '_' để thay thế cho một kí tự. </li></ul><ul><ul><li>VD: </li></ul></ul><ul><li>- A%B : xâu kí tự bất kì bắt dầu bằng chữ A và kết thúc bằng chữ B </li></ul><ul><li>- A_B : xâu gồm 3 kí tự, có kí tự thứ hai bất kì </li></ul>
  90. 90. Ví dụ 6: Cho biết mã và tên các dự án mà địa điểm có chứa từ UBND: <ul><li>SELECT ma_da, ten_da </li></ul><ul><li>FROM DU_AN </li></ul><ul><li>WHERE dia_diem_da LIKE '%UBND%'; </li></ul>
  91. 91. e. SQL cho phép sử dụng các giá trị NULL để chỉ sự thiếu vắng thông tin về giá trị của một bộ tại một thuộc tính. Với từ khoá IS NULL , SQL cho phép kiểm tra xem một giá trị có là NULL hay không ? <ul><li>Ví dụ 7: Cho biết tên và mã số dự án mà cột địa điểm có giá trị là NULL. </li></ul><ul><li>SELECT ma_da, ten_da </li></ul><ul><li>FROM DU_AN </li></ul><ul><li>WHERE dia_diem_da IS NULL; </li></ul>
  92. 92. f. Truy vấn có sắp xếp thứ tự <ul><li>Kết quả của câu truy vấn SQL có thể được sắp theo thứ tự tăng dần ( ASC ) hoặc giảm dần ( DESC ) bởi khoá ORDER BY. Mặc định là tăng dần. </li></ul><ul><li>Ví dụ 8 : </li></ul><ul><li>Liệt kê các nhân viên nữ theo thứ tự tăng dần của lương: </li></ul><ul><li>SELECT * </li></ul><ul><li>FROM NHAN_VIEN </li></ul><ul><li>WHERE GT = ' Nữ' </li></ul><ul><li>ORDER BY luong; </li></ul>
  93. 93. <ul><li>Việc sắp thứ tự có thể được thực hiện trên nhiều thuộc tính </li></ul><ul><li>Ví dụ 9 : Hiển thị các thông tin chấm công của các dự án có mã thuộc tập D1, D2, D8 theo thứ tự tăng dần của số giờ và giảm dần của mã dự án: </li></ul><ul><li>SELECT * </li></ul><ul><li>FROM CHAM_CONG </li></ul><ul><li>WHERE ma_da IN ('D1', 'D2', 'D8') </li></ul><ul><li>ORDER BY so_gio ASC, ma_da DESC; </li></ul>
  94. 94. g. Tìm kiếm nhờ sử dụng IN và BETWEEN <ul><li>Ví dụ 10: </li></ul><ul><li>Tìm những nhân viên có lương từ 2000000 đến 3000000 , sắp xếp tên theo thứ tự tăng dần. </li></ul><ul><li>SELECT * </li></ul><ul><li>FROM NHAN_VIEN </li></ul><ul><li>WHERE luong BETWEEN 2000000 AND 3000000 </li></ul><ul><li>ORDER BY ho_ten ASC; </li></ul>
  95. 95. 2. Các hàm thư viện <ul><li>SQL có 5 hàm kết tập được cài sẵn : </li></ul><ul><li>- COUNT :đếm số giá trị </li></ul><ul><li>- SUM : tính tổng các giá trị trong một cột </li></ul><ul><li>- MAX : tính giá trị lớn nhất trong một cột </li></ul><ul><li>- MIN : tính giá trị nhỏ nhất trong một cột </li></ul><ul><li>- AVG : tính giá trị trung bình của một cột </li></ul><ul><li>Chú ý : Các hàm sum và avg chỉ áp dụng cho các cột có kiểu số </li></ul>
  96. 96. Ví dụ 1: Tìm lương cao nhất, lương thấp nhất, và trung bình cộng lương toàn cơ quan <ul><li>SELECT MAX (luong) AS max, MIN (luong) AS min, AVG (luong) AS tb </li></ul><ul><li>FROM NHAN_VIEN; </li></ul><ul><li>Kết quả câu truy vấn này trả ra như sau : </li></ul>2350000 1200000 3000000 tb min max
  97. 97. Ví dụ 2: Cho biết số nhân viên thực hiện dự án có mã là D8 <ul><li>SELECT COUNT (*) </li></ul><ul><li>FROM CHAM_CONG </li></ul><ul><li>WHERE ma_da = 'D8'; </li></ul><ul><li>Chú ý : </li></ul><ul><li>- Hàm Count khi có đối số (*) có nghĩa là đếm số bản ghi thoả mãn yêu cầu mà không cần quan tâm đến bất kì cột nào . </li></ul>
  98. 98. <ul><li>- Dùng từ khoá DISTINCT ngay trước tên cột được áp dụng hàm, khi cần loại bỏ các bộ trùng nhau. </li></ul><ul><li>Ví dụ 3: Đếm số tỉnh có sinh viên theo học </li></ul><ul><li>SELECT COUNT ( DISTINCT Que) </li></ul><ul><li>FROM SINHVIEN; </li></ul>
  99. 99. 3.Tìm kiếm nhờ mệnh đề GROUP BY <ul><li>Ví dụ 1: In ra danh sách sinh viên theo từng quê của sinh viên? </li></ul><ul><li>SELECT SV#, HT, NS </li></ul><ul><li>FROM SV </li></ul><ul><li>GROUP BY Que; </li></ul>
  100. 100. 4. Tìm kiếm có sử dụng mệnh đề HAVING Mệnh đề HAVING thường sử dụng cùng mệnh đề GROUP BY . Sau HAVING là biểu thức điều kiện. Biểu thức này không tác động vào toàn bảng mà chỉ tác động vào từng nhóm các bản ghi đã chỉ ra tại mệnh đề GROUP BY VÍ DỤ : Tìm mã số những sinh viên thực hiện ít nhất 2 đề tài: SELECT SV# FROM SD GROUP BY SV# HAVING COUNT ( DT# ) >=2;
  101. 101. 5. Tìm kiếm với câu hỏi phức tạp <ul><li>Tìm kiếm với nhiều bảng qua việc sử dụng ánh xạ lồng nhau hoặc qua phép kết nối. </li></ul><ul><li>Phép kết nối : </li></ul><ul><li>ĐK: Các miền tham gia kết nối phải có miền trị là sánh được với nhau. Tên của các cột khác nhau có thể được viết tường minh qua tên bảng theo cú pháp : </li></ul><ul><li> Tên_ bảng. Tên_ cột </li></ul><ul><li>Ví dụ : Với mỗi đề tài có sinh viên tham gia thực tập. Hãy cho biết tên đề tài, tên chủ nhiệm đề tài và kinh phí thực hiện đề tài đó. </li></ul>
  102. 102. Câu lệnh : SELECT TDT, CN, KP FROM DT, SD WHERE SD.DT# = DT.DT#; Chú ý : Trong câu truy vấn có hơn một bảng, nếu tên cột là không duy nhất thì bắt buộc phải viết tên cột dạng tường minh.
  103. 103. <ul><li>Ánh xạ lồng </li></ul>Ví dụ 1: Tìm tên những sinh viên thực tập tại Hà Nội . SELECT HT FROM SV WHERE SV# IN ( SELECT SV# FROM SD WHERE NTT= ‘Hà Nội ‘);
  104. 104. Ví dụ 2: Tìm những sinh viên thực hiện ít nhất một đề tài nào đó: SELECT * FROM SV WHERE EXISTS ( SELECT * FROM SD WHERE SV.SV# = SD.SV#); SQL còn có thể tìm kiếm trên nhiều bảng nhờ mênh đề EXISTS ( tồn tại )
  105. 105. <ul><li>Tìm kiếm có sử dụng lường từ ANY và ALL </li></ul>Ví dụ 3 : Tìm tên những đề tài mà sinh viên có mã số 5 đã thực hiện: SELECT TDT FROM DT WHERE DT# = ANY ( SELECT DT# FROM SD WHERE SV# = 5);
  106. 106. Ví dụ 4 : Tìm tên sinh viên có điểm học lực cao hơn tất cả các sinh viên SELECT HT FROM SV WHERE HL >= ALL ( SELECT HL FROM SV ); Mệnh đề trên tương đương với : SELECT HT FROM SV WHERE HL = ( SELECT MAX (HL) FROM SV );
  107. 107. IV. CÁC MỆNH ĐỀ CẬP NHẬT DỮ LIỆU 1. Thêm một bộ : Dạng tổng quát : INSERT INTO Tên _ bảng ( ds_tên _cột) VALUES (các_ giá_trị ) [ câu hỏi con] Có thể bổ sung vào một tập các bản ghi là kết quả xử lý của một câu hỏi nào đó. VD: Chèn vào bảng SVG các sinh viên giỏi trong bảng SV. INSERT INTO SVG SELECT * FROM SV WHERE HL >= 8.0;
  108. 108. 2. Xoá bản ghi Có thể xoá một hay nhiều bản ghi thoả mãn một điều kiện nào đó. Dạng tổng quát: DELETE [tên_bảng] [ FROM { Tên_bảng / Tên_ view}] [ WHERE Biểu_ thức _điều _kiện] Ví dụ : Xoá những sinh viên có điểm HL kém (HL<=3.5): DELETE FROM SV WHERE HL<=3.5;
  109. 109. 3. Sửa đổi dữ liệu Sửa đổi các giá trị của các bản ghi theo một điều kiện nào đó: Dạng tổng quát : UPDATE [ tên_bảng] SET [ tên_cột = biểu_thức,...] FROM tên _ bảng WHERE Biểu _ thức _điều _kiện Ví dụ : Sửa điểm học lực của bạn Phan Ngọc Hà thành 8.5 UPDATE SV SET HL = 8.5 WHERE HT=‘ Phan Ngọc Hà’;
  110. 110. 4. Tạo chỉ mục. Việc tạo chỉ mục là tạo ra một bảng lưu trữ vị trí các bản ghi dựa trên giá trị tăng dần của một ( hay một số) cột nào đó. Việc này có tác dụng làm tăng tốc độ tìm kiếm thông tin trong CSDL. Dạng tổng quát : CREATE INDEX tên_bảng_chỉ_mục ON Tên_bảng ( tên _cột [ ASC | DESC ]); Bỏ chỉ mục thì sử dụng mệnh đề : DROP INDEX tên_chỉ_mục;
  111. 111. Ví dụ : Tạo chỉ mục CMHT trên cột Ho_ten của bảng sinh viên: CREATE INDEX CMHT ON SV ( HT ASC ); Ví dụ: Xoá chỉ mục CMHT ra khỏi bảng SV DROP INDEX CMHT;
  112. 112. 5. Tạo View của người sử dụng Tạo ra một khung nhìn của người sử dụng : Dạng tổng quát : CREATE VIEW Tên_View (Danh_ sách_ tên _cột) AS mệnh_đề_Select ; Ví dụ : Tạo View DSSVG gồm những sinh viên giỏi bao gồm thông tin về họ tên, ngày sinh, giới tính của các sinh viên từ bảng SV. CREATE VIEW DSSVG ( Hoten, NS, GT) AS SELECT HT , NS, GT FROM SV WHERE HL >= 8.0;
  113. 113. 6. SQL nhúng Có thể truy cập vào CSDL từ một ngôn ngữ lập trình bậc cao nếu có SQL &quot;nhúng&quot; trong ngôn ngữ này. Một ngôn ngữ trong đó các câu hỏi được SQL được nhúng vào gọi là ngôn ngữ chủ, còn các cấu trúc của SQL được phép trong ngôn ngữ này làm thành SQL nhúng - Sơ đồ xử lý các chương trình có nhúng câu lệnh SQL:
  114. 114. Ngôn ngữ chủ + SQL nhúng Tiền xử lý Ngôn ngữ chủ Các lời gọi hàm Biên dịch ngôn ngữ chủ Thư viện SQL Chương trình ngôn ngữ chủ +
  115. 115. Bài 6. RÀNG BUỘC TOÀN VẸN <ul><li>Tổng quan </li></ul><ul><li>Ràng buộc toàn vẹn sử dụng các luật để định nghĩa các điều kiện đảm bảo cho CSDL ở trạng thái an toàn. </li></ul><ul><li>Ràng buộc toàn vẹn được dùng để ngăn ngừa việc đưa dữ liệu không hợp lệ vào CSDL. </li></ul><ul><li>Định nghĩa : Ràng buộc toàn vẹn là các điều kiện bất biến không được vi phạm trong một CSDL. </li></ul>
  116. 116. <ul><li>RBTV còn được gọi là các quy tắc quản lý được áp đặt lên các đối tượng của thế giới thực . </li></ul><ul><li>VD : </li></ul><ul><li>- Mỗi sinh viên có một mã sinh viên duy nhất để phân biệt với các sinh viên khác </li></ul><ul><li>- Điểm HL của mỗi sv không được nhỏ hơn0 và lớn hơn 10. </li></ul><ul><li>- Mỗi SV phải thuộc một lớp nào đó. </li></ul>
  117. 117. <ul><li>Các hệ quản trị CSDL thường có các cơ chế tự động kiểm tra RBTV này. </li></ul><ul><li>Việc kiểm tra RBTV có thể được tiến hành vào một trong các thời điểm sau : </li></ul><ul><li>- Kiểm tra ngay khi thực hiện một thao tác cập nhật ( thêm, sửa , xoá ,…) </li></ul><ul><li>- Kiểm tra định kỳ hay đột xuất </li></ul>
  118. 118. 2. Các yếu tố của RBTV <ul><li>Khi xác định một RBTV cần chỉ rõ: </li></ul><ul><li>Điều kiện ( tức là nội dung) của RBTV, từ đó, xác định cách biểu diễn. </li></ul><ul><li>Bối cảnh xảy ra RBTV: trên một hay nhiều quan hệ và cụ thể là trên những quan hệ nào. </li></ul><ul><li>Mức độ ảnh hưởng của RBTV. </li></ul><ul><li>Hành động cần phải có khi phát hiện ra có RBTV bị vi phạm. </li></ul>
  119. 119. 3. Điều kiện của RBTV <ul><li>Điều kiện của RBTV là sự mô tả và biểu diễn hình thức và nội dung của nó. </li></ul><ul><li>Được biểu diễn bằng ngôn ngữ tự nhiên, thuật giải, ngôn ngữ quan hệ hoặc bằng các phụ thuộc hàm ,v.v.. </li></ul><ul><li>VD: </li></ul>
  120. 120. <ul><li>R1: Mỗi sinh viên có một mã sinh viên duy nhất không trùng với các sinh viên khác: </li></ul><ul><li> sv1, sv2  SV, sv1 ≠ sv2 </li></ul><ul><li> sv1. SV# ≠ sv2. SV# </li></ul><ul><li>R2: M ọi sv được làm đề tài đều phải đạt loại giỏi: </li></ul><ul><li> sd  SD,  sv  SV : </li></ul><ul><li>( sv. HL >=8.0)  (sd. SV# = sv. SV# ) </li></ul>
  121. 121. 4. Bối cảnh của RBTV <ul><li>Bối cảnh của một RBTV là tập các quan hệ mà khi thao tác trên các quan hệ đó có khả năng làm cho ràng buộc toàn vẹn bị vi phạm. </li></ul><ul><li>Có thể chia RBTV thành hai loại chính theo bối cảnh RBTV : </li></ul>
  122. 122. <ul><li>RBTV có bối cảnh trên 1 quan hệ </li></ul><ul><li>RBTV có bối cảnh trên nhiều quan hệ </li></ul>
  123. 123. 4.1. RBTV có bối cảnh 1 quan hệ <ul><li>RBTV miền giá trị. </li></ul><ul><li>RBTV liên bộ </li></ul><ul><li>RBTV liên thuộc tính </li></ul>
  124. 124. <ul><li>RBTV miền giá trị qui định tập giá trị mà một thuộc tính có thể nhận. </li></ul><ul><li>VD: </li></ul><ul><li>DOM(PHAI) = {‘Nam’, ‘Nữ’} </li></ul>a. RBTV miền giá trị
  125. 125. <ul><li>Ví dụ 3: Xét lược đồ quan hệ </li></ul><ul><ul><li>NHANVIEN ( MANV , HT, NS, GT, DC, LUONG) </li></ul></ul><ul><li>Xét RBTV R2: </li></ul><ul><ul><li>Nội dung : </li></ul></ul><ul><ul><ul><li>GT của nhân viên chỉ có thể là ‘Nam’ hoặc ‘Nữ’ </li></ul></ul></ul><ul><ul><ul><li> n  NHANVIEN: n.GT IN {‘Nam’,’Nữ’} </li></ul></ul></ul><ul><ul><li>Bối cảnh : quan hệ NHANVIEN </li></ul></ul>
  126. 126. Bảng tầm ảnh hưởng (TAH) gồm 4 cột: <ul><li>Cột 1 chứa tên các quan hệ liên quan tới RBTV. </li></ul><ul><li>3 cột tiếp theo l à t ên c ác thao tác : Thêm / Sửa / Xoá </li></ul><ul><li>Nếu RBTV cần được kiểm tra nguy cơ dẫn tới vi phạm dấu g ạ ch chéo (x) hoặc dấu cộng (+) ; </li></ul><ul><li>Có thể chỉ rõ các thuộc tính nào nếu được cập nhật mới dẫn đến vi phạm bằng cách liệt kê chúng dưới dấu (x) hoặc dấu (+) </li></ul><ul><li>Nếu không có nguy cơ bị vi phạm thì đánh dấu trừ (-) </li></ul><ul><li>Nếu không bị vi phạm vì không được phép sửa đổi thì kí hiệu là tr ừ với dấu * : (- (*) ) </li></ul>
  127. 127. <ul><ul><li>Bảng TAH của R2 : </li></ul></ul>+(GT) - + NHANVIEN Sửa Xóa Thêm R2
  128. 128. b. RBTV liên bộ <ul><li>RBTV liên bộ là điều kiện ràng buộc giữa các bộ trên cùng một quan hệ </li></ul><ul><li>Ví dụ 5: Xét lược đồ quan hệ: </li></ul><ul><ul><li>PHONGBAN( MAP , TENP, TP,NGNC ) </li></ul></ul><ul><li>Xét RBTV R4: </li></ul><ul><ul><li>Nội dung : </li></ul></ul><ul><ul><ul><li>Hai phòng khác nhau sẽ có mã phòng khác nhau </li></ul></ul></ul><ul><ul><ul><li> p1, p2  PHONGBAN: p1  p2 </li></ul></ul></ul><ul><ul><ul><li> p1.MAP  p2.MAP </li></ul></ul></ul><ul><ul><li>Bối cảnh : quan hệ PHONGBAN </li></ul></ul>
  129. 129. <ul><ul><li>Bảng tầm ảnh hưởng : </li></ul></ul>-(*) - + PHONGBAN Sửa Xóa Thêm R4
  130. 130. c. RBTV liên thuộc tính <ul><li>RBTV liên thuộc tính là ràng buộc giữa các thuộc tính trong cùng một quan hệ </li></ul><ul><li>Ví dụ 7: Xét lược đồ quan hệ </li></ul><ul><ul><li>DEAN ( MADA , TDA, DD, PHONG, NGBD_DK, NGKT_DK) </li></ul></ul><ul><ul><li>Xét RBTV R6: </li></ul></ul><ul><ul><li>Nội dung : </li></ul></ul><ul><ul><ul><li>Với mọi đề án, ngày bắt đầu dự kiến (NGBD_DK) phải trước ngày kết thúc dự kiến (NGKT_DK) </li></ul></ul></ul><ul><ul><ul><li> d  DEAN, d[NGBD_DK] <= d[NGKT_DK] </li></ul></ul></ul>
  131. 131. <ul><ul><li>Bối cảnh : quan hệ DEAN </li></ul></ul><ul><ul><li>Bảng tầm ảnh hưởng : </li></ul></ul>+(NGBD_DK, NGKT_DK) - + DEAN Sửa Xóa Thêm R6
  132. 132. 4.2. RBTV có bối cảnh trên nhiều quan hệ <ul><li>RBTV tham chiếu </li></ul><ul><li>RBTV liên bộ, liên quan hệ </li></ul><ul><li>RBTV liên thuộc tính, liên quan hệ </li></ul><ul><li>RBTV do thuộc tính tổng hợp </li></ul><ul><li>RBTV do chu trình trong lược đồ biểu diễn quan hệ </li></ul>
  133. 133. a. RBTV tham chiếu <ul><li>RBTV tham chiếu là ràng buộc quy định g iá trị của thuộc tính trong một bộ của quan hệ R phải thuộc tập giá trị của thuộc tính khóa trong quan hệ S khác. </li></ul><ul><li>RBTV tham chiếu còn gọi là ràng buộc phụ thuộc tồn tại hay ràng buộc khóa ngoại </li></ul>
  134. 134. <ul><li>Ví dụ 10 : Xét các lược đồ quan hệ </li></ul><ul><li>PHONGBAN ( MAP , TENP, TRP, NGNC) </li></ul><ul><li>NHANVIEN ( MANV , HT, NS, GT, LUONG) </li></ul><ul><ul><li>Xét RBTV R9: </li></ul></ul><ul><ul><li>Nội dung : </li></ul></ul><ul><ul><ul><li>Mỗi trưởng phòng phải là một nhân viên trong công ty.  p  PHONGBAN,  n  NHANVIEN: </li></ul></ul></ul><ul><ul><ul><ul><li>n[MANV] = p[TRP] </li></ul></ul></ul></ul><ul><ul><ul><li>Hay: PHONGBAN[TRP]  NHANVIEN[MANV]) </li></ul></ul></ul>
  135. 135. <ul><ul><li>Bối cảnh : NHANVIEN, PHONGBAN </li></ul></ul><ul><ul><li>Bảng tầm ảnh hưởng : </li></ul></ul>- (*) + - NHANVIEN +(TRP) - + PHONGBAN Sửa Xóa Thêm R9
  136. 136. b. RBTV liên bộ, liên quan hệ <ul><li>RBTV liên bộ, liên quan hệ là điều kiện giữa các bộ trên nhiều quan hệ khác nhau. </li></ul><ul><li>Ví dụ 11 : Xét các lược đồ quan hệ </li></ul><ul><li>PHONGBAN ( MAP , TENP, TRP, NGNC) </li></ul><ul><li>DIADIEMPHG ( MAP, DIADIEM ) </li></ul><ul><li>Xét RBTV R10: </li></ul><ul><li>Nội dung : </li></ul><ul><ul><li>Mỗi phòng ban phải có ít nhất một địa điểm phòng </li></ul></ul><ul><ul><ul><li> p  PHONGBAN,  d  DIADIEMPHG: </li></ul></ul></ul><ul><ul><ul><li>p.MAP = d.MAP </li></ul></ul></ul>
  137. 137. <ul><ul><li>Bối cảnh : PHONGBAN, DIADIEM_PHG </li></ul></ul><ul><ul><li>Bảng tầm ảnh hưởng : </li></ul></ul>+ (MAP) + - DIADIEM_PHG - - - PHONGBAN Sửa Xóa Thêm R10
  138. 138. c. RBTV liên thuộc tính, liên quan hệ <ul><li>RBTV liên thuộc tính, liên quan hệ là điều kiện giữa các thuộc tính trên nhiều quan hệ khác nhau. Ví dụ 12 : Xét các lược đồ quan hệ </li></ul><ul><ul><li>DATHANG( MADH , MAKH, NGAYDH) </li></ul></ul><ul><ul><li>GIAOHANG( MAGH , MADH, NGAYGH) </li></ul></ul><ul><ul><li>- Xét RBTV R11: </li></ul></ul><ul><ul><li>Nội dung : Ngày giao hàng không được trước ngày đặt hàng </li></ul></ul><ul><ul><ul><li> g  GIAO_HANG,  d  DAT_HANG:d[MADH]  g[MADH]  d[NGAYDH]  g[NGAYGH] </li></ul></ul></ul>
  139. 139. <ul><ul><li>Bối cảnh : DATHANG, GIAOHANG </li></ul></ul><ul><ul><li>Bảng tầm ảnh hưởng : </li></ul></ul>+ (NGAYGH) - + GIAOHANG + (MGAYDH) - - DATHANG Sửa Xóa Thêm R11
  140. 140. d. RBTV do thuộc tính tổng hợp <ul><li>Thuộc tính tổng hợp là thuộc tính được tính toán từ giá trị của các thuộc tính khác hoặc trạng thái của CSDL. </li></ul><ul><li>Khi có thuộc tính tổng hợp, cần phải có RBTV để đảm bảo mối quan hệ giữa nó và nguồn mà nó được tính toán từ đó . </li></ul><ul><li>Ví dụ 13 : Xét các lược đồ quan hệ </li></ul><ul><ul><li>PXUAT(SOPHIEU, NGAY, TT) </li></ul></ul><ul><ul><li>CTIET_PX(SOPHIEU, MAHANG, SL, DG) </li></ul></ul>
  141. 141. <ul><ul><li>Xét RBTV R12: </li></ul></ul><ul><ul><li>Nội dung : </li></ul></ul><ul><ul><li>Tổng trị giá của 1 phiếu xuất phải bằng tổng trị giá các chi tiết xuất. </li></ul></ul><ul><ul><ul><li> px  PXUAT, </li></ul></ul></ul><ul><ul><ul><li>px.TT =  (ct  CTIET_PX  ct.SOPHIEU = px.SOPHIEU) ct.SL * ct.DG </li></ul></ul></ul><ul><ul><li>Bối cảnh : PXUAT,CTIET_PX </li></ul></ul>
  142. 142. <ul><ul><li>Bảng tầm ảnh hưởng : </li></ul></ul><ul><ul><li>(*): Ở thời điểm thêm một bộ vào PXUAT, giá trị bộ đó tại TT là trống. </li></ul></ul>+ (SL,DG) + + CTIET_PX + (TT) + -(*) PXUAT Sửa Xóa Thêm R12
  143. 143. e. RBTV do có chu trình <ul><li>Ví dụ 15 : Xét các lược đồ quan hệ </li></ul><ul><ul><li>NHANVIEN ( MANV , HT,NS ,GT, PHONG, LUONG) </li></ul></ul><ul><ul><li>DEAN ( MADA , TENDA, DD, PHONG) </li></ul></ul><ul><ul><li>PHANCONG ( NV#, SODA , THOIGIAN) </li></ul></ul><ul><ul><li>Xét RBTV R14: </li></ul></ul><ul><ul><li>Nội dung : </li></ul></ul><ul><ul><ul><li>Nhân viên chỉ được phân công vào các đề án do phòng mình phụ trách. </li></ul></ul></ul>
  144. 144. <ul><li> pc  PHANCONG,  nvda  (NHANVIEN ⋈ PHG=PHONG DEAN): (nvda.MANV = pc.NV#  nvda.MADA = pc.SODA) </li></ul><ul><li>Hay: PHANCONG[MA_NVIEN,SODA]  (NHANVIEN  DEAN) [MANV,MADA] </li></ul><ul><li>Bối cảnh: NHANVIEN, DEAN, PHANCONG </li></ul>
  145. 145. <ul><li>Bảng tầm ảnh hưởng </li></ul>-(*) + - DEAN -(*) + - NHANVIEN + (NV#, SODA) - + PHANCONG Sửa Xóa Thêm R14
  146. 146. Bài 7. PHỤ THUỘC DỮ LIỆU TRONG MÔ HÌNH QUAN HỆ <ul><li>I. Phụ thuộc hàm (Functional Dependencies : FD) </li></ul><ul><li>1. Định nghĩa : </li></ul><ul><li>Cho R(U) là một lược đồ quan hệ với U = { A1, .. ,An} là tập thuộc tính. X và Y là tập con của U. </li></ul><ul><li>Nói rằng X  Y (đọc là X xác định hàm Y hoặc Y phụ thuộc hàm vào X) nếu r là một quan hệ xác định trên R (U) sao cho bất kỳ hai bộ t1, t2  r mà </li></ul><ul><li>t1[X]= t2[X] thì t1[Y] = t2[Y] </li></ul>
  147. 147. <ul><li>Ví dụ : Trong quan hệ SV, mỗi thuộc tính DIACHI, NS, KETQUA đều phụ thuộc hàm (pth ) vào thuộc tính SV#. Mỗi giá trị SV# xác định duy nhất một giá trị tương ứng đối với từng thuộc tính đó. Khi đó , có thể viết : </li></ul><ul><li> SV#  DIACHI </li></ul><ul><li> SV#  NS </li></ul><ul><li> SV#  KETQUA </li></ul><ul><ul><li>Nếu Y  X thì hiển nhiên X  Y </li></ul></ul>
  148. 148. 2. Hệ tiên đề cho phụ thuộc hàm <ul><li>2.1. K/n bao đóng của một tập phụ thuộc hàm </li></ul><ul><li>Gọi F là tập tất cả các pth đối với lược đồ quan hệ R(U) và X  Y là một pth, X, Y  U. </li></ul><ul><li> Nói rằng X  Y được suy diễn logic từ F nếu mỗi quan hệ r trên R( U) đều thoả các pth của F thì cũng thoả X  Y. </li></ul><ul><li>Chẳng hạn F = { A  B, B  C} thì A  C </li></ul><ul><li>Tập tất cả các pth được suy diễn logic từ F được gọi là bao đóng của F. Kí hiệu là F + . </li></ul><ul><li>Nếu F + = F thì F là họ đầy đủ của các pth </li></ul>
  149. 149. 2.2. Hệ tiên đề Amstrong <ul><li>Năm 1974, Amstrong đưa ra hệ luật dẫn hay các tính chất của phụ thuộc hàm, gọi là hệ tiên đề Amstrong: </li></ul><ul><li>Cho X, Y, Z, W  U . Ta có các luật sau : </li></ul><ul><li>A1. Luật phản xạ : </li></ul><ul><li>Nếu Y  X thì X  Y </li></ul><ul><li>A2. Luật bổ sung : </li></ul><ul><li>X  Y thì XZ  YZ </li></ul><ul><li>A3. Luật bắc cầu : </li></ul><ul><li>Nếu X  Y và Y  Z thì X  Z </li></ul>
  150. 150. <ul><li>Hệ tiên đề Amstrong được chứng minh là đúng đắn và đầy đủ thông qua 3 bổ đề sau: </li></ul><ul><li>Bổ đề 1 : Hệ tiên đề Astrong là đúng. Có nghĩa là, với F là một tập các pth đúng trên quan hệ r. Nếu X  Y là một pth được suy dẫn từ F nhờ hệ tiên đề Amstrong thì X  Y là đúng trên quan hệ r </li></ul>
  151. 151. <ul><li>Bổ đề 2: Từ hệ tiên đề Amstrong ta suy ra một số luật sau đây: </li></ul><ul><li>a. Luật hợp : Nếu X  Y và X  Z thì X  YZ </li></ul><ul><li>b. Luật tách : Nếu X  Y và Z  Y thì X  Z </li></ul><ul><li>c. Luật tựa bắc cầu : </li></ul><ul><li> Nếu X  Y và WY  Z thì XW  Z </li></ul>
  152. 152. <ul><li>Khái niệm bao đóng của tập các thuộc tính đối với tập các phụ thuộc hàm. </li></ul><ul><li>Gọi F là tập các pth trên tập thuộc tính U, X  U . X + là bao đóng của X (đối với F ) được định nghĩa như sau : </li></ul><ul><li>X + = { A | X  A  F + } </li></ul><ul><li>Nói cụ thể : X + là tập tất cả các thuộc tính A mà pth X  A có thể được suy diễn logic từ F nhờ hệ tiên đề Amstrong </li></ul>
  153. 153. <ul><li>Bổ đề 3 : X  Y suy dẫn từ hệ tiên đề Amstrong khi và chỉ khi Y  X + </li></ul>Như vậy : (1). X  X + (2). f: X  Y  F + <=> Y  X +
  154. 154. 2.3 Thuật toán tìm bao đóng của tập thuộc tính <ul><li>Thuật toán CLOSURE. </li></ul><ul><li>Input : Tập thuộc tính X và tập phụ thuộc hàm F </li></ul><ul><li>Output : Bao đóng X của F </li></ul><ul><li>CLOSURE (X,F) </li></ul><ul><li>Begin olddep:=  ; newdep:=olddep </li></ul><ul><li> While newdep <> olddep do </li></ul><ul><li>Begin </li></ul><ul><li> olddep:= newdep </li></ul><ul><li> For each W  Z  F do </li></ul><ul><li> if W  newdep then newdep:= newdep  Z </li></ul><ul><li>End </li></ul><ul><li>Return ( newdep) </li></ul><ul><li>End. </li></ul>
  155. 155. VD: Cho U = ABCDEG <ul><li>F = { </li></ul><ul><li>AB  C (f1) </li></ul><ul><li>D  EG (f2) </li></ul><ul><li>C  A (f3) </li></ul><ul><li>BE  C (f4) </li></ul><ul><li>BC  D (f5) </li></ul><ul><li>CG  BD (f6) </li></ul><ul><li>ADC  B (f7) </li></ul><ul><li>CE  AG (f8) </li></ul><ul><li>} </li></ul><ul><li>Cho X= BD. Tính ( BD) + F </li></ul>
  156. 156. Giải: <ul><li>X (0) : = BD </li></ul><ul><li>X (1) : = BD  EG ( do (f2) ) </li></ul><ul><li>X (2) : = BDEG  C ( do (f4) ) </li></ul><ul><li>X (3) : = BDEGC  { A ( do (f2) )  </li></ul><ul><li> C ( do (f4) )  </li></ul><ul><li> D ( do ( f5) )  </li></ul><ul><li> BD ( do (f6) )  </li></ul><ul><li> AG ( do (f8)) </li></ul><ul><li> } </li></ul><ul><li>X (4) : = BDEGCA = U => X + F = X (4) </li></ul>
  157. 157. 3. Tập phụ thuộc hàm tương đương 3.1 Định nghĩa <ul><li>Hai tập pth F và G được gọi là tương đương nếu F + = G + . Khi đó ta nói F phủ G ( hay G phủ F). Kí hiệu : F  G </li></ul><ul><li>Bổ đề 1: Mỗi tập các pth F đều được phủ bằng tập các pth G mà vế phải các pth đó bao gồm không quá một thuộc tính. </li></ul><ul><li>Bổ đề 2: F  G <=> F suy dẫn được ra G và G suy dẫn được ra F </li></ul>
  158. 158. Ví dụ : Cho quan hệ Q (ABCDE) với: F = {A  BC , A  D,CD  E } G = {A  BCE , A  ABD, CD  E} <ul><li>* F suy dẫn được ra G vì : </li></ul><ul><li>A  C, A  D => A  CD </li></ul><ul><li>CD  E </li></ul><ul><li>=> A  BCE. </li></ul><ul><li>Tương tự, dễ dàng chứng minh : A  ABD. </li></ul><ul><li>Vậy F suy dẫn được ra G. </li></ul><ul><li>* Ngược lại, ta nhận thấy F  G , do đó hiển nhiên G suy dẫn được ra F. </li></ul><ul><li>Kết luận : F  G </li></ul>A  E
  159. 159. 3.2 Phủ tối thiểu <ul><li>Định nghĩa : Một tập phụ thuộc hàm F được gọi là tối thiểu nếu : </li></ul><ul><li>Mỗi vế phải của một phụ thuộc hàm F chỉ có một thuộc tính. </li></ul><ul><li>F gồm toàn những pth đầy đủ, nghĩa là không tồn tại một phụ thuộc hàm X  A thuộc F và một tập con Z của X mà : </li></ul><ul><li>F + = ( F - { X  A }  { Z  A}) + </li></ul><ul><li>Không tồn tại một phụ thuộc hàm X  A thuộc F mà : </li></ul><ul><li>F + = ( F - { X  A }) + </li></ul>
  160. 160. 3.3 Thuật toán MINIMALCOVER tìm phủ tối thiểu của tập phụ thuộc hàm F <ul><li>Input: Tập phụ thuộc hàm F </li></ul><ul><li>Output : G- là phủ tối thiểu của F </li></ul><ul><li>MINIMALCOVER (G, F) </li></ul><ul><li>G:=F </li></ul><ul><li>Thay thế từng phụ thuộc hàm X  { A1, A2,..,An} trong G bằng các phụ thuộc hàm X  A1, X  A2, .., X  An </li></ul><ul><li>For each X  A trong G </li></ul><ul><li>For each B  X </li></ul><ul><li> If ( G - { X  A })  ( X- {B})  A) tương đương với G Then </li></ul><ul><li>Thay X  A bằng ( X- { B})  A trong G </li></ul>
  161. 161. <ul><li>For each X  A trong G </li></ul><ul><li> If ( G - { X  A }) tương đương với G Then </li></ul><ul><li>Loại X  A ra khỏi G </li></ul><ul><li>Return (G) </li></ul><ul><li>End. </li></ul>
  162. 162. Ví dụ 1: Cho F = { A  B , B  A, B  C, A  C, C  A}. Tìm phủ tối thiểu G của F <ul><li>Giải : Tất cả các pth của F đều thoả mãn điều kiện 1 vì vế trái chỉ có một thuộc tính. </li></ul><ul><li> Vế phải của mỗi pth chỉ có một thuộc tính nên không cần xét đk2. </li></ul><ul><li>Xét đk 3, ta thấy : Nếu koại bỏ pth B  A và A  C ta được một tập pth G </li></ul><ul><li>G={A  B , B  C, A  C }  F </li></ul><ul><li>Không thể loại bỏ thêm một pth nào nữa vì tập pth còn lại sẽ không tương đương với F. Vậy G là tập pth tối thiểu của F. </li></ul>
  163. 163. Ví dụ 2: Cho F = { AB  C, A  B, B  A}. Tìm phủ tối thiểu G của F <ul><li>Giải : Tất cả các pth của F đều thoả mãn điều kiện 1 vì vế trái chỉ có một thuộc tính. </li></ul><ul><li> Xét đk2: ta thấy pth là không đầy đủ vì : (F- {AB  C}  {A  C})  F </li></ul><ul><li>Vậy loại bỏ pth AB  C và thay bằng pth A  C ta được tập pth G: </li></ul><ul><li>G={A  C , A  B, B  A }  F </li></ul><ul><li>Nhận thấy, không thể loại bỏ thêm một pth nào nữa vì tập pth còn lại sẽ không tương đương với F. Vậy G là tập pth tối thiểu của F. </li></ul>
  164. 164. 4. Bài toán tìm khoá của quan hệ 4.1 Thuật toán tìm khoá dựa trên đồ thị <ul><li>Định nghĩa khoá được viết lại bằng pth. </li></ul><ul><li>Cho Q là lược đồ quan hệ định nghĩa trên tập các thuộc tính U = { A1, A2, .. , An} với tập các pth F= { f1, f2, .. ,fn} xác định trên Q. K  U là khoá của R nếu thoả mãn hai điều kiện sau : </li></ul><ul><li>(1): K  U </li></ul><ul><li>(2):  K'  K mà K'  U </li></ul>
  165. 165. Biểu diễn lược đồ quan hệ Q(U) bằng đồ thị có hướng như sau: <ul><li>- Mỗi nút của đồ thị là tên của một thuộc tính thuộc Q </li></ul><ul><li>- Cung nối hai thuộc tính A và B thể hiện cho pth A  B </li></ul><ul><li>- Thuộc tính chỉ có các mũi tên đi ra, tức là chỉ ở vế trái của pth gọi là nút gốc </li></ul><ul><li>- Thuộc tính mà chỉ có mũi tên đi vào, tức là chỉ nằm ở vế phải của pth gọi là nút lá. </li></ul><ul><li>- Khoá của lược đồ quan hệ phải bao phủ tập nút gốc và không được chứa bất cứ nút lá nào của đồ thị </li></ul>
  166. 166. Thuật toán tìm khoá: <ul><li>-B1: Vẽ đồ thị của lược đồ quan hệ </li></ul><ul><li>-B2: Xác định tập các nút gốc ( G) và tập các nút lá ( L) </li></ul><ul><li>-B3: Xuất phát từ tập các nút gốc(G), đặt K bằng G ( khởi đầu ta đặt khoá là tập các nút gốc) </li></ul><ul><li>-B4: Dựa trên tập các pth F, tìm bao đóng của tập K ( tìm K + F ) </li></ul><ul><li>+ Nếu K + F = U thì K chính là khoá . Dừng lại. </li></ul><ul><li>+ Ngược lại thì bổ sung một thuộc tính không thuộc tập nút lá (L) vào K. Khi đó K = K+1 nút không thuộc tập L. </li></ul><ul><li>Trở lại B4. </li></ul>
  167. 167. 4.2 Thuật toán tìm khoá dựa trên bao đóng của tập thuộc tính <ul><li>* Ý tưởng : Bắt đầu từ tập R vì R + = R. Ta bớt dần các phần tử của R để nhận được tập bé nhất mà bao đóng của nó vẫn bằng R. </li></ul><ul><li>Vào : r(R), F </li></ul><ul><li>Ra : K ( Khoá ) </li></ul><ul><li>B1: gán K = R </li></ul><ul><li>B2: Lặp lại các bước sau : </li></ul><ul><li>Loại khỏi K phần tử A mà ( K A) + =R </li></ul><ul><li>Nhận xét: Thuật toán trên chỉ tìm được một khoá trong sơ đồ quan hệ. Nếu cần tìm nhiều khoá, ta thay đổi trật tự loại bỏ các phần tử của K. </li></ul>
  168. 168. Ví dụ : Cho R = { ABCDEGHI} F = { AC  B , BI  ACD, ABC  D, H  I, ACE  BCG, CG  AE}. Tìm khoá K ? <ul><li>Giải : </li></ul><ul><li>B1: Gán K= R = { ABCDEGHI} </li></ul><ul><li>B2: Lần lượt loại bỏ các phần tử khỏi K. </li></ul><ul><li>-Loại phần tử A : ta có : {BCDEGHI} + = R vì pth CG  AE nên A thuộc về {BCDEGHI} + nên K ={BCDEGHI} </li></ul><ul><li>-Loại phần tử B : ta có : {CDEGHI} + = R vì pth CG  AE khiến A thuộc về {CDEGHI} + và pth AC  B khiến B thuộc về {CDEGHI} + nên K ={CDEGHI} </li></ul>
  169. 169. <ul><li>-Loại phần tử C : ta có : {DEGHI} +  R nên K vẫn là {CDEGHI} </li></ul><ul><li>-Loại phần tử D : ta có : {CEGHI} + = R </li></ul><ul><li>vì CG  AE, AC  B, ABC  D nên D có trong {CEGHI} + . Nên K ={CEGHI} </li></ul><ul><li>-Loại phần tử E : ta có : {CGHI} + = R </li></ul><ul><li>vì CG  AE khiến E thuộc về {CGHI} + nên K ={CGHI} </li></ul><ul><li>-Loại phần tử H : ta có : {CGI} +  R nên K vẫn là {CGHI} </li></ul><ul><li>- Loại phần tử I : ta có : {CGH} + = R </li></ul><ul><li>vì H  I, khiến I thuộc về {CGH} + nên K ={CGH} </li></ul><ul><li>Kết luận : K= { CGH } là một khoá của r (R) </li></ul>
  170. 170. <ul><ul><li>Bài 8. THIẾT KẾ SCDL MỨC QUAN NIỆM </li></ul></ul><ul><ul><li>Trên thực tế, một ứng dụng có thể đựơc phân tích. thiết kế thành nhiều lược đồ CSDL khác nhau. Để đánh giá việc thiết kế một lược đồ CSDL, người ta dựa trên các tiêu chuẩn về sự trùng lặp thông tin, chi phí kiểm tra và các ràng buộc toàn vẹn... </li></ul></ul><ul><ul><li>Vậy để tránh sự dư thừa thông tin, ta cần chuẩn hoá tất cả các lược đồ trong quá trình thiết kế. </li></ul></ul>
  171. 171. 1. Phép tách các lược đồ quan hệ <ul><li>- ĐN: Phép tách các lược đồ quan hệ R = { A1, A2, .. An} là việc thay thế lược đồ quan hệ R bằng tập các lược đồ { R1, R2, .., Rk}, trong đó Ri  R, i= 1,..,k </li></ul><ul><li>và R = R1  R2  ...  Rk </li></ul><ul><li>Không đòi hỏi các Ri phải là phân biệt </li></ul><ul><li>- Mục đích : Loại bỏ các dị thường dữ liệu </li></ul>
  172. 172. Ví dụ : <ul><li>Cho lược đồ quan hệ người cung cấp : </li></ul><ul><li>S(MCTY, ĐC, MH, GIA) </li></ul><ul><li>với tập pth : MCTY  ĐC </li></ul><ul><li> MCTY, MH  GIA </li></ul><ul><li>Có thể được tách thành 2 lược đồ khác là : </li></ul><ul><li>S1(MCTY, ĐC) và S2 ( MCTY, MH, GIA) </li></ul><ul><li>như vậy sẽ không mất công lưu địa chỉ của một công ty nhiều lần </li></ul>
  173. 173. Kết nối không mất mát thông tin <ul><li>- Nếu R là một lược đồ quan hệ được tách thành các lược đồ con R1, R2, .., Rk và D là một tập các phụ thuộc dữ liệu. Nói rằng phép tách là tách - kết nối không mất mát thông tin đối với D nếu với mỗi quan hệ r trên R thoả D: </li></ul><ul><li>r =  R1(r) *  R2 (r) * ... *  Rk(r) </li></ul><ul><li>tức là r được tạo nên từ phép kết nối tự nhiên của các hình chiếu của nó trên các Ri, i= 1..,k </li></ul>
  174. 174. Kiểm tra phép kết nối không mất mát thông tin <ul><li>Input: R ={ A1, A2, .., An} tập các phụ thuộc hàm và phép tách p =(R1, R2, .., Rk) </li></ul><ul><li>Output: Phép tách có phải là không mất mát thông tin hay không ? </li></ul><ul><li>Phương pháp : Thiết lập một bảng với n cột k hàng.; cột thứ j tương ứng với thuộc tính Aj; hàng thứ i tương ứng với lược đồ Ri. Tại ô (i,j) điền kí hiệu aj nếu Aj  Ri, nếu không điền kí hiệu bij </li></ul>
  175. 175. <ul><li>- Xét các pth: </li></ul><ul><li>+Xét ( X  Y )  F , xét các hàng và nếu có giá trị bằng nhau trên thuộc tính X thì làm bằng các giá trị của chúng trên Y. Khi làm bằng trên Y, nếu một trong hai giá trị là aj thì ưu tiên làm bằng aj , nếu không làm bằng một trong các kí hiệu bij . </li></ul><ul><li>+Tiếp tục với các pth khác ( kể cả việc lặp lại các pth đã được áp dụng) cho đến khi không còn áp dụng được nữa. </li></ul><ul><li>- Xem xét kq: Nếu xuất hiện một hàng gồm toàn kí hiệu a1, a2, .. , an thì phép kết nối là không mất mát thông tin, ngược lại là kết nối mất mát thông tin. </li></ul>
  176. 176. <ul><ul><li>VD1: Quan hÖ ng­êi cung cÊp: </li></ul></ul><ul><ul><li>R(MCTY, ĐC, MH, GIA) ®­îc t¸ch thµnh 2 quan hÖ: </li></ul></ul><ul><ul><li>R1(MCTY, ĐC) vµ R2(MCTY, MH,GIA) </li></ul></ul><ul><ul><li>víi c¸c phô thuéc hµm: MCTY  ĐC </li></ul></ul><ul><ul><li>MCTY,MH  GIA </li></ul></ul><ul><ul><li>Kiểm tra xem phép tách trên có mất mát thông tin hay không ? </li></ul></ul>
  177. 177. <ul><ul><li>B¶ng ban ®Çu ®­îc thiÕt lËp nh­ sau: </li></ul></ul>1 2 3 4 1 2 a1 a1 MCTY a3 a3 b22 R2 b14 b13 a2 R1 GIA MH §C
  178. 178. <ul><ul><li>¸p dông phô thuéc hµm MCTY  ĐC cho 2 hµng cña b¶ng. Ta nhËn thÊy 2 hµng b»ng nhau trªn cét tªn (®Òu lµ a1) nªn ë cét §C chóng ®­îc lµm b»ng vµ b»ng a2. Khi ®ã ta thÊy b¶ng kÕt qu¶ lµ: </li></ul></ul><ul><ul><li>Cã hµng thø 2 cã c¸c gi¸ trÞ toµn lµ a, do ®ã phÐp t¸ch lµ T¸ch - KÕt nèi kh«ng mÊt m¸t th«ng tin. </li></ul></ul>a1 a1 Tªn a3 a3 a2 R2 b14 b13 a2 R1 Gi¸ S¶n phÈm §Þa chØ
  179. 179. <ul><ul><li>Bµi tËp: </li></ul></ul><ul><ul><li>B1 . Cho l­îc ®å quan hÖ R={A, B, C, D} vµ tËp phô thuéc hµm F={A  B, AC  D} </li></ul></ul><ul><ul><li>PhÐp t¸ch quan hÖ R thµnh 2 quan hÖ R1={AB} vµ R2={ACD} cã tæn thÊt th«ng tin kh«ng? V× sao? </li></ul></ul><ul><ul><li>B2. Cho lược đồ quan hệ với các thuộc tính A, B, C, D, E, F và tập phụ thuộc hàm </li></ul></ul><ul><ul><li>F= { AB  C, C  D, ABD  E, F  A} </li></ul></ul><ul><ul><li>Kiểm tra tính mất mát thông tin của phép tách R thành : </li></ul></ul><ul><ul><li>(R) = ( BC, AC, ABDE, ABDF) </li></ul></ul><ul><li>B3. Dùng kĩ thuật bảng kiểm tra tính tổn thất của các phép tách sau : </li></ul><ul><li>R= < U, F>, U = ABCDE ; </li></ul><ul><li>F = { A  C, B  C , C  D , DE  C , CE  A} </li></ul><ul><li>p = ( AD, AB, BE , CDE) </li></ul>
  180. 180. 2. Một số khái niệm * Thuộc tính khoá và không khoá <ul><li>- Cho một lược đồ quan hệ R trên tập thuộc tính U ={ A1, .., An}. Thuộc tính A  U được gọi là thuộc tính khoá ( nguyên thuỷ hay cơ bản) nếu A là một thành phần thuộc một khoá nào đó của R, ngược lại A được gọi là thuộc tính không khoá (phi nguyên thuỷ hoặc thứ cấp). </li></ul><ul><li> -VD : Cho lược đồ R trên tập thuộc tính u= { A, B, C, D } với các pth AB  C , B  D , BC  A . Ta thấy AB và BC là khoá. Vậy A, B, C là thuộc tính khoá ( hay cơ bản) , còn D là thuộc tính không khoá hay thứ cấp. </li></ul>
  181. 181. * Phụ thuộc hàm đầy đủ <ul><li>Cho lược đồ quan hệ R(U) trên tập thuộc tính U = { A1, ... ,Ak}. X và Y là hai tập thuộc tính khác nhau X  U và Y  U. </li></ul><ul><li>Y là phụ thuộc hàm đầy đủ vào X nếu Y là pth vào X nhưng không pth vào bất kì tập con thực sự nào của X </li></ul>
  182. 182. <ul><li>Phụ thuộc bắc cầu </li></ul>Cho một lược đồ quan hệ R(U); X là một tập con các thuộc tính X  U, A là một thuộc tính thuộc U. A được gọi là phụ thuộc bắc cầu vào X trên R nếu tồn tại một tập con Y của R sao cho X  Y, Y  A nhưng Y  X với A  XY.
  183. 183. 3. Các dạng chuẩn của lược đồ quan hệ <ul><li>- Quan hệ được chuẩn hoá là quan hệ trong đó mỗi miền của một thuộc tính chỉ chứa các giá trị nguyên tố ( tức là không phân nhỏ được nữa) </li></ul><ul><li> - Quan hệ có chứa các miền giá trị là không nguyên tố gọi là quan hệ không chuẩn hoá. </li></ul><ul><ul><li>- Mét quan hÖ ®­îc chuÈn ho¸ cã thÓ thµnh mét hoÆc nhiÒu quan hÖ chuÈn ho¸ kh¸c vµ kh«ng lµm mÊt m¸t th«ng tin. </li></ul></ul><ul><li>) </li></ul>
  184. 184. <ul><ul><li> C¸c d¹ng chuÈn: </li></ul></ul><ul><ul><li>D¹ng kh«ng chuÈn </li></ul></ul><ul><ul><li>D¹ng chuÈn thø nhÊt (1NF: First Normal Form) </li></ul></ul><ul><ul><li>D¹ng chuÈn thø hai (2NF) </li></ul></ul><ul><ul><li>D¹ng chuÈn thø ba (3NF) </li></ul></ul><ul><ul><li>D¹ng chuÈn Boye – Codd (BCNF) </li></ul></ul>
  185. 185. <ul><ul><li>3.1. D¹ng chuÈn thø nhÊt: </li></ul></ul><ul><ul><li>Mét l­îc ®å quan hÖ R ®­îc gäi lµ ë d¹ng chuÈn mét (1NF) nÕu vµ chØ nÕu toµn bé c¸c miÒn cã mÆt trong R ®Òu chØ chøa c¸c gi¸ trÞ nguyªn tè. </li></ul></ul><ul><ul><li>VD: Cho bảng quan hệ GD ( Ten_GV, MON_GD) </li></ul></ul>Các giá trị ở thuộc tính Mon_GD chưa là giá trị nguyên tố nên bảng trên chưa ở dạng chuẩn 1. Để đưa lược đồ trên về dạng chuẩn 1 ta tách thuộc tính kép thành các thuộc tính đơn như sau : C, VISUAL BASIC, TK WEP Hà PASCAL, NM CSDN Lan Mon_GD Ten_GV
  186. 186. Bảng GD ở dạng chuẩn 1: TK WEP Hà VISUAL BASIC Hà NM CSDN Lan C Hà PASCAL Lan Mon_GD Ten_GV
  187. 187. <ul><ul><li>3 .2. D¹ng chuÈn thø 2: </li></ul></ul><ul><ul><li>L­îc ®å quan hÖ R ë d¹ng chuÈn 2 (2NF) nÕu: </li></ul></ul><ul><ul><li>R ë d¹ng chuÈn mét </li></ul></ul><ul><ul><li>Mọi thuéc tÝnh kh«ng kho¸ cña R lµ phô thuéc hµm ®Çy ®ñ vµo kho¸ chÝnh. </li></ul></ul><ul><ul><li>VD:Cho quan hÖ: SVTHI ( MONTHI, MSSV, TEN, TUOI, DIACHI, DIEM ) </li></ul></ul>2 HT 22 Tu 13 5 7 HN 20 Lan 11 5 6 HP 21 Ha 12 4 7 HN 20 Lan 11 4 6 HP 21 Ha 12 3 8 HN 20 Lan 11 3 §iÓm §Þa chØ Tuæi Tªn MSSV M«n thi
  188. 188. <ul><ul><li>Khoá chính của quan hệ trên là (Monthi , MSSV).Ta thấy các thuộc tính không khoá: ten, tuoi , diachi không phụ thuộc đầy đủ vào khoá chính (chỉ phụ thuộc vào MSSV ). Do đó, vi phạm 2NF. Để lược đồ ở dạng chuẩn 2, ta tách thành 2 quan hệ : </li></ul></ul><ul><ul><li>SINHVIEN (MSSV, TEN, TUOI, DIACHI) vµ </li></ul></ul><ul><ul><li>THIXONG (MONTHI, MSSV, DIEM) </li></ul></ul><ul><ul><li>Hai quan hệ trên đã ở 2NF vì mọi thuộc tính không khoá đều đã phụ thuộc hàm đầy đủ vào khoá chính </li></ul></ul>
  189. 189. 3.3 Dạng chuẩn thứ 3 ( 3NF) <ul><li>Lược đồ quan hệ R ở dạng chuẩn thứ 3 ( 3NF) nếu : </li></ul><ul><li>R ở dạng chuẩn 2 </li></ul><ul><li>Mỗi thuộc tính không khoá là không phụ thuộc hàm bắc cầu vào khoá chính. </li></ul><ul><li>- VD1 : Cho lược đồ quan hệ R ( SAIP) với các phụ thuộc hàm : SI  P và S  A. </li></ul><ul><li>R không ở 3NF. Vì có A là một thuộc tính không khoá, phụ thuộc bắc cầu vào khoá chính: SI  S , S  A và S  SI. </li></ul><ul><li>- VD2: Lược đồ quan hệ R ( CSZ) với các phụ thuộc hàm: CS  Z, Z  C. Trong lược đồ này, mọi thuộc tính đều là thuộc tính khoá. Do vậy R ở 3 NF </li></ul>
  190. 190. 3.4 Dạng chuẩn Boye-Codd ( BCNF) Lược đồ quan hệ R ở dạng chuẩn Boye-Codd ( BCNF) nếu với mọi : X  A thoả trên R , A  X thì X là một khoá của R. - VD : Trong ví dụ R(CSZ) nêu trên, rõ ràng R không ở BCNF mà là ở 3NF vì rằng Z  C nhưng Z không phải là một khoá của R. - Định lý : Nếu một lược đồ quan hệ R với tập phụ thuộc hàm F là ở BCNF thì nó là ở 3NF. - Nhận xét : Trong CSDL, các lược đồ quan hệ ở dạng chuẩn 1, 2, 3 vẫn tồn tại sự dư thừa thông tin. Để tối thiểu sự dư thừa thông tin thì các bảng phải ở dạng chuẩn BCNF
  191. 191. 4. Chuẩn hoá bảng <ul><li>Chuẩn hoá bảng là cách đưa một bảng chưa chuẩn hoá về dạng chuẩn 3NF hoặc BCNF mà không làm mất mát thông tin. </li></ul><ul><li>Có hai phương pháp để chuẩn hoá lược đồ quan hệ : </li></ul><ul><li>Phương pháp phân rã : Tách một lược đồ quan hệ thành nhiều quan hệ khác thỏa mãn các dạng chuẩn. </li></ul><ul><li>Phương pháp tổng hợp : Gom các thuộc tính thành từng nhóm tạo thành quan hệ thoả mãn các dạng chuẩn. </li></ul>
  192. 192. 4.1. Đưa một bảng chưa chuẩn hoá về dạng chuẩn hoá <ul><li>Tách các nhóm thuộc tính lặp thành một bảng, khoá của bảng là khoá của bảng ban đầu và thuộc tính định danh của nhóm lặp. </li></ul><ul><li>Những thuộc tính còn lại lập thành một bảng với khoá của bảng là khoá của bảng ban đầu. </li></ul><ul><li>Quá trình tách chỉ dừng lại khi ta đã nhận được các bảng đã chuẩn hoá ( không còn thuộc tính lặp) </li></ul><ul><li>VD : Quan hệ đơn hàng: </li></ul><ul><li>DONHANG ( SoĐ, MaH , TenH , SL , MAK, TenK,Tel) </li></ul><ul><li>DONHANG1 (SoĐ, MaH, TenH, SL) </li></ul><ul><li>DONHANG2 (SoĐ, MaK, TenK, Tel) </li></ul>
  193. 193. 4.2. Đưa bảng ở 1NF về 2NF <ul><li>Tách các thuộc tính phụ thuộc vào một phần của khoá thành một bảng, bảng này có khoá là thuộc tính gây ra sự phụ thuộc. </li></ul><ul><li>Các thuộc tính còn lại là một bảng với khoá của bảng là khoá của bảng ban đầu. </li></ul><ul><li>VD : Quan hệ ; </li></ul><ul><li>SVTHI ( MONTHI, MSSV, TEN, TUOI, DIACHI, DIEM ) </li></ul><ul><ul><li>ở 1NF nhưng chưa ở 2NF. Để quan hệ ở 2NF, ta tách thành 2 quan hệ : </li></ul></ul><ul><ul><li>SINHVIEN (MSSV, TEN, TUOI, DIACHI) vµ </li></ul></ul><ul><ul><li>THIXONG (MONTHI, MSSV, DIEM) </li></ul></ul>
  194. 194. 4.3. Phép tách một lược đồ quan hệ thành 3NF Phép tách một lược đồ quan hệ R với tập pth F tối thiểu , không làm mất mát thông tin trên R, bảo toàn các pth sao cho mỗi lược đồ con đều ở 3NF: - B1 : Gom tất cả các thuộc tính của R không liên quan đên một pth nào của F, hoặc vế trái, hoặc vế phải , cho vào một lược đồ. - B2 : Nếu có một phụ thuộc hàm nào của F mà liên quan tới tất cả các thuộc tính của R thì kết quả ra chính là R. - B3 : Ngoài ra, phép tách đưa ra các lược đồ gồm các thuộc tính XA cho pth X  A ; nếu X  A1, X  A2, ... , X  An thì thay thế tập thuộc tính XA1A2...An cho XAi ( 1<= i<= n). Quá trình tiếp tục đến khi tất cả các lược đồ đều đã ở 3NF
  195. 195. Ví dụ : Cho lược đồ quan hệ R ( CTHRSG) với tập pth tối thiểu : C  T , HR  C , HT  R , CS  G và HS  R. Thuật toán trên cho ta kết quả của phép tách là tập lược đồ gồm 5 lược đồ con ở 3NF là : R1 (CT) (ứng với pth C  T) R2 (HRC) (ứng với pth HR  C) R3 ( HTR) (ứng với pth HT  R) R4 ( CSG) (ứng với pth CS  G) R5 (HSR) (ứng với pth HS  R)
  196. 196. 4.3. Phép tách một lược đồ quan hệ thành BCNF Phép tách một lược đồ quan hệ R với tập pth F, không làm mất mát thông tin sao cho mỗi lược đồ con đều ở BCNF. Phương pháp : Lặp liên tiếp. Tại mỗi bước phép tách p là bảo đảm không mất mát thông tin đối với F. -Bước đầu : p chỉ bao gồm R - Các bước tiếp : Nếu S là một lược đồ thuộc p, S chưa ở BCNF, chọn X  A là pth thoả trên S, trong đó X không chứa khoá của S, A  X. Thay thế S trong p bởi S1 và S2 với : S1 = XA, S2 = S - A Quá trình tiếp tục cho tới khi tất cả các lược đồ đều ở dạng chuẩn BCNF.
  197. 197. VD: Cho lược đồ R(CTHRSG) với tập pth : C  T, HR  C, HT  R, CS  G, HS  R Khoá của R là HS. Ta lần lượt xét các pth vi phạm điều kiện BCNF. - Xét C  T : vi phạm BCNF vì C không chứa khoá, dùng thuật toán trên để tách thành : R1 ( CT ) và R2( CHRSG). Sau đó cần tính F+ và chiếu xuống R1 và R2, kiểm tra ta thấy R1 đã ở BCNF, R2 thì chưa. Ta tách tiếp R2. Phép tách cuối cùng được : R1(CT), R2 ( CSG), R3 ( CHR), R4 ( HSR) Quá trình tách có thể được biểu diến qua sơ đồ :
  198. 198. R(CTHRSG) Khoá =HS R1(CT) Khoá =C R2(CHRSG) Khoá =HS R21(CSG) Khoá =CS R22(CHRS) Khoá =HS R221(HRC) Khoá =HR,HC R222(HSR) Khoá =HS C  T, HR  C, HT  R, CS  G, HS  R HR  C, HT  R, CS  G, HS  R HR  C, HC  R, HS  R HR  C, HC  R HS  R CS  G C  T
  199. 199. BTVN: B1 . Cho lược đồ quan hệ R= <U , F> với tập thuộc tính U = ABCDEHG và tập phụ thuộc hàm F={DE  G, E  A, H  C, CG  H, DG  EA, D  B} a. Xác định khoá của lược đồ quan hệ trên. b. Xác định dạng chuẩn cao nhất của lược đồ quan hệ trên. B2 . Xác định dạng chuẩn cao nhất của lược đồ quan hệ với các thuộc tính ABCDEF và tập phụ thuộc hàm {AB  C,C  B,ABD  E,F  A} B3. Cho W= < R,F> R = { A, B, C, D} F= { B  D, A  C, C  ABD}. Hỏi W có là 2NF, 3NF không ?
  200. 200. B4. Xác định dạng chuẩn cao nhất của lược đồ quan hệ sau: H=(U,F); U=ABCD; F={CD  B,A  C,B  ACD} B5. Cho lược đồ R=(BOISQD) và F={S  D,I  B, IS  Q,B  O} a. Chứng tỏ rằng phép tách: R=(SD,IB, ISQ,BO) Là phép tách không mất mát thông tin. b. Chứng tỏ phép tách trên là ở dạng 3NF.
  201. 201. BÀI 9. NGÔN NGỮ TÂN TỪ <ul><li>I. Logic toán và ứng dụng của nó vào CSDL. </li></ul><ul><li> ĐN1 : Biểu thức logic là một phát biểu mà giá trị của nó có thể đúng hoặc sai. Biểu thức logic có giá trị luôn luôn đúng ( hoặc sai ) được gọi là hằng đúng hoặc hàng sai. </li></ul><ul><li>1. Một số khái niệm : </li></ul><ul><li>Hàm: là một ánh xạ từ một miền giá trị vào tập hợp gồm hai giá trị hoặc đúng hoặc sai, thường kí hiệu là f,g,h… </li></ul><ul><li>Tân từ : Là một biểu thức được xây dựng dựa trên các biểu thức logic, thường kí hiệu P,Q,R… </li></ul><ul><li>Các phép toán logic : phủ định ( ¬ ), kéo theo (=>), nối liền (  ), nối rời ( v ) </li></ul><ul><li>Các lượng từ : với mọi (  ) và tồn tại (  ) </li></ul>
  202. 202. <ul><li>- ĐN2 : Tân từ một ngôi được định nghĩa trên 1 tập X và một biến x có giá trị chạy trên các phần tử của X. </li></ul><ul><li> Với mỗi giá trị của x, tân từ P(x) là một mệnh đề logic, tức là nó có giá trị hoặc là đúng hoặc là sai. </li></ul><ul><li>VD: X là một tập hợp những người có tên như sau : </li></ul><ul><li>X={ Hoa , Lan, Tuấn, Dũng, T.Anh,…} </li></ul><ul><li>Với tân từ NỮ (x) được xác dịnh như : “ x là người nữ”. Khi đó mệnh đề : </li></ul><ul><li>NỮ ( Hoa) : cho kết quả là đúng. </li></ul><ul><li>NỮ ( Tuấn ) : Cho kết quả là sai . </li></ul>
  203. 203. <ul><li>ĐN3: Tân từ n ngôi được định nghĩa trên các tập X1, X2,…Xn và n biến x1, x2, …, xn lấy giá trị trên các tập Xi tương ứng. Với mỗi ai  Xi, xi = ai , tân từ n ngôi là một mệnh đề. </li></ul><ul><li>Kí hiệu : P ( x1, x2, …, xn) </li></ul><ul><li>VD: CHA ( x1, x2 ) : “ x1 là cha của x2” </li></ul>
  204. 204. <ul><li>- ĐN4: Từ đựợc định nghĩa một cách truy hồi như sau : </li></ul><ul><li>i. Từ là một hằng hay một biến </li></ul><ul><li>ii. f (t1,t2,…,tn) là một hàm n ngôi thì f là một từ. </li></ul><ul><li>- ĐN5: Công thức : </li></ul><ul><li>i. Công thức nguyên tố là một tân từ n ngôi P(t1,t2,.., tn) , trong đó t1, t2,.., tn là các từ. </li></ul><ul><li>ii. Nếu F1, F2, .. ,Fn là các công thức thì các biểu thức sau: F1 v F2 , F1  F2 , F1 => f2, ¬ F1 cũng là các công thức. </li></ul><ul><li>iii. Nếu F1 là công thức thì  x: F1,  x: F1 cũng là các công thức. </li></ul><ul><li>iv. Nếu F1 là công thức thì ( F1) cũng là công thức. </li></ul>
  205. 205. <ul><li>ĐN6: </li></ul><ul><li>- Một công thức được gọi là “đóng” nếu mọi biến của nó đều có kèm với lượng từ. </li></ul><ul><li>- Một công thức được gọi là “mở” nếu tồn tại một biến không có kèm với lượng từ. Biến này gọi là biến tự do. </li></ul>
  206. 206. 2. Diễn giải và mô hình. <ul><li>a. Diễn giải của một công thức: </li></ul><ul><li>Một diễn giải của một CT gồm 4 phần : </li></ul><ul><li>* Miền giá trị của các biến công thức, KH là tập M. </li></ul><ul><li>* Việc sử dụng công thức: hằng , hàm , tân từ. </li></ul><ul><li>* Ý nghĩa của công thức </li></ul><ul><li>* Xác định một quan hệ n ngôi trên tập M n </li></ul>
  207. 207. <ul><li>VD: Cho M = {Tùng, Minh , Hưng, Long, Đoàn, Tuấn} và một CT C có dạng như sau : </li></ul><ul><li> x  y (  z (P(x,y) v P(y,z) => Q (x,z) ) </li></ul><ul><li>Tập diễn giải của công thức có thể là : </li></ul><ul><li>- M : miền giá trị của các biến x, y, z </li></ul><ul><li>- Các tân từ : P: CHA ; Q: ONG </li></ul><ul><li>- Ý nghĩa : </li></ul><ul><li>* CHA (x, y): x có cha là y </li></ul><ul><li>* ONG (x, y): x có ông là y. </li></ul><ul><li>- Các quan hệ 2 ngôi trên M 2 : </li></ul><ul><li>CHA = {(Tùng, Minh), (Long, Đoàn), (Đoàn, Tuấn),(Minh, Long)} </li></ul><ul><li>ONG = {(Tùng, Long ), (Minh, Đoàn), (Long, Tuấn) } </li></ul>
  208. 208. II. Ứng dụng logic toán trong CSDL <ul><li>Dẫn nhập </li></ul><ul><li>CSDL : mô hình hoá thông tin gồm các sự kiện đựơc liên kết hay biểu diễn một tình trạng của thế giới thực. </li></ul><ul><li>Chú ý : </li></ul><ul><li>i. Câu hỏi đóng tương ứng với CT đóng. Câu trả lời là có hiệu lực đúng hoặc sai. </li></ul><ul><li>VD: Tùng có cha là Minh? CHA ( Tùng, Minh)? </li></ul><ul><li> Con của Long là ai?  x CON (Minh, x) ? </li></ul><ul><li>ii. Câu hỏi mở tương ứng với một CT mở. </li></ul><ul><li>VD: Cha của Long là ai ? CHA(Long, x ) ? </li></ul>
  209. 209. 2. Ngôn ngữ tân từ có biến là bộ -n <ul><li>Một câu hỏi trong ngôn ngữ tân từ có biến là bộ -n thoả các quy tắc sau : </li></ul><ul><li>Biến: là một bộ của quan hệ </li></ul><ul><li>Từ : là hằng, biến, hay biểu thức có dạng s[c] trong đó : s là biến, c là tập các thuộc tính ( gọi là từ chiếu) </li></ul><ul><li>Các biểu thức: </li></ul><ul><li>- R s : với R là một quan hệ; s là biến bộ-n được gọi là từ </li></ul><ul><li> - t1  a, t1  t2: ở đây, t1, t2 là các từ chiếu,  là toán tử so sánh, a là một hằng. </li></ul><ul><li>ĐN7: Một câu hỏi trong ngôn ngữ tân từ có biến là bộ -n đự ơ c biểu diễn như sau : </li></ul><ul><li>{ s | F } </li></ul><ul><li>Trong đó s là biến bộ-n, F là một công thức chỉ có một biến tự do là s. </li></ul>
  210. 210. 2. Ngôn ngữ tân từ có biến là miền giá trị <ul><li>Một câu hỏi trong ngôn ngữ tân từ có biến là bộ -n thoả các quy tắc sau : </li></ul><ul><li>a. Từ : là hằng hoặc biến. </li></ul><ul><li>b. Công thức nguyên tố: </li></ul><ul><li>i. Q (t1, t2,..,tn) : với Q là một quan hệ; t i là các từ </li></ul><ul><li> ii. t1  a1, t2  a2: ở đây, t i là các từ ,  là phép toán </li></ul><ul><li>c. Trong 1 CSDL, câu hỏi bằng ngôn ngữ tân từ có dạng : </li></ul><ul><li>{ ( x1, x2,…, xk) | F ( x1, x2, …, xk) } </li></ul><ul><li>Ở đây xi (i= 1,2,..,k) là các biến tự do của F và F không có biến tự do nào khác. </li></ul><ul><li>Câu trả lời là tập các bộ giá trị (x1, x2, .., xk ) mà khi thay vào F thì F là đúng. </li></ul>
  211. 211. <ul><li>VD: Xét cơ sở dữ liệu Thực tập gồm 3 quan hệ sau đây: </li></ul><ul><li>SV( SV#, HT, NS, QUE, HL) </li></ul><ul><li>DT(DT#, TDT, CN, KP) </li></ul><ul><li>SD(SV#, DT#, NTT, KM, KQ) </li></ul><ul><li>Q1: Cho danh sách các sinh viên có quê Hà Nội và có điểm học lực >=8.0? </li></ul><ul><li>Diễn tả bằng ngôn ngữ tân từ có biến là bộ như sau: </li></ul><ul><li>{ r[HT] | SV r  r[QUE=‘Hà Nội’]  r[HL]>=8.0} </li></ul>

×