Truy vấn có gom nhómSELECT , FROM WHERE GROUP BY HAVING - Các hàm kết hợp: COUNT, MIN, MAX, SUM, AVG - Sau khi gom nhóm: mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc tính gom nh
Trang 2Ràng buộc toàn vẹn
Ngôn ngữ truy vấn
NỘI DUNG CHÍNH
Phụ thuộc hàm Dạng chuẩn
Trang 3NGÔN NGỮ TRUY VẤN 1
Trang 51 Toán tử cơ bản
- Toán tử so sánh: =, >, >=, <=, <>
- Toán tử logic: AND, OR, NOT
- Phép toán: +, -, * , /
- Toán tử khác: BETWEEN AND; IS NULL, IS NOT NULL;
LIKE (_ , %); IN, NOT IN; EXISTS, NOT EXISTS; SOME, ANY, ALL
Trang 6[HAVING <điều kiện>]
[ORDER BY <tên cột> ASC | DESC]
Trang 73 Truy vấn cơ bản
Tên các cột cầnhiển thị trong kếtquả truy vấn
Tên các bảngliên quan đếntruy vấn
Biểu thức điều kiện
Trang 84 Truy vấn có kết bảng
SELECT <danh sách cột>
FROM <bảng A> [INNER] JOIN <bảng B>
ON <bảng A>.<khóa ngoại> = <bảng B>.<khóa chính>
[WHERE <điều kiện> ]
Trang 9Câu 1.2b:
SELECT K.MAKB, B.MABN, HOTEN
FROM KHAMBENH K JOIN BENHNHAN B
ON K.MABN = B.MABN
WHERE YEAR(B.NGSINH) > 2020 AND K.BENH = ‘Tim mạch’
Cho biết thông tin(MAKB, MABN, HOTEN) của những bệnh nhân sinh sau năm 2020
có khám bệnh chính là ‘Tim mạch’
BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)
KHAMBENH(MAKB, MABN, BENH, BENHKT, BATDAU, KETHUC, KETLUAN, TAIKHAM)
Trang 105 Truy vấn có sắp xếp
SELECT <danh sách cột>
FROM <danh sách bảng>
WHERE <điều kiện>
ORDER BY <danh sách cột> [ASC | DESC ]
Lưu ý:
- ASC : tăng và DESC : giảm
- Khi sau mệnh đề ORDER BY chỉ có danh sách cột thì mặc định sẽ sắp
xếp ASC (tăng dần)
Trang 11=> Sắp xếp tăng dần theo
DOANHSO, nếu có cùng
DOANHSO sẽ sắp xếp tăng
dần theo NGDK
Trang 12Cho biết thông tin bệnh nhân (HOTEN, CMND) thuộc đối tượng ‘BHYT’
hoặc có địa chỉ ở ‘Đồng Nai’ Kết quả được sắp xếp theo số lần phẫu thuật
giảm dần
BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)
Trang 136 Truy vấn có gom nhóm
SELECT <danh sách cột>, <hàm kết hợp>
FROM <danh sách bảng>
WHERE <điều kiện>
GROUP BY <danh sách cột gom nhóm>
HAVING <điều kiện gom nhóm>
- Các hàm kết hợp: COUNT, MIN, MAX, SUM, AVG
- Sau khi gom nhóm: mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc
tính gom nhóm
- Sử dụng HAVING để kiểm tra một số điều kiện nào đó và sau khi gom
nhóm, điều kiện gom nhóm mới được thực thi
Trang 146 Truy vấn có gom nhóm
SELECT NV.MANV, NV.HOTEN, COUNT(*) AS TongSoHD
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV = NV.MANV
GROUP BY NV.MANV, NV.HOTEN HAVING COUNT(*) <= 2
Ví dụ: In ra thông tin nhân viên có số lượng hóa đơn đã lập ít hơn 2:
Trang 15Câu 1.2c: (HK1 2020-2021)
SELECT B.MABN, HOTEN, COUNT(K.MAKB) AS SL
FROM BENHNHAN B JOIN KHAMBENH K
BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)
KHAMBENH(MAKB, MABN, BENH, BENHKT, BATDAU, KETHUC, KETLUAN, TAIKHAM)
Trang 177 Truy vấn lồng
* Mệnh đề WHERE của câu truy vấn cha
- <biểu thức> <so sánh tập hợp> <truy vấn con>
- So sánh tập hợp thường đi cùng với một số toán tử: IN, NOT IN;
ALL; ANY hoặc SOME
- Kiểm tra sự tồn tại: + EXISTS + NOT EXISTS
* Lồng phân cấp: Mệnh đề WHERE của truy vấn con không tham
chiếu đến thuộc tính của các quan hệ trong mệnh đề FROM ở truy
vấn cha => Khi thực hiện, câu truy vấn con sẽ được thực hiện trước
* Lồng tương quan: Mệnh đề WHERE của truy vấn con tham chiếu ít
nhất một thuộc tính của các quan hệ trong mệnh đề FROM ở truy
vấn cha => Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều
lần, mỗi lần tương ứng với một bộ của truy vấn cha
Trang 19Câu 1.2d: (HK1 2020-2021)
SELECT MABS, HOTEN
FROM BACSI
WHERE CHUYEMON = ‘Tai–Mũi–Họng’ AND
MABS NOT EXISTS ( SELECT B.MABS
FROM BACSI B JOIN PHUTRACH P
ON B.MABS = P.MABS
WHERE B.CHUYEMON = ‘Tai–Mũi–Họng’ AND
YEAR(P.BATDAUPT) = 2020 )
Cho biết thông tin những bác sĩ (MABS, HOTEN) có chuyên môn
‘Tai-Mũi-Họng’ chưa được phụ trách khám bệnh trong năm 2020 (BATDAUPT)
BACSI(MABS, HOTEN, NAMSINH, CHUYENMON, KHOA, BENHVIEN)
PHUTRACH(MABS, MAKB, BATDAUPT, KETTHUCPT)
Trang 208 Phép toán tập hợp
SELECT <danh sách cột 1>
FROM <danh sách bảng>
WHERE <điều kiện 1>
UNION (hội) |INTERSECT (giao) |EXCEPT (trừ)
SELECT <danh sách cột 2>
FROM <danh sách bảng>
WHERE <điều kiện 2>
Lưu ý: Để sử dụng các phép hội giao trừ thì 2 quan hệ phải khả hợp,
tức: <danh sách cột 1> = <danh sách cột 2>
=> Kết quả trả về làtập hợp
• Loại bỏ các bộtrùng nhau
• Để giữ lại các bộtrùng nhau: UNION ALL; INTERSECT ALL; EXCEPT ALL
Trang 22SELECT MANV, HOTEN
FROM NHANVIEN JOIN HOADON
ON NHANVIEN.MANV = HOADON.MANV
WHERE HOADON.NGHD = ‘1/10/2020’
Trang 23=> R:S là tập các giá trị ai trong R sao cho không
có giá trị bi nào trong S làm cho bộ (ai , bi ) không tồn tại trong R
Trang 24FROM R R2 WHERE R2.D=S.D AND
R2.E=S.E AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C ))
Trang 25FROM CTHD CT WHERE CT.MASP = SP.MASP AND
CT.SOHD = HD.SOHD)
)VD: Tìm trị giá hóa đơn đã mua tất cả các sản phẩm
Trang 26BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)
KHAMBENH(MAKH, MABN, BENH, BENHKT, BATDAU, KETHUC, KETLUAN, TAIKHAM)
PHAUTHUAT(MAPT, MAKB, BOPHANPT, LOAIPT, KETQUA)
BACSI(MABS, HOTEN, NAMSINH, CHUYENMON, KHOA, BENHVIEN)
PHUTRACH(MABS, MAKB, BATDAUPT, KETTHUCPT)
Câu 1.2e:
Cho biết (MABS, HOTEN) của những bác sĩ chuyên môn ‘Hồi sức – Cấp
cứu’ tham gia tất cả các mã khám bệnh của bệnh nhân ‘Nguyễn Văn A’
Trang 27SELECT DISTINCT B.MABS, HOTEN
FROM BACSI B
WHERE B.CHUYENMON = ‘Hồi sức – Cấp cứu’
AND NOT EXISTS ( SELECT *
FROM BENHNHAN BN
WHERE BN.HOTEN = ‘Nguyễn Văn A’
AND NOT EXISTS ( SELECT *
FROM PHUTRACH P, KHAMBENH K
WHERE B.MABS = P.MABS AND
P.MAKB = K.MAKB AND K.MABN = BN.MABN) )
Câu 1.2e:
Cho biết (MABS, HOTEN) của những bác sĩ chuyên môn ‘Hồi sức – Cấp
cứu’ tham gia tất cả các mã khám bệnh của bệnh nhân ‘Nguyễn Văn A’
Trang 28#Một số chú ý
- Các từ khóa sử dụng với SELECT: DISTINCT loại bỏ dòng trùng, * lấy hết
các cột, COUNT(*) đếm số hạng
- Mệnh đề TOP n [WITH TIES] : lấy theo thứ tự từ trên xuống dưới n dòng,
từ khóa WITH TIES để lấy cả những giá trị cùng hạng
Trang 29ORDER BY SUM (P.BATDAUPT) DESC
Cho biết thông tin bác sĩ (MABS, HOTEN) có số lần phụ trách khám bệnh
nhiều nhất
BACSI(MABS, HOTEN, NAMSINH, CHUYENMON, KHOA, BENHVIEN)
PHUTRACH(MABS, MAKB, BATDAUPT, KETTHUCPT)
Trang 30RÀNG BUỘC TOÀN VẸN 2
Trang 311 Khái niệm
Ràng buộc toàn vẹn là các quy định, điều kiện từ ứng dụng thực tế, các điều kiện
này là bất biến
=> Đảm bảo cơ sở dữ liệu thoả ràng buộc toàn vẹn sau mỗi thao tác làm thay đổi
tình trạng của cơ sở dữ liệu
MỤC TIÊU:
Bảo đảm tính kết dính của các thành phần cấu tạo nên
CSDL
Bảo đảm tính nhất quán của dữ liệu
Bảo đảm CSDL luôn biểu diễn đúng ngữ nghĩa thực tế
Trang 32hệ đó thì RBTV có khả năng
bị vi phạm
Nội dung
Phát biểu bằng ngôn ngữ tự nhiên hoặc bằng ngôn ngữ hình thức(ngôn ngữ tân từ, đại số quan hệ, mã giả, )
Là bảng 2 chiều, xác định thao tác ảnh hưởng và thao tác không ảnh hưởng lên các QH nằm trong bối cảnh
Trang 33- Dấu -(*): không vi phạm do thao tác
không thực hiện được
Trang 34Liên thuộc tính, liên quan hệ
Do thuộc tính tổng hợp
Liên bộ, liên quan hệTham chiếu
Liên bộLiên thuộc tínhMiền giá trị
Trang 353.1.1 RBTV miền giá trị
Trang 363.1.2 RBTV liên thuộc tính
Là ràng buộc giữa các thuộc tính với nhau trên 1 bộ của quan hệ
Xét lược đồ quan hệ:
DEAN(MADA, TENDA, DIADIEM_DA, NGBD_DK, NGKT_DK)
Ví dụ: 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)
Bối cảnh: DEAN
Nội dung: ∀ d ∈ DEAN: d.NGBD_DK < d.NGKT_DK
Bảng tầm ảnh hưởng:
Trang 37SINHVIEN(MSSV, HO, TEN, NGSINH, GIOITINH, NOISINH, MALOP)
Ví dụ: Tất cả các sinh viên phải có mã số phân biệt với nhau
Bối cảnh: SINHVIEN
Nội dung: ∀ s1, s2 ∈ SINHVIEN: s1 ≠ s2 => s1.MSSV ≠ s2.MSSV
Bảng tầm ảnh hưởng:
Trang 38NHANVIEN(MANV, HO, TEN, NGSINH, PHAI, MA_NQL, MAPH, LUONG)
Ví dụ: Mỗi trưởng phòng phải là 1 nhân viên trong công ty
Bối cảnh: NHANVIEN, PHONGBAN
Nội dung: ∀ p ∈ PHONGBAN, ∃ n ∈ NHANVIEN: p.TRGPH = n.MANV
Bảng tầm ảnh hưởng:
Trang 393.2.3 RBTV liên thuộc tính, liên QH
Ràng buộc giữa các thuộc tính trên những quan hệ khác nhau
Xét lược đồ quan hệ:
DATHANG(MaDH, MaKH, NgayDH)
GIAOHANG(MaGH, MaDH, NgayGH)
Ví dụ: Ngày giao hàng không được trước ngày đặt hàng
Bối cảnh: DATHANG, GIAOHANG
Nội dung: ∀ gh ∈ GIAOHANG,
∃ dh ∈ DATHANG: dh.MaDH = gh.MaDH ∧ dh.NgayDH <= gh.NgayGH
Bảng tầm ảnh hưởng:
Trang 403.2.2 RBTV liên bộ, liên quan hệ
Ràng buộc xảy ra giữa các bộ trên nhiều quan hệ khác nhau
Xét lược đồ quan hệ:
HOADON(SoHD, NgayHD, MaKH, TriGia)
CTIETHD(SoHD, MatHang, SoLuong)
Ví dụ: Mỗi hoá đơn phải bán ít nhất một mặt hàng
Bối cảnh: HOADON, CTIETHD
Nội dung: ∀ hd ∈ HOADON, ∃ ct ∈ CTIETHD: hd.SoHD= ct.SoHD
Bảng tầm ảnh hưởng:
Trang 413.2.4 RBTV do thuộc tính tổng hợp
Ràng buộc giữa các thuộc tính, các bộ trên những quan hệ khác nhau
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, các bộ khác
Xét lược đồ quan hệ:
SANPHAM(Masp,Tensp, Nuocsx, Gia)
KHACHHANG(Makh, Hoten, Doanhso)
HOADON(Sohd, Nghd, Makh, SLMH, Trigia)
CTHD(Sohd, Masp, SL, Gia)
Ví dụ: Trị giá của một hoá đơn bằng tổng thành tiền của các chi
tiết thuộc hoá đơn đó
Trang 423.2.4 RBTV do thuộc tính tổng hợp
HOADON(Sohd, Ngayhd, Makh, SLMH, Trigia)
CTHD(Sohd, Masp, SL, Gia)
Bối cảnh: HOADON, CTHD
Nội dung: ∀ h ∈ HOADON,
h.Trigia = Ʃ(ct ∈ CTHD: ct.SoHD = h.SoHD) (ct.SL * ct.Gia)
Bảng tầm ảnh hưởng:
Trang 43Câu 1: (HK1 2017 – 2018)
Trang 44Câu 1.1: (HK1 2017 – 2018)
Câu 1: Cho lược đồ cơ sở dữ liệu “Quản lí thẻ tài khoản” có cấu trúc như
sau:
KhachHang(MaKH, HoTen, NgaySinh, DiaChi, SoDT, CMND)
LoaiTaiKhoan(MaLTK, TenLTK, MoTa)
TaiKhoan(SoTK, MaKH, MaLTK, NgayMo, SoDu, LaiSuat, TrangThai)
LoaiGiaoDich(MaLGD, TenLGD, MoTa)
GiaoDich(MaGD, SoTK, MaLGD, NgayGD, SoTien, NoiDung)
1.1 Hãy phát biểu chặt chẽ ràng buộc toàn vẹn (bao gồm bối
cảnh, nội dung, bảng tầm ảnh hưởng):
Khách hàng chỉ được mở tài khoản (SoTK) khi khách hàng có
tuổi từ 14 trở lên
Trang 46PHỤ THUỘC HÀM DẠNG CHUẨN
3
Trang 47Dạng chuẩn 2Dạng chuẩn 1
KhoáBao đóng
Hệ luật dẫn Amstrong
Thuật toán tìm khoá
Trang 48nếu và chỉ nếu r1[X] = r2[X] => r1[Y] = r2[Y], tức là với mỗi giá trị
của X trong R chỉ tương đương với 1 giá trị của Y
X -> Y là 1 phụ thuộc hàm, hay Y phụ thuộc X
Trang 49Phụ thuộc hàm
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
VD: Mahv, Hoten → Hoten
F2) Tính tăng trưởng: {X→Y} thì XZ → YZ
VD: CMND → Hoten => CMND, Diachi → Hoten, Diachi
F3) Tính bắc cầu: {X→Y, Y→Z} thì X→Z
VD: Manv → Maph
Maph → Tenph => Manv → Tenph
Trang 50F5) Tính phân rã: {X→YZ} thì {X→Y,X→Z}
Manv → Hoten, Gioitinh
=> {Manv → Hoten, Manv → Gioitinh}
F6) Tính tựa bắt cầu: {X→Y, YZ→W} thì XZ→W
Masv → Malop
Malop, Mamh → Magv
=> Manv → Hoten, Gioitinh
=> Masv, Mamh → Magv
Trang 52Phụ thuộc hàm
Hệ luật dẫn Amstrong
Ví dụ:
Cho Q={ABCDEGH} và tập phụ thuộc:
F={ A→C, AB→DG, BC→AH, BG→DE, AG→E, CG→H }
BC→DG có thuộc F+ không?
Rối quá!
Không phải khi nào cũng dễ dàng có thể dùng tiên đề Armstrong để tìm được chuỗi suy diễn này khi Q lớn và F
có quá nhiều giả thiết gây rối
⇒ Sử dụng bao đóng tập thuộc tính sẽ đơn giản hơn rất nhiều để giải quyết vấn đề trên
Trang 53Phụ 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
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+ }
Bao đóng
Trang 54Phụ thuộc hàm
Bao đóng
Thuật toán tìm bao đóng của tập thuộc tính
Trang 56Phụ thuộc hàm
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?
Dựa vào tính chất X → Y ∈ F+ ⇔ Y ⊆ X+F
Ta tìm bao đóng X+
FNếu Y ⊆ X+
F thì X → Y ∈ F+
ngược lại X → Y không thuộc F+
Từ ví dụ 2 tìm bao đóng của tập thuộc tính AC Cho biết AC → E
Trang 58Phụ thuộc hàm
Khoá
Đị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 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’
Trang 59Phụ thuộc hàm
Khoá
Thuật toán tìm khoá
Tập thuộc tính nguồn, ký hiệu là N, là tập chứa
những thuộc tính chỉ xuất hiện ở vế trái của
mọi phụ thuộc hàm
Tập thuộc tính trung gian, ký hiệu là TG, là tập
chứa những thuộc tính vừa xuất hiện ở vế
trái, vừa xuất hiện ở vế phải trong các phụ
thuộc hàm
Trang 60F = Q+thì chỉ có 1 khoá là N, ngược lại qua bước 2.
(ghi chú Q+ là tập các thuộc tính của quan hệ)
Bước 2: Tính tập trung gian TG
Tính tập tất cả các tập con Xi của tập TG
Bước 3: Tìm tập S chứa mọi siêu khóa Si:
Với mỗi Xi , nếu (N ∪ Xi)+
F= Q+ thì Si=(N∪ Xi)Nếu: (N ∪ Xi)+
F= Q+ khi đó N ∪ Xilà một khóa Do vậy loại bỏcác trường hợp Xj: Xi ⊂ Xj
VD: Xi =AB, Xj =ABC Ta thấy Xi ⊂ Xj, nếu Xi là khóa thì không cần
xét trường hợp Xj nữa
Trang 61Phụ thuộc hàm
Khoá
Thuật toán tìm khoá
Ví dụ 1: Cho lược đồ quan hệ Q(A, B, C, D, E) và tập phụ thuộc
hàm: F = { B → E, AB → CD, BC → A } Tìm mọi khóa của Q
Trang 62Phụ thuộc hàm
Khoá
Thuật toán tìm khoá
Ví dụ 2: Cho lược đồ quan hệ Q(A, B, C, D) và tập phụ thuộc
hàm: F = { A → BCD, CD → AB } Tìm mọi khóa của Q
N = { }, N+
F ≠ Q+
TG = {A, C, D}, tập các tập con trung gian là Xi = {A, C, D, AC, AD, CD, ACD}
Kết luận: Các khoá của Q là A, CD
Trang 63Các dạng chuẩn
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ố 12 Đường Võ Văn Ngân Phường
Linh Trung Quận Thủ Đức không là nguyên tố
ĐịaChỉ → (SốNhà, Đường, Phường, Quận)
Trang 64Các dạng chuẩn
Dạng chuẩn 1 (1NF)
HOADON(MaHD, MaKH, NgayHD, CtietMua, SoTien)
CtietMua không là nguyên tố nên lược đồ quan hệ HOADON
không đạt Dạng chuẩn 1
Trang 65Kiể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
Trang 66Các dạng chuẩn
Dạng chuẩn 2 (2NF)
Ví dụ:
Cho Q1 (A, B, C, D), F={A→B, B→DC}
Hỏi Q có đạt dạng chuẩn 2 hay không?
Lược đồ chỉ có một khóa là A, khoá này chỉ có duy nhất 1 thuộc
tính, 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
Trang 67Kiể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
Trang 68Các dạng chuẩn
Dạng chuẩn 3 (3NF)
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