Tên hàng Đơn giá Đơn vị tính Số lượng Thành Tiền Hãy giải thích các vấn đề nảy sinh sau đây khi thiết kế CSDL này: -Dư thừa dữ liệu Redundancy -Không nhất quán Inconsistency -Dị thường k
Trang 1Tên hàng
Đơn giá
Đơn
vị tính
Số lượng
Thành Tiền
Hãy giải thích các vấn đề nảy sinh sau đây khi thiết kế CSDL này:
-Dư thừa dữ liệu (Redundancy)
-Không nhất quán (Inconsistency)
-Dị thường khi thêm bộ (Insertion anomalies)
-Dị thường khi xóa bộ (Deletion anomalies)
Giải
liệu về khách hàng đó sẽ lặp lại trong nhiều bộ của quan hệ trên sơ đồ này Cụ thể, mỗi khi xuất
hiện Mã KH trong một bộ thì tên và địa chỉ của họ lặp lại trong quan hệ - Không nhất quán
(Inconsistency): dị thường xuất hiện khi sửa dữ liệu là hệ quả của việc dư thừa dữ liệu Ví dụ khi
Trang 2sửa đổi địa chỉ khách hàng có mã KH04 từ “Đống đa” thành “Tây Hồ”, nếu chúng ta chỉ sửa đổi
ở 1 bộ nào đó còn các bộ khác vẫn giữ nguyên Khi đó xảy ra hiện thượng một Khách hàng lạikhông có một địa chỉ duy nhất
cả, khi thêm 1 bộ giá trị về họ chúng ta không thể đưa mặt hàng và giá cả vào bộ này trong quan
hệ
khi đó quan hệ chỉ có một bộ dữ liệu lưu trữ vầ khách hàng này Khi chúng ta xóa bộ dữ liệu liênquan đến lần mua này thì sẽ làm mất thông tin về khách hàng đó
Câu hỏi số 2
1 Hãy xác định tập thuộc tính và miền giá trị tương ứng của quan hệ BÁN HÀNG nói trên
2 Hãy xác định tập phụ thuộc hàm trong quan hệ BÁN HÀNG nói trên
3 Hãy viết lược đồ quan hệ BÁN HÀNG nói trên
Dom(Thành Tiền}= real
2 Tập phụ thuộc hàm
F= {Số hóa đơn -> Mã KH, Số hóa đơn -> Tên KH, Số hóa đơn -> Địa chỉ KH, Mã KH -> Tên KH,
Mã KH -> Địa chỉ KH, Mã hàng -> Tên hàng, Mã hàng -> Đơn giá, Mã hàng -> Đơn vị tính}
3 Lược đồ quan hệ
R= <U, F>
Với U= {Ngày bán, Số hóa đơn, Mã KH, Tên KH, Địa chỉ KH, Mã hàng, Tên hàng, Đơn giá, Đơn vị tính, Số lượng, Thành tiền} Và
F= {Số hóa đơn -> Mã KH, Số hóa đơn -> Tên KH, Số hóa đơn -> Địa chỉ KH, Mã KH -> Tên KH,
Mã KH -> Địa chỉ KH, Mã hàng -> Tên hàng, Mã hàng -> Đơn giá, Mã hàng -> Đơn vị tính}
Trang 3- Tương tự như vậy, tìm tiếp các phụ thuộc hàm có vế trái là A, C, D và các tích của chúng, ta có:
D → H, DA → CE Do đó thêm H, E vào X1 ta được X2 = ACDEH
- Tương tự như vậy, tìm tiếp các phụ thuộc hàm có vế trái là A,C, D,E,H và các tích của chúng, ta
có X3 = ACDEH Bước 3: (AC)+ = ACDEH
2 Tìm phủ thiểu của tập F
Trang 5Bước 2: Loại bỏ các thuộc tính dư thừa
Xét từng thuộc tính ở vế trái của phụ thuộc hàm có từ 2 thuộc tính trở lên xem theo bảng sau
Xét phụ thuộc hàm Thuộc tính Kiểm tra tính dư thừa của thuộc tính F2
BE → G B (E) + = {DEG} có chứa G => dư thừa =>
loại thuộc tính B ra khỏi phụ thuộc
hàm BE → G, ta có: E → G
E (B) + = {B} không chứa G => Không dư
thừa F2= {A→ B, A → C, E →G, E → D, D →G, AG→
B, AG → C}
AG → B A (G) + = G không chứa B => không dư thừa
G (A) + = ABC có chứa B => dư thừa =>
Loại thuộc tính G ra khỏi phụ thuộc hàm AG → B, ta có: A -> B
F2 = {A→ B, A → C, E →
G, E → D, D →G, AG → C}
AG → C A (G) + = G không chứa C => không dư thừa
Xét phụ thuộc hàm Thuộc tính Kiểm tra tính dư thừa của thuộc tính F2
G (A) + = ABC có chứa C => dư thừa =>
loại thuộc tính G ra khỏi phụ thuộc
Trang 6Bước 3: Loại bỏ các phụ thuộc hàm dư thừa
Áp dụng thuật toán tính phủ không dư thừa với đầu vào là F2: chúng ta đặt F0 = F2
F0 = {A→B, A→C, E→G, E→D, D→G}
Và kiểm tra tất cả các phụ thuộc hàm (PTH) theo thứ tự trên như bảng sau
A → B {A→C, E→G, E→D, D→G} A+ = AC, không chứa B,
không dư thừa
F1=F0
A → C {A→B, E→G, E→D, D→G} A+ = AB, không chứa C,
không dư thừa
F2=F1
E → G {A→B,A→C, E→D, D→G} E+ = EDG, có chứa G
nên dư thừa => Loại
F3= {A→B,A→C, E→D,D→G}
E → D {A→B, A→C, D→G} E+ = E không chứa D
nên không dư thừa
F4 = F3
D → G {A→B, A→C, E→D} D+ = D không chứa G
nên không dư thừa F5=F4
Sau khi thử xong tất cả các phụ thuộc hàm trong lược đồ Kết quả cuối cùng ta có phủ tối thiểu
F tối thiểu = {A→B, A→C, E→D, D→G}
Đáp án bài tập số 6
Trang 7a) Tìm tập khóa của lược đồ này
b) Tìm khóa tối thiểu của lược đồ này
Giải
a) Tìm tập khóa của lược đồ
Bước 1: L = {ABC} R = {AB} Từ đó có: TN = U\R = {C} và TG = L R = {AB}
Bước 2: Vì TG # 0 nên ta làm tiếp bước 3
Bước 3: Ta có tập con Xi của tập TG = {0, A, B, AB} Bước
4: tìm siêu khóa Si theo bảng sau:
Trang 8Vậy ta có tập siêu khóa S = {C, AC, BC, ABC}
Bước 5: Tuy nhiên, vì C chứa trong AC, BC và ABC nên loại bỏ siêu khóa AC, BC và ABC rakhỏi tập siêu khóa
Vậy ta có, tập khóa K = {C} là khóa của lược đồ quan hệ
b) Tìm khóa tối thiểu của lược đồ
Và F = {AB ->B, BI -> ACD, ABC -> D, H->I, ACE -> BCG, CG -> AE} Hãy
tìm các siêu khóa và 1 khóa tối thiểu của lược đồ quan hệ này
Bước 2: Vì TG # 0 nên ta làm tiếp bước 3
Bước 3: Ta có tập con Xi của tập TG = {0, A, B, C, E, G, I
AB, AC, AE, AG, AI, BC, BE, BG, BI, CE, CG, CI, EG, EI, GI,
ABC, ABE, ABG, ABI, ACE, ACG, ACI, AEG, AEI, AGI,
BCE, BCG, BCI, BEG, BEI, BGI, CEG, CEI, CGI, EGI,
ABCE, ABCG, ABCI, ABEG, ABEI, ABGI,
BCEG, BCEI, BCGI, CEGI,
ABCEG, ABCEI, ABCGI, BCEGI, ABCEGI}
Trang 9Bước 4: tìm siêu khóa Si theo bảng sau
Xi TN Xi Bao đóng của
TN Xi
Kiểm tra (TN Xi)+ = U+ ?
Trang 10ACI ACHI ACHI != U +
Trang 11Vậy ta có tập siêu khóa S = {BEH, BGH, CGH, ABEH, ABGH, ACGH, BCEH, BGEH, BEHI,BGHI, CEGH, CGHI, ABCEH, ABCGH, ABEHI, ABGHI, BCEGH, BCEHI, BCGHI, CEGHI,ABCEGH, ABCEHI, ABCGHI, BCEGHI, ABCEGHI}
Bước 5: Sau khi rút gọn ta có tập khóa K = {BEH, BGH, CGH} là khóa của lược đồ quan hệ
2 Tìm một khóa và khóa tối thiểu Giải:
K
• => Kết quả Khóa là K= {CGH}
Đáp án bài tập số 8 - ONLINE
Câu hỏi 1:
Cho quan hệ: R(MaSV, MaMonhoc, Diem)
Với dữ liệu được cho trong bảng sau
Mã sinh viên Mã môn học Điểm
Trang 12Thực hiện phép kết nối tự nhiên 2 quan hệ R1*R2 ta có
Mã sinh viên Mã môn học Điểm
Trang 13Giả sử R được tách thành D = {U1, U2, U3, U4, U5} với
U1 = {AD}, U2 = {AB}, U3 = {BE}, U4 = {CDE} và U5 = {AE}
Hãy sử dụng thuật toán để kiểm tra xem phép tách này có được bảo toàn thông tin haykhông?
Trang 15PHONGBAN(MaPB, TenPB, DiaChi, DTnoibo)
với dữ liệu được cho dưới dạng bảng sau
PHÒNG BAN
Mã phòng ban Tên phòng ban Địa chỉ Điện thoại nội bộ
Trang 17DIEMTHI(MaHP, MaSV, TenSV, NgaySinh, Diem)
Tương ứng với hai bảng sau đây
Hãy kiểm tra xem quan hệ này đã đạt chuẩn 2NF hay chưa? Nếu chưa, hãy chuẩn hóa về 2NF
Giải:
Quan hệ HOCPHAN(MaHP, TenHP) đạt chuẩn 2NF
Quan hệ DIEMTHI(MaHP, MaSV, TenSV, NgaySinh, Diem) không đạt chuẩn 2NF vì có sự phụ thuộc MaSV -> TenSV, NgaySinh nên phải tách thành 2 quan hệ
DIEMTHI(MaHP,MaSV,Diem) và SINHVIEN(MaSV, TenSV, NgaySinh)
Bước 1: Tìm tất cả các khóa của R Xác định tập thuộc tính không khoá
Ta có L = {ABC}, R = {ACD}, TN = {B}, TG = {AC}
Vì TG # 0 và tập con Xi của tập TG = {0, A, C, AC}
Tìm siêu khóa Si theo bảng sau:
Trang 18Xi TN Xi Bao đóng của
TN Xi
Kiểm tra (TN Xi)+ =
U+ ?
Siêukhóa
Loại bỏ khóa ABC vì chứa AB và BC, ta có tập siêu khóa S = {AB, BC}
Vậy các thuộc tính khóa là {A, B, C} và thuộc tính không khóa là {D}
Bước 2: Tính (Xi)+ trong đó Xi là tập con thực sự của các khóa K
- X1+ =A+ = A
- X2+ = B + = BD
- X3+ = C + = C
Bước 3: Vì X2+ chứa thuộc tính không khoá của D nên R không đạt chuẩn 2NF
Cách 2: Khóa là AB, mà có phụ thuộc hàm B->D có D phụ thuộc vào 1 bộ phận của khóa => Nên ko đạt chuẩn 2NF
Bước 1: Tìm tất cả các khóa của R
1) L = {ABCD} R = {ABCD} Từ đó có: TN = U\R = {0} và TG = L R = {ABCD} 2) Vì TG # 0 và tập con Xi của tập TG = {0, A, C, B, C, D, AB, AC, AD, BC, BD, CD, ABC, ABD, BCD, ABCD}
3) Tìm siêu khóa Si theo bảng sau:
TN Xi
Kiểm tra (TN Xi)+ =
U+ ?
Siêukhóa
Trang 19Sau khi loại bỏ các thuộc tính chứa khóa {C} và khóa {AB} chúng ta có tập khóa
K = {C, AB, AD}
Bước 2: tập thuộc tính không khóa là {0}
Bước 3: Mọi phụ thuộc hàm đều có vế phải là thuộc tính khóa nên R đạt chuẩn 3NF
P/s: Tham khảo định nghĩa 3NF
Trang 21ĐÁP ÁN BÀI TẬP SỐ 9 - ONLINE
Cho CSDL QUAN LY ĐIỂM THI với lược đồ dữ liệu như sau
SINHVIEN(MaSV, HoTen, NgaySinh, Que, GioiTinh, MaLop)
LOP(MaLop, TenLop)
MONHOC(MaMH, TenMH) DIEM(MaSV,
MaMH,DiemThi)
Yêu cầu:
1 Hãy dùng biểu thức đại số quan hệ và câu lệnh SQL để thực hiện các truy vấn sau: Q2.1.
Cho thông tin về những sinh viên sinh trước năm 2001, quê ở Hải phòng
Trang 22MaSV,TenSV,Que(SINHVIEN Malop = Lop Malop Lop Malop = 'SITDE06001' Que = 'Ha Noi' (SINHVIEN x LOP))
C2:
MaSV,TenSV,Que(Que = 'Ha Noi' (SINHVIEN) * Lop Malop = 'SITDE06001'(LOP)
SQL:
***chú ý thêm N trước dãy ký tự để xử lý lỗi phông Unicode trong SQL SERVER, khi viết
câu lệnh SQL lý thuyết thì bỏ ký tự N này đi C1:
SELECT MaSV, TenSV, Que
FROM SINHVIEN, LOP
WHERE SINHVIEN.Malop=Lop.Malop AND TenLop= N'Công nghệ thông tin 60' AND
MaSV,TenSV,DiemThi(SINHVIEN MaSV=Diem MaSV MONHOC MaMH=DIEM.MaMH MONHOC.MaMH = 'Ti01'
DiemThi >=7' (SINHVIEN x MONHOC x DIEM)) C2:
MaSV, HoTen, Diem (SINHVIEN * (Ơ DiemThi>=7 (DIEM ) * Ơ Ma MH=” Ti01 ”(DIEM))
SQL:
C1:
SELECT SINHVIEN.MaSV, TenSV, DiemThi
FROM SINHVIEN, MONHOC,DIEM
Trang 23SELECT SINHVIEN.MaSV, TenSV, DiemThi, MaMH
FROM SINHVIEN Join DIEM on SINHVIEN.MaSV = Diem.MaSV
WHERE DiemThi >=7 AND MaMH in(SELECT MaMH
MaSV, count() (SINHVIEN) SQL:
SELECT COUNT(MaSV)
MaMH,TenMH(MONHOC * (DIEM * Que=’Hả i phòng'(SINHVIEN)) C3:
MaMH,TenMH(MaMH,TenMHMONHOC * (MaSV,MaMH(DIEM) * MaSV( Que=’Hả i phòng'
Trang 24FROM MONHOC,SINHVIEN,DIEM
WHERE SINHVIEN.MaSV=DIEM.MaSV
AND MONHOC.MaMH=DIEM.MaMH
AND Que='Hai Phong' C2:
SELECT MaMH,TenMH
SELECT MONHOC.MaMH, TenMH
FROM MONHOC JOIN DIEM on MONHOC.MaMH = DIEM.MaMH
JOIN SINHVIEN on DIEM.MaSV = SINHVIEN.MaSV WHERE
Que ='Hai Phong'
Query2.6
Đưa ra danh sách các sinh viên học hai môn Ti01 và Hi01
ĐSQH:
C1:
MaSV,TenSV(SINHVIEN MaSV=Diem MaSV MONHOC MaMH=DIEM.MaMH (MaMH=’Ti01’ MaMH=’Hi01’)
(SINHVIEN x MONHOC x DIEM))
C2: MaSV,TenSV(SINHVIEN * (DIEM * (MaMH=’Ti01’ MaMH=’Hi01’(MONHOC))
C3: MaSV,TenSV(MaSV,TenSV(SINHVIEN) * (MaSV,MaMH(DIEM) * (MaMH(MaMH=’Ti01’
SQL:
C1
SELECTDISTINCT SINHVIEN.MaSV, TenSV
FROM SINHVIEN, MONHOC, DIEM
WHERE SINHVIEN.MaSV = DIEM.MaSV
AND MONHOC.MAMH = DIEM.MaMH
Trang 25AND(MONHOC.MaMH='Ti01'OR MONHOC.MaMH='Hi01')
C2
SELECTDISTINCT SINHVIEN.MaSV, TenSV
FROM SINHVIEN JOIN DIEM on SINHVIEN.MaSV = DIEM.MaSV
join MONHOC on DIEM.MaMH=MONHOC.MaMH WHERE
MONHOC.MaMH='Ti01'OR MONHOC.MaMH='Hi01'
C3:
SELECTDISTINCT SINHVIEN.MaSV, TenSV
FROM SINHVIEN JOIN DIEM on SINHVIEN.MaSV = DIEM.MaSV
WHERE MaMH IN(SELECT MaMH
WHERE MaMH='Ti01'OR MaMH='Hi01') C4:
SELECT MaSV, TenSV
Trang 26ĐÁP ÁN BÀI TẬP SỐ 10 - ONLINE
Câu hỏi 1
Cho CSDL QUANLYDIEM với lược đồ dữ liệu như sau
SINHVIEN(MaSV, HoTen, NgaySinh, GioiTinh, MaLop)
LOP(MaLop, TenLop)
MONHOC(MaMH, TenMH) DIEM(MaSV,
MaMH,DiemThi)
Yêu cầu:
1 Hãy dùng biểu thức đại số quan hệ tối ưu và câu lệnh SQL tối ưu để thực hiện các truy vấn
sau, chú ý tối ưu hóa câu lệnh (nộp trên Moodle phần này)
Q2.7 Đưa ra mã SV học cả hai môn có mã môn học là Ti01 và Hi01
MaSV(MaMH=’Ti01’ (DIEM)) MaSV(MaMH=’Hi01’(DIEM))
Trang 27SELECT MaSV
FROM DIEM
WHERE MaMH IN (SELECT MaMH
FROM MONHOC
WHERE TenMH='Tin hoc ung dung')
Query2.9- MaSV và ten SV học cả hai môn Tin hoc dai cuong và Tin hoc ung dung
SELECT MaSV, TenSV
WHERE TenMH='Tin hoc ung dung'))
Query2.10- MaSV và ten SV có diem thi dươi 5
SELECT MaSV, TenSV
FROM SINHVIEN
WHERE MaSV IN (SELECT MaSV
FROM DIEM
WHERE DiemThi <5)
Q2.12 Đếm số SV học môn học có mã môn học là Ti01 và Hi01
SELECT COUNT(Distinct MaSV)
FROM DIEM
Trang 28WHERE MaMH='Ti01' OR MaMH = 'Hi01'
Q2.12 Đếm số SV học môn học Tin học đại cương và tin học ứng dụng
SELECT COUNT(Distinct MaSV)
FROM DIEM
WHERE MaMH IN (SELECT MaMH
FROM MONHOC
WHERE TenMH='Tin hoc dai cuong' OR TenMH = 'Tin hoc ung dung')
2 Hãy tạo CSDL QUANLYDIEM trên một phần mềm SQL SERVER và thực hiện các truy vấn
trên (phần này để sẵn trên máy tính, khi nào online cô yêu cầu ai trình bày thì bạn đó sẽ trình
bày trực tiếp trên máy tính của mình)
Câu hỏi 2
Cho một CSDL về thư viện gồm các quan hệ sau đây:
SACH(TenSach, TacGia, TenNhaXB, MaSach)
NHAXB(TenNhaXB, DiaChiNhaXB, NoiXB)
DOCGIA(TenDocGia, DiaChiDG, ThanhPho, SoThe)
MUONSACH(SoThe, MaSach, NgayMuon)
Hãy tối ưu hóa biểu thức ĐSQH để thực hiện yêu cầu: “đưa ra một danh sách tên nhữngcuốn sách đã cho mượn tnrớc ngày 1/3/2020”
Giải
Bước 1: Biểu thức quan hệ trả lời câu hỏi “Hãy cho biết Tên khách hàng có số dư tài
khoản bằng 50000” có thể được viết như sau:
TenSach(ƠNgayMuon<1/3/1992(X(ơF(MUONSACH x DOCGIA x SACH)))) trong
đó
F = DOCGIA.SoThe = MUONSACH.SoThe SACH.MaSach = MUONSACH.MaSach
X = {TenSach, TacGia, TenNhaXB, MaSach, TenDocGia, DiaChiDG, ThanhPho, SoThe,NgayMuon}
Biểu diễn dưới dạng cây:
Trang 29Bước 2: Tách phép chọn ơF thành thành hai phép chọn với diều kiện:
SACH.MaSach = MUONSACH.MaSach và
DOCGIA.SoThe = MUONSACH.SoThe
Xét 3 phép chọn, tiến hành “đẩy” chúng xuống sâu nhất có thể
Phép chọn ơNgayMuon<1/3/2020 được đẩy xuống dưới phép chiếu và hai phép chọn kia nhờ quytắc L4 và L5 Phép chọn này áp dụng cho tích (MUONSACH x DOCGIA) x SACH Vì thuộctính NgayMuon trong phép chọn chỉ ở quan hệ MUONSACH nên có thể thay ơNgayMuon<1/3/2020((MUON x DOCGIA) x SACH) bằng biểu thức:
Trang 30(ơNgayMuon<1/3/2020 (MUON x DOCGIA)) x SACH Và
cuối cùng là biểu thức:
((ơNgayMuon<1/3/2020 (MUON)) x DOCGIA) x SACH
Như vậy đã đẩy được phép chọn này xuống sâu nhất có thể
Bây giờ tiếp tục đẩy phép chọn với điều kiện SACH.MaSach = MUONSACH.MaSachxuống Không thể đẩy phép chọn này xuống dưới tích Đề-các vì nó liên quan tới thuộc tính củaquan hệ SACH và một thuộc tính lại không thuộc quan hệ SACH
Do vậy phép chọn với điều kiện:
DOCGIA.SoThe = MUONSACH.SoThe
Có thể đẩy xuống để áp dụng tích Đề_các: ơNgayMuon<1/3/2020
(MUONSACH) x DOCGIA
Bước 3: Áp dụng quy tắc với các phép chiều:
• Tổ hợp hai phép chiếu thành một phép chiếu là TenSach nhờ quy tắc L3 Kết quả được biểu diễntrên hình sau:
Trang 31• Sau dó áp dụng quy tắc L5: σF(x(E) x(σF (xy(E))) cho trường hợp tổng quát thay thế
TenSach(ƠSACH.MaSach = MUONSACH.MaSach(E)) Bởi dãy
TenSach(ƠSACH.MaSach = MUONSACH.MaSach(TenSach, SACH.MaSach,MUONSACH.MaSach(E))))
Ta có:
• Áp d ng quy t c L9 đ đ y phép chi u sau cùng xu ng dụ ắ ể ấ ể ố ưới tích Đ -các, ta có ề
TenSach, SACH.MaSach áp d ng cho quan h SACH và ụ ệ MUONSACH.MaSach áp d ng cho ụ
h ng th c bên trái c a tích Đ -các nh trong hình sau: ạ ứ ủ ề ư
Trang 32• Ti p theo, l i áp d ng quy t c 5 cho trế ạ ụ ắ ường h p t ng quát đ i v i m i phép chi u và m tợ ổ ố ớ ỗ ế ộphép ch n đ có dãy: ọ ể
Phép chiếu sau cùng lại được đẩy xuống dưới tích Đề-các nhờ quy tắc 9
Phép chi u ế DOCGIA.SoThe đ y xu ng h ng th c DOCGIA vì thu c tính chi u là thu c tính ẩ ố ạ ứ ộ ế ộ
c a quan h này ủ ệ
Phép chiếu thứ hai MUON.MaSach, MUONSACH.SoThe đẩy xuống hạng thức MUONSACH Cácthuộc tính không phù hợp bị loại bỏ Biểu diễn cây cuối cùng của biểu thức được mô tả ở hìnhsau:
Trang 33Cuối cùng, ta áp dụng chiến lược tối ưu thứ hai, tổ hợp các phép chọn xác định với phéptích Đề - Các thành phép kết nối