Yêu cầu lưu trữ- Lưu trữ 3 đối tượng chính: + Sản phẩm: sản phẩm, chi tiết sản phẩm, khuyến mãi, ảnh, thể loại + Khách hàng: khách hàng, thanh toán,... Khai thác dữ liệu - Lấy danh sách
Trang 1TRƯỜNG ĐẠI HỌC XÂY DỰNG HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO TÊN ĐỀ TÀI: QUẢN LÝ BÁN LAPTOP, PC
Tên bộ môn: Đồ án hệ cơ sở dữ liệu
Giảng viên hướng dẫn: Nguyễn Hồng Hạnh
Nhóm: 13 – 65IT3
Sinh viên thực hiện :
1 Lương Tuấn Minh – 4000265
2 Nguyễn Duy Anh - 6765
3 Lê Xuân Mười – 138065
4 Nguyễn Đức Thành - 1546865
Hà Nội, ngày 24 tháng 01 năm 2022
Trang 2MỤC LỤC
1 Mô tả các yêu cầu lưu trữ và khai thác dữ liệu cơ bản của hệ thống 3
1.1 Yêu cầu lưu trữ 3
1.2 Khai thác dữ liệu 3
2 Mô tả thực thể và các mối quan hệ, sơ đồ ERD 3
2.1 Mô tả thực thể 3
2.2 Mối quan hệ 4
2.3 Sơ đồ ERD 5
3 Mô tả cấu trúc bảng và giải thích ý nghĩa các cột dữ liệu của bảng 6
4 Sơ đồ quan hệ thể hiện mối liên kết giữa các bảng được tạo (Relationship Diagram) 9
5 Danh sách truy vấn đã thiết kế và hình ảnh demo kết quả tương ứng 10 5.1 SẢN PHẨM 11
5.2 ĐƠN HÀNG, DOANH THU 15
5.3 NHÂN VIÊN 16
6 Đánh giá thiết kế CSDL 18
6.1 Ưu điểm: 18
6.2 Nhược điểm 18
1 Mô tả các yêu cầu lưu trữ và khai thác dữ liệu cơ bản của hệ thống
Trang 31.1 Yêu cầu lưu trữ
- Lưu trữ 3 đối tượng chính:
+ Sản phẩm: sản phẩm, chi tiết sản phẩm, khuyến mãi, ảnh, thể loại + Khách hàng: khách hàng, thanh toán,
+ Nhân viên: nhân viên, tài khoản, lương
1.2 Khai thác dữ liệu
- Lấy danh sách sản phẩm, khách hàng, nhân viên trong hệ thống
- Thống kê doanh thu, sản phẩm bán ra,…
- Năng suất bán hàng của nhân viên
- Khách hàng thân quen
2 Mô tả thực thể và các mối quan hệ, sơ đồ ERD
2.1 Mô tả thực thể
- Sản phẩm (PRODUCTS): lưu trữ thông tin chính về sản phẩm
- Chi tiết sản phẩm (PRODUCT_DETAIL): lưu trữ chi tiết thông số sản phẩm
- Giảm giá (COUPON): lưu trữ thông tin khuyến mãi, giảm giá sản phẩm
- Ảnh (IMG): lưu trữ ảnh mô tả sản phẩm
- Loại sản phẩm (CATALOG): lưu trữ các loại sản phẩm có trong cửa hàng
- Khách hàng (GUEST): lưu trữ thông tin khách hàng đã mua hàng
- Đơn thanh toán (BILL): lưu trữ thông tin cơ bản (mã khách hàng, tổng tiền)
- Chi tiết đơn (BILL_DETAIL): lưu trữ chi tiết đơn (mã sản phẩm, mã đơn)
- Doanh thu (SALES): dựa trên số đơn đã bán để lưu số tiền kiếm trong tháng
- Nhân viên (STAFF): lưu trữ thông tin nhân viên
- Tài khoản (ACCOUNT_STAFF): lưu trữ tài khoản của nhân viên
- Lương (SALARY): lưu trữ lương/tháng của nhân viên
Trang 42.2 Mối quan hệ
- PRODUCTS (1 - 1) PRODUCT_DETAIL
- COUPON (1 – N) PRODUCTS
- PRODUCTS (1 - N) IMG
- CATALOG (1 – N) PRODUCTS
- GUEST (1 – N) BILL
- SALES (1 – N) BILL
- BILL (1 – 1) BILL_DETAIL
- BILL_DETAIL (1 – N) PRODUCTS
- SALES (1 – N) BILL
- STAFF (1 - 1) ACCOUNT_STAFF
- STAFF (1 – 1) SALARY
Trang 52.3 Sơ đồ ERD
Trang 63 Mô tả cấu trúc bảng và giải thích ý nghĩa các cột dữ liệu của bảng
- 1 bảng gồm 3 phần:
+ Tên bảng + Khóa chính: id + Thành phần lưu trữ khác
- Status: trạng thái
- Create_at: thời gian tạo
- Create_by: tạo bởi nhân viên nào
- Update_at: thời gian sửa đổi, cập nhật
- Update_by: thay đổi bởi nhân viên nào
- Sản phẩm (PRODUCTS):
+ id: mã sản phẩm + coupon_id: mã khuyến mãi + product_name: tên sản phẩm + product_brand: hãng sản phẩm + price: giá sản phẩm
+ qty: số lượng sản phẩm + catalog_id: mã loại sản phẩm + content: nội dung mô tả sản phẩm
- Chi tiết sản phẩm (PRODUCT_DETAIL):
+ monitor: thông tin màn hình + cpu: thông tin ổ cứng + ram: thông tin bộ nhớ + vga: thông tin card màn hình + ssd: thông tin ổ cứng (thể rắn) + hdd: thông tin ổ cứng
+ psu: thông tin nguồn + mainboard: thông tin bo mạch chính
Trang 7+ case_pc: thông tin vỏ máy tính
- Khuyến mãi (COUPON):
+ id: mã khuyến mãi
+ discount: giảm giá
+ start_at: bắt đầu vào ngày/ giờ nào + end_at: kết thúc vào ngày/giờ nào
- Ảnh (IMG)
+ id: mã ảnh
+ product_id: mã sản phẩm
+ img_link: đường dẫn ảnh
- Loại sản phẩm (CATALOG)
+ id: mã loại sản phẩm
+ catalog_name: tên loại sản phẩm
- Khách hàng (GUEST):
+ id: mã khách hàng
+ name: tên khách hàng
+ gender: giới tính
+ birthday: ngày sinh
+ email: tài khoản thư điện tử + address: địa chỉ khách hàng + phone: số điện thoại khách hàng
- Đơn thanh toán (BILL):
+ id: mã đơn thanh toán
+ guest_id: mã khách hàng
+ amount: tổng tiền
- Chi tiết đơn (BILL_DETAIL):
+ product_id: mã sản phẩm
+ bill_id: mã đơn thanh toán
+ qty: số lượng sản phẩm
Trang 8- Nhân viên (STAFF):
+ id: mã nhân viên
+ name: tên nhân viên
+ gender: giới tính
+ birthday: ngày sinh
+ address: địa chỉ nhân viên
+ phone: số điện thoại nhân viên
+ position: chức vụ
- Tài khoản nhân viên (ACCOUNT_STAFF):
+ id: mã tài khoản
+ account: tài khoản
+ password: mật khẩu
- Lương nhân viên (SALARY)
+ id: mã nhân viên
+ salary: mức lương
- Doanh thu (SALES):
+ id:
+ amount: Tổng doanh thu
Trang 94 Sơ đồ quan hệ thể hiện mối liên kết giữa các bảng được tạo (Relationship Diagram)
Trang 105 Danh sách truy vấn đã thiết kế và hình ảnh demo kết quả tương ứng
5.1 SẢN PHẨM
1 Lấy ra những sản phẩm của hãng acer
SELECT p.product_name, p.product_brand FROM PRODUCTS p,CATALOG c WHERE p.catalog_id = c.id AND c.catalog_name = 'laptop' AND p.product_brand = 'acer'
2 Lấy ra những sản phẩm có giá < 20000000 VNĐ
SELECT product_name, product_brand, price FROM PRODUCTS
WHERE price < 20000000 ORDER BY price ASC
3 Tìm sản phẩm có giá cao nhất
SELECT product_name, product_brand, price FROM PRODUCTS
WHERE price = ( SELECT MAX(price) FROM PRODUCTS)
4 Sắp xếp, hiển thị theo giá (tên) giảm dần hoặc tăng dần về giá (alpha a-z) SELECT product_name, product_brand, price
FROM PRODUCTS ORDER BY price DESC
Trang 115 Hiển thị theo tên hoặc mã sản phẩm
SELECT pd.monitor, pd.ram, pd.vga, pd.ssd
FROM PRODUCTS p, PRODUCT_DETAIL pd
WHERE p.id = pd.id AND p.id = 5
6 Sản phẩm bán được trong 7 ngày qua
SELECT p.product_name
FROM PRODUCTS p, BILL b, BILL_DETAIL bd
WHERE b.id = bd.bill_id AND bd.product_id = p.id AND b.create_at BETWEEN GETDATE()-DAY(7) AND GETDATE();
7 In ra id có hãng dell và có giá trong khoảng từ 20000000 đến 40000000 select id from Products
where product_brand = 'dell'
and price >= 20000000 and price <= 40000000
Trang 128 In ra danh sách các sản phẩm (id,product_name) do hãng msi và acer sản xuất và có giá tiền từ 10000000 đến 50000000
select id,product_name
from products
where (product_brand='msi' or product_brand='acer')
and price >=10000000 and price <=50000000
9 In ra danh sách các sản phẩm (id,product_name) được khách hàng có tên 'Hoang Van Nam' mua trong tháng 1/2022
select p.id,p.product_name
from products p , guest g, bill b, bill_detail bd
where g.name ='Hoang Van Nam'
and bd.product_id = p.id and month(b.create_at)='1'
and year (b.create_at)='2022'
and b.guest_id = g.id
and bd.bill_id = b.id
10 In ra danh sách các sản phẩm (id,product_name) không bán được
select p.id,p.product_name from products p
where p.id not in (select bd.product_id from bill_detail bd)
Trang 1311 In ra danh sách các sản phẩm (id,product_name) thuộc hãng "dell" không bán được
select p.id,p.product_name from products p
where p.product_brand = 'dell'
and p.id not in (select bd.product_id from bill_detail bd)
12 có bao nhiêu sản phẩm không bán được
select count (p.id) as soluong from products p
where p.id not in(select product_id from bill_detail)
13 tìm tên khách hàng đã mua hóa đơn có giá trị cao nhất trong năm 2022 select g.name from bill b, GUEST g
where b.guest_id=g.id and amount in
( select max(b.amount) from bill b
where year(b.create_at)= '2022')
14 In ra danh sách các sản phẩm (id,product_name) có giá bán bằng 1 trong 3 mức giá cao nhất
select id,product_name from PRODUCTS
where price in (select top 3 p.price from PRODUCTS p
order by p.price DESC)
Trang 145.2 ĐƠN HÀNG, DOANH THU
15 Lấy ra thông tin các đơn hàng mua vào ngày 07/12/2021
SELECT * FROM BILL WHERE CAST(create_at AS DATE) = '2021-12-07'
16 Hiện doanh thu hiện tại
SELECT sum(amount) as doanh_thu
FROM BILL
WHERE create_at BETWEEN '2021-12-01' AND GETDATE()
17 Thống kê có bao nhiêu đơn hàng mua trong 1 tuần vừa qua
SELECT count(id) as so_luong_don_hang
FROM BILL
WHERE create_at BETWEEN GETDATE()-DAY(7) AND GETDATE()
18 Lấy ra tên các sản phẩm có mã đơn hàng = 1
select p.product_name from PRODUCTS p, BILL_DETAIL bdt
where p.id = bdt.product_id and bdt.bill_id = '1'
19 Lấy ra tên khách hàng có mã đơn = 2
select g.name from GUEST g , BILL b
where g.id = b.guest_id and b.id = '2'
20 Lấy ra tên sản phẩm được khách hàng id = 3 mua
select p.product_name
from PRODUCTS p, GUEST g , BILL_DETAIL bdt, BILL b
Trang 15where g.id = b.guest_id and p.id = bdt.product_id and bdt.bill_id = b.id and g.id
= '3'
5.3 NHÂN VIÊN
21 Hiển thị chức vụ của ‘Nguyen Duy Anh’
SELECT position
FROM STAFF
WHERE name = 'Nguyen Duy Anh'
22 Hiển thị thông tin nhân viên tạo khuyến mãi ngày 13/10/2021
SELECT s.name, s.address, s.phone
FROM STAFF s, COUPON c
WHERE s.id = c.create_by AND cast(c.start_at as date) = '2021-10-13'
GROUP BY name,address, phone
23 Hiển thị nhân viên chưa có hóa đơn nào
SELECT s.name, s.address, s.phone
FROM STAFF s, BILL b
WHERE s.id NOT IN (SELECT create_by FROM BILL)
GROUP BY name,address, phone
24 Tính tổng tiền các đơn của nhân viên bán được nhiều nhất
DECLARE @cMax int = (SELECT MAX(s)
FROM (SELECT COUNT(create_by) as s FROM BILL
GROUP BY create_by ) as s)
DECLARE @sId int=(SELECT create_by FROM BILL GROUP BY create_by HAVING COUNT(create_by)=@cMax)
SELECT s.id, s.name,SUM(b.amount) as tong_tien
FROM STAFF s, BILL b
WHERE s.id = b.create_by AND b.create_by = @sId
GROUP BY s.id, s.name
25 Hiển thị nhân viên bán được nhiều đơn nhất
DECLARE @cMax int = (SELECT MAX(s)
Trang 16FROM (SELECT COUNT(create_by) as s FROM BILL
GROUP BY create_by ) as s)
DECLARE @sId int=(SELECT create_by FROM BILL GROUP BY create_by HAVING COUNT(create_by)=@cMax)
SELECT s.id, s.name,@cMax as tong_don FROM STAFF s, BILL b WHERE s.id = b.create_by AND b.create_by = @sId
GROUP BY s.id, s.name
5.4 KHÁCH HÀNG
26 Hiển thị thông tin khách hàng mua nhiều nhất trong 30 ngày
DECLARE @Max int = (SELECT MAX(s)
FROM (SELECT SUM(amount)as s FROM BILL b WHERE create_at
BETWEEN GETDATE()-DAY(30) AND GETDATE() GROUP BY guest_id )
as s)
DECLARE @id int=(SELECT guest_id FROM BILL GROUP BY guest_id HAVING SUM(amount)=@Max)
SELECT g.id, g.name,@Max as tong FROM GUEST g, BILL b
WHERE g.id = b.guest_id AND guest_id = @id GROUP BY g.id, g.name
27.In ra thông tin nhân viên doanh thu nhiều nhất trong 30 ngày
DECLARE @cMax int = (SELECT MAX(s)
FROM (SELECT SUM(amount)as s FROM BILL b
WHERE create_at BETWEEN GETDATE()-DAY(30) AND GETDATE() GROUP BY create_by ) as s)
DECLARE @sId int=(SELECT create_by FROM BILL GROUP BY create_by HAVING SUM(amount)=@cMax)
SELECT s.id, s.name,@cMax as tong FROM STAFF s, BILL b
WHERE s.id = b.create_by AND b.create_by = @sId
GROUP BY s.id, s.name
28 Tìm tên khách hàng đã mua hóa đơn có giá trị cao nhất trong năm 2022 select g.name from bill b, GUEST g where b.guest_id=g.id and amount in( select max(b.amount) from bill b where year(b.create_at)= '2022')
Trang 176 Đánh giá thiết kế CSDL
6.1 Ưu điểm:
- Phù hợp với cửa hàng buôn bán nhỏ, sử dụng để bán hàng trực tiếp
- Các trường dữ liệu có thể đáp ứng đủ các nhu cầu cơ bản của 1 cửa hàng (về lưu trữ, tính toán,…)
6.2 Nhược điểm
- Thiếu 1 số bảng để đáp ứng nhu cầu cho 1 cửa hàng kết hợp bán online (thu thập đánh giá của khách hàng về sản phẩm, giao hàng, mua hàng online,…)