Bài giảng Kỹ thuật phần mềm ứng dụng - Chương 3: Mô hình dữ liệu quan hệ (Phần 4)

pdf 36 trang Gia Huy 17/05/2022 3070
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật phần mềm ứng dụng - Chương 3: Mô hình dữ liệu quan hệ (Phần 4)", để 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:

  • pdfbai_giang_ky_thuat_phan_mem_ung_dung_chuong_3_mo_hinh_du_lie.pdf

Nội dung text: Bài giảng Kỹ thuật phần mềm ứng dụng - Chương 3: Mô hình dữ liệu quan hệ (Phần 4)

  1. Kỹ thuật phần mềm ứng dụng Chương 3 Mô hình dữ liệu quan hệ (Phần 4) 9/6/2017
  2. Nội dung trình bày 1. Khái niệm chuẩn hóa 2. Mục đích của chuẩn hóa 3. Các dạng chuẩn 4. Lược đồ khái niệm 5. Các phép toán trên CSDL quan hệ 6. Các bước đưa về dạng chuẩn 3NF/BCNF 7. Các quy tắc toàn vẹn dữ liệu 2
  3. 1. Khái niệm chuẩn hóa . Chuẩn hóa: Mô hình quan hệ chỉ chấp nhận duy nhất các quan hệ thoả mãn điều kiện “Mọi giá trị trong quan hệ - nghĩa là tất cả các giá trị của các thuộc tính trong tất cả các bộ - đều phải là nguyên tố (atomic) (nghĩa là không chia nhỏ được nữa)” . . Nói một cách khác, tại mỗi vị trí cắt nhau của một hàng và một cột trong bảng tồn tại đúng một giá trị và không bao giờ là một tập các giá trị. . Dạng chuẩn (normal form): Là trạng thái của một quan hệ có được do áp dụng những quy tắc liên quan đến phụ thuộc hàm của quan hệ đó. . Chuẩn hoá dữ liệu: là quá trình phân rã lược đồ quan hệ chưa chuẩn hoá (có dạng chuẩn thấp) thành các lược đồ quan hệ nhỏ hơn nhưng ở dạng chuẩn cao hơn (có cấu trúc tốt hơn) 3
  4. 2. Mục đích của việc chuẩn hóa . Loại bỏ các dữ liệu dư thừa trong các bảng. . Xóa bỏ các dị thường trong các thao tác cập nhật dữ liệu. . Tối ưu hóa cấu trúc của các bảng. 4
  5. 3 Các dạng chuẩn  Dạng chuẩn 1(1 Normal Form - 1NF): Một bảng đạt chuẩn 1 khi và chỉ khi tất cả các cột trong bảng chỉ chứa giá trị nguyên tố, nghĩa là không có nhóm lặp (các cột) bên trong một hàng của bảng. 5
  6. 3 Các dạng chuẩn (tiếp) . Kết luận: – Mọi lược đồ quan hệ đều thuộc dạng chuẩn 1. – Dạng chuẩn 1 có thể dẫn đến sự trùng lặp dữ liệu. Do đó gây ra các dị thường về cập nhật dữ liệu. 6
  7. 3. Các dạng chuẩn (tiếp)  Dạng chuẩn 2(2 Normal Form - 2NF): Lược đồ quan hệ R được gọi là thuộc dạng chuẩn 2 nếu nó đã ở dạng chuẩn 1 và mọi thuộc tính không khóa của R phụ thuộc hàm đầy đủ vào khóa chính của R. 7
  8. . Kết luận: – Mọi lược đồ quan hệ thuộc dạng chuẩn 2 cũng thuộc dạng chuẩn 1. – Còn xuất hiện sự trùng lặp dữ liệu. Do đó gây ra các dị thường về cập nhật dữ liệu. 8
  9. 3. Các dạng chuẩn (tiếp) . Dạng chuẩn 3 (3 Normal Form - 3NF): Lược đồ quan hệ R được gọi là thuộc dạng chuẩn 3 nếu: o R thuộc dạng chuẩn 2. o Mọi thuộc tính không khóa của R không phụ thuộc bắc cầu vào khóa chính của R. Ví dụ: Lược đồ dưới đây thuộc dạng chuẩn 2 nhưng không thuộc dạng chuẩn 3, vì tồn tại phụ thuộc hàm bắc cầu: Rõ ràng: MaNV MaPB, MaPB TenPB => MaNV TenPB, Sau khi chuẩn hóa sang dạng 3 chúng ta nhận được các lược đồ sau: 9
  10. 3. Các dạng chuẩn (tiếp) . Kết luận: – Mọi lược đồ quan hệ thuộc dạng chuẩn 3 cũng thuộc dạng chuẩn 2. – PTH bắt cầu là nguyên nhân dẫn đến trùng lặp dữ liệu. – Dạng chuẩn 3 là dạng chuẩn tối thiểu trong thiết kế CSDL 10
  11. 3. Các dạng chuẩn (tiếp) . Dạng chuẩn Boyce-Codd(BCNF): Lược đồ quan hệ R được gọi là đạt BCNF khi và chỉ khi với mọi FD X -> A đúng trong R thì X là siêu khóa Ví dụ: Cho lược đồ quan hệ R(A,B,C,D), với tập phụ thuộc hàm F={A->BCD, BC->AD ,D->B} 11
  12. 4 Lược đồ khái niệm 12
  13. 4 Lược đồ khái niệm(tiếp) 13
  14. 5 Các phép toán trên CSDL quan hệ – Chèn (insert) – Loại bỏ (delete) – Thay đổi (change)  Trong mô hình CSDL quan hệ được nêu trên, các phép toán này được áp dụng cho từng bộ của các quan hệ lưu trữ trong máy 14
  15. 5 Các phép toán trên CSDL quan hệ(tiếp) 1. Phép chèn (INSERT) – Phép chèn thêm một bộ t vào quan hệ r {A1, , An} có dạng: r = r  t – Ta có thể biểu diễn chi tiết phép chèn như sau: INSERT (r; A1 = d1, A2 = d2, , An = dn) – Trong đó: - Ai với i = 1, , n là tên các thuộc tính và di với di dom(Ai) là các giá trị thuộc miền trị tương ứng của thuộc tính Ai.  Ví dụ: – Để thêm một bộ t4 = (S4, Clark, 20, London) vào quan hệ S trong hình 1.2 ta làm như sau: INSERT(S; S# = S4, SNAME = Clark, STATUS = 20, CITY = London) 15
  16. 5 Các phép toán trên CSDL quan hệ(tiếp) . Nếu xem thứ tự các trường là cố định, khi đó có thể biểu diễn phép chèn dưới dạng không tường minh như sau: INSERT (r; d1, d2, , dn) • Mục đích của phép chèn là thêm một bộ vào một quan hệ nhất định . Kết quả của phép toán này có thể gây ra một số sai sót với những lý do sau đây:  Bộ mới cần thêm vào không phù hợp với lược đồ quan hệ đã cho  Một số giá trị của một số thuộc tính nằm ngoài miền giá trị của thuộc tính đó  Giá trị khoá của bộ mới có thể là giá trị đã có trong quan hệ đang lưu trữ . Do vậy, tuỳ từng hệ thống cụ thể sẽ có những cách khắc phục riêng 16
  17. 5. Các phép toán trên CSDL quan hệ(tiếp) 2. Phép loại bỏ (DEL) – Phép loại bỏ (DEL) là phép xoá một bộ ra khỏi một quan hệ cho trước – Giống như phép chèn, phép loại bỏ có dạng: r = r \ t – Ta có thể biểu diễn chi tiết phép loại bỏ như sau: DEL (r; A1 = d1, A2 = d2, , An = dn) – Hoặc nếu xem thứ tự các trường là cố định thì: DEL (r; d1, d2, dn) – Ví dụ:  Cần loại bỏ bộ tương ứng với P2, S3 trong quan hệ SP trên hình 1.2 ta làm như sau: DEL (SP; S# = S3, P# = P2, QTY = 200) 17
  18. 5. Các phép toán trên CSDL quan hệ(tiếp) – Tuy nhiên, không phải lúc nào phép loại bỏ cũng cần đầy đủ tất cả các loại thông tin của bộ cần loại bỏ – Nếu có giá trị về bộ đó tại các thuộc tính khoá K = {B1, B2, , Bj} thì phép loại bỏ chỉ cần viết: DEL (r; B1 = f1, B2 = f2, , Bi = fj) – Ví dụ, trong phép loại bỏ nêu trên, vì (S#, P#) là khoá của quan hệ SP nên ta chỉ cần viết: DEL (SP; S# = S3, P# = P2) 18
  19. 5. Các phép toán trên CSDL quan hệ(tiếp) 3. Phép thay đổi (CHANGE hoặc UPDATE) – Trong thực tế không phải lúc nào cũng chỉ dùng phép chèn hoặc loại bỏ đi một bộ mà nhiều khi chỉ cần sửa đổi một số giá trị nào đó tại một số thuộc tính, lúc đó cần thiết phải sử dụng phép thay đổi ("Change" hay viết tắt là CH) – Gọi tập {C1, , Cp}  {A1, , An} là tập các thuộc tính mà tại đó các giá trị của bộ cần thay đổi, khi đó phép thay đổi có dạng: r = r \ t  t' – Hay ta có thể biểu diễn chi tiết phép loại bỏ như sau: CH (r; A1 = d1, A2 = d2, , An = dn; C1 = e1, C2 = e2, , Cp = ep) 19
  20. 5. Các phép toán trên CSDL quan hệ(tiếp) – Nếu K = {B1, , Bm} là khoá của quan hệ, khi đó chỉ cần viết: CH (r; B1 = f1, B2 = f2, , Bm = fm; C1 = e1, C2 = e2, , Cp = ep) – Ví dụ: Cần thay đổi địa chỉ hãng cung cấp S1 từ London thành Amsterdam trong quan hệ S. Khi đó phép thay đổi có dạng như sau: CH (S; S# = S1; CITY = Amsterdam) – Cũng có thể không dùng phép thay đổi mà dùng tổ hợp của phép loại bỏ và phép chèn một bộ mới  Do vậy, sai sót đối với phép thay đổi cũng sẽ xảy ra tương tự như với phép chèn và phép loại bỏ 20
  21. 6. Các bước đưa về dạng chuẩn 3NF. . Buớc 1: Chuyển quan hệ chưa chuẩn hóa thành 1 tập quan hệ tương đương ở dạng 1NF. – 2 phương pháp:  Cách 1: Loại bỏ các nhóm lặp bằng cách đưa dữ liệu thích hợp vào các cột trống của các hàng chứa dữ liệu lặp – Cách này thường được gọi là “làm phẳng” (flattening) – Bằng cách này sữ dư thừa đã được đưa vào quan hệ kết quả, tuy nhiên sự dư thừa này sẽ được loại bỏ trong quá trình chuẩn hóa  Cách 2: – Chỉ định một hoặc một nhóm các thuộc tính làm khóa chính cho bảng chưa chuẩn hóa – Loại bỏ các nhóm lặp bằng cách mang nhóm các thuộc tính lặp lại cùng bản copy của khóa chính sang một quan hệ tách biệt – Nhận diện các khóa chính của các quan hệ mới – Nếu bảng chưa chuẩn hóa có chưa hơn một nhóm lặp lại hay các nhóm lặp lại lồng nhau thì cách này được lặp đi lặp lại cho đến khi không còn nhóm lặp nữa. 21
  22. 6. Các bước đưa về dạng chuẩn 3NF. . Ví dụ: Xét hoạt động của một công ty cho thuê văn phòng. . Với giả thiết: – Mỗi khách hàng chỉ được thuê một văn phòng 1 lần – Mỗi khách hàng chỉ được thuê tối đa 1 văn phòng tại 1 thời điểm, 22
  23. 6. Các bước đưa về dạng chuẩn 3NF. . Giả sử có 2 khách hàng, thông tin về 2 khách hàng thuê được biểu diễn dưới dạng bảng Customer_Rental: 23
  24. 6. Các bước đưa về dạng chuẩn 3NF. . Thuộc tính khóa chính được nhận diện cho bảng chưa chuẩn hóa Customer_Rental là Customer_No. . Nhóm lặp lại: (Property_No, PAddress, RentStart, RentFinish, Rent, Owner_ No, OName). . Để chuyển thành 1NF, phải đảm bảo chỉ có một giá trị tại mỗi ô của bảng. . 2 Cách chuyển thành 1NF: – Cách 1: Loại bỏ nhóm lặp bằng cách đưa dữ liệu tương ứng của khách hàng vào từng hàng của bảng. 24
  25. 6. Các bước đưa về dạng chuẩn 3NF  Cách 2: Loại bỏ nhóm lặp lại bằng cách mang dữ liệu lặp lại cùng bản copy của thuộc tính khoá gốc (Customer_No) sang một quan hệ tách biệt được gọi là Customer như trên hình 3.20  Sau đó nhận diện khoá chính cho mỗi quan hệ 25
  26. 6. Các bước đưa về dạng chuẩn 3NF 26
  27. 6. Các bước đưa về dạng chuẩn 3NF – Bước 2. Tạo các ánh xạ của quan hệ gốc 1NF để hạn chế mọi phụ thuộc hàm không đầy đủ vào khoá chính để tạo ra một tập các quan hệ 2NF theo các bước sau: – Từ quan hệ ban đầu, đối với mỗi thuộc tính của khoá chính, ta tạo một quan hệ tách biệt – Tiếp tục tạo các quan hệ tách biệt mới với tất cả các kết hợp của các thuộc tính của khoá chính cho đến khi tạo được quan hệ với toàn bộ khoá chính gốc – Chỉ định thuộc tính hoặc kết hợp các thuộc tính này làm khoá chính cho các quan hệ mới – Trong quan hệ gốc, tìm sự phụ thuộc hàm đầy đủ của từng thuộc tính trong các thuộc tính còn lại vào các khoá chính mới tìm ra và đặt nó vào quan hệ tương ứng với khoá chính mới này – Khi đã xét hết các thuộc tính còn lại trong quan hệ gốc thì bỏ đi các quan hệ mà chỉ có các thuộc tính khoá mà không có các thuộc tính không khoá khác 27
  28. 6. Các bước đưa về dạng chuẩn 3NF – Ví dụ, xét quan hệ 1NF tên là ORDER như sau: ORDER(Order_Num,Order_Date,Product_Num,Product_Desc,Num_Ordered)  Khoá chính của quan hệ này là kết hợp của hai thuộc tính (Order_Num, Product_Num)  Thuộc tính Num_Ordered phụ thuộc vào toàn bộ khoá chính  Thuộc tính Order_Date chỉ phụ thuộc vào Order_Num  Thuộc tính Product_Desc chỉ phụ thuộc vào Product_Num Như vậy, quan hệ ORDER không phải ở dạng 2NF 28
  29. 6. Các bước đưa về dạng chuẩn 3NF . Theo thủ tục chuyển thành 2NF, tiến hành như sau: – Từ quan hệ ban đầu, với mỗi thuộc tính thuộc khoá chính tạo được các quan hệ tách biệt:  (Order_Num,  (Product_Num, – Kết hợp tiếp theo của các thuộc tính trong khoá chính là hai thuộc tính Order_Num và Product_Num, vì vậy, có thêm quan hệ:  (Order_Num, Product_Num, – Đặt các thuộc tính còn lại trong quan hệ ban đầu ORDER vào các quan hệ mới tương ứng:  ORDER(Order_Num, Order_Date)  PRODUCT(Product_Num, Product_Desc)  ORDER_LINE(Order_Num, Product_Num, Num_Ordered) – Như vậy, thay vì một quan hệ ORDER ban đầu, đã nhận được ba quan hệ ở dạng 2NF 29
  30. 6. Các bước đưa về dạng chuẩn 3NF . Bước 3: Tạo các ánh xạ của các quan hệ 2NF này để hạn chế mọi phụ thuộc hàm bắc cầu của các thuộc tính không khoá vào khoá chính. Kết quả sẽ tạo nên một tập các quan hệ 3NF. – Từ quan hệ 2NF ban đầu, mang bản copy của thuộc tính quyết định cùng tất cả các thuộc tính không khoá mà phụ thuộc hàm vào thuộc tính quyết định này sang một quan hệ mới với thuộc tính quyết định sẽ được chỉ định làm khoá chính của quan hệ mới 30
  31. 6. Các bước đưa về dạng chuẩn 3NF – Ví dụ, xét quan hệ CUSTOMER như sau:  CUSTOMER (Customer_Num, Customer_Name, Address, Sales_Rep_Num, Sales_Rep_Name) – Quan hệ này chưa ở dạng 3NF vì thuộc tính Sales_Rep_Name phụ thuộc hàm vào một thuộc tính là Sales_Rep_Num – Theo thủ tục trên sẽ nhận được 2 quan hệ ở dạng 3NF:  CUSTOMER(Customer_Num, Customer_Name, Address, Sales_Rep_Num)  SALES_REP (Sales_Rep_Num, Sales_Rep_Name) 31
  32. 6. Các bước đưa về dạng chuẩn 3NF . Lưu ý: – Trường hợp quan hệ đã ở dạng 3NF nhưng có các khoá ứng cử phủ nhau thì chưa thể khẳng định là đã ở dạng chuẩn BCNF – Nếu tồn tại thuộc tính quyết định mà không phải là khoá ứng cử thì phải mang bản copy của thuộc tính quyết định cùng các thuộc tính phụ thuộc hàm đầy đủ vào nó sang một quan hệ mới . Mục đích chính của quá trình này là giảm được sự dư thừa thông tin, và do đó tránh được các vấn đề dị thường với các phép toán lưu trữ như đã bàn đến ở trên 32
  33. 7. Các quy tắc toàn vẹn dữ liệu C.J. Date: – Qui tắc Toàn vẹn thực thể (Entity Integrity Rule - EI):  Không một thành phần nào của các thuộc tính dùng làm khoá chính trên một bảng dữ liệu được là null – Qui tắc Toàn vẹn quy chiếu (Referential Integrity Rule - RI):  Nếu một bảng dữ liệu bao gồm một khoá ngoại lai (FK) khớp với một khoá chính (PK) trên một bảng dữ liệu T nào đó, thì mỗi trị của FK phải hoặc: – bằng trị của khoá chính trên một hàng nào đó của bảng dữ liệu T, hoặc – hoàn toàn null (Điều này không nên có vì không kết nối vào đâu) Cần tuân thủ các quy tắc toàn vẹn dữ liệu này trong 3 phép toán thao tác CSDL 33
  34. 7. Các quy tắc toàn vẹn dữ liệu(tiếp) Phép toán Chèn (Insert): – Nếu người sử dụng cố thử đưa vào một bộ với khoá ngoại lai không khớp với trị của khoá chính của bảng dữ liệu tương ứng thì để đảm bảo các quy tắc toàn vẹn dữ liệu, ta có thể cho áp dụng một trong 3 nguyên tắc sau đây:  Gạt bỏ việc thêm hàng này và yêu cầu người sử dụng đưa vào thông tin của khoá chính trên bảng dữ liệu tương ứng – Nguyên tắc này được gọi là nguyên tắc phụ thuộc (DEPENDENT)  Tự động chuyển người sử dụng qua một chương trình khác để cho phép người sử dụng thêm vào quan hệ tương ứng một hàng mới với khoá chính cần thiết – Nguyên tắc này được gọi là nguyên tắc tự động (AUTOMATIC)  Chấp nhận bộ mới với khoá ngoại lai là null, nếu đồng ý chấp nhận null đối với khoá ngoại lai – Nguyên tắc này được gọi là nguyên tắc làm rỗng (NULLIFY) 34
  35. 7. Các quy tắc toàn vẹn dữ liệu(tiếp) Phép toán Thay đổi (Update): – Để xác định sẽ xử lý như thế nào khi người sử dụng cố tình thay đổi khoá chính có liên hệ với một khoá ngoại lai, có thể chọn một trong 3 hướng giải quyết sau đây:  Tự động thay đổi giá trị của khoá ngoại lai cho khớp với giá trị mới của khoá chính – Nguyên tắc này được gọi là nguyên tắc thác đổ hay dây chuyền (CASCADE)  Chỉ cho phép thay đổi giá trị khoá chính ở hàng hiện không có giá trị của khoá chính khớp với giá trị hiện có của khoá ngoại lai tương ứng – Nguyên tắc này được gọi là nguyên tắc hạn chế (RESTRICT)  Cho khoá ngoại lai về null đối với các hàng có giá trị của khoá ngoại lai hiện khớp với giá trị của khoá chính cần thay đổi, nếu đồng ý chấp nhận null đối với khoá ngoại lai – Đây là nguyên tắc làm rỗng (NULLIFY) 35
  36. 7. Các quy tắc toàn vẹn dữ liệu(tiếp) Phép toán Xoá (Delete): – Nếu người sử dụng cố tình xoá một hàng chứa giá trị của khoá chính mà ít nhất có một bảng dữ liệu hiện đang sử dụng giá trị này cho khoá ngoại lai thì quy tắc toàn vẹn dữ liệu có thể tăng cường bằng một trong ba nguyên tắc sau đây (cũng tương tự như với phép thay đổi ở trên):  Tự động xoá tất cả các hàng trong tất cả các bảng dữ liệu có giá trị của khoá ngoại lai trùng với giá trị của khoá chính cần xoá – Nguyên tắc này được gọi là nguyên tắc thác đổ hay dây chuyền (CASCADE)  Chỉ cho phép xoá giá trị khoá chính ở hàng hiện không có giá trị của khoá chính khớp với giá trị hiện có của khoá ngoại lai tương ứng – Nguyên tắc này được gọi là nguyên tắc hạn chế (RESTRICT)  Cho khoá ngoại lai về null đối với các hàng có giá trị của khoá ngoại lai hiện khớp với giá trị của khoá chính cần xoá, nếu đồng ý chấp nhận null đối với khoá ngoại lai – Đây là nguyên tắc làm rỗng (NULLIFY) 36