**GOI_THAU(++MA_GT++, TEN_GT, NGAYMO, NGAYDONG, MA_SP)** **SANPHAM_THAU(++MA_SP++, TEN_SP, THONGSO_KT, LOAI_SP, GIA_DUKIEN)** **NHATHAU(++MA_NT++, TEN_NT, DCHI_NT, DTHOAI_NT, NANG_LUC, MALOAI_NT, TENLOAI_NT)** **HOSO_THAU(++MA_HST++, MA_NT, MA_GT, NGAY_HST, GIA_HST, TRUNG_THAU, DIEM_HST)** **Câu 2.1: DSQH:** a) $KQ \leftarrow \Pi_{\text{MA_GT, TEN_GT}} (\sigma_{\text{NGAYMO = '01/03/2022'} \land\text{GIA_DUKIEN < 2.5}}(\text{SANPHAM * GOI_THAU}))$ b) $\text{HS_TRUNGTHAU} \leftarrow \sigma_{\text{TRUNG_THAU = 'Yes'}}(\text{HOSO_THAU})$ $\text{NT_TRUNGTHAU(MA_NT, TEN_NT, SL)} \leftarrow _{\text{MA_NT, TEN_NT}} \xi _{count(\text{MA_HST})}(\text{NHATHAU * HS_TRUNGTHAU})$ $KQ \leftarrow \Pi_{\text{MA_NT, TEN_NT}}(\sigma_{SL > 3}(\text{NT_TRUNGTHAU}))$ **Câu 2.2: SQL** a) ```sql= select nt.MA_NT, nt.TEN_NT, sp.TEN_SP from NHATHAU nt join HOSO_THAU hs on nt.MA_NT = hs.MA_NT join GOITHAU gt on hs.MA_GT = gt.MA_GT join SANPHAM sp on gt.MA_SP = sp.MA_SP where (hs.TRUNGTHAU = 'Yes' and YEAR(gt.NGAYMO) = '2021' and nt.TENLOAI_NT = N'trung bình') ``` b) ```sql= select nt.MA_NT, nt.TEN_NT from NHATHAU nt join HOSO_THAU hs on nt.MA_NT = hs.MA_NT where (hs.TRUNG_THAU = 'Yes' and nt.NANG_LUC < 3) group by nt.MA_NT, nt.TEN_NT having count(hs.MA_HST) >= ALL ( select count(hs1.MA_HST) from NHATHAU nt1 join HOSO_THAU hs1 on nt1.MA_NT = hs1.MA_NT where (hs1.TRUNG_THAU = 'Yes' and nt1.NANG_LUC < 3) group by nt1.MA_NT, nt1.TEN_NT ) ``` **Câu 3: RBTV** a) Bối cảnh: HOSO_THAU, GOI_THAU Nội dung: $(\forall t)(\text{HOSO_THAU(t)} \land (\exists s)(\text{GOI_THAU(s)} \land \text{t.MA_GT = s.MA_GT} \Rightarrow \text{t.NGAY_HST} \geq s.NGAYMO \land \text{t.NGAY_HST} \leq s.NGAYDONG))$ Bảng tầm ảnh hưởng: |IC01|I |D |U | |----|----|----|----| |HOSO_THAU|+|-|+(NGAY_HST, MA_GT)| |GOI_THAU|-|-|+(NGAYMO, NGAYDONG)| **Giải thích:** + Không sửa khóa chính (MA_GT của GOI_THAU) $\rightarrow$ Khi delete GOI_THAU thì HOSO_THAU tham chiếu đến MA_GT sẽ báo lỗi $\rightarrow$ Lỗi do ràng buộc khóa chính. b) Bối cảnh: HOSO_THAU, GOI_THAU Nội dung: $(\forall t)(\text{GOI_THAU(t)} \land card(s | \text{HOSO_THAU(t)} \land \text{s.MA_GT = t.MAGT} \land \text{s.TRUNG_THAU = 'Yes'}) \leq 1)$ Bảng tầm ảnh hưởng: |IC02|I |D |U | |----|----|----|----| |HOSO_THAU|+|-|+(TRUNG_THAU)| |GOI_THAU|-|-|-| **Giải thích:** + Không sửa khóa chính (MA_GT của GOI_THAU) \rightarrow Việc thêm, sửa, xóa GOI_THAU làm ảnh hưởng đến MA_GT của HOSO_THAU thì đó là lỗi của ràng buộc khóa chính. **Câu 4: Dạng chuẩn** a) Các quan hệ không có sự trùng lặp dữ liệu GOI_THAU(++MA_GT++, TEN_GT, NGAYMO, NGAYDONG, MA_SP): dạng chuẩn BCNF, vì theo định nghĩa, lược đồ chỉ có một phụ thuộc hàm và vế trái là khóa/ siêu khóa. SANPHAM_THAU(++MA_SP++, TEN_SP, THONGSO_KT, LOAI_SP, GIA_DUKIEN): dạng chuẩn 2, do vi phạm dạng chuẩn 3, có phụ thuộc hàm bắt cầu vào khóa (LOAI_SP $\rightarrow$ GIA_DUKIEN) NHATHAU(++MA_NT++, TEN_NT, DCHI_NT, DTHOAI_NT, NANG_LUC, MALOAI_NT, TENLOAI_NT): dạng chuẩn 2, do vi phạm dạng chuẩn 3, có phụ thuộc hàm bắt cầu vào khóa (MALOAI_SP $\rightarrow$ TENLOAI_NT) HOSO_THAU(++MA_HST++, MA_NT, MA_GT, NGAY_HST, GIA_HST, TRUNG_THAU, DIEM_HST): dạng chuẩn BCNF, vì theo định nghĩa, lược đồ chỉ có một phụ thuộc hàm và vế trái là khóa/ siêu khóa. $\Longrightarrow$ Dạng chuẩn của lược đồ quan hệ là dạng chuẩn 2 vì đó là dạng chuẩn thấp nhất. b) Chuẩn hóa lược đồ có dạng thấp. Chuẩn hóa SANPHAM_THAU: tách bảng SANPHAM_THAU(++MA_SP++, TEN_SP, THONGSO_KT, LOAI_SP) $\rightarrow$ BCNF LOAISP(++LOAI_SP++, GIA_DUKIEN) $\rightarrow$ BCNF Chuẩn hóa NHATHAU: tách bảng NHATHAU(++MA_NT++, TEN_NT, DCHI_NT, DTHOAI_NT, NANG_LUC, MALOAI_NT) $\rightarrow$ BCNF LOAITHAU(++MALOAI_NT++, TENLOAI_NT) $\rightarrow$ BCNF $\Longrightarrow$ Sau khi tách, mỗi lược đồ quan hệ còn 1 phụ thuộc hàm thỏa điều kiện của dạng chuẩn BCNF $\Longrightarrow$ Lược đồ CSDL đạt dạng chuẩn BCNF vì tất cả lược đồ quan hệ đạt dạng chuẩn BCNF