Nhà cung cấp có thông tin bao gồm: mã NCC, tên NCC, địa chỉ.Mỗi lần nhận hàng công ty TH sẽ lập một phiếu nhập kho, thông tin trên phiếu gồm có mã phiếu nhập, ngày nhập.. Mỗi nhà cung cấ
Trang 1BÀI TIỂU LUẬN GIỮA KỲ
MÔN HỌC: CƠ SỞ DỮ LIỆU
ĐỀ TÀI: Thiết kế cơ sở dữ liệu cho hệ thống
thông tin công ty TH GIẢNG VIÊN: Bùi Xuân Huy
Mã lớp: 23C1INF50900610
Lớp: TK001 Nhóm 3
Trang 21 MÔ TẢ DỮ LIỆU VÀ QUY TRÌNH CỦA HỆ THỐNG
Cơ sở dữ liệu TH được dùng trong việc quản lý hoạt động kinh doanh của công
ty TH Quy trình hệ thống như sau:
Công ty TH nhập hàng hóa từ các nhà cung cấp Nhà cung cấp có thông tin bao gồm: mã NCC, tên NCC, địa chỉ
Mỗi lần nhận hàng công ty TH sẽ lập một phiếu nhập kho, thông tin trên phiếu gồm có mã phiếu nhập, ngày nhập Mỗi nhà cung cấp có thể cung cấp nhiều phiếu
nhập và mỗi phiếu nhập chỉ có thể được cung cấp từ một nhà cung cấp Mỗi lần
nhập kho có thể nhập nhiều sản phẩm
Thông tin về sản phẩm bao gồm: Mã SP, Tên, SL tồn kho, giá, mã loại, mã NCC
Sản phẩm được phân ra thành nhiều loại có thông tin gồm mã loại và tên loại
Mỗi sản phẩm chỉ thuộc một loại sản phẩm và mỗi loại sản phẩm có thể có nhiều
sản phẩm Vào các ngày lễ, công ty sẽ có các chương trình khuyến mại áp dụng lên
các sản phẩm gọi là sản phẩm giảm giá Sản phẩm giảm giá có các thông tin như
sau: mã giảm giá, mã sản phẩm, phần trăm được giảm, số lượng giảm, ngày bắt
đầu và ngày kết thúc Công ty có thể giảm giá cùng lúc nhiều loại sản phẩm
Mỗi lần khách hàng đặt hàng, công ty sẽ lập một đơn đặt hàng cho khách hàng
đó, trong đó có các thông tin: mã đơn hàng, mã khách hàng, mã giao, mã voucher,
ngày đặt, mã thanh toán
Mỗi đơn đặt hàng có thể đặt nhiều sản phẩm cho một lần đặt hàng
Mỗi đơn đặt hàng chỉ có thể áp dụng tối đa một voucher khi đặt hàng và một voucher có thể được áp dụng bởi nhiều đơn hàng Mỗi voucher đều có một mã
voucher riêng, giá trị giảm giá, hiệu lực: ngày bắt đầu, ngày kết thúc Voucher có
thể áp dụng cho tất cả các dòng sản phẩm khi còn hiệu lực
Ở mỗi lần đặt thì đơn đặt hàng sẽ được giao đủ một lần theo đúng: số lượng, mãsản phẩm trên đơn đặt hàng Ngoài ra, mỗi phiếu giao sẽ có một mã giao hàng và
ngày giao cụ thể
Với mỗi thanh toán chỉ có thể thanh toán duy nhất cho một khách hàng và một đơn đặt hàng, mỗi khách hàng có thể thực hiện nhiều thanh toán cho nhiều đơn đặt
hàng khác nhau Công ty sẽ lưu lại thông tin của lần thanh toán đó như sau: mã
thanh toán, hình thức, số tiền thanh toán, ngày thanh toán, mã khách hàng
Trang 3Sau khi nhận được hàng đã đặt, mỗi khách hàng có thể thực hiện nhiều đánh giá, mỗi đánh giá chỉ được đánh giá cho một sản phẩm đã đặt Những thông tin về
đánh giá sản phẩm của khách hàng được công ty lưu lại như sau: mã đánh giá, mã
khách hàng, mã sản phẩm, đánh giá của khách hàng
2 MÔ HÌNH HOÁ DỮ LIỆU ERD
3 CHUYỂN ĐỔI TỪ ERD SANG RD
PHAN_LOAI (maloai, tenloai)
NHA_CUNG_CAP (mancc, tenncc, diachi)
SAN_PHAM (masp, ten, tonkho, gia, maloai)
Trang 4GIAO_HANG (magh, ngaygiao, madh)
VOUCHER (mavoucher, giatrigiamgia, ngaybd, ngaykt, maloai)
THANH_TOAN (matt, hinhthuc, sotientt, ngaytt, makh, madh )
KHACH_HANG (makh, hovaten, gioitinh, email, ngaysinh, diachi, sdt)
CHI_TIET_NHAP (manhap, masp, soluong, gianhap)
CHI_TIET_DH (masp, madh, soluong)
CHI_TIET_GH (magh,madh,masp,soluong)
4 RÀNG BUỘC TOÀN VẸN VÀ CHUẨN HOÁ
1 Phần trăm giảm của sản phẩm giảm giá < 100%(phantramgiam <
(d.soluongdat <=e.slgiam) ∧ (e masp = d masp)
A
SỬA
Trang 53 Chỉ giảm các sản phẩm có mặt trong danh mục sản phẩm (masp = masp trong bảng sản phẩm)
4 Số lượng tồn kho phải bằng số lượng nhập + tồn kho trừ (số lượng được đặt trên phiếu đặt hàng và số lượng giao) (tonkho = tonkho + soluongnhap-soluongdat – soluonggiao)
d.tonkho= d.tonkho+e.soluongnhap – f.soluongdat – g.soluonggiao
Trang 6+tonkho
CHI_TIET_NHA
P
5 Đối với ngày giao hàng, ngày giao hàng phải sau ngày đặt trước
đó (ngày giao không null, ngày giao > ngày đặt)
>= u.ngaydat) ∧ (u masp = v masp)
Trang 7∀g ∈ SAN_PHAM, ∃f ∈ VOUCHER: f.maloai = g.maloai
If g.ngaybd <=c.ngaydat<=g.ngaykt c.mavoucher = g.mavoucher
Else c.mavoucher = null
DON_DH + madh +madh + madh
CHI_TIET_DH +ma_dh,masp +ma_dh +ma_dh,masp
+masp,maloai
+masp,maloai
7 Trị giá đơn đặt hàng bằng số lượng nhân với giá của sản phẩm( trị giadh = soluongdat nhân với gia SP)
c.trigiadh = e.soluong * f.gia
Trang 8CHI_TIET_DH +madh,masp + madh,masp
8 Với mọi voucher, ngày bắt đầu phải luôn bé hơn ngày kết thúc (ngaybd < ngaykt)
Loại RBTV: liên thuộc tính (trên cùng 1 bộ)
(sotientt = soluongdat*gia – giatrigiamgia nếu có voucher)
∀v ∈ DON_HANG, ∃t ∈ VOUCHER: u.mavoucher =
Trang 9+madh,mavoucher
10.Giới tính của khách hàng là nam hoặc nữ
Loại RBTV: Ràng buộc miền giá trị
Trang 10SAN_PHAM +masp +masp
12.Số lượng đặt phải nhỏ hơn hay bằng số lượng tồn kho của sản phẩm đó(
soluong < tonkho)
hê ̣
13.Số lượng giao hàng phải bằng số lượng đặt hàng của khách hàng (soluonggiao = soluongdat)
hê ̣
= c.soluongdat
Trang 11+soluonggiao
+soluonggiaoPhụ thuộc hàm và chuẩn hóa
Quan hệ PHIEU_NHAP chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (maPN) và không phụ thuộc bắc cầu
vào bất kỳ khoá nào
F : maPN → ngaynhap, mancc
Vì vậy đạt chuẩn 3 NF
Quan hệ SAN_PHAM_GIAM_GIA chỉ chứa các thuộc tính đơn, tất cả các thuộc
tính không khoá phụ thuộc vào khoá chính (magiamgia) và không phụ thuộc bắc
cầu vào bất kỳ khoá nào
F : magiamgia → phantramgiam, slgiam, masp
Vì vậy đạt chuẩn 3 NF
PHAN_LOAI (maloai, tenloai)
Quan hệ PHAN_LOAI chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (maloai) và không phụ thuộc bắc cầu
vào bất kỳ khoá nào
F: maloai → tenloai
Vì vậy đạt chuẩn 3 NF
Trang 12NHA_CUNG_CAP (mancc, tenncc, diachi)
Quan hệ NHA_CUNG_CAP chỉ chứa các thuộc tính đơn, tất cả các thuộc tính
không khoá phụ thuộc hàm đầy đủ vào khoá chính (mancc) và không phụ thuộc
bắc cầu vào bất kỳ khoá nào
F: mancc → tenncc,diachi
Vì vậy đạt chuẩn 3 NF
SAN_PHAM (masp, ten, tonkho, gia, maloai)
Quan hệ SAN_PHAM chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (masp) và không phụ thuộc bắc cầu
vào bất kỳ khoá nào
F: masp → ten, tonkho, gia, maloai
Vì vậy đạt chuẩn 3 NF
Quan hệ DANH_GIA_SAN_PHAM chỉ chứa các thuộc tính đơn, tất cả các thuộc
tính không khoá phụ thuộc hàm đầy đủ vào khoá chính (madanhgia) và không phụ
thuộc bắc cầu vào bất kỳ khoá nào
F madanhgia → danhgia, masp, makh
Vì vậy đạt chuẩn 3 NF
Quan hệ GIAO_HANG chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (magh) và không phụ thuộc bắc cầu
vào bất kỳ khoá nào
F: magh → ngaygiao, madh
Vì vậy đạt chuẩn 3 NF
Trang 13Quan hệ DON_HANG chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (madh) và không phụ thuộc bắc cầu
vào bất kỳ khoá nào
F: madh → ngaydat, trigiadh, mavoucher, makh
Vì vậy đạt chuẩn 3 NF
VOUCHER (mavoucher, tenvoucher, giatrigiamgia, ngaybd, ngaykt, maloai)
Quan hệ VOUCHER chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không khoá
phụ thuộc hàm đầy đủ vào khoá chính (mavoucher) và không phụ thuộc bắc cầu
vào bất kỳ khoá nào
F : mavoucher → tenvoucher, giatrigiamgia, ngaybd, ngaykt, maloai
Vì vậy đạt chuẩn 3 NF
THANH_TOAN (matt, hinhthuc, sotientt, ngaytt, makh, madh )
Quan hệ THANH_TOAN chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (matt) và không phụ thuộc bắc cầu vào
bất kỳ khoá nào
F: matt → hinhthuc, sotientt, ngaytt, makh, madh
Vì vậy đạt chuẩn 3 NF
KHACH_HANG (makh, hovaten, gioitinh, email, ngaysinh, diachi, sdt)
Quan hệ KHACH_HANG chỉ chứa các thuộc tính đơn, tất cả các thuộc tính
không khoá phụ thuộc hàm đầy đủ vào khoá chính (makh) và không phụ thuộc bắc
cầu vào bất kỳ khoá nào
F: makh → hovaten,gioitinh, email, ngaysinh, diachi, sdt
Vì vậy đạt chuẩn 3 NF
Trang 14CHI_TIET_NHAP (manhap, masp, soluong, gianhap)
Quan hệ CHI_TIET_NHAP chỉ chứa các thuộc tính đơn, tất cả các thuộc tính
không khoá phụ thuộc hàm đầy đủ vào khoá chính (manhap,masp) và không phụ
thuộc bắc cầu vào bất kỳ khoá nào
F manhap, masp → soluong, gianhap
Vì vậy đạt chuẩn 3 NF
CHI_TIET_DH (masp, madh, soluong)
Quan hệ CHI_TIET_DH chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc hàm đầy đủ vào khoá chính (masp, madh) và không phụ thuộc bắc
cầu vào bất kỳ khoá nào
F : masp, madh → soluong
Vì vậy đạt chuẩn 3 NF
CHI_TIET_GH (magh,madh,masp,soluong)
Quan hệ CHI_TIET_GH chỉ chứa các thuộc tính đơn, tất cả các thuộc tính không
khoá phụ thuộc vào hàm đầy đủ khoá chính (magh, madh, masp) và không phụ
thuộc bắc cầu vào bất kỳ khoá nào
Trang 18constraint CK_tri_gia_dh check (tri_gia_dh >= 0),
ma_voucher nvarchar(10) null
constraint FK_ma_voucher_DDH foreign key references Voucher(ma_voucher),
ma_kh nvarchar(10)
constraint FK_ma_kh_DDH foreign key references Khach_hang(ma_kh)
)
Trang 20create table Chi_tiet_nhap (
ma_nhap nvarchar(10)
constraint FK_ma_pn_CTPN foreign key references Phieu_nhap(ma_pn),
ma_sp nvarchar(10)
constraint FK_ma_sp_CTPN foreign key references San_pham(ma_sp)
constraint PK_ma_nhap_sp primary key (ma_nhap,ma_sp),
constraint FK_ma_dh_CTDH foreign key references Don_DH(ma_dh)
constraint PK_ma_dh_sp primary key (ma_sp,ma_dh),
Trang 21constraint FK_ma_sp_CTGH foreign key references San_pham(ma_sp)
constraint PK_ma_dh_gh_sp primary key (ma_gh,ma_dh,ma_sp),
Trang 22Insert into Phan_loai values('AO02',N'áo')
Insert into Phan_loai values('PK03',N'phụ kiện')
Insert into San_pham values('TH01',N'thắt lưng',100,430,'PK03')
Insert into San_pham values('TH02',N'quần jeans',200,450,'QU01')
Insert into San_pham values('TH03',N'túi xách',300,510,'PK03')
Insert into San_pham values('TH04',N'ví',110,415,'PK03')
Insert into San_pham values('TH05',N'áo hoodie',500,515,'AO02')
Insert into San_pham values('TH06',N'áo polo',190,530,'AO02')
Insert into San_pham values('TH07',N'áo vest',660,550,'AO02')
Insert into San_pham values('TH08',N'giày',800,600,'PK03')
Insert into San_pham values('TH09',N'nón',850,420,'PK03')
Insert into San_pham values('TH10',N'tất',900,300,'PK03')
Insert into SP_giam_gia values ('C01',0.02,100,'2023-06-02
Trang 23Insert into SP_giam_gia values ('C07',0.14,200,'2023-10-02
Insert into Phieu_nhap values ('A01','2023-01-10 15:30:00','B01')
Insert into Phieu_nhap values ('A02','2023-01-10 15:30:00','B02')
Insert into Phieu_nhap values ('A03','2023-01-10 15:30:00','B03')
Insert into Phieu_nhap values ('A04','2023-03-01 08:30:00','B01')
Insert into Phieu_nhap values ('A05','2023-03-25 09:10:00','B01')
Insert into Phieu_nhap values ('A06','2023-04-08 14:30:00','B02')
Insert into Phieu_nhap values ('A07','2023-04-15 16:00:00','B03')
Insert into Phieu_nhap values ('A08','2023-08-12 10:30:00','B01')
Insert into Phieu_nhap values ('A09','2023-10-10 11:30:00','B02')
Insert into Phieu_nhap values ('A10','2023-10-10 06:30:00','B03')
Insert into Khach_hang values ('K48',N'Hồ Quốc
Trang 24Insert into Khach_hang values ('K51',N'Hồ Xuân
Insert into Danh_gia_sp values ('Z01',4,'TH01','K48')
Insert into Danh_gia_sp values ('Z02',3,'TH02','K48')
Insert into Danh_gia_sp values ('Z03',2,'TH03','K49')
Insert into Danh_gia_sp values ('Z04',5,'TH04','K50')
Insert into Danh_gia_sp values ('Z05',3,'TH05','K56')
Insert into Danh_gia_sp values ('Z06',2,'TH06','K50')
Insert into Danh_gia_sp values ('Z07',4,'TH07','K57')
Insert into Danh_gia_sp values ('Z08',5,'TH08','K52')
Insert into Danh_gia_sp values ('Z09',5,'TH09','K53')
Insert into Danh_gia_sp values ('Z10',3,'TH10','K53')
Trang 25Insert into Voucher values ('TK01',N'Khuyến mãi 10/10',0.05,'2023-10-02
Insert into Don_DH values ('H01','2023-06-02 12:00:00',23825.8,null,'K48')
Insert into Don_DH values ('H02','2023-10-09 12:00:00',9418.5,'TK02','K49')
Insert into Don_DH values ('H03','2023-10-15 12:00:00',19176,null,'K50')
Insert into Don_DH values ('H04','2023-10-17 12:00:00',5727,null,'K51')
Insert into Don_DH values ('H05','2023-10-05 12:00:00',10127.475,'TK01','K52')
Insert into Don_DH values ('H06','2023-10-06 12:00:00',5316.96,'TK01','K53')
Insert into Don_DH values ('H07','2023-10-07 12:00:00',12581.8,'TK01','K54')
Insert into Don_DH values ('H08','2023-10-08 12:00:00',12852,'TK03','K55')
Insert into Don_DH values ('H09','2023-10-09 12:00:00',2499,'TK03','K56')
Insert into Don_DH values ('H10','2023-10-10 12:00:00',1275,'TK03','K57')
Insert into Thanh_toan values ('TT01',N'Trả trước',23825.8,'2023-06-02
Trang 26Insert into Thanh_toan values ('TT05',N'Trả trước',10127.475,'2023-10-05
Insert into Giao_hang values ('T01','2023-06-03 12:00:00','H01')
Insert into Giao_hang values ('T02','2023-10-11 12:00:00','H02')
Insert into Giao_hang values ('T03','2023-10-16 12:00:00','H03')
Insert into Giao_hang values ('T04','2023-10-17 12:00:00','H04')
Insert into Giao_hang values ('T05','2023-10-07 12:00:00','H05')
Insert into Giao_hang values ('T06','2023-10-07 12:00:00','H06')
Insert into Giao_hang values ('T07','2023-10-08 12:00:00','H07')
Insert into Giao_hang values ('T08','2023-10-10 12:00:00','H08')
Insert into Giao_hang values ('T09','2023-10-10 12:00:00','H09')
Insert into Giao_hang values ('T10','2023-10-11 12:00:00','H10')
Insert into Chi_tiet_nhap values ('A01','TH01',2000,230)
Insert into Chi_tiet_nhap values ('A02','TH02',2000,190)
Trang 27Insert into Chi_tiet_nhap values ('A03','TH03',2000,300)
Insert into Chi_tiet_nhap values ('A04','TH04',2000,260)
Insert into Chi_tiet_nhap values ('A05','TH05',2000,310)
Insert into Chi_tiet_nhap values ('A06','TH06',2000,170)
Insert into Chi_tiet_nhap values ('A07','TH07',2000,210)
Insert into Chi_tiet_nhap values ('A08','TH08',2000,410)
Insert into Chi_tiet_nhap values ('A09','TH09',2000,300)
Insert into Chi_tiet_nhap values ('A10','TH10',2000,200)
Insert into Chi_tiet_dh values ('TH01','H01',27)
Insert into Chi_tiet_dh values ('TH02','H01',20)
Insert into Chi_tiet_dh values ('TH04','H01',10)
Insert into Chi_tiet_dh values ('TH02','H02',10)
Insert into Chi_tiet_dh values ('TH05','H02',11)
Insert into Chi_tiet_dh values ('TH03','H03',40)
Insert into Chi_tiet_dh values ('TH04','H04',15)
Insert into Chi_tiet_dh values ('TH05','H05',23)
Insert into Chi_tiet_dh values ('TH06','H06',12)
Insert into Chi_tiet_dh values ('TH07','H07',28)
Insert into Chi_tiet_dh values ('TH08','H08',30)
Insert into Chi_tiet_dh values ('TH09','H09',7)
Insert into Chi_tiet_dh values ('TH10','H10',5)
Trang 28Insert into Chi_tiet_gh values ('T01','H01','TH01',27)
Insert into Chi_tiet_gh values ('T01','H01','TH02',20)
Insert into Chi_tiet_gh values ('T01','H01','TH04',10)
Insert into Chi_tiet_gh values ('T02','H02','TH02',10)
Insert into Chi_tiet_gh values ('T02','H02','TH05',11)
Insert into Chi_tiet_gh values ('T03','H03','TH03',40)
Insert into Chi_tiet_gh values ('T04','H04','TH04',15)
Insert into Chi_tiet_gh values ('T05','H05','TH05',23)
Insert into Chi_tiet_gh values ('T06','H06','TH06',12)
Insert into Chi_tiet_gh values ('T07','H07','TH07',28)
Insert into Chi_tiet_gh values ('T08','H08','TH08',30)
Insert into Chi_tiet_gh values ('T09','H09','TH09',7)
Insert into Chi_tiet_gh values ('T10','H10','TH10',5)
SCRIPT TẠO RÀNG BUỘC
/* cập nhật hàng trong kho sau khi đặt hàng hoặc cập nhật */
create TRIGGER TRG_Cap_nhat_ton_kho_DH ON Chi_tiet_dh AFTER INSERT
AS
BEGIN
UPDATE San_phamSET ton_kho = ton_kho - (
SELECT so_luongFROM inserted iWHERE i.ma_sp = San_pham.ma_sp