Tài liệu bài giảng Cơ sở dữ liệu

Ví dụ: Cho Q (A, B, C, D, E, I), F={ACD → EBI, CE → AD} Bước 1: Q có hai khóa là {ACD, CE} Bước 2: Phân rã vế phải của các phụ thuộc hàm trong F, ta có: F={ACD → E, ACD → B, ACD → I, CE → A, CE → D} Bước 3: Mọi phụ thuộc hàm trong F đều có vế trái là một siêu khóa Vậy Q đạt dạng chuẩn BC.

pdf179 trang | Chia sẻ: vutrong32 | Lượt xem: 1268 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Tài liệu bài giảng Cơ sở dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
n Ngoc Linh Nu Tay Ninh K11 57  Phép chiếu lên 1 tập thuộc tính X={Hoten,Noisinh} của quan hệ HOCVIEN HOCVIEN[Hoten, Noisinh] = {(‘Ha Duy Lap’, ‘Nghe An’),(‘Tran Ngoc Han’, ‘Kien Giang’),(‘Tran Ngoc Linh’,’Tay Ninh’)} HOCVIEN Mahv HoTen Gioitinh Noisinh Malop K1103 Ha Duy Lap Nam Nghe An K11 K1102 Tran Ngoc Han Nu Kien Giang K11 K1104 Tran Ngoc Linh Nu Tay Ninh K11 58  Chiếu của một bộ lên tập thuộc tính: dùng để trích chọn các giá trị cụ thể của bộ giá trị đó theo các thuộc tính được chỉ ra trong danh sách thuộc tính của một quan hệ.  Ký hiệu: chiếu của một bộ giá trị t lên tập thuộc tính X của quan hệ R là tR[X] hoặc t[X]. Nếu X có 1 thuộc tính tR.X  Ví dụ: cho quan hệ HOCVIEN với tập thuộc tính HOCVIEN+={Mahv,Hoten,Gioitinh,Noisinh,Malop}, chứa 3 bộ giá trị hv1,hv2 và hv3 59  Phép chiếu 1 bộ lên 1 thuộc tính ◦ hv1[Hoten] = (‘Ha Duy Lap’) HOCVIEN Mahv HoTen Gioitinh Noisinh Malop K1103 Ha Duy Lap Nam Nghe An K11 K1102 Tran Ngoc Han Nu Kien Giang K11 K1104 Tran Ngoc Linh Nu Tay Ninh K11 hv1= hv2= hv3= 60  Phép chiếu 1 bộ lên 1 tập thuộc tính ◦ tập thuộc tính X={Hoten, Gioitinh} ◦ hv2[X] = (‘Tran Ngoc Han’,’Nu’) ◦ hv1 = ◦ hv2 = ◦ hv3 = HOCVIEN Mahv HoTen Gioitinh Noisinh Malop K1103 Ha Duy Lap Nam Nghe An K11 K1102 Tran Ngoc Han Nu Kien Giang K11 K1104 Tran Ngoc Linh Nu Tay Ninh K11 61 2.7.1 Siêu khóa (super key) 2.7.2 Khóa (key) 2.7.3 Khóa chính (primary key) 2.7.4 Khóa tương đương 2.7.5 Khóa ngoại (foreign key) 62  Siêu khóa : là một tập con các thuộc tính của Q+ mà giá trị của chúng có thể phân biệt 2 bộ khác nhau trong cùng một thể hiện TQ bất kỳ. Nghĩa là:  t1, t2  TQ, t1[K] t2[K] K là siêu khóa của Q.  Một quan hệ có ít nhất một siêu khóa (Q+) và có thể có nhiều siêu khóa. 63  Ví dụ: các siêu khóa của quan hệ HOCVIEN là: {Mahv};{Mahv,Hoten};{Hoten};{Noisinh,Hoten} HOCVIEN Mahv HoTen Gioitinh Noisinh Malop K1103 Ha Duy Lap Nam Nghe An K11 K1102 Tran Ngoc Han Nu Kien Giang K11 K1104 Tran Ngoc Linh Nu Tay Ninh K11 K1105 Tran Minh Long Nam TpHCM K11 K1106 Le Nhat Minh Nam TpHCM K11 64 Khóa : K là khóa của quan hệ R, thỏa mãn 2 điều kiện:  K là một siêu khóa.  K là siêu khóa “nhỏ nhất” (chứa ít thuộc tính nhất và khác rỗng) nghĩa là ¬K1 K, K1  sao cho K1 là siêu khóa.  Thuộc tính tham gia vào một khóa gọi là thuộc tính khóa, ngược lại là thuộc tính không khóa. 65  Ví dụ: các siêu khóa của quan hệ HOCVIEN là: {Mahv};{Mahv,Hoten};{Hoten};{Hoten,Gioitinh}; {Noisinh,Hoten};{Mahv,Hoten,Gioitinh,Noisinh} => thì khóa của quan hệ HOCVIEN có thể là {Mahv}; {Hoten}  Ví dụ: khóa của quan hệ GIANGDAY (Malop, Mamh, Magv, HocKy, Nam) là K={Malop,Mamh}. Thuộc tính khóa sẽ là: Mamh,Malop. Thuộc tính không khóa sẽ là Magv, HocKy, Nam. 66  Khi cài đặt trên một DBMS cụ thể, nếu quan hệ có nhiều hơn một khóa, ta chỉ được chọn một và gọi là khóa chính  Ký hiệu: các thuộc tính nằm trong khóa chính khi liệt kê trong quan hệ phải được gạch dưới.  Ví dụ: ◦ HOCVIEN (Mahv,Hoten,Gioitinh,Noisinh,Malop) ◦ GIANGDAY(Mamh,Malop,Magv,Hocky,Nam) 67  Các khóa còn lại (không được chọn làm khóa chính) gọi là khóa tương đương.  Ví dụ: trong hai khóa {Mahv},{Hoten} thì khóa chính là {Mahv}, khóa tương đương là {Hoten} 68  Cho R(U), S(V). K1U là khóa chính của R,K2V  Ta nói K2 là khóa ngoại của S tham chiếu đến khóa chính K1 của R nếu thỏa các điều kiện sau: ◦ K1 và K2 có cùng số lượng thuộc tính và ngữ nghĩa của các thuộc tính trong K1 và K2 cũng giống nhau. ◦ Giữa R và S tồn tại mối quan hệ 1-n trên K1 và K2, ◦ s  S, !r  R sao cho r.K1=s.K2 69  Ví dụ, cho 2 quan hệ LOP (Malop,Tenlop,Siso,Khoahoc) HOCVIEN (Mahv,Hoten,Gioitinh,Noisinh,Malop)  Thuộc tính Malop trong quan hệ LOP là khóa chính của quan hệ LOP. Thuộc tính Malop trong quan hệ HOCVIEN là khóa ngoại, tham chiếu đến Malop trong quan hệ LOP 70 HOCVIEN Mahv HoTen Gioitinh Noisinh Malop K1103 Ha Duy Lap Nam Nghe An K11 K1102 Tran Ngoc Han Nu Kien Giang K11 K1104 Tran Ngoc Linh Nu Tay Ninh K11 K1105 Tran Minh Long Nam TpHCM K11 K1106 Le Nhat Minh Nam TpHCM K11 LOP Malop Tenlop Trglop Siso Magvcn K11 Lop 1 khoa 1 K1106 11 GV07 K12 Lop 2 khoa 1 K1205 12 GV09 K13 Lop 3 khoa 1 K1305 12 GV14 71  Lược đồ quan hệ nhằm mục đích mô tả cấu trúc của một quan hệ và các mối liên hệ giữa các thuộc tính trong quan hệ đó.  Cấu trúc của một quan hệ là tập thuộc tính hình thành nên quan hệ đó.  Một lược đồ quan hệ gồm một tập thuộc tính của quan hệ kèm theo một mô tả để xác định ý nghĩa và mối liên hệ giữa các thuộc tính 72  Lược đồ quan hệ được đặc trưng bởi: ◦ Một tên phân biệt ◦ Một tập hợp hữu hạn các thuộc tính (A1, , An)  Ký hiệu của lược đồ quan hệ Q gồm n thuộc tính (A1, A2, ... An) là : ◦ Q(A1, A2, ..., An) 73  HOCVIEN(Mahv,Hoten,Gioitinh,Noisinh,Malop)  Tân từ: mỗi học viên có một mã học viên để phân biệt với các học viên khác. Cần lưu trữ họ tên, giới tính, nơi sinh và thuộc lớp nào. HOCVIEN Mahv HoTen Gioitinh Noisinh Malop K1103 Ha Duy Lap Nam Nghe An K11 K1102 Tran Ngoc Han Nu Kien Giang K11 K1104 Tran Ngoc Linh Nu Tay Ninh K11 K1105 Tran Minh Long Nam TpHCM K11 K1106 Le Nhat Minh Nam TpHCM K11 74  Là tập hợp gồm các lược đồ quan hệ và các mối liên hệ giữa chúng trong cùng một hệ thống quản lý. Các CSDL Hệ Quản Trị CSDL Các quan hệ 75 HOCVIEN (MAHV, HO, TEN, NGSINH, GIOITINH, NOISINH, MALOP) Tân từ: mỗi học viên phân biệt với nhau bằng mã học viên, lưu trữ họ tên, ngày sinh, giới tính, nơi sinh, thuộc lớp nào. LOP (MALOP, TENLOP, TRGLOP, SISO, MAGVCN) Tân từ: mỗi lớp gồm có mã lớp, tên lớp, học viên làm lớp trưởng của lớp, sỉ số lớp và giáo viên chủ nhiệm. KHOA (MAKHOA, TENKHOA, NGTLAP, TRGKHOA) Tân từ: mỗi khoa cần lưu trữ mã khoa, tên khoa, ngày thành lập khoa và trưởng khoa (cũng là một giáo viên thuộc khoa). MONHOC (MAMH, TENMH, TCLT, TCTH, MAKHOA) Tân từ: mỗi môn học cần lưu trữ tên môn học, số tín chỉ lý thuyết, số tín chỉ thực hành và khoa nào phụ trách. DIEUKIEN (MAMH, MAMH_TRUOC) Tân từ: có những môn học học viên phải có kiến thức từ một số môn học trước. 76 GIAOVIEN(MAGV,HOTEN,HOCVI,HOCHAM,GIOITINH,NGSINH,NGVL, HESO, MUCLUONG, MAKHOA) Tân từ: mã giáo viên để phân biệt giữa các giáo viên, cần lưu trữ họ tên, học vị, học hàm, giới tính, ngày sinh, ngày vào làm, hệ số, mức lương và thuộc một khoa. GIANGDAY(MALOP,MAMH,MAGV,HOCKY, NAM,TUNGAY,DENNGAY) Tân từ: mỗi học kỳ của năm học sẽ phân công giảng dạy: lớp nào học môn gì do giáo viên nào phụ trách. KETQUATHI (MAHV, MAMH, LANTHI, NGTHI, DIEM, KQUA) Tân từ: lưu trữ kết quả thi của học viên: học viên nào thi môn học gì, lần thi thứ mấy, ngày thi là ngày nào, điểm thi bao nhiêu và kết quả là đạt hay không đạt. 77 Chương 3: Đại số quan hệ 78  Là một mô hình toán học dựa trên lý thuyết tập hợp  Đối tượng xử lý là các quan hệ trong cơ sở dữ liệu quan hệ  Cho phép sử dụng các phép toán rút trích dữ liệu từ các quan hệ  Tối ưu hóa quá trình rút trích dữ liệu  Gồm có:  Các phép toán đại số quan hệ  Biểu thức đại số quan hệ 79 1. ĐSQH - Các phép toán ĐSQH, biểu thức ĐSQH  Có năm phép toán cơ bản: ◦ Chọn ( ) Chọn ra các dòng (bộ) trong quan hệ thỏa điều kiện chọn. ◦ Chiếu ( ) Chọn ra một số cột. ◦ Tích Descartes ( ) Nhân hai quan hệ lại với nhau. ◦ Trừ ( ) Chứa các bộ của quan hệ 1 nhưng không nằm trong quan hệ 2. ◦ Hội ( ) Chứa các bộ của quan hệ 1 và các bộ của quan hệ 2.  Các phép toán khác: ◦ Giao (  ), kết ( ), chia ( / hay ), đổi tên ( ): là các phép toán không cơ bản (được suy từ 5 phép toán trên, trừ phép đổi tên).  Biểu thức đại số quan hệ: ◦ Là một biểu thức gồm các phép toán ĐSQH. ◦ Biểu thức ĐSQH được xem như một quan hệ (không có tên) ◦ Kết quả thực hiện các phép toán trên cũng là các quan hệ, do đó có thể kết hợp giữa các phép toán này để tạo nên các quan hệ mới!     80  Biểu diễn cách 1 :   (Quan hệ) (Điều kiện 1  điều kiện 2  .) Cú pháp :  Ngoài ra, có thể biểu diễn cách 2:  (NhanVien) Câu hỏi 1: Cú pháp : (Quan hệ: điều kiện chọn) Câu hỏi 1: Phai=‘Nam’ (NhanVien: Phai=‘Nam’) NHANVIEN MANV HOTEN NTNS PHAI NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NV002 Trần Đông Anh 01/08/1981 Nữ NV003 Lý Phước Mẫn 02/04/1969 Nam NHANVIEN MANV HOTEN NTNS PHAI NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NV003 Lý Phước Mẫn 02/04/1969 Nam Kết quả phép chọn Câu hỏi 1: Cho biết các nhân viên nam ? 81  Biểu diễn cách 1 :   Biểu diễn cách 2:  (NhanVien) (Phai=‘Nam’  Year(NTNS)>1975) (NhanVien: Phai=‘Nam’  Year(NTNS)>1975) NHANVIEN MANV HOTEN NTNS PHAI NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NV002 Trần Đông Anh 01/08/1981 Nữ NV003 Lý Phước Mẫn 02/04/1969 Nam NHANVIEN MANV HOTEN NTNS PHAI Kết quả phép chọn Câu hỏi 2: Cho biết các nhân viên nam sinh sau năm 1975 ? (không có bộ nào thỏa) Câu hỏi 2: Câu hỏi 2: 82  Biểu diễn cách 1 : (Quan hệ) Cột1, cột2, cột 3, . Cú pháp :  Ngoài ra, có thể biểu diễn cách 2: (NhanVien) Câu hỏi 3 : Cú pháp : Quan hệ [cột1,cột2,cột3,] Câu hỏi 3: HOTEN, PHAI NhanVien [HoTen, Phai] NHANVIEN MANV HOTEN NTNS PHAI NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NV002 Trần Đông Anh 01/08/1981 Nữ NV003 Lý Phước Mẫn 02/04/1969 Nam Kết quả phép chiếu Câu hỏi 3: Cho biết họ tên nhân viên và giới tính ?    NHANVIEN HOTEN PHAI Nguyễn Tấn Đạt Nam Trần Đông Anh Nữ Lý Phước Mẫn Nam 83  Biểu diễn cách 1:  Biểu diễn cách 2: Câu hỏi 4: (NhanVien: Phai=‘Nam’) [HoTen, NTNS] NHANVIEN MANV HOTEN NTNS PHAI NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NV002 Trần Đông Anh 01/08/1981 Nữ NV003 Lý Phước Mẫn 02/04/1969 Nam Kết quả phép chiếu Câu hỏi 4: Cho biết họ tên và ngày tháng năm sinh của các nhân viên nam?   (NhanVien) (Phai=‘Nam’) Bước 1: Q Kết quả phép chọn (còn gọi là biểu thức ĐSQH) được đổi tên thành quan hệ Q Bước 2: (Q)  HOTEN, NTNS NHANVIEN HOTEN NTNS Nguyễn Tấn Đạt 10/12/1970 Lý Phước Mẫn 02/04/1969 84 Quan-hệ-1 Cú pháp : Câu hỏi 5: Tính tích Descartes giữa 2 quan hệ nhân viên và phòng ban  Quan-hệ-2  PHONGBAN MAPH TENPH TRPH NC Nghiên cứu NV001 DH Điều hành NV002 NHANVIEN PHONGBAN   Quan-hệ-k Câu hỏi 5 được viết lại: Nam Nữ Nam 02/04/1969 01/08/1981 10/12/1970 NTNS HOTEN MANV Nguyễn Tấn Ðạt NV001 Lý Phước Mẫn NV003 Trần Ðông Anh NV002 NHANVIEN PHAI PHONG DH NC NC NHANVIEN X PHONGBAN MANV HOTEN NTNS PHAI PHONG MAPH TENPH TRPH NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC NC Nghiên cứu NV001 NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC DH Điều hành NV002 NV002 Trần Đông Anh 01/08/1981 Nữ DH NC Nghiên cứu NV001 NV002 Trần Đông Anh 01/08/1981 Nữ DH DH Điều hành NV002 NV003 Lý Phước Mẫn 02/04/1969 Nam NC NC Nghiên cứu NV001 NV003 Lý Phước Mẫn 02/04/1969 Nam NC DH Điều hành NV002 85 Câu hỏi 6: Cho biết mã nhân viên, họ tên và tên phòng mà n/v trực thuộc. ((NHANVIEN X PHONGBAN) : NHANVIEN.PHONG=PHONGBAN.MAPH) MANV HOTEN NTNS PHAI PHONG MAPH TENPH TRPH NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC NC Nghiên cứu NV001 NV001 Nguyễn Tấn Đạt 10/12/1970 Nam NC DH Điều hành NV002 NV002 Trần Đông Anh 01/08/1981 Nữ DH NC Nghiên cứu NV001 NV002 Trần Đông Anh 01/08/1981 Nữ DH DH Điều hành NV002 NV003 Lý Phước Mẫn 02/04/1969 Nam NC NC Nghiên cứu NV001 NV003 Lý Phước Mẫn 02/04/1969 Nam NC DH Điều hành NV002 -Đặt vấn đề: trở lại ví dụ 5, ta thấy nếu thực hiện phép tích Decartes NHANVIEN X PHONGBAN thì mỗi nhân viên đều thuộc 2 phòng (vì có tổng cộng là 2 phòng ban, nếu có 3, 4,phòng ban thì số dòng cho một nhân viên trong NHANVIEN X PHONGBAN sẽ là 3, 4,..dòng. - Thực tế mỗi nhân viên chỉ thuộc duy nhất 1 phòng ban do ràng buộc khóa ngoại (PHONG), do đó để lấy được giá trị MAPH đúng của mỗi nhân viên  phải có điều kiện chọn: NHANVIEN.PHONG = PHONGBAN.MAPH biểu diễn phép chọn theo cách 2 (Theta-Join) 86  Cách 1: (NHANVIEN  PHONGBAN): (NHANVIEN.PHONG=PHONGBAN.MAPH)  (NHANVIEN X PHONGBAN) NHANVIEN.PHONG=PHONGBAN.MAPH  Cách 2: Quan-hệ-1 * Phép kết được định nghĩa là phép tích Decartes và có điều kiện chọn liên quan đến các thuộc tính giữa 2 quan hệ, cú pháp : Quan-hệ-2 (Phép kết với đk tổng quát được gọi là -kết,  có thể là , =, >, =, <=. Nếu đk kết là phép so sánh = thì gọi là kết bằng) Câu hỏi 6 viết lại cách 1: MANV,HOTEN,TENPH (NHANVIEN PHONG=MAPH PHONGBAN) Câu hỏi 6 viết lại cách 2: (NHANVIEN PHONG=MAPH PHONGBAN) [MANV,HOTEN,TENPH] Điều kiện kết (Theta-Join) 87 ( Kết bằng ) NHANVIEN PHONG=MAPH PHONGBAN Nếu PHONG trong NHANVIEN được đổi thành MAPH thì ta bỏ đi 1 cột MAPH thay vì phải để MAPH=MAPH ( Kết tự nhiên ) NHANVIEN PHONGBAN Kết bằng: Kết tự nhiên: (natural-join) Hoặc viết cách khác: NHANVIEN * PHONGBAN equi-join natural-join NHANVIEN MAPH PHONGBAN 88 Câu hỏi 7: Tìm họ tên các trưởng phòng của từng phòng ? HOTEN, TENPH (PHONGBAN TRPH=MANV NHANVIEN) Câu hỏi 8: Cho lược đồ CSDL như sau: TAIXE (MaTX, HoTen, NgaySinh, GioiTinh, DiaChi) CHUYENDI (SoCD, MaXe, MaTX, NgayDi, NgayVe, ChieuDai, SoNguoi) Cho biết họ tên tài xế, ngày đi, ngày về của những chuyến đi có chiều dài >=300km, chở từ12 người trở lên trong mỗi chuyến? HoTen, NgayDi, NgayVe (Q MATX TAIXE)  (ChieuDai>=300  SoNguoi>=12) (CHUYENDI) Q Kết quả: ((CHUYENDI : ChieuDai>=300  SoNguoi>=12) Cách 1: Cách 2: TAIXE) [HoTen, NgayDi, NgayVe] MATX 89  Mở rộng phép kết để tránh mất thông tin  Thực hiện phép kết và sau đó thêm vào kết quả của phép kết các bộ của quan hệ mà không phù hợp với các bộ trong quan hệ kia.  Có 3 loại: ◦ Left outer join R S (giữ lại các bộ của quan hệ trái) ◦ Right outer join R S (giữ lại các bộ của quan hệ phải) ◦ Full outer join R S (giữ lại các bộ của quan hệ trái, phải)  Ví dụ: In ra danh sách tất cả tài xế và số chuyến đi, mã xe mà tài xế đó lái (nếu có) 90  TAIXE CHUYENDI matx TAIXE MaTX Hoten TX01 Huynh Trong Tao TX02 Nguyen Sang TX03 Le Phuoc Long TX04 Nguyen Anh Tuan CHUYENDI SoCD MaTX MaXe CD01 TX01 8659 CD02 TX02 7715 CD03 TX01 8659 CD04 TX03 4573 Matx Hoten SoCD Matx Maxe TX01 Huynh Trong Tao CD01 TX01 8659 TX01 Huynh Trong Tao CD03 TX01 8659 TX02 Nguyen Sang CD02 TX02 7715 TX03 Le Phuoc Long CD04 TX03 4573 TX04 Nguyen Anh Tuan Null Null Null { Bộ của quan hệ TAIXE được thêm Vào dù không phù hợp với kết quả của quan hệ CHUYENDI Tương tự right outer join và full outer join (lấy cả 2) (lấy hết tất cả bộ của quan hệ bên trái) 91  Tất cả các phép toán này đều cần hai quan hệ đầu vào tương thích khả hợp, nghĩa là chúng phải thoả: ◦ Cùng số thuộc tính. Ví dụ: R và S đều có 2 thuộc tính. ◦ Các thuộc tính `tương ứng ’ có cùng kiểu. R HONV TENNV Vuong Quyen Nguyen Tung S HONV TENNV Le Nhan Vuong Quyen Bui Vu Phép trừ: R S  Phép hội: R S Phép giao: R S   NHANVIEN (MaNV, HoTen, Phai, Luong,NTNS, Ma_NQL, MaPH) PHANCONG (MaNV, MaDA, ThoiGian) 92 R HONV TENNV Vuong Quyen Nguyen Tung S HONV TENNV Le Nhan Vuong Quyen Bui Vu   Kết quả phép trừ Q ={Nguyen Tung} Kết quả phép hội Q ={Vuong Quyen, Nguyen Tung, Le Nhan, Bui Vu} Kết quả phép giao Q ={Vuong Quyen} Phép trừ: Q = R S  = { t/ tR  tS} Phép hội: Q = R S = { t/ tR  tS} Phép giao: Q = R S = R – (R – S) = { t/tR  tS} R S Lưu ý : Phép hội và phép giao có tính chất giao hoán 93 Câu hỏi 9: Cho biết nhân viên không làm việc ? (Phép trừ) (NHANVIEN[MANV]) – (PHANCONG[MANV]) Cách 2: Câu hỏi 10: Cho biết nhân viên được phân công tham gia đề án có mã số ‘TH01’ hoặc đề án có mã số ‘TH02’? (Phép hội) ((PHANCONG: MADA=‘TH01’)[MANV]) ((PHANCONG : MADA=‘TH02’)[MANV]) MANV(NHANVIEN) – MANV(PHANCONG) Cách 1:  Câu hỏi 11: Cho biết nhân viên được phân công tham gia cả 2 đề án ‘TH01’ và đề án ‘TH02’? (Phép giao) ((PHANCONG : MADA=‘TH01’)[MANV]) ((PHANCONG : MADA=‘TH02’)[MANV])  94  Phép chia (R  S) cần hai quan hệ đầu vào R, S thoả: ◦ Tập thuộc tính của R là tập cha của tập thuộc tính S. Ví dụ: R có m thuộc tính, S có n thuộc tính : n  m Định nghĩa: R và S là hai quan hệ, R+ và S+ lần lượt là tập thuộc tính của R và S. Điều kiện S+ là tập con không bằng của R+. Q là kết quả phép chia giữa R và S, Q+ = R+ - S+ }),(,/{ RstSstSRQ  21 12 1 ))(( )( TTT RTST RT SR SR          95 Q= PHANCONG/DEAN MADA TH001 TH002 DT001 MANV 002 MANV MADA 001 TH001 001 TH002 002 TH001 002 TH002 002 DT001 003 TH001 R=PHANCONG S=DEAN Kết quả Q Cho biết nhân viên làm việc cho tất cả các đề án ? (được phân công tham gia tất cả các đề án)  Hoặc viết Q= PHANCONG DEAN 96 Mahv HV01 HV03 R=KETQUATHI Mahv Mamh Diem HV01 CSDL 7.0 HV02 CSDL 8.5 HV01 CTRR 8.5 HV03 CTRR 9.0 HV01 THDC 7.0 HV02 THDC 5.0 HV03 THDC 7.5 HV03 CSDL 6.0 S=MONHOC Mamh Tenmh CSDL Co so du lieu CTRR Cau truc roi rac THDC Tin hoc dai cuong KETQUATHI[Mahv,Mamh] /MONHOC[Mamh] Q=KETQUA/MONHOC ][ ],[ MamhMONHOCMONHOC MamhMahvKETQUATHIKETQUA   * Viết cách khác 97  Các hàm tính toán gồm 5 hàm: avg(giá-trị), min(giá- trị), max(giá-trị), sum(giá-trị), count(giá-trị).  Phép toán gom nhóm: (Group by) ◦ E là biểu thức đại số quan hệ ◦ Gi là thuộc tính gom nhóm (nếu không có Gi nào=> không chia nhóm (1 nhóm), ngược lại (nhiều nhóm) => hàm F sẽ tính toán trên từng nhóm nhỏ được chia bởi tập thuộc tính này) ◦ Fi là hàm tính toán ◦ Ai là tên thuộc tính )()(),...,(),(,...,, 221121 Ennn AFAFAFGGG  98  Điểm thi cao nhất, thấp nhất, trung bình của môn CSDL ?  Điểm thi cao nhất, thấp nhất, trung bình của từng môn ? (group by mamh) )()(),min(),max( KETQUATHIDiemavgDiemDiemMamh )(CSDL''Mamh)(),min(),max( KETQUATHIDiemagvDiemDiem   99 Chương 4: Ngôn ngữ truy vấn SQL 100 • Là ngôn ngữ chuẩn để truy vấn và thao tác trên CSDL quan hệ • Là ngôn ngữ phi thủ tục • Khởi nguồn của SQL là SEQUEL - Structured English Query Language, năm 1974) • Các chuẩn SQL – SQL89 – SQL92 (SQL2) – SQL99 (SQL3) 101 • Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL): cho phép khai báo cấu trúc bảng, các mối quan hệ và các ràng buộc. • Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML): cho phép thêm, xóa, sửa dữ liệu. • Ngôn ngữ truy vấn dữ liệu (Structured Query Language – SQL): cho phép truy vấn dữ liệu. • Ngôn ngữ điều khiển dữ liệu (Data Control Language – DCL): khai báo bảo mật thông tin, cấp quyền và thu hồi quyền khai thác trên cơ sở dữ liệu. 102 1. Lệnh tạo bảng (CREATE) 3.1.1 Cú pháp 3.1.2 Một số kiểu dữ liệu 2. Lệnh sửa cấu trúc bảng (ALTER) 3.2.1 Thêm thuộc tính 3.2.2 Sửa kiểu dữ liệu của thuộc tính 3.2.3 Xoá thuộc tính 3.2.4 Thêm ràng buộc toàn vẹn 3.2.5 Xoá ràng buộc toàn vẹn 3. Lệnh xóa bảng (DROP) 103 2.1 Ngôn ngữ định nghĩa dữ liệu Cú pháp CREATE TABLE ( [not null], [not null], [not null], khai báo khóa chính, khóa ngoại, ràng buộc ) 104 Một số kiểu dữ liệu Kiểu dữ liệu SQL Server Chuỗi ký tự varchar(n), char(n),nvarchar(n), nchar(n) Số tinyint,smallint, int, numeric(m,n), decimal(m,n),float, real, smallmoney, money Ngày tháng smalldatetime, datetime Luận lý bit 2.1 Ngôn ngữ định nghĩa dữ liệu 105 Lược đồ CSDL quản lý bán hàng gồm có các quan hệ sau: KHACHHANG (MAKH, HOTEN, DCHI, SODT, NGSINH, DOANHSO, NGDK, CMND) NHANVIEN (MANV,HOTEN, NGVL, SODT) SANPHAM (MASP,TENSP, DVT, NUOCSX, GIA) HOADON (SOHD, NGHD, MAKH, MANV, TRIGIA) CTHD (SOHD,MASP,SL) 2.1 Ngôn ngữ định nghĩa dữ liệu 106 Create table KHACHHANG ( MAKH char(4) primary key, HOTEN varchar(40), DCHI varchar(50), SODT varchar(20), NGSINH smalldatetime, DOANHSO money, NGDK smalldatetime, CMND varchar(10) ) 2.1 Ngôn ngữ định nghĩa dữ liệu 107 Create table CTHD ( SOHD int foreign key references HOADON(SOHD), MASP char(4) foreign key references SANPHAM(MASP), SL int, constraint PK_CTHD primary key (SOHD,MASP) ) 2.1 Ngôn ngữ định nghĩa dữ liệu 108 2.1 Ngôn ngữ định nghĩa dữ liệu 2.1 Thêm thuộc tính ALTER TABLE tênbảng ADD têncột kiểudữliệu – Ví dụ: thêm cột Ghi_chu vào bảng khách hàng ALTER TABLE KHACHHANG ADD GHI_CHU varchar(20) 2.2 Sửa kiểu dữ liệu thuộc tính ALTER TABLE tênbảng ALTER COLUMN têncột kiểudữliệu_mới • Lưu ý: Không phải sửa bất kỳ kiểu dữ liệu nào cũng được 2. Sửa cấu trúc bảng 109 2.1 Ngôn ngữ định nghĩa dữ liệu – Ví dụ: Sửa Cột Ghi_chu thành kiểu dữ liệu varchar(50) ALTER TABLE KHACHHANG ALTER COLUMN GHI_CHU varchar(50) – Nếu sửa kiểu dữ liệu của cột Ghi_chu thành varchar(5), mà trước đó đã nhập giá trị cho cột Ghi_chu có độ dài hơn 5ký tự thì không được phép. – Hoặc sửa từ kiểu chuỗi ký tự sang kiểu số, 2.3 Xóa thuộc tính ALTER TABLE tên_bảng DROP COLUMN tên_cột – Ví dụ: xóa cột Ghi_chu trong bảng KHACHHANG ALTER TABLE NHANVIEN DROP COLUMN Ghi_chu 110 2.1 Ngôn ngữ định nghĩa dữ liệu 111 2.4 Thêm ràng buộc toàn vẹn ALTER TABLE ADD CONSTRAINT UNIQUE tên_cột PRIMARY KEY (tên_cột) FOREIGN KEY (tên_cột) REFERENCES tên_bảng (cột_là_khóa_chính) CHECK (tên_cột điều_kiện) 2.1 Ngôn ngữ định nghĩa dữ liệu • Ví dụ – ALTER TABLE NHANVIEN ADD CONSTRAINT PK_NV PRIMARY KEY (MANV) – ALTER TABLE CTHD ADD CONSTRAINT FK_CT_SP FOREIGN KEY (MASP) REFERENCES SANPHAM(MASP) – ALTER TABLE SANPHAM ADD CONSTRAINT CK_GIA CHECK (GIA >=500) – ALTER TABLE KHACHHANG ADD CONSTRAINT UQ_KH UNIQUE (CMND) 112 2.1 Ngôn ngữ định nghĩa dữ liệu 2.5 Xóa ràng buộc toàn vẹn ALTER TABLE tên_bảng DROP CONSTRAINT tên_ràng_buộc – Ví dụ: • Alter table CTHD drop constraint FK_CT_SP • Alter table SANPHAM drop constraint ck_gia • Lưu ý: đối với ràng buộc khóa chính, muốn xóa ràng buộc này phải xóa hết các ràng buộc khóa ngoại tham chiếu tới nó 113 2.1 Ngôn ngữ định nghĩa dữ liệu • Cú pháp DROP TABLE tên_bảng • Ví dụ: xóa bảng KHACHHANG. DROP TABLE KHACHHANG • Lưu ý: khi muốn xóa một bảng phải xóa tất cả những khóa ngoại tham chiếu tới bảng đó trước. 114 2.2 Ngôn ngữ thao tác dữ liệu (DML) • Gồm các lệnh: 1 Lệnh thêm dữ liệu (INSERT) 2 Lệnh sửa dữ liệu (UPDATE) 3 Lệnh xóa dữ liệu (DELETE) 115 2.2 Ngôn ngữ thao tác dữ liệu – Lệnh Insert • Cú pháp - INSERT INTO tên_bảng (cột1,,cộtn) VALUES (giá_trị_1,., giá_trị_n) - INSERT INTO tên_bảng VALUES (giá_trị_1, giá_trị_2,, giá_trị_n) - SELECT * INTO tên-bảng-mới from tên-bảng-có-sẵn - INSERT INTO tên-bảng-tạo-trước select * from tên- bảng-có-sẵn • Ví dụ: – insert into SANPHAM values('BC01','But chi', 'cay', 'Singapore', 3000) – insert into SANPHAM(masp,tensp,dvt,nuocsx,gia) values ('BC01','But chi','cay','Singapore',3000) 116 2.2 Ngôn ngữ thao tác dữ liệu – Lệnh Insert • Ví dụ của selectinto - Select * into SANPHAM_NEW from SANPHAM - Select * into SANPHAM_NEW from SANPHAM WHERE điều-kiện • Ví dụ của insert into.select. – insert into SANPHAM_COPY select * from SANPHAM – insert into SANPHAM_COPY select * from SANPHAM where điều-kiện 117 2.2 Ngôn ngữ thao tác dữ liệu – Lệnh Update • Cú pháp UPDATE tên_bảng SET cột_1 = giá_trị_1, cột_2 = giá_trị_2 . [WHERE điều_kiện] • Lưu ý: lưu ý với các lệnh xóa và sửa, nếu không có điều kiện ở WHERE nghĩa là xóa hoặc sửa tất cả. • Ví dụ: Tăng giá 10% đối với những sản phẩm do “Trung Quoc” sản xuất UPDATE SANPHAM SET Gia = Gia*1.1 WHERE Nuocsx=‘Trung Quoc’ 118 2.2 Ngôn ngữ thao tác dữ liệu – Lệnh Delete • Cú pháp DELETE FROM tên_bảng [WHERE điều_kiện] • Ví dụ: – Xóa toàn bộ nhân viên DELETE FROM NHANVIEN – Xóa những sản phẩm do Trung Quốc sản xuất có giá thấp hơn 10000 DELETE FROM SANPHAM WHERE (Gia <10000) and (Nuocsx=‘Trung Quoc’) 119  Là ngôn ngữ chuẩn, có cấu trúc dùng để truy vấn và thao tác trên CSDL quan hệ.  Câu truy vấn tổng quát: SELECT [DISTINCT] danh_sách_cột | hàm FROM danh sách các quan hệ (hay bảng, table) [WHERE điều_kiện] [GROUP BY danh_sách_cột_gom_nhóm] [HAVING điều_kiện_trên_nhóm] [ORDER BY cột1 ASC | DESC, cột2 ASC | DESC, ] 120  Toán tử so sánh: o=,>,=, oBETWEEN o IS NULL, IS NOT NULL oLIKE (%,_) o IN, NOT IN oEXISTS, NOT EXISTS oSOME, ALL, ANY  Toán tử logic: AND, OR.  Các phép toán: +, - ,* , /  Các hàm xử lý ngày (DAY( )), tháng (MONTH( )), năm (YEAR( )) 121  5 hàm: COUNT( ), SUM( ), MAX( ), MIN( ), AVG( )  Phân loại câu SELECT: SELECT đơn giản, SELECT có mệnh đề ORDER BY, SELECT lồng (câu SELECT lồng câu SELECT khác), SELECT gom nhóm (GROUP BY), SELECT gom nhóm (GROUP BY)có điều kiện HAVING. NHANVIEN (MaNV, HoTen, Phai, Luong,NTNS, Ma_NQL, MaPH) PHONGBAN (MaPH, TenPH, TRPH) DEAN (MaDA, TenDA, Phong, NamThucHien) PHANCONG (MaNV, MaDA, ThoiGian) Bài tập: Cho lược đồ CSDL “quản lý đề án công ty” như sau 122 MANV HOTEN NTNS PHAI MA_NQL MaPH LUONG 001 Vuong Ngoc Quyen 22/10/1957 Nu QL 3.000.000 002 Nguyen Thanh Tung 09/01/1955 Nam 001 NC 2.500.000 003 Le Thi Nhan 18/12/1960 Nu 001 DH 2.500.000 004 Dinh Ba Tien 09/01/1968 Nam 002 NC 2.200.000 005 Bui Thuy Vu 19/07/1972 Nam 003 DH 2.200.000 006 Nguyen Manh Hung 15/09/1973 Nam 002 NC 2.000.000 007 Tran Thanh Tam 31/07/1975 Nu 002 NC 2.200.000 008 Tran Hong Minh 04/07/1976 Nu 004 NC 1.800.000 MADA TENDA PHONG NamThucHien TH001 Tin hoc hoa 1 NC 2002 TH002 Tin hoc hoa 2 NC 2003 DT001 Dao tao 1 DH 2004 DT002 Dao tao 2 DH 2004 MAPH TENPH TRPH QL Quan Ly 001 DH Dieu Hanh 003 NC Nghien Cuu 002 MANV MADA THOIGIAN 001 TH001 30,0 001 TH002 12,5 002 TH001 10,0 002 TH002 10,0 002 DT001 10,0 002 DT002 10,0 003 TH001 37,5 004 DT001 22,5 004 DT002 10,0 006 DT001 30,5 007 TH001 20,0 007 TH002 10,0 008 DT002 12,5 PHANCONG NHANVIEN DEAN PHONGBAN 12 3 Câu hỏi 13: Sử dụng =,>,>=, Danh sách các nhân viên sinh trong khoảng từ năm 1978 đến 1983? Select MaNV, HoTen From NhanVien where Year(NTNS)>=1978 AND Year(NTNS)<=1983 Câu hỏi 14: Sử dụng BETWEEN, ORDER BY. Danh sách các nhân viên sinh trong khoảng từ năm 1978 đến 1983? Sắp xếp theo mức lương giảm dần. Select * From NhanVien where Year(NTNS) BETWEEN 1978 and 1983 ORDER BY Luong DESC Câu hỏi 15: Sử dụng IS NULL. Cho biết những nhân viên không có người quản lý trực tiếp? (không chịu sự quản lý trực tiếp của người nào) Select MaNV, HoTen, NTNS, Ma_NQL from NhanVien where Ma_NQL is Null 124 Câu hỏi 16: Sử dụng Is Not Null. Cho biết những nhân viên có người quản lý trực tiếp?Thông tin hiển thị gồm: mã nhân viên, họ tên, mã người quản lý. Select MaNV, HoTen, Ma_NQL from NhanVien where Ma_NQL is not Null Câu hỏi 17: Sử dụng IN (so sánh với một tập hợp giá trị cụ thể). Cho biết họ tên nhân viên thuộc phòng ‘NC’ hoặc phòng ‘DH’? Select DISTINCT Hoten From NhanVien where MaPH in (‘NC’,’DH’) Câu hỏi 18: Sử dụng IN (so sánh với một tập hợp giá trị chọn từ câu SELECT khác). Cho biết họ tên nhân viên thuộc phòng ‘NC’ hoặc phòng ‘DH’? Select Hoten from NhanVien where MaPH in (Select MaPH from PHONGBAN where MaPH=‘NC’ OR MaPH=‘DH’) 125 Câu hỏi 19 (tt): Cho biết mã số, họ tên, ngày tháng năm sinh của những nhân viên đã tham gia đề án? Select MaNV, HoTen, NTNS from NhanVien where MaNV in (Select MaNv From PhanCong) Câu hỏi 20: Sử dụng NOT IN. Cho biết mã số, họ tên, ngày tháng năm sinh của những nhân viên không tham gia đề án nào? Gợi ý cho mệnh đề NOT IN: thực hiện câu truy vấn “tìm nhân viên có tham gia đề án (dựa vào bảng PhanCong)”, sau đó lấy phần bù. Select MaNV, HoTen, NTNS from NhanVien where MaNV not in (Select MaNv From PhanCong) Câu hỏi 21 (tt): Cho biết tên phòng ban không chủ trì các đề án triển khai năm 2005? Gợi ý: thực hiện câu truy vấn “tìm phòng ban chủ trì các đề án triển khai năm 2005”, sau đó lấy phần bù. Select TenPH from PhongBan where MaPH not in (Select DISTINCT Phong from DEAN where NamThucHien=2005) 126 Câu hỏi 22: so sánh chuỗi = chuỗi. Liệt kê mã nhân viên, ngày tháng năm sinh, mức lương của nhân viên có tên “Nguyễn Tường Linh”? Select MaNV, NTNS, Luong from NhanVien where HoTen = ‘Nguyễn Tường Linh’ Câu hỏi 23: Sử dụng LIKE (%: thay thế 1 chuỗi ký tự). Tìm những nhân viên có họ Nguyễn. Select MaNV, HoTen from NhanVien where HoTen like ‘Nguyễn %’ Câu hỏi 26: Sử dụng LIKE ( _: thay thế 1 ký tự bất kỳ). Tìm những nhân viên tên có tên ‘Nguyễn La_’ (ví dụ Lam, Lan) Select MaNV, HoTen from NhanVien where HoTen like ‘Nguyễn La_’ Câu hỏi 24 (tt): Tìm những nhân viên có tên Lan. Select MaNV, HoTen from NhanVien where HoTen like ‘% Lan’ Câu hỏi 25 (tt): Tìm những nhân viên có tên lót là “Văn”. Select MaNV, HoTen from NhanVien where HoTen like ‘% Văn %’ 127 a) Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG trên 1 nhóm lớn (trên toàn bộ quan hệ): – Câu hỏi 27: Tính số nhân viên của công ty. – Câu hỏi 28: Tính số lượng nhân viên quản lý trực tiếp nhân viên khác. – Câu hỏi 29: Tìm mức lương lớn nhất, mức lương trung bình, tổng lương của công ty. – Câu hỏi 30: Cho biết nhân viên có mức lương lớn nhất. Select COUNT(MaNV) as SoNV from NhanVien Select COUNT (DISTINCT Ma_NQL) from NhanVien Select MAX(Luong), AVG(Luong), SUM(Luong) from NhanVien Select HoTen from NhanVien Where Luong = (Select MAX(Luong) from NhanVien ) 128 Câu hỏi 31: Cho biết nhân viên có mức lương trên mức lương trung bình của công ty. Select HoTen from NhanVien where Luong > (Select AVG(Luong) from NhanVien ) b) Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG trên từng nhóm nhỏ: mệnh đề GROUP BY – Chia các dòng thành các nhóm nhỏ dựa trên tập thuộc tính chia nhóm. – Thực hiện các phép toán trên nhóm như: Count (thực hiện phép đếm), Sum (tính tổng), Min(lấy giá trị nhỏ nhất), Max(lấy giá trị lớn nhất), AVG (lấy giá trị trung bình). 129 n h ó m Các thuộc tính GROUP BY: Q a a b b c c c c c d d d Chia các dòng thành các nhóm dựa trên tập thuộc tính chia nhóm Q Count(S) Q S a b c d 2 2 5 3 10 2 9 5 10 8 6 4 10 16 Câu SQL: Select Q, count(S) From NV Group by Q Quan hệ NV 18 50 Tương tự cho các hàm SUM, MIN, MAX, AVG 130 Câu hỏi 32: Cho biết số lượng nhân viên theo từng phái? Do cột phái có 2 giá trị “nam” và “nữ”, trường hợp này ta chia bảng NhanVien thành 2 nhóm nhỏ. Thuộc tính chia nhóm là thuộc tính “Phai”. Câu hỏi 33: Cho biết số lượng nhân viên theo từng phòng? Do cột MaPH có 3 giá trị “NC” và “DH” và “QL”, trường hợp này ta chia bảng nhân viên thành 3 nhóm nhỏ. Thuộc tính chia nhóm là thuộc tính “MaPH”. Tương tự: cho biết tổng lương của mỗi phòng, cho biết mức lương thấp nhất của từng phòng, mức lương cao nhất, mức lương trung bình của từng phòng Select Phai, count(Manv) as SoNV from NhanVien Group by Phai Select MaPH, count(Manv) from NhanVien Group by MaPH 131 Câu hỏi 35: Với mỗi phòng, cho biết số lượng nhân viên theo từng phái? Do cột MaPH có 3 giá trị “NC” và “DH” và “QL”, mỗi phòng chia nhỏ theo từng phái: 2 nhóm “Nam” và “Nữ”, trường hợp này ta chia bảng nhân viên thành 6 nhóm nhỏ. Như vậy, tập thuộc tính chia nhóm cho câu truy vấn là (Phong, Phai). Select MaPH, Phai, count(Manv) from NhanVien Group by Phong, Phai Câu hỏi 34: Cho biết tên phòng và số lượng nhân viên theo từng phòng? Select TenPH, count(Manv) as SoLuongNV From NhanVien n, PhongBan p Where n.MaPh=p.MaPH Group by TenPH Giống câu 29 nhưng bổ sung thêm bảng PhongBan để lấy tên phòng. Thuộc tính chia nhóm là (TenPH) thay cho MaPH. 132 Câu hỏi 36: Đếm số đề án của từng nhân viên tham gia? Select MaNV, count(MaDA) as SoDATG From PhanCong Group by MaNV - Do cột MaNV có 7 giá trị “NV001”,”NV008” (không có nhân viên “005”), trường hợp này ta chia bảng PhanCong thành 7 nhóm nhỏ. Với mỗi nhóm nhỏ (MaNV), ta đếm số đề án (count(MADA)) tham gia. Thuộc tính chia nhóm là thuộc tính “MaNV”. - Tương tự: tính tổng số giờ làm việc của mỗi nhân viên (SUM), thời gian làm việc thấp nhất của mỗi nhân viên (MIN), thời gian làm việc lớn nhất của mỗi nhân viên (MAX), thời gian làm việc trung bình, Câu hỏi 37: Cho biết mã, tên nhân viên và số đề án mà n/v đã tham gia? Select n.MaNV, HoTen, count(MaDA) as SoDATG From PhanCong pc, NhanVien n where pc.manv=n.manv Group by MaNV, HoTen 133 Câu hỏi 38: Cho biết những nhân viên tham gia từ 2 đề án trở lên?  Lọc kết quả theo điều kiện, sau khi đã gom nhóm  Điều kiện của HAVING là điều kiện về các hàm tính toán trên nhóm (Count, Sum, Min, Max, AVG) và các thuộc tính trong danh sách GROUP BY. Select MaNV, count(MaDA) as SoDATG From PhanCong Group by MaNV Having count(MaDA) >=2 Select MaPH, count(Manv) from NhanVien Group by MaPH Having count(Manv)>4 Câu hỏi 39: Cho biết mã phòng ban có trên 4 nhân viên? 134 Chương 5: Ràng buộc toàn vẹn 135  RBTV có bối cảnh trên một quan hệ ◦ Ràng buộc miền giá trị ◦ Ràng buộc liên bộ ◦ Ràng buộc liên thuộc tính  RBTV có bối cảnh trên nhiều quan hệ ◦ Ràng buộc liên thuộc tính liên quan hệ ◦ Ràng buộc khóa ngoại (tham chiếu) ◦ Ràng buộc liên bộ liên quan hệ ◦ Ràng buộc do thuộc tính tổng hợp (Count, Sum) 136 Các đặc trưng của 1 RBTV: Nội dung : phát biểu bằng ngôn ngữ hình thức (phép tính quan hệ, đại số quan hệ, mã giả,) Bối cảnh: là những quan hệ có khả năng làm cho RBTV bị vi phạm. Tầm ảnh hưởng: là bảng 2 chiều, xác định các thao tác ảnh hưởng (+) và thao tác không ảnh hưởng (-) lên các quan hệ nằm trong bối cảnh. 137 Thêm Xóa Sửa Quan hệ 1 + + - (*) Quan hệ n - - +(A) Ký hiệu + : Có thể gây ra vi phạm RBTV Ký hiệu - : Không thể gây ra vi phạm RBTV Ký hiệu +(A) : Có thể gây ra vi phạm RBTV khi thao tác trên thuộc tính A Ký hiệu –(*) : Không thể gây ra vi phạm RBTV do thao tác không thực hiện được Bảng tầm ảnh hưởng của RBTV có dạng như sau: 138  Xét lược đồ quan hệ ◦ NHANVIEN (MANV, HONV, TENLOT, TENNV, NGSINH, PHAI, DCHI, MA_NQL, PHONG, MLUONG) Câu hỏi 40: Phái của nhân viên chỉ có thể là ‘Nam’ hoặc ‘Nữ’ ◦ Nội dung:  n  NHANVIEN: n.PHAI IN {‘Nam’,’Nữ’} ◦ Bối cảnh: quan hệ NHANVIEN ◦ Bảng tầm ảnh hưởng (TAH): 3.1. Ràng buộc toàn vẹn miền giá trị Thêm Xóa Sửa NHANVIEN +(PHAI) - +(PHAI) 139 3.2. Ràng buộc toàn vẹn liên thuộc tính: ràng buộc giữa các thuộc tính trong cùng một quan hệ. Xét lược đồ quan hệ DEAN (MADA, TENDA, DDIEM_DA, PHONG, NGBD_DK, NGKT_DK) Câu hỏi 41: Với mọi đề án, ngày bắt đầu dự kiến (NGBD_DK) phải nhỏ hơn ngày kết thúc dự kiến (NGKT_DK) Nội dung: d  DEAN, d.NGBD_DK <= d.NGKT_DK 140 ◦ Bối cảnh: quan hệ DEAN ◦ Bảng tầm ảnh hưởng: Thêm Xóa Sửa DEAN + (NGBD_DK, NGKT_DK) - +(NGBD_DK, NGKT_DK) 3.3. Ràng buộc toàn vẹn liên bộ: ràng buộc giữa các bộ giá trị trong cùng một quan hệ. Cho lược đồ quan hệ: NHANVIEN(MaNV, HoTen, HESO, MucLuong) Câu hỏi 42: các nhân viên có cùng hệ số lương thì có cùng mức lương. 14 1 3. RBTV – TRÊN BỐI CẢNH LÀ 1 QUAN HỆ – Nội dung: • n1,n2  NHANVIEN: n1.HESO=n2.HESO thì (n1.MUCLUONG = n2.MUCLUONG) – Bối cảnh: quan hệ NHANVIEN – Bảng tầm ảnh hưởng: Thêm Xóa Sửa NHANVIEN + (HESO, MucLuong) - +(HESO, MucLuong) 142 3. RBTV – BỐI CẢNH NHIỀU QUAN HỆ • 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. • Xét lược đồ quan hệ PHONGBAN (MAPH, TENPH, TRPH, NGNC) NHANVIEN (MANV, HOTEN, NTNS, PHAI, MA_NQL, MAPH, LUONG) Câu hỏi 43: Mỗi trưởng phòng phải là một nhân viên trong công ty. – Nội dung: – p  PHONGBAN, n  NHANVIEN: p.TRPH= n.MANV Hay: PHONGBAN[TRPH]  NHANVIEN[MANV]) 3.4. Ràng buộc toàn vẹn tham chiếu 143 3. RBTV – BỐI CẢNH NHIỀU QUAN HỆ –Bối cảnh: NHANVIEN, PHONGBAN –Bảng tầm ảnh hưởng: Thêm Xóa Sửa PHONGBAN +(TRPH) - +(TRPH) NHANVIEN - + - (*) 3.5. Ràng buộc toàn vẹn liên thuộc tính liên quan hệ Xét các lược đồ quan hệ: DATHANG(MADH, MAKH, NGAYDH) GIAOHANG(MAGH, MADH, NGAYGH) 144 3. RBTV – BỐI CẢNH NHIỀU QUAN HỆ – Bối cảnh: DATHANG, GIAOHANG – Bảng tầm ảnh hưởng: Câu hỏi 44: Ngày giao hàng không được trước ngày đặt hàng - Nội dung: gGIAO_HANG, dDAT_HANG:d.MADHg.MADH  d.NGAYDH >= g.NGAYGH Thêm Xóa Sửa DATHANG - - + (ngaydh) GIAOHANG +(ngaygh) - + (ngaygh) 145 3. RBTV – BỐI CẢNH NHIỀU QUAN HỆ 3.6. Ràng buộc toàn vẹn liên bộ, liên quan hệ • 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. • Xét các lược đồ quan hệ – PHONGBAN (MAPH, TENPH, TRPH, NGNC) – DIADIEM_PHG (MAPH, DIADIEM) Câu hỏi 45: Mỗi phòng ban phải có ít nhất một địa điểm phòng - Nội dung • Mỗi phòng ban phải có ít nhất một địa điểm phòng • p  PHONGBAN, d  DIADIEM_PHG: p.MAPH = d.MAPH 146 3. RBTV – BỐI CẢNH NHIỀU QUAN HỆ 3.7. Ràng buộc toàn vẹn do thuộc tính tổng hợp – Bối cảnh: PHONGBAN, DIADIEM_PHG – Bảng tầm ảnh hưởng: Thêm Xóa Sửa PHONGBAN + - - DIADIEM_PHG - + + (MAPH) PXUAT(SOPHIEU, NGAY, TONGTRIGIA) CTIET_PX(SOPHIEU, MAHANG, SL, DG) Câu hỏi 46: 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. 147 3. RBTV – BỐI CẢNH NHIỀU QUAN HỆ Nội dung • pxPXUAT, px.TONGTRIGIA = (ct  CTIET_PX  ct.SOPHIEU = px.SOPHIEU) (ct.SL*ct.DG) – Bối cảnh: PXUAT,CTIET_PX – Bảng tầm ảnh hưởng: Thêm Xóa Sửa PXUAT -(*) - + (tongtrigia) CTIET_PX +(sl,dg) + + (sl,dg) -(*) Ở thời điểm thêm một bộ vào PXUAT, giá trị bộ đó tại TONGTRIGIA = 0. 148 149 Chương 6: Phụ thuộc hàm và dạng chuẩn 150  Phụ thuộc hàm ◦ Hệ luật dẫn Amstrong ◦ Bao đóng ◦ Phủ tối thiểu ◦ Khóa ◦ Thuật toán tìm khóa  Các dạng chuẩn ◦ Dạng chuẩn 1 ◦ Dạng chuẩn 2 ◦ Dạng chuẩn 3 ◦ Dạng chuẩn Boyce Codd 151 X,Y là hai tập thuộc tính trên quan hệ R r1, r2 là 2 bộ bất kỳ trên R Ta nói X xác định Y, ký hiệu X → Y, nếu và chỉ nếu r1[X] = r2[X] thì r1[Y] = r2[Y] X → Y là một phụ thuộc hàm, hay Y phụ thuộc X. X là vế trái của phụ thuộc hàm, Y là vế phải của phụ thuộc hàm. Ví dụ: cho quan hệ sinh viên như sau: SINHVIEN(Tên, Mônhọc, SốĐT, ChuyênNgành, GiảngViên, Điểm) 152 Tên Mônhọc SốĐT ChuyênNgành GiảngViên Điểm Huy CSDL 0913157875 HTTT Hưng 5 Hoàng CSDL 0913154521 HTTT Hưng 10 Huy AV 0913157875 HTTT Thủy 5 Hải Toán SXTK 0166397547 MạngMT Lan 10 Tính HQTCSDL 012145475 CNPM Sang 7 Tính LậpTrình 012145475 CNPM Việt 8 Hoàng LậpTrình 0913154521 HTTT Việt 10 Tên SốĐT ChuyênNgành? Mônhọc GiảngViên? Tên Mônhọc Điểm? 153 Một số tính chất sau: Với mỗi Tên có duy nhất một SốĐT và ChuyênNgành Với mỗi Mônhọc có duy nhất một GiảngViên Với mỗi Tên, Mônhọc có duy nhất một Điểm Ký hiêu: {Tên} → {SốĐT, ChuyênNgành} {Mônhọc} → {GiảngViên} {Tên, Mônhọc} → {Điểm} 154 Tên Mônhọc SốĐT ChuyênNgàn h GiảngViên Điểm Các phụ thuộc hàm kéo theo: {Tên} → {ChuyênNgành} {Mônhọc, Điểm} → {GiảngViên, Điểm} 155 Gọi F là tập các phụ thuộc hàm Định nghĩa: X → Y được suy ra từ F, hay F suy ra X → Y, ký hiệu: F ╞ X → Y nếu bất kỳ bộ của quan hệ thỏa F thì cũng thỏa X → Y Hệ luật dẫn Amstrong: Với X, Y, Z, W ⊆ U. Phụ thuộc hàm có các tính chất sau: F1) Tính phản xạ: Nếu Y ⊆ X thì X → Y F2) Tính tăng trưởng: {X → Y} ╞ XZ → YZ F3) Tính bắc cầu: {X → Y, Y → Z} ╞ X → Z 156 Từ hệ luật dẫn Amstrong ta suy ra một số tính chất sau: F4) Tính kết hợp: {X → Y, X → Z} ╞ X → YZ F5) Tính phân rã: {X → YZ, X → Y} ╞ X → Z F6) Tính tựa bắt cầu: {X → Y, YZ → W} ╞ XZ → W Ví dụ: F = {A → B, A → C, BC → D}, chứng minh A → D? 1) A → B 2) A → C 3) A → BC (tính kết hợp F4) 4) BC → D 5) A → D (tính bắc cầu F3) 157 Bao đóng của tập phụ thuộc hàm Bao đóng của tập phụ thuộc hàm F, ký hiệu F+ là tập tất cả các phụ thuộc hàm được suy ra từ F. Nếu F = F+ thì F là họ đầy đủ của các phụ thuộc hàm. Thuật toán tìm bao đóng của tập thuộc tính Bao đóng của tập thuộc tính X đối với tập phụ thuộc hàm F, ký hiệu là X+F là tập tất cả các thuộc tính A có thể suy dẫn từ X nhờ tập bao đóng của các phụ thuộc hàm F+ X+F = { A ∈ Q + | X → A ∈ F+ } 158 Input: (Q,F),X ⊆ Q+ Output: X+F Bước 1: Tính dãy X(0) , X(1) ,, X(i): - X(0) = X - X(i+1) = X(i) ∪ Z, ∃(Y → Z ) ∈ F(Y ⊆ X(i)), loại (Y → Z) ra khỏi F - Dừng khi X(i+1) = X(i) hoặc khi X(i)=Q+ Bước 2: Kết luận X+F = X (i) 159 Ví dụ: Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm F={ f1: B → A , f2: DA → CE, f3: D → H, f4: GH → C, f5: AC → D} Tìm AC+F ? 160 Bước 1: X0 = AC Bước 2: Từ f1 đến f4 không thoả, f5 thoả nên X1 = AC ∪ D = ACD Lặp lại bước 2: f1 không thoả, f2 thỏa nên X2=ACD ∪ CE = ACDE f3 thỏa nên X3=ACDE ∪ H =ACDEH f4 không thỏa, f5 đã thỏa Lặp lại bước 2: f2, f3 và f5 đã thỏa, f1 và f4 không thỏa. Nên X4=X3=ACDEH Vậy AC+F=ACDEH 161 Bài toán thành viên Cho tập thuộc tính Q, tập phụ thuộc hàm F trên Q và một phụ thuộc hàm X → Y trên Q. Câu hỏi đặt ra rằng X → Y ∈ F+ hay không? X → Y ∈ F+ ⇔ Y ⊆ X+ Ví dụ: Từ ví dụ tìm bao đóng của tập thuộc tính AC. Cho biết AC → E có thuộc F+ ? Ta có AC+F=ACDEH Vì E ∈ AC+F nên AC → E ∈ F + 162 Hai tập phụ thuộc hàm tương đương Hai tập phụ thuộc hàm F và G tương đương nếu F+ = G+ . Ký hiệu G ≡ F Phủ tối thiểu của một tập phụ thuộc hàm F được gọi là phủ tối thiểu của tập phụ thuộc hàm (hay tập phụ thuộc hàm tối thiểu) nếu thỏa: (i) F là tập phụ thuộc hàm có thuộc tính vế trái không dư thừa (ii) F là tập phụ thuộc hàm có vế phải một thuộc tính (iii) F là tập phụ thuộc hàm không dư thừa 163 Phụ thuộc hàm có thuộc tính vế trái dư thừa Cho F là tập các phụ thuộc hàm trên lược đồ quan hệ Q. Khi đó Z → Y ∈ F là phụ thuộc hàm có thuộc tính vế trái dư thừa nếu tồn tại A∈ Z mà F = F – (Z → Y) ∪ ((Z - A) → Y) Ngược lại Z → Y là phụ thuộc hàm có thuộc tính vế trái không dư thừa hay Y phụ thuộc đầy đủ vào Z. Z → Y còn được gọi là phụ thuộc hàm đầy đủ. Phụ thuộc hàm có vế phải một thuộc tính Mỗi tập phụ thuộc hàm F đều tương đương với một tập phụ thuộc hàm G mà vế phải của các phụ thuộc hàm thuộc G chỉ gồm một thuộc tính 164 Phụ thuộc hàm không dư thừa F là tập phụ thuộc hàm không dư thừa nếu không tồn tại F’⊂ F sao cho F’ ≡ F. Ngược lại F được gọi là tập phụ thuộc hàm dư thừa. Thuật toán tìm phủ tối thiểu của tập phụ thuộc hàm Bước 1: Phân rã các phụ thuộc hàm có vế phải nhiều thuộc tính thành các phụ thuộc hàm có vế phải một thuộc tính Bước 2: Loại các thuộc tính có vế trái dư thừa của mọi phụ thuộc hàm (bỏ thuộc tính bên vế trái, khi và chỉ khi bao đóng của các thuộc tính còn lại có chứa thuộc tính đó) Bước 3: Loại các phụ thuộc hàm dư thừa khỏi F (Các thuộc tính ở vế phải của PTH chỉ xuất hiện duy nhất 1 lần thì không thể loại bỏ. Còn lại tính bao đóng của tập thuộc tính vế trái nếu có xuất hiện thuộc tính vế phải thì có thể loại bỏ thuộc tính đó và đó là PTH dư thừa) 165 Ví dụ: Cho lược đồ quan hệ Q(A,B,C,D) và tập phụ thuộc hàm F={AB → CD, B → C, C → D} Tìm phủ tối thiểu? Bước 1: Tách các phụ thuộc hàm sao cho vế phải chỉ còn một thuộc tính. + ta có F={AB → C, AB → D, B → C, C → D} Bước 2: Bỏ các thuộc tính dư thừa ở vế trái. + B → C, C → D Không xét vì vế trái chỉ có một thuộc tính. + xét AB → C : Nếu Bỏ A thì B+=BCD không chứa A nên không thể Bỏ A. Nếu Bỏ B thì A+=A. không bỏ được thuộc tính nào. + xét AB → D : Nếu Bỏ A thì B+=BCD không chứa A nên không thể Bỏ A. Nếu Bỏ B thì A+=A. không bỏ được thuộc tính nào. Bước 3: Loại khỏi F các phụ thuộc hàm dư thừa. + xét AB->C : Tính AB+=ABCD chứa C nên loại bỏ AB->C + xét AB->D : tính AB+=ABCD chứa D nên loại bỏ AB->D + B->C : tính B+=B không thể bỏ. + C->D : tính C+=C không thể bỏ. Phủ tối thiểu là {B->C, C->D} 166 Định nghĩa Cho lược đồ quan hệ Q(A1, A2, , An), Q+ là tập thuộc tính của quan hệ Q, F là tập phụ thuộc hàm trên Q, K là tập con của Q+. Khi đó K gọi là một khóa của Q nếu: (i) K+F = Q + (ii) Không tồn tại K’⊂ K sao cho K’+F = Q + Thuộc tính A được gọi là thuộc tính khóa nếu A∈ K, trong đó K là khóa của Q. Ngược lại thuộc tính A được gọi là thuộc tính không khóa. K’ được gọi là siêu khóa nếu K ⊆ K’. 167 Sử dụng đồ thị có hướng để tìm khóa như sau: Bước 1: - Mỗi nút của đồ thị là tên một thuộc tính của lược đồ quan hệ R - Cung nối hai thuộc tính A và B thể hiện phụ thuộc hàm A → B - Thuộc tính chỉ có các mũi tên đi ra (nghĩa là chỉ nằm trong vế trái của phụ thuộc hàm) được gọi là nút gốc - Thuộc tính chỉ có các mũi tên đi tới (nghĩa là chỉ nằm trong vế phải của phụ thuộc hàm) được gọi là nút lá Bước 2: - Xuất phát từ tập các nút gốc (X), dựa trên tập các phụ thuộc hàm F, tìm bao đóng X+F . - Nếu X+F= Q + thì X là khóa, ngược lại bổ sung một thuộc tính không thuộc nút lá vào X rồi thực hiện tìm bao đóng của X. Dừng khi tìm được một khóa của R. 168 Ví dụ: Cho lược đồ quan hệ R(A, B, C, D, E, G, H) và tập phụ thuộc hàm F={ B → A , DA → CE, D → H, GH → C, AC → D} Tìm một khóa của R? Phân rã vế phải ta có F ={ B → A , DA → C, DA → E, D → H, GH → C, AC → D} 169 Nhận thấy từ đồ thị trên, nút B và G là nút gốc. Khóa của R phải chứa thuộc tính B hoặc G, trong ví dụ này chọn B. B+F = BA, Vì B + F ≠ Q + nên B không là khóa. Nhận thấy D là thuộc tính ở vế trái của ba phụ thuộc hàm trong F nên bổ sung thuộc tính D vào để xét khóa. BD+F = BDACEH, vì BD + F ≠ Q + nên BD không là khóa. Bổ sung thuộc tính G. BDG+F = BDGACEH, vì BDG + F = Q + nên BDG là khóa. 170 Dạng chuẩn 1 (1NF) Lược đồ Q ở dạng chuẩn 1 nếu mọi thuộc tính đều mang giá trị nguyên tố. Giá trị nguyên tố là giá trị không phân nhỏ được nữa. Các thuộc tính đa trị (multi-valued), thuộc tính đa hợp(composite) không là nguyên tố. Ví dụ: Thuộc tính ĐiaChỉ : Số 175 Đường 3/2 Phường 10 Quận 5 không là nguyên tố. ĐịaChỉ → (SốNhà, Đường, Phường, Quận) 171 Ví dụ: HOADON(MaHD, MaKH, NgayHD, CtietMua, SoTien) CtietMua không là nguyên tố nên không thỏa dạng chuẩn 1 172 Lược đồ Q ở dạng chuẩn 2 nếu thoả: (1) Q đạt dạng chuẩn 1 (2) Mọi thuộc tính không khóa của Q đều phụ thuộc đầy đủ vào khóa. Kiểm tra dạng chuẩn 2 Bước 1: Tìm mọi khóa của Q Bước 2: Với mỗi khóa K, tìm bao đóng của tập tất cả các tập con thực sự Si của K Bước 3: Nếu tồn tại bao đóng Si + chứa thuộc tính không khóa thì Q không đạt dạng chuẩn 2, ngược lại Q đạt dạng chuẩn 2. 173 Ví dụ: Cho Q1 (A, B, C, D), F={A→B, B→DC} Lược đồ chỉ có một khóa là A, nên mọi thuộc tính đều phụ thuộc đầy đủ vào khóa. Do vậy Q1 đạt dạng chuẩn 2. Ví dụ: Cho Q2 (A, B, C, D), F={AB → D, C → D} Lược đồ có khóa là ABC, ngoài ra còn có C⊂ABC mà C → D, trong đó D là thuộc tính không khóa (nghĩa là thuộc tính D không phụ thuộc đầy đủ vào khóa). Do vậy Q2 không đạt dạng chuẩn 2. 174 Lược đồ Q ở dạng chuẩn 3 nếu mọi phụ thuộc hàm X → A ∈ F+, với A ∉ X đều có: (1) X là siêu khóa, hoặc (2) A là thuộc tính khóa Hay mọi thuộc tính không khóa của Q không phụ thuộc bắc cầu vào khóa chính của Q Kiểm tra dạng chuẩn 3 Bước 1: Tìm mọi khóa của Q Bước 2: Phân rã vế phải của mọi phụ thuộc hàm trong F để tập F trở thành tập phụ thuộc hàm có vế phải một thuộc tính Bước 3: Nếu mọi phụ thuộc hàm X → A ∈ F, mà A ∉ X đều thỏa (1) X là siêu khóa (vế trái chứa một khóa), hoặc (2) A là thuộc tính khóa (vế phải là tập con của khóa) thì Q đạt dạng chuẩn 3, ngược lại Q không đạt dạng chuẩn 3. 175 Ví dụ: Cho Q (A, B, C, D), F={AB → D, C → D} Bước 1: Q có một khóa là ABC Bước 2: Mọi phụ thuộc hàm trong F đều đã có vế phải một thuộc tính. Bước 3: Với AB → D, nhận thấy rằng D ∉ AB có • Vế trái (AB) không phải là siêu khóa. • Hơn nữa vế phải (D) không là thuộc tính khóa Vậy Q không đạt dạng chuẩn 3. 176 Lược đồ Q ở dạng chuẩn BC nếu mọi phụ thuộc hàm X → A ∈ F+, với A ∉ X đều có X là siêu khóa. Nhắc lại: Siêu khóa : là một tập con các thuộc tính của Q+ mà giá trị của chúng có thể phân biệt 2 bộ khác nhau trong cùng một thể hiện TQ bất kỳ. Nghĩa là:  t1, t2  TQ, t1[K] t2[K] K là siêu khóa của Q. 177 Kiểm tra dạng chuẩn BCNF Bước 1: Tìm mọi khóa của Q Bước 2: Phân rã vế phải của mọi phụ thuộc hàm trong F để tập F trở thành tập phụ thuộc hàm có vế phải một thuộc tính Bước 3: Nếu mọi phụ thuộc hàm X → A ∈ F, mà A ∉ X đều thỏa X là siêu khóa (vế trái chứa một khóa), thì Q đạt dạng chuẩn BC, ngược lại Q không đạt dạng chuẩn BC. 178 Ví dụ: Cho Q (A, B, C, D, E, I), F={ACD → EBI, CE → AD} Bước 1: Q có hai khóa là {ACD, CE} Bước 2: Phân rã vế phải của các phụ thuộc hàm trong F, ta có: F={ACD → E, ACD → B, ACD → I, CE → A, CE → D} Bước 3: Mọi phụ thuộc hàm trong F đều có vế trái là một siêu khóa Vậy Q đạt dạng chuẩn BC. 179

Các file đính kèm theo tài liệu này:

  • pdfvn_bai_giang_ly_thuyet_toan_bo_3941.pdf