On Tap CSDL 2
On Tap CSDL 2
A B D
G
E F
C
A B D
G
(1,n) (1,1)
E F
C
MALOP
TENLOP
LOP
(30,60) SISO
Page 1
Ví dụ quan hệ MONHOC
MAMH TENMH SOTC
MH01 CSDL 3
MH02 TCC 2
MH03 LTW 3
MH04 ABC
Lược đồ quan hệ tương ứng: MONHOC(MAMH,TENMH,SOTC)
– Khóa chính: gồm một hoặc nhiều thuộc tính, được chọn từ tập khóa, có duy nhất 1,
giá trị ko được rỗng (Not null).
Ví dụ: Lược đồ quan hệ NHAVIEN(MANV, HOTEN, EMAIL, DIENTHOAI, CMND)
có 4 khóa: MANV, EMAIL, DIENTHOAI, CMND. Trong các khóa này, MANV được chọn
làm khóa chính.
– Khóa ngoại: gồm một hoặc nhiều thuộc tính, tham chiếu đến khóa chính, trên mỗi
quan hệ có thể không có, có 1 hoặc nhiều, có thể rỗng (null)
Ví dụ: Xét 2 quan hệ LOP và SINHVIEN. Trên quan hệ SINHVIEN có khóa ngoại là
MALOP tham chiếu đến khóa chính là MALOP trên quan hệ LOP.
Lưu ý: Thuộc tính khóa chính và khóa ngoại có thể khác nhau, tuy nhiên kiểu dữ liệu và
chiều dài phải giống nhau.
LOP
MALOP TENLOP SISO
L01 11DHTH 30
L02 12DHTH 50
SINHVIEN
MASV HOTEN MALOP
SV01 MINH L01
SV02 CHÂU L01
SV03 BÌNH L02
– Siêu khóa là tập thuộc tính chứa hoặc bằng khóa.
3. Chuyển mô hình thực thể kết hợp sang mô hình quan hệ:
– Chuyển mối kết hợp 1-N:
A B D
G
E F
hoặc
Page 2
E
F
A
D
B
G
C
LOP SINHVIEN
LOP(MALOP,TENLOP,SISO)
SINHVIEN(MASV,HOTEN,NGAYSINH,MALOP)
– Chuyển mối kết hợp 1-1
A B D
G
E F
C
HOTEN
Page 3
– Chuyển mối kết hợp N-N
A B D
G
E T F
C P
Ví dụ 1: Chuyển mô hình thực thể kết hợp sau sang các lược đồ quan hệ
MAHD DONGIA MAHG
TENHG
HOADON(MAHD, NGAYLAP)
HANGHOA(MAHG, TENHG, DVT)
CHITIETHD(MAHD, MAHG, SOLUONG, DONGIA)
Ví dụ 2: Mối kết hợp nhiều nhiều biểu diễn dạng kiểu thực thể yếu:
NGAYSINH LANTHI MAMH
TENMH
MASV
SINHVIEN KETQUA MONHOC
SINHVIEN(MASV,HOTEN,NGAYSINH)
MONHOC(MAMH, TENMH, SOTC)
KETQUA(MASV,MAMH, LANTHI, DIEM)
Bài tập: Chuyển môn hình thực thể kết hợp sau sang các lược đồ quan hệ:
MAKH TENKH TENNSX
MANSX
DIACHI NHASX
KHACH DIACHI
Page 4
CHƢƠNG 3: ĐẠI SỐ QUAN HỆ
- Dựa vào lược đồ quan hệ cho trước để thực hiện:
+ Phân tích câu truy vấn (yêu cầu, điều kiện, các quan hệ)
+ Xác định các phép toán cần sử dụng (giải thích được vì sao sử dụng các phép toán)
+ Xác định những quan hệ liên quan (lưu ý: ko được thừa)
+ Viết biểu thức truy vấn bằng đại số quan hệ.
Ví dụ: Cho cơ sở dữ liệu gồm các lược đồ quan hệ sau:
LOP (MaLop, TenLop)
SINHVIEN(MaSV, HoTen, NgaySinh, Phai, MaLop)
MONHOC(MaMH, TenMH, SoTC)
KETQUA(MaSV, MaMH, Diem)
a/ Cho biết mã và họ tên những sinh viên thuộc lớp có tên là 07DHTH
– Giải thích sử dụng phép toán:
Câu truy vấn sử dụng các phép toán: Phép kết tự nhiên (vì có liên quan đến 2 quan hệ là
SINHVIEN và LOP), phép chọn (vì có điều kiện chọn tên lớp = 07DHTH), phép chiếu (vì
yêu cầu cho biết mã và họ tên sinh viên)
– Viết biểu thức truy vấn:
MASV,HOTEN(TENLOP='07dhth'(LOP*SINHVIEN))
hoặc cách 2:
MASV,HOTEN(TENLOP='07dhth'(LOP) *SINHVIEN)
a’/ Cho biết mã và họ tên những sinh viên thuộc lớp có mã là L01
MASV,HOTEN(MALOP='L01'(SINHVIEN))
b/ Mã và tên những môn học nào có số tín chỉ <2
c/ Liệt kê danh sách những sinh viên (mã sinh viên, họ tên) học môn có mã là MH001
d/ Liệt kê danh sách những sinh viên (mã sinh viên, họ tên) học môn có tên là Cơ sở dữ liệu
e/ Cho biết danh sách môn học (mã mh, tên mh) mà sinh viên có mã sv001 học
e’/ Cho biết danh sách môn học (mã mh) mà sinh viên có mã sv001 học
Page 5
CHƢƠNG 4: NGÔN NGỮ SQL
4.1 Cấu trúc câu truy vấn SQL
SELECT [* | DISTINCT] <danh_sách_cột>//Lưu ý: chỉ những cột yêu cầu
FROM <danh_sách_bảng liên quan> //Lưu ý: ko được thừa bảng
[WHERE <biểu_thức_điều_kiện>]
[GROUP BY <danh_sách_tên_nhóm>]
[HAVING <biểu_thức_điều_kiện_nhóm>]
[ORDER BY<tên_cột 1> [ASC | DESC], <tên_cột 2> [ASC | DESC],...]
4.2. Thứ tự thực thi một câu truy vấn
FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY
Ví dụ: Cho 2 quan hệ như sau:
NHANVIEN THAMGIA
MANV HOTEN PHAI MANV MADA SOGIO
NV001 Trần Văn Tuấn Nam NV01 DA1 20
NV002 Đỗ Thị Bình Nữ NV01 DA2 30
NV003 Nguyễn Thị Lan Nữ NV02 DA1 15
NV004 Trần Minh Nam NV02 DA3 25
NV03 DA3 10
NV03 DA2 15
Xét câu truy vấn: Cho biết mã, họ tên, phái của những nhân viên NỮ tham gia >= 2 đề án.
SELECT NHANVIEN.MANV, HOTEN, PHAI
FROM NHANVIEN, THAMGIA
WHERE NHANVIEN.MANV=THAMGIA.MANV AND PHAI=N'Nữ'
GROUP BY NHANVIEN.MANV, HOTEN, PHAI
HAVING COUNT(MADA)>=2
Thứ tự thực thi của câu truy vấn trên đƣợc thể hiện nhƣ sau:
1. FROM: Xác định các quan hệ liên quan là NHANVIEN và THAMGIA
NHANVIEN THAMGIA
MANV HOTEN PHAI MANV MADA SOGIO
NV001 Trần Văn Tuấn Nam NV01 DA1 20
NV002 Đỗ Thị Bình Nữ NV01 DA2 30
NV003 Nguyễn Thị Lan Nữ NV02 DA1 15
NV004 Trần Minh Nam NV02 DA3 25
NV03 DA3 10
Page 6
PHAI=N'Nữ'
2/ Cho biết mã môn, tên môn và số lượng sinh viên học tương ứng
SELECT MAMH,TENMH,COUNT(MASV)
FROM MONHOC,KETQUA
WHERE MONHOC.MAMH=KETQUA.MAMH
GROUP BY MAMH,TENMH
6/ Liệt kê những sinh viên (Mã sv, họ tên) có điểm môn cơ sở dữ liệu cao nhất.
SELECT SINHVIEN.MASV,HOTEN
FROM SINHVIEN,KETQUA,MONHOC
WHERE SINHVIEN.MASV=KETQUA.MASV AND KETQUA.MAMH=MONHOC.MAMH
AND TENMH=N'Cơ sở dữ liệu'
AND DIEM>=ALL(SELECT DIEM
FROM KETQUA,MONHOC
WHERE KETQUA.MAMH=MONHOC.MAMH
AND TENMH=N'Cơ sở dữ liệu')
4.4 Từ câu truy vấn đã có, tìm câu hỏi tƣơng ứng
Dựa vào ý nghĩa của từng mệnh đề trong cấu trúc câu truy vấn để viết ngược từ câu truy vấn
sang yêu cầu câu hỏi.
Ví dụ:
SELECT SINHVIEN.MASV,HOTEN
FROM SINHVIEN,KETQUA,MONHOC
Page 8
WHERE SINHVIEN.MASV=KETQUA.MASV AND KETQUA.MAMH=MONHOC.MAMH
AND TENMH=N'Cơ sở dữ liệu' AND DIEM>=8
Chọn từ các mệnh đề:
SELECT SINHVIEN.MASV,HOTEN =>Cho biết mã và họ tên những sinh viên
WHERE ...TENMH=N'Cơ sở dữ liệu' AND DIEM>=8 => học môn cơ sở dữ liệu,
điểm từ 8 từ 8 trở lên.
=> Cho biết mã và họ tên những sinh viên học môn cơ sở dữ liệu có điểm từ 8 trở lên.
4.5. Xác định khóa chính, khóa ngoại. Viết lệnh SQL tạo khóa chính, khóa ngoại
- Xác định khóa chính, khóa ngoại (xem bài tập chương 2 - giáo trình CSDL khoa CNTT)
- Viết lệnh tạo khóa chính, khóa ngoại: dùng cấu trúc
ALTER TABLE <tên bảng>
ADD CONSTRAINT PK_<tên ràng buộc> PRIMARY KEY (tên cột khóa chính)
ADD CONSTRAINT FK_<tên ràng buộc> FOREIGN KEY(tên cột khóa ngoại)
REFERENCES <tên bảng chứa khóa chính>(tên cột khóa chính)
4.6. Xác định kết quả của câu truy vấn, giải thích từng bƣớc cách thực hiện một câu
truy vấn.
SELECT MONHOC.MAMH,TENMH
FROM MONHOC,KETQUA
WHERE MONHOC.MAMH=KETQUA.MAMH
GROUP BY MONHOC.MAMH,TENMH
HAVING COUNT(MASV)>=ALL(SELECT COUNT(MASV)
FROM KETQUA
GROUP BY MAMH)
- Kết quả: tìm ra danh sách môn học (MAMH, TENMH) với điều kiện là có nhiều sinh viên
học nhất.
- Giải thích: Truy vấn con thực hiện trước cho kết quả là số sinh viên của từng môn học. Từ
khóa >= ALL sẽ tìm được số sinh viên cao nhất. Kết quả này sẽ làm điều kiện cho truy vấn
lớn để tìm được những môn học có số sinh viên học cao nhất.
Trên quan hệ này tồn tại các ràng buộc toàn vẹn:
Page 9
- Giá trị mã môn học phải duy nhất
- Số tín chỉ >=1
* Phân loại ràng buộc toàn vẹn:
- Ràng buộc toàn vẹn trên 1 quan hệ:
+ Liên bộ
+ Miền giá trị
+ Liên thuộc tính
- Ràng buộc toàn vẹn trên nhiều quan hệ:
+ Tham chiếu
+ Liên bộ - liên quan hệ
+ Liên thuộc tính - liên quan hệ
- Liệt kê các ràng buộc toàn vẹn có trên quan hệ.
* Biểu diễn các ràng buộc toàn vẹn:
+ Phát biểu
+ Bối cảnh
+ Nội dung
+ Bảng tầm ảnh hưởng.
Page 10
Lưu ý dạng phát biểu: Mỗi đối tượng thuộc quan hệ chứa khóa ngoại phải có/thuộc
trong quan hệ chứa khóa chính
+ Phát biểu: Mỗi nhân viên phải thuộc về một phòng ban
+ Bối cảnh: NHANVIEN, PHONGBAN
+ Nội dung:
+ Bảng tầm ảnh hưởng:
MASV TENSV
MASV TUOI
MASV PHAI
MASV MALOP
Có thể viết gộp: MASV TENSV, TUOI, PHAI, MALOP
Giải thích: Vì biết được mã sinh viên sẽ xác định (tìm được) chính xác tên sv, tuổi, phái và
mã lớp. Ví dụ có mã sv là SV003 sẽ tìm được chính xác tên sinh viên là LAN, tuổi 20, phái
Nữ và thuộc lớp có mã lớp là 03.
6.2 Hệ tiên đề armstrong
Cho lược đồ quan hệ R, tập thuộc tính U và X,Y,Z,W U
1. Luật phản xạ: (tập lớn xác định tập con)
2. Luật tăng trưởng:
3. Luật ắc cầu:
4. Luật phân r : (lưu ý: Chỉ được phân rã vế phải)
5. Luật hợp:
6. Luật tựa bắc cầu:
Định lý
Nếu X+F Y <=> X Y
Ví dụ 5: Áp dụng định lý để chứng minh phụ thuộc hàm ở ví dụ 2 và ví dụ 3
* Cho R(ABCD), F={AB, C D}. Chứng minh AC ABCD
AC+F=ACBD = ABCD (vế phải của pth) => theo định lý trên thì AC ABCD
* Cho R(ABCDE), F={BC, AE, BCA, DB}. Chứng minh: DAEC
D+F=DBCAE AEC => DAEC
6.3 Chứng minh một tập thuộc tính là khóa
Cho lược đồ quan hệ R, tập thuộc tính U, tập phụ thuộc hàm F, XU. Ta nói X là một khóa
của R nếu thỏa điều kiện sau:
1. XU (X+=U)
2. Y X thì Y U (Y+ U)
Ví dụ 6: Cho R(ABCDE), F = {AB, CE, DC, EBD}
Chứng minh AD là một khoá của R
+ Chứng minh điều kiện 1: ADU?
Ta có: AD+F=ADCEB=U=> ADU (1)
Page 14
6.5.2. Dạng chuẩn 2:
Định nghĩa: Một lược đồ quan hệ được gọi là đạt chu n nếu mọi thuộc tính không khóa
đều phụ thuộc đầy đủ vào khóa
* Khoá: Dùng thuật toán tìm khoá để tìm ra tất cả các khoá của lược đồ R
* Thuộc tính không khoá: =U-{tập các thuộc tính khoá}
Ví dụ 10: R(ABCDE) có 2 khoá là AB và AE
Thuộc tính không khoá=U-{A,B,E}={C,D}
* Phụ thuộc đầy đủ: Xét XY, Y được gọi là phụ thuộc đầy đủ vào X nếu Z X thì Z Y
Ví dụ 11: R(ABCDE), F={ABE, D CE, A D}
Xét phụ thuộc hàm ABE. Hỏi E có phụ thuộc đầy đủ vào AB không?
Ta có A AB mà A+F=ADCE E => A E => E không phụ thuộc đầy đủ vào AB
* Kiểm tra lƣợc đồ R có đạt chuẩn 2 không?
Ví dụ 12: Cho R(ABCD), F={ABC, BD, BCA}. Kiểm tra có đạt chu n 2 không?
R có 2 khoá: AB và BC (lưu ý: dùng thuật toán để tìm ra tất cả các khoá)
=> thuộc tính ko khóa: U-{A,B,C}=D
Xét BCD, có B BC mà BD (gt) với D là thuộc tính không khoá D không phụ
thuộc đầy đủ vào khoá BC nên không đạt chu n 2
Lưu ý: xét phụ thuộc hàm BCD phải có cấu trúc: vế trái là khoá và vế phải là thuộc tính
không khoá. Ta được phép ghi BC D mặc dù phụ thuộc hàm này không có trong F vì BC
là khoá thì xác định bất kỳ thuộc tính nào có trong R.
* Nếu tất cả các khoá của R đều có 1 thuộc tính thì R luôn đạt chuẩn 2
Bài tập.
1. Cho R(ABCDE), F={EG C, E B, C DE, EG A}. Hãy kiểm tra có đạt chu n
2 hay không?
2. Cho R(ABCDEG), F={G CD, DA E, D B, DA G}. Chứng tỏ không đạt
chu n 2
6.5.3. Dạng chuẩn 3:
Định nghĩa: Một lược đồ quan hệ được gọi là đạt chu n nếu mọi phụ thuộc hàm
XYF thỏa một trong hai điều kiện sau:
+ Hoặc X là siêu khóa
+ Hoặc Y là thuộc tính khóa
Siêu khoá: Một tập thuộc tính X gọi là siêu khoá nếu X chứa một khoá bất kỳ
Siêu khoá Khoá
Ví dụ 13: Cho R(ABCD), F={AB C, B D, BC A}
Page 15
Kiểm tra có đạt chu n 3 không?
R có 2 khoá: AB và BC (lưu ý: dùng thuật toán để tìm ra tất cả các khoá)
Xét B D có B không là siêu khoá và D không là thuộc tính khoá R không đạt chu n 3
6.5.3. Dạng chuẩn BC:
Định nghĩa: Một lược đồ quan hệ được gọi là đạt chu n BC nếu mọi phụ thuộc hàm
XY đều có vế trái là siêu khóa.
Ví dụ 14: Cho (ABCD) có = AB CD, AC B}
R có 2 khoá là AB và AC (lưu ý: dùng thuật toán để tìm ra tất cả các khoá)
Xét lần lượt các phụ thuộc hàm trong F:
AB CD: có AB là siêu khoá => thoả chu n BC
AC B: có AC là siêu khoá => thoả chu n BC
đạt chu n BC
6.6. Xác định dạng chuẩn cao nhất của lƣợc đồ
Có 2 cách:
1. Xác định từ chu n 2 -> chu n BC
. Xác định từ chu n BC -> chu n 2
Lưu ý: Lược đồ quan hệ mặc định đạt chuẩn 1 nên ko cần ktra chuẩn 1.
Nếu chuẩn cao nhất của R là:
– Chu n 1 => cần chứng minh ko đạt chu n 2.
– Chu n 2 => cần chứng minh đạt chu n và không đạt chu n 3
– Chu n 3 => cần chứng minh đạt chu n và không đạt chu n BC
– Chu n BC => cần chứng minh đạt chu n BC
Ví dụ 15: Cho R(ABCDE), F={DB A, E CB, D BA, C E}. Hãy xác định dạng
chu n cao nhất của R?
R có 2 khoá: DC và DE, thuộc tính không khoá là A, B
Kiểm tra chuẩn 2:
Xét DC A, ta có D DC mà D BA => D A => thuộc tính không khoá A phụ thuộc
không đầy đủ vào khoá DC => không đạt chu n 2
Vì không đạt chu n 2 nên dạng chu n cao nhất của R là chu n 1.
Bài tập
Xác định dạng chu n cao nhất của các lược đồ sau:
a/ R(A,B,C,D); F={A C, D B, C AD, C B}
b/ R(A,B,C,D,E); F={BC D, D E, D C}
Page 16
c/ R(A,B,C,D); F={AB C, B D, C AB}
d/ R(A,B,C,D,E); F={A E, CD B, E D, B C}
e/ R(A,B,C,D,E); F={AE BCD, C A, A E}
f/ R(A,B,C,D,E,G); F={AE C, CG A, BD G, GA E}
Page 17