**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