1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Hệ cơ sở dữ liệu: Chương 5.2 - TS. Lê Thị Tú Kiên

75 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 75
Dung lượng 873,07 KB

Nội dung

Bài giảng Hệ cơ sở dữ liệu: Chương 5.2 cung cấp cho người học những kiến thức như: Các phép tách lược đồ quan hệ; Chuyển đổi mô hình thực thể liên kết sang mô hình quan hệ; Định nghĩa phép tách lược đồ quan hệ; Phép tách kết nối không tổn thất về BCNF; Phép tách bảo toàn phụ thuộc về 3NF. Mời các bạn cùng tham khảo!

CHƢƠN V THIẾT KẾ CƠ SỞ DỮ LIỆU QUAN HỆ Ở MỨC KHÁI NIỆM TS Nguyễn Thị Kim Ngân Nội dung          Dư thừa dị thường liệu Phụ thuộc hàm Hệ tiên đề Armstrong Bao đóng tập thuộc tính Phủ tập PTH Xác định khóa lược đồ quan hệ Chuẩn hóa lược đồ quan hệ Các phép tách lược đồ quan hệ Chuyển đổi mơ hình thực thể liên kết sang mơ hình quan hệ Các phép tách lược đồ quan hệ    Định nghĩa phép tách lược đồ quan hệ Phép tách kết nối khơng tổn thất BCNF Phép tách bảo tồn phụ thuộc 3NF Các phép tách lược đồ quan hệ    Định nghĩa phép tách lược đồ quan hệ Phép tách kết nối không tổn thất chuẩn BCNF Phép tách bảo toàn phụ thuộc chuẩn 3NF Định nghĩa phép tách lược đồ quan hệ Cho lược đồ quan hệ R= U1, U2, …, Uk tập U cho U1  U2 …  Uk=U Fi= Ui(F)={{XY| XY F+, XYUi}, i=1, ,k Phép tách lược đồ R việc thay R= lược đồ R1 =, R2 =, …, Rk= Kí hiệu phép tách: =(R1, R2, …, Rk) =(U1, U2, …, Uk) Phép tách kết nối không tổn thất Cho lược đồ quan hệ R= r quan hệ R thỏa mãn F U1, U2, …, Uk tập U cho U=U1  U2 …  Uk Fi= Ui(F)={XY| XY F+, XYUi}, i=1, ,k Ri=, i=1, ,k ri=Ui(r), i=1, ,k Phép tách R thành {R1, R2, …, Rk} gọi tách kết nối không tổn thất (Lossless Join Decomposition) tập phụ thuộc hàm F r=r1 * r2 *…* rk Phép tách kết nối không tổn thất Bổ đề Cho, R= lược đồ quan hệ, r quan hệ R thỏa F U1, U2, …, Uk tập U cho U=U1  U2 …  Uk Fi= Ui(F)={XY| XY F+, XYUi}, i=1, ,k Ri=, i=1, ,k =(R1, R2, …, Rk) phép tách R ri=Ui(r), i=1, ,k m(r)=r1 * r2 *…* rk Khi i) r m(r) ii) Nếu s=m(r) Ui(s)=ri, i=1, ,k iii) m(m(r))=m(r) Kiểm tra tính kết nối không tổn thất phép tách Bài tốn Cho lược đồ R , đó, U={A1, A2, …, An} tập thuộc tính, F tập phụ thuộc hàm, U1, U2, …, Uk tập U cho U1  U2 …  Uk=U Kiểm tra phép tách =(U1, U2, …, Uk) có phải phép tách kết nối khơng tổn thất hay khơng? Kiểm tra tính kết nối khơng tổn thất phép tách Thuật toán Vào: U={A1, A2, …, An}, F, =(U1, U2, …, Uk) Ra: Kết luận  có phải phép tách kết nối khơng tổn thất hay không? Phƣơng pháp: Bước 1: Lập bảng kxn, Tại dịng i, cột j ta kí hiệu aj AjUi, ngược lại, ta kí hiệu bij Bước 2: Với XY  F, xét dịng có kí hiệu tập X Các dịng thay đổi kí hiệu để chúng mang giá trị tập Y, theo quy tắc: - Nếu tồn kí hiệu có dạng aj kí hiệu cịn lại đổi thành aj - Nếu khơng có giá trị có dạng aj lấy tùy ý ký hiệu bij để làm Bước lặp lại khơng có thay đổi bảng Nếu bước kết thúc, bảng có dịng gồm tồn ký hiệu dạng aj  phép tách kết nối khơng tổn thất, ngược lại  phép tách kết nối tổn thất Kiểm tra tính kết nối khơng tổn thất phép tách Ví dụ Cho R=, U={S, A, I, P} F={SA, SI  P} Kiểm tra =(SA, SIP) có phép tách khơng tổn thất hay không? Bảng khởi tạo SA S A I a1 a2 b13 b14 SIP a1 b22 a3 P a4 Bước Chuyển kiểu liên kết cấp 2, tỉ số liên kết N:M thành lược đồ quan hệ Nguyên tắc:  Giả sử, lược đồ quan hệ S tương ứng với thực thể tham gia phía N, lược đồ quan hệ T tương ứng với thực thể tham gia phía M kiểu liên kết S T -> Khóa ngồi lược đồ  Các thuộc tính đơn (các thành phần đơn thuộc tính phức hợp) kiểu liên kết -> Các thuộc tính của lược đồ  Hợp khóa S T -> Khóa lược đồ  Khóa Ví dụ Mã nhân viên Giới tính Ngày sinh Họ tên Đường phố NHÂN VIÊN Số nhà Xã Bậc lương Lương M THAM GIA N Số Huyện Địa DỰ ÁN Mã dự án Tên dự án Tỉnh THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ) Địa điểm Cách thiết kế lược đồ sở liệu cho tốn quản lí Cách 1: Chuyển biểu đồ ER thành lược đồ quan hệ Cách 2: Dùng phép tách Chuyển biểu đồ ER thành lược đồ quan hệ    Bước 1: Xây dựng biểu đồ thực thể liên kết (ER) toán quản lí Bước 2: ER -> Các lược đồ quan hệ Bước 3: Xây dựng tập phụ thuộc hàm lược đồ Kiểm tra dạng chuẩn lược đồ Lược đồ chưa thuộc dạng chuẩn tốt dùng phép tách để tách lược đồ thành lược đồ thuộc dạng chuẩn tốt Ví dụ Một công ti cần thiết kế CSDL để quản lý thơng tin sau: Các phịng: Mỗi phịng có tên nhất, mã số nhất, trưởng phịng có nhiều địa điểm Ngày mà nhân viên bổ nhiệm làm trưởng phòng lưu trữ Các dự án: Mỗi dự án có mã số nhất, tên địa điểm Một phịng quản lí số dự án Các nhân viên: Mỗi nhân viên cần lưu thông tin: mã nhân viên, họ tên, ngày sinh, giới tính, bậc lương, lương, địa (phân chia thành số nhà, đường phố, xã, huyện, tỉnh) Mỗi nhân viên có mã nhân viên nhất, phân biệt với nhân viên khác Một nhân viên thuộc vào phịng đó, tham gia nhiều dự án (không bắt buộc dự án phải thuộc phòng làm việc nhân viên) Số làm việc nhân viên cho dự án lưu trữ Một nhân viên người hướng dẫn công việc cho số nhân viên khác Các người phụ thuộc: Những người phụ thuộc nhân viên gồm: con, vợ/chồng, bố, mẹ Thông tin người phụ thuộc gồm: họ tên, gới tính, ngày sinh mối quan hệ với nhân viên Bước Xây dựng biểu đồ ER Giới tính Mã nhân viên Ngày sinh Ngày bổ nhiệm Bậc lương Họ tên Đường phố N hd Huyện tt M Địa Tỉnh QUẢN LÍ Mã phịng Địa điểm NHÂN VIÊN Số nhà Xã Tên phòng Lương HƯỚNG DẪN N LÀM VIỆC CHO THAM GIA PHỤ THUỘC VÀO N N Số PHÒNG ĐIỀU HÀNH N DỰ ÁN PHỤ THUỘC Họ tên Ngày sinh Quan hệ Giới tính Mã dự án Tên dự án Địa điểm Bước Xây dựng lược đồ quan hệ NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phịng) PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ) PHỊNG(Mã phịng, Tên_phịng, Mã_nhân_viên, Ngày_bổ_nhiệm) ĐỊA_ĐIỂM(Mã_phịng, Địa_chỉ) DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng) THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ) Bước Kiểm tra dạng chuẩn lược đồ NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng) F1= {Mã_nhân_viên {Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phịng}} =>NHÂN_VIÊN  BCNF PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ) F2= {Mã_nhân_viên, Họ_tên  {Ngày_sinh, Giới_tính, Quan_hệ}} =>PHỤ_THUỘC  BCNF Bước Kiểm tra dạng chuẩn lược đồ PHỊNG(Mã phịng, Tên_phịng, Mã_nhân_viên, Ngày_bổ_nhiệm) F3 ={Mã_phịng  {Tên_phịng, Mã_nhân_viên, Ngày_bổ_nhiệm}} =>PHỊNG  BCNF ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ) F4={} =>ĐỊA_ĐIỂM  BCNF Bước Kiểm tra dạng chuẩn lược đồ DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng) F5={Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}} =>DỰ_ÁN  BCNF THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ) F6={{Mã_nhân_viên, Mã_dự_án}  Số_giờ} =>THAM_GIA  BCNF Tập lược đồ quan hệ tốn NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phòng) F1= {Mã_nhân_viên {Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phịng}} PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ) F2= {Mã_nhân_viên, Họ_tên  {Ngày_sinh, Giới_tính, Quan_hệ}} PHỊNG(Mã phịng, Tên_phịng, Mã_nhân_viên, Ngày_bổ_nhiệm) F3 ={Mã_phịng  {Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm}} ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ) F4={} DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng) F5={Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}} THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ) F6={{Mã_nhân_viên, Mã_dự_án}  Số_giờ} Dùng phép tách   Bƣớc 1: Xây dựng lược đồ ban đầu bao gồm tất thuộc tính tất phụ thuộc hàm Kiểm tra dạng chuẩn lược đồ quan hệ Bƣớc 2: Nếu lược đồ chưa thuộc dạng chuẩn tốt, dùng phép tách để tách thành lược đồ dạng chuẩn tốt Ví dụ Một cơng ti cần thiết kế CSDL để quản lý thông tin sau: Các phịng: Mỗi phịng có tên nhất, mã số nhất, trưởng phịng có nhiều địa điểm Ngày mà nhân viên bổ nhiệm làm trưởng phòng lưu trữ Các dự án: Mỗi dự án có mã số nhất, tên địa điểm Một phịng quản lí số dự án Các nhân viên: Mỗi nhân viên cần lưu thông tin: mã nhân viên, họ tên, ngày sinh, giới tính, bậc lương, lương, địa (phân chia thành số nhà, đường phố, xã, huyện, tỉnh) Mỗi nhân viên có mã nhân viên nhất, phân biệt với nhân viên khác Một nhân viên thuộc vào phòng đó, tham gia nhiều dự án (khơng bắt buộc dự án phải thuộc phòng làm việc nhân viên) Số làm việc nhân viên cho dự án lưu trữ Một nhân viên người hướng dẫn cơng việc cho số nhân viên khác Các người phụ thuộc: Những người phụ thuộc nhân viên gồm: con, vợ/chồng, bố, mẹ Thông tin người phụ thuộc gồm: họ tên, gới tính, ngày sinh mối quan hệ với nhân viên Bước R(Mã_nhân_viên, Họ_tên_nv, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Họ_tên_pt, Ngày_sinh, Giới_tính, Quan_hệ, Mã phòng, Tên_phòng, Mã_nhân_viên_tp, Ngày_bổ_nhiệm, Mã_địa_điểm, Địa_chỉ_phòng, Mã_dự_án, Tên_dự_án, Địa_điểm, Số_giờ) F= {Mã_nhân_viên {Họ_tên_nv, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phịng}, {Mã_nhân_viên, Họ_tên_pt}  {Ngày_sinh, Giới_tính, Quan_hệ}, Mã_phòng  {Tên_phòng, Mã_nhân_viên_tp, Ngày_bổ_nhiệm}, Mã_nhân_viên_tp Mã_nhân_viên, Mã_địa_điểm  {Mã_phòng, Địa_chỉ_phòng}, Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}, Mã_nhân_viên, Mã_dự_án}  Số_giờ}} R  1NF Bước Dùng phép tách kết nối khơng tổn thất thành BCNF ta có lược đồ NHÂN_VIÊN(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phịng) F1= {Mã_nhân_viên {Họ_tên, Ngày_sinh, Giới_tính, Bậc_lương, Lương, Số_nhà, Đường_phố, Xã, Huyện, Tỉnh, Mã_phịng}} PHỤ_THUỘC(Mã_nhân_viên, Họ_tên, Ngày_sinh, Giới_tính, Quan_hệ) F2= {Mã_nhân_viên, Họ_tên  {Ngày_sinh, Giới_tính, Quan_hệ}} PHỊNG(Mã phịng, Tên_phịng, Mã_nhân_viên, Ngày_bổ_nhiệm) F3 ={Mã_phòng  {Tên_phòng, Mã_nhân_viên, Ngày_bổ_nhiệm}} ĐỊA_ĐIỂM(Mã_phòng, Địa_chỉ) F4={} DỰ_ÁN(Mã_dự_án, Tên_dự_án, Địa_điểm, Mã_phòng) F5={Mã_dự_án  {Tên_dự_án, Địa_điểm, Mã_phòng}} THAM_GIA(Mã_nhân_viên, Mã_dự_án, Số_giờ) F6={{Mã_nhân_viên, Mã_dự_án}  Số_giờ} ... U={A1, A2, …, Ai-1, Ai …, Aj, Aj+1…, An} U1={A1, A2, …, Ai-1, Ai …, Aj} U2={Ai , …, Aj,Aj+1 …, An} Bảng khởi tạo A1 A2 … Ai-1 Ai … Aj Aj+1 … An … ai-1 … aj b1j+1 … b1n U2 b21 b22 … bi-1 … aj aj+1... …, Ai-1, Ai …, Aj, Aj+1…, An} U1={A1, A2, …, Ai-1, Ai …, Aj} U2={Ai , …, Aj,Aj+1 …, An} Nếu U1U2 U1U2 F+ => Ai, Ai+1 …, Aj A1, A2, …, Ai-1 F+ A1 A2 … Ai-1 Ai … Aj Aj+1 … An A1 A2 … Ai-1 Ai... …, Ai-1, Ai …, Aj, Aj+1…, An} U1={A1, A2, …, Ai-1, Ai …, Aj} U2={Ai , …, Aj,Aj+1 …, An} Nếu U1U2 U1U2 F+ => Ai, Ai+1 …, Aj A1, A2, …, Ai-1 F+ A1 A2 … Ai-1 Ai … Aj Aj+1 … An A1 A2 … Ai-1 Ai

Ngày đăng: 25/10/2022, 09:51