---
# System prepended metadata

title: DeThiCK#1
tags: [CSDL]

---

### **++Câu 1++**:

**KHACHHANG(++MaKH++, HoTen, NgaySInh, DiaChi, DienThoai, MaShop)**

**SANPHAM(++MaSP, DanhMuc++, TenSP, DonGia, SoLuongTon, KhuyenMai, MaShop)**
++FK:++
DanhMuc $\longrightarrow$ DANHMUC(MaDM)

**DANHMUC(++MaDM++, TenDanhMuc, DanhMucCha)**\
++FK:++
DanhMucCha $\longrightarrow$ DANHMUC(MaDM)

**DONHANG(++MaDH, MaKH++, NgayMua, TinhTrangThanhToan, DaGiao)**
++FK:++
MaKH $\longrightarrow$ KHACHHANG(MaKH)

**CT_DONHANG(++MaDH, MaKH++, MaSP, MaDM, SoLuong, DonGia)**
++FK:++
MaDH $\longrightarrow$ DONHANG(MaDH)
MaKH $\longrightarrow$ DONHANG(MaKH)
MaSP $\longrightarrow$ SANPHAM(MaSP)
MaDM $\longrightarrow$ DANHMUC(MaDM)

**THEODOIDH(++MaDH++, MaKH, ThoiGian, TinhTrang)**
++FK:++
MaDH $\longrightarrow$ CT_DONHANG(MaDH)
MaKH $\longrightarrow$ CT_DONHANG(MaKH)

### **++Câu 2:++**

**a. (SQL) Cho biết khách hàng (MaKH, HoTen, DiaChi, DienThoai) mua sản phẩm "IPhone 13" trong tháng này.**

```sql=
select kh.MaKH, kh.HoTen, kh.DiaChi, kh.DienThoai
from KhachHang kh
join DonHang dh on kh.MaKH = dh.MaKH
join CT_DonHang ct on dh.MaDH = ct.MaDH
join SanPham sp on (ct.MaSP = sp.MaSP and ct.MaDM = sp.DanhMuc)
where (sp.TenSP = N'IPhone 13' and GETMONTH(dh.NgayMua) = GETMONTH(GETDATE()))
```

**b. (SQL) Cho biết sản phẩm (MaSP, TenSP) hoặc thuốc tính danh mục chưa có danh mục cha hoặc được nhiều khách hàng có mã shop yêu thích là "ShopHoaDao" mua nhất**

```sql=
select sp1.MaSP, sp1.TenSP
from SanPham sp1
join DanhMuc dm1 on dm1.MaDM = sp1.DanhMuc
where dm1.DanhMucCha is null or (
    select kh.MaKH
    from KhachHang kh
    join DonHang dh on kh.MaKH = dh.MaKH
    join CT_DonHang ct on (ct.MaDH = dh.MaDH and ct.MaKH = dh.MaKH)
    join SanPham sp on (sp.MaSP = ct.MaSP and sp.DanhMuc = ct.MaDM)
    where kh.MaShop = N'ShopHoaDao'
    group by kh.MaKH
    having count(distinct sp.MaSP) >= ALL(
        select count(distinct sp2.MaSP)
        from KhachHang kh2
        join DonHang dh2 on kh2.MaKH = dh2.MaKH
        join CT_DonHang ct2 on (ct2.MaDH = dh2.MaDH and ct2.MaKH = dh2.MaKH)
        join SanPham sp2 on (sp2.MaSP = ct2.MaSP and sp2.DanhMuc = ct2.MaDM)
        where kh2.MaShop = N'ShopHoaDao'
        group by kh2.MaKH
    )
)
```

**c. (DSQH) Cho biết danh sách đơn hàng đặt trong tuần này, đã thanh toán hoặc chưa được thanh toán**

$\text{R1} \leftarrow \sigma_{\text{TinhTrangThanhToan = 0} \vee \text{TinhTrangThanhToan = 1}}\text{(DONHANG)}$

**d. (DSQH) Cho biết tên khách hàng mua tất cả sản phẩm chưa được ai mua**

$\text{R1(MaSP, SL_Mua)} \leftarrow _{\text{MaSP}}\xi_{\text{count(MaKH)}}(\text{SANPHAM} \bowtie \text{CT_DONHANG})$

$\text{R2} \leftarrow \Pi_{\text{MaSP}}(\sigma_{\text{SL_Mua = 1}}\text{(R1)})$

$\text{R3} \leftarrow \text{KHACHHANG} \bowtie \text{CT_DONHANG} \bowtie \text{SANPHAM}$

$\text{R4} \leftarrow \Pi_{\text{HoTen}}(\text{R3} \div \text{R2})$

### **++Câu 3:++**
**a. Khách hàng chỉ được mua tối đa 5 sản phẩm đang được khuyến mãi**

Bối cảnh: CT_DONHANG, SANPHAM

Nội dung:

$\text{R1} \leftarrow \sigma_{\text{KhuyenMai = 1}}\text{(SANPHAM)}$
$\text{R2(MaKH, SL)} \leftarrow _{\text{MaKH}}\xi_{\text{ count(MaSP)}}\text{(CT_DONHANG * R1)}$

$(\forall t)(\text{R2(t)} \land \text{t.SL} \leq 5)$

Bảng tầm ành hưởng:

|IC01|T|X|S|
|:-:|:-:|:-:|:-:|
|CT_DONHANG|+|-|+(MaKH, MaSP)|
|SANPHAM|-|-|+(KhuyenMai)|

**b. Thuộc tính DaGiao trong DONHANG là 1 khi TinhTrang theo dõi đơn hàng là "đã giao"**

Bối cảnh: DONHANG, THEODOIDH

Nội dung:

$(\forall t)(\text{DONHANG(t)} \land (\exists s)(\text{THEODOIDH(s)} \land \text{t.MaDH = s.MaDH} \land \text{s.TinhTrang = 1} \Rightarrow \text{t.DaGiao = 1})$

Bảng tầm ảnh hưởng:

|IC02|T|X|S|
|:-:|:-:|:-:|:-:|
|DONHANG|+|-|+(TinhTrang)|
|THEODOIDH|-|+|+(DaGiao)|

### **++Câu 4:++**

**GIAODICHNGANHANG(MaKH, TenKH, DiaChi, ++SoTaiKhoan++, SoDuTaiKhoan, NgayMoTaiKhoan, ++ThoiGianGiaoDich++, LoaiGiaoDich, SoTienGiaoDich)**
F = { MaKH $\rightarrow$ TenKH, DiaChi; 
SoTaiKhoan $\rightarrow$ SoDuTaiKhoan, MaKH, NgayMoTaiKhoan
SoTaiKhoan, ThoiGianGiaoDich $\rightarrow$ LoaiGiaoDich, SoTienGiaoDich}

GIAODICHNGANHANG(MaKH, TenKH, DiaChi, ++SoTaiKhoan++, SoDuTaiKhoan, NgayMoTaiKhoan, ++ThoiGianGiaoDich++, LoaiGiaoDich, SoTienGiaoDich): đạt dạng chuẩn 1 vì tồn tại phụ thuộc hàm không phụ thuộc hoàn toàn vào khóa (MaKH $\rightarrow$ TenKH; SoTaiKhoan $\rightarrow$ SoDuTaiKhoan, MaKH, NgayMoTaiKhoan; SoTaiKhoan, ThoiGianGiaoDich $\rightarrow$ LoaiGiaoDich, SoTienGiaoDich)

Chuẩn hóa lược đồ có dạng chuẩn thấp 
Chuẩn hóa GIAODICHNGANHANG: tách bảng
KHACHHANG (++MaKH++, TenKH, DiaChi) &rarr; BCNF
STK (MaKH, ++SoTaiKhoan++, SoDuTaiKhoan, NgayMoTaiKhoan) &rarr; BCNF
GIAODICH (++SoTaiKhoan, ThoiGianGiaoDich++, LoaiGiaoDich, SoTienGiaoDich) &rarr; BCNF

$\Rightarrow$ Lược đồ CSDL đạt dạng chuẩn BCNF vì tất cả lược đồ quan hệ đạt dạng chuẩn BCNF 