HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
Giáo viên hướng dẫn: Chu Thị Hường
Sinh viên:
Nguyễn Quang Dự -KTPM16
Lê Văn Thắng
-KTPM16
Lớp:Thực tập cơ sở dữ liệu chiều thứ 5
BÁO CÁO MÔN HỌC
THỰC TẬP CƠ SỞ DỮ LIỆU
Đề tài:Quản lý bán hàng xe đạp online
CHƯƠNG 1. ĐẶC TẢ HỆ THỐNG
1. Mục đích yêu cầu
Hiện nay, tại các doanh nghiệp việc quản lý hàng hoá, nhân viên, hàng xuất
nhập hàng ngày…gặp nhiều khó khăn, chính vì vậy ý tưởng tạo lên một phần
mềm để góp phần giải quyết vấn đề trên của mỗi người lập trình là không thể
tránh khỏi.
Ngoài việc cung cấp cho 1 phần mềm giúp người kinh doanh quản lý về nhân
viên,khách hàng,hàng hóa,đơn nhập,xuất,…Phần mềm còn giúp người kinh
doanh:
tổng kết doanh thu,chi phí của cửa hàng trong tháng(quý hoặc năm )
Tổng kết số lượng xe nào bán chậm ít trong khoảng thời gian nhất định
để hạn chế nhập hàng đó lại.
Tổng kết số lượng xe nào được bán chạy nhất trong một khoảng thời
gian nhất định(theo mùa,theo tháng,theo năm) để nhập hàng đáp ứng
nhu cầu mua hàng của khách hàng.
Tài chính hiện tại của cửa hàng có đáp ứng được những nhu cầu nhập
hàng của công ty không đưa ra giải pháp.
1.1 Mô tả hệ thống
Một hệ thống kinh doanh cần có những công việc chính như sau:
Nhập hàng
Bán hàng
Bộ phận bảo hành(sửa chữa)
1.1.1 Cơ cấu tổ chức và sự phân công trách nhiệm
Cửa hàng sẽ có 5 chức vụ nhân viên:
Nhân viên giới thiệu sản phẩm
Nhân viên quản lí
Nhân viên kho hàng
Nhân viên chủ kho
Nhân viên sửa chữa(bảo hành)
Nhân viên kế toán
1.1.1.1. Bộ phận nhập hàng
Nhân viên kho có nhiệm vụ:
- Nhập hàng và kiểm tra hàng rồi báo cáo lại cho nhân viên quản lí
- Giao hàng cho khách hàng
- Kiểm kê kho
1.1.1.2 Bộ phận bán hàng
Nhân viên giới thiệu sản phẩm có nhiệm vụ:
- Giới thiệu chi tiết sản phẩm cho khách hàng
- Giải đáp những thắc mắc của khách hàng về sản phẩm
Nhân viên quản lí có nhiệm vụ:
- Lập hóa đơn bán hàng
- Thanh toán hóa đơn với khách hàng
- Lập đơn hàng nhập hàng
- Thanh toán hóa đơn với nhà cung cấp
- Giải quyết vấn đề đổi hàng(do hàng có thể bị lỗi)
1.1.1.3:Bộ phận sửa chữa
Nhân viên sửa chữa có nhiệm vụ:
- Tiếp nhận những trường hợp đổi trả sản phẩm
- Sửa chữa các vấn đề liên quan đến sản phẩm của khách hàng
trong thời
gian bảo hành (như hỏng hóc,…)
1.2:Quy trình nghiệp vụ
1.2.1 Nhập hàng
Khi có yêu cầu nhập hàng ,nhân viên kho sẽ nhập hàng,nhân viên chủ kho sẽ
check hàng và kiểm tra số lượng rồi báo lại cho nhân viên quản lí.
Nhân viên quản lí sẽ cập nhật những mẫu xe mới vào hệ thống và nhập hóa đơn
nhập hàng vào hệ thống.
Sau đó thanh toán hóa đơn với nhà sản xuất.
1.2.2 Bán hàng
*Khách hàng mua trực tiếp tại cửa hàng
Khi khách hàng đến cửa hàng xem sản phẩm, nhân viên giới thiệu sản phẩm sẽ tư
vấn cho khách hàng về sản phẩm.
Nếu khách hàng mua sản phẩm thì nhân viên kho sẽ lấy sản phẩm trong kho và
mang đến bộ phận của nhân viên quản lí để nhân viên quản lí lập hóa đơn mua hàng
cho khách hàng, đơn hàng được lập thành 2 bản:
-1 bản lưu tại bộ phận quản lý(trong hệ thống)
-1 bản đưa cho khách (khi đã thanh toán)
* Khách hàng mua online
Sau khi đơn hàng online được gửi đến cửa hàng ,nhân viên quản lí sẽ dùng số
điện thoại của khách hàng để gọi cho khách hàng xác nhận khách hàng đặt hàng tại
cửa hàng.
Nhân viên quản lí yêu cầu nhân viên chủ kho chuẩn bị đơn hàng, nhân viên kho
gói hàng cẩn thận rồi giao hàng cho khách hàng.
Khách hàng nhận hàng và sau khi kiểm tra hàng xong khách hàng thanh toán
với nhân viên kho.
Sau đó nhân viên kho về báo cáo với nhân viên quản lí kho về tình trạng đơn
hàng(hoàn thành hay chưa). Nhân viên chủ kho báo lại cho nhân viên quản lý để
nhân viên quản lý hoàn thành thông tin đơn hàng này vào hệ thống(chốt đơn: ĐÃ
HOÀN THÀNH HOẶC CHƯA HOÀN THÀNH)
1.2.3:Sửa chữa(bảo hành)
*Sản phẩm đổi trả
Sản phẩm được đổi trả trong vòng 30 ngày.Vậy nên khi khách hàng đến đổi sản
phẩm do lỗi thì nhân viên quản lí đưa sản phẩm đến bộ phận của nhân viên sửa chữa
check sản phẩm xem có đúng là lỗi của nhà sản xuất hay không hay do lỗi của khách
hàng để có biện pháp đổi hàng khác cho khách hàng(hoặc có thể khách hàng mua sản
phẩm khác với số tiền bù thêm,…)
Nếu sản phẩm do lỗi của nhà sản xuất thì khách hàng sẽ được đổi sản phẩm mới
và nhân viên quản lí lập một hóa đơn mua hàng khác thực hiện việc đổi sản phẩm
cho cho khách và chuyển sản phẩm lỗi vào kho để sau này thực hiện việc đổi trả với
nhà sản xuất .
*Sản phẩm bảo hành
Trong thời gian bảo hành khách hàng muốn sửa chữa các vấn đề liên quan đến sản
phẩm.
Khách hàng được đưa đến bộ phận nhân viên sửa chữa để được hỗ trợ và khắc
phục các lỗi của sản phẩm .
1.3 Một số ghi chú về cửa hàng và quy tắc nghiệp vụ
Cửa hàng có 3 chi nhánh.
Số lượng nhân viên ở mỗi chi nhánh là như nhau.
Sản phẩm sẽ có chương giảm giá theo từng đợt trong năm(theo những ngày đặc
biệt),giảm giá cho khách hàng tùy vào số lượng sản phẩm mua tại cửa hàng,chính
sách giảm giá cho khách hàng quen thuộc .
1.3 Đặc tả các chức năng cần xây dựng
1.3.1 Nhập hàng
-Đầu vào: yêu cầu nhập hàng.
-Đầu ra: Cập nhật hàng mới ,cập nhật thông tin nhà sản xuất.
1.3.2: Lập đơn nhập hàng vào hệ thống
- Đầu vào: Phiếu yêu cầu
- Đầu ra: Đơn nhập hàng
1.3.3 Lập đơn bán hàng
- Đầu vào: Yêu cầu mua hàng
- Đầu ra: Hóa đơn bán hàng
-Nội dung xử lí: Xác nhận yêu cầu mua hàng của khách hàng và lập hóa đơn
mua hàng.
1.3.4 Lập phiếu giao hàng
- Đầu vào: Phiếu giao hàng
- Đầu ra: Phiếu xuất kho
- Nội dung xử lý: Kiểm tra phiếu giao hàng và gửi phiếu yêu cầu xuất kho đến
kho hàng
1.3.5 Kiểm tra hàng
- Đầu vào: kiểm tra hàng trong kho.
- Đầu ra:
+ Nếu: hàng trong kho lớn hơn hoặc bằng hàng khách yêu cầu thì dừng
kiểm tra hàng.
+ Nếu: hàng trong kho nhỏ hơn hàng khách yêu cầu thì lập phiếu yêu
cầu nhập hàng.
- Nội dung xử lý: cập nhật hàng trong kho và lên danh sách những mặt
hàng cần nhập thêm, sau đó gửi yêu cầu nhập hàng
1.3.6:Cập nhật nhân viên
Đầu vào:Nhân viên mới hoặc nhân viên xin thôi việc
Đầu ra:Cập nhật tình trạng nhân viên (thôi việc hay đang làm việc) vào hệ thống
1.3.7:Cập nhật danh sách khách hàng
Đầu vào:Khách hàng mới tại cửa hàng
Đầu ra:Cập nhật khách hàng vào hệ thống
CHƯƠNG 2: PHÂN TÍCH VÀ CÀI ĐẶT DỮ LIỆU HỆ THỐNG
*Chuẩn hóa dữ liệu:
Dạng chuẩn 1 – 1NF (First Normal Form)
Định nghĩa: Một bảng (quan hệ) được gọi là ở dạng chuẩn 1NF nếu và chỉ nếu toàn
bộ các miền giá trị của các cột có mặt trong bảng (quan hệ) đều chỉ chứa các giá trị
nguyên tử (nguyên tố)
Ví dụ:
Một bảng (quan hệ) chưa ở 1NF:
MASV
HOTEN
DIACHI
MAMON
TENMON
DIEM
A01
Lê Na
12 Thái Hà
M01M02
CSDLAnh
89
A02
Trần An
56 Mã Mây
M01
CSDL
8
A03
Hà Nam
24 Cầu Gỗ
M01M02M03
CSDLAnhToán 1
689
Dạng chuẩn 2 – 2NF
Định nghĩa Một quan hệ ở dạng chuẩn 2NF nếu quan hệ đó:
Là 1NF
Các thuộc tính không khoá phải phụ thuộc hàm đầy đủ vào khoá chính
Ví dụ
Ví dụ1: Cho quan hệ R = (ABCD) , khoá là AB và tập phụ thuộc hàm F =
{AB -> C, AB -> D}là quan hệ đạt chuẩn 2NF.
Ví dụ2: Cho quan hệ R = (ABCD) , khoá là AB và tập phụ thuộc hàm
F = {AB -> C, AB -> D, B -> DC} là quan hệ không đạt chuẩn 2NF vì có phụ thuộc
hàm
B -> DC là phụ thuộc hàm bộ phận (phụ thuộc hàm không đầy đủ) vào khoá. Khi đó
ta đưa về dạng chuẩn 2NF như sau:
Nhận xét
Một quan hệ ở dạng chuẩn 2NF nếu thoả mãn 1 trong các đièu kiện sau:
Khoá chính chỉ gồm một thuộc tính
Bảng không có các thuộc tính không khoá
Tất cả các thuộc tính không khoá phụ thuộc hoàn toàn vào tập các thuộc tính
khoá chính
Dạng chuẩn 3 – 3NF
Định nghĩa Một quan hệ ở dạng chuẩn 3NF nếu quan hệ đó:
Là 2NF
Các thuộc tính không khoá phải phụ thuộc trực tiếp vào khoá chính
Ví dụ
Ví dụ1: Cho quan hệ R = (ABCDGH, khoá là AB và tập phụ thuộc hàm F =
{AB -> C, AB -> D, AB -> GH} là quan hệ đạt chuẩn 3NF.
Ví dụ2: Cho quan hệ R = (ABCDGH) , khoá là AB và tập phụ thuộc hàm
F = {AB -> C, AB -> D, AB -> GH, G -> DH} là quan hệ không đạt chuẩn 3NF vì có
phụ thuộc hàm G -> DH là phụ thuộc hàm gián tiếp vào khoá. Khi đó ta đưa về dạng
chuẩn 3NF như sau:
2.1. Xác định kiểu thực thể,kiểu thuộc tính
1.HANG_XE(ID_Hang,Ten_hang).
+khóa chính:ID_Hang
+tập phụ thuộc hàm:ID_Hang->Ten_hang
đạt chuẩn 3nf
2.LOAI_XE(ID_Loai,Ten_Loai).
+khóa chính:ID_Loai
+tập phụ thuộc hàm:ID_Loai->Ten_Loai
đạt chuẩn 3nf
3.XE(ID_Xe,Ten_Xe,ID_Loai,ID_Hang,Model,Gia_ban,Bao_hanh,Mo_ta,khu
yen_mai_hien_tai,is_con_hang,is_het_hang,khong_kinh_doanh).
+khóa chính:ID_Xe
+Tập phụ thuộc hàm: ID_Xe-> Ten_Xe, ID_Loai, ID_Hang,
Model,Gia_ban,Bao_hanh,Mo_ta,khuyen_mai_hien_tai,is_con_hang,is_
het_hang,khong_kinh_doanh
Đạt chuẩn 3nf
4.NSX(ID_NSX,Ten_NSX,SDT,email,Dia_chi).
+khóa chính:ID_NSX
+tập phụ thuộc hàm: ID_NSX -> Ten_NSX, SDT, email, Dia_chi.
đạt chuẩn 3nf
5.DON_NHAP_HANG(ID_hoa_don_nhap,ID_NSX,
ID_chu_kho,ngay_nhap_hang).
+khóa chính:ID_hoa_don_nhap
+tập phụ thuộc hàm: ID_hoa_don_nhap -> ID_NSX ,
ngay_nhap_hang
đạt chuẩn 3nf
6.CHI_TIET_DON_NHAP_HANG(ID_hoa_don_nhap,
ID_muc,ID_Xe,Gia_nhap,So_luong,Chiet_khau)
+khóa chính:ID_hoa_don_nhap,ID_muc
ID_chu_kho,
+tập phụ thuộc hàm: ID_hoa_don_nhap,ID_Muc -> ID_Xe, Gia_nhap,
So_luong, Chiet_khau
đạt chuẩn 3nf
7.CUA_HANG(ID_cua_hang,Ten_cua_hang,SDT,email,dia_chi)
+khóa chính:ID_cua_hang
+tập phụ thuộc hàm: ID_cua_hang -> Ten_cua_hang, SDT, email,
dia_chi.
đạt chuẩn 3nf
8.KHO(ID_cua_hang,ID_Xe,So_luong_khong_loi,So_luong_bi_loi)
+khóa chính:ID_cua_hang,ID_XE
+tập phụ thuộc hàm:
ID_cua_hang,ID_XE->So_luong_khong_loi,So_luong_bi_loi
đạt chuẩn 3nf
9.CHUC_VU(ID_chuc_vu,Ten_chuc_vu,Luong)
+khóa chính:ID_chuc_vu
+tập phụ thuộc hàm:
ID_chuc_vu->Ten_chuc_vu,Luong
đạt chuẩn 3nf
10.NHAN_VIEN(ID_NV,Ten_nhan_vien,SDT,Dia_chi,ngay_vao_lam_viec,I
D_chuc_vu,is_dang_lam_viec,is_nghi_viec,ID_cua_hang, ID_nguoi_quan_li)
+khóa chính:ID_NV
+tập phụ thuộc hàm:
ID_NV->Ten_nhan_vien,
SDT,
Dia_chi,
ngay_vao_lam_viec
,ID_chuc_vu,is_dang_lam_viec,is_nghi_viec,ID_cua_hang, ID_nguoi_quan_li
đạt chuẩn 3nf
11.KHACH_HANG(ID_khach_hang,Ten_khach_hang,SDT,dia_chi,So_tien_
duoc_giam).
+khóa chính:ID_khach_hang
+tập phụ thuộc hàm:
ID_khach_han-> Ten_khach_hang,SDT,dia_chi,So_tien_duoc_giam
đạt chuẩn 3nf
12.DAT_HANG(ID_don_dat_hang,ID_khach_hang,ngay_dat_hang,ngay_gia
o_hang,tien_ship,ID_Nhan_vien_ban_hang,ID_nhan_vien_giao_hang,is_dang_giao_
hang,is_da_giao_hang,is_huy_don_hang).
+khóa chính:ID_don_dat_hang
+tập phụ thuộc hàm:
ID_don_dat_hang->
ID_khach_hang,ngay_dat_hang,ngay_giao_hang,tien_ship,ID_Nhan_vien_ban
_hang,ID_nhan_vien_giao_hang,is_dang_giao_hang,is_da_giao_hang,is_huy_
don_hang
đạt chuẩn 3nf
13.CHI_TIET_DON_DAT_HANG(ID_don_dat_hang,ID_muc,ID_xe,so_luong
)
+khóa chính:ID_don_dat_hang,ID_muc
+tập phụ thuộc hàm:
ID_don_dat_hang,ID_muc-> ID_xe,so_luong
đạt chuẩn 3nf
14.DOI_TRA(ID_don_dat_hang,ID_muc,ID_xe,so_luong)
+khóa chính:ID_don_dat_hang,ID_muc
+tập phụ thuộc hàm:
ID_don_dat_hang,ID_muc-> ID_xe,so_luong
đạt chuẩn 3nf
Nhưng để đảm bảo về tốc độ truy vấn em thêm một số thuộc tính và thêm một số
bảng như sau:
1.HANG_XE(ID_Hang,Ten_hang)
2.LOAI_XE(ID_Loai,Ten_Loai)
3.XE(ID_Xe,Ten_Xe,ID_Loai,ID_Hang,Model,Gia_ban,Bao_hanh,Mo_ta,khu
yen_mai_hien_tai,ID_NSX,is_con_hang,is_het_hang, is_khong_kinh_doanh).
4.NSX(ID_NSX,Ten_NSX,SDT,email,Dia_chi)
5.DON_NHAP_HANG(ID_hoa_don_nhap,ID_NSX,
ID_chu_kho,ngay_nhap_hang,ID_cua_hang,Tong_tien).
Bị hạ chuẩn xuống 2NF do :
+khóa chính:ID_hoa_don_nhap
+tập phụ thuộc hàm:F={ID_hoa_don_nhap-> ID_NSX,
ID_chu_kho,ngay_nhap_hang,ID_cua_hang,Tong_tien;
ID_chu_kho->ID_cua_hang}
Nhưng ta sẽ thiết lập trigger trước khi insert vào bảng để lấy ID_cua_hang của
ID_chu_kho để insert vào cột ID_cua_hang để đảm bảo ID_cua_hàng khớp với
ID_cua_hang mà ID_chu_kho đưa sang
6.CHI_TIET_DON_NHAP_HANG(ID_hoa_don_nhap,
ID_muc,ID_Xe,Gia_nhap,So_luong,Chiet_khau)
7.CUA_HANG(ID_cua_hang,Ten_cua_hang,SDT,email,dia_chi)
8.KHO(ID_cua_hang,ID_Xe,So_luong_khong_loi,So_luong_bi_loi)
9.CHUC_VU(ID_chuc_vu,Ten_chuc_vu,Luong)
10.NHAN_VIEN(ID_NV,Ten_nhan_vien,SDT,Dia_chi,ngay_vao_lam_viec,I
D_chuc_vu,ID_cua_hang, ID_nguoi_quan_li, is_dang_lam_viec,is_nghi_viec).
11.KHACH_HANG(ID_khach_hang,Ten_khach_hang,SDT,dia_chi,So_tien_
duoc_giam).
12.DAT_HANG(ID_don_dat_hang,ID_khach_hang,ngay_dat_hang,ngay_giao_
hang,tien_ship,So_tien_duoc_giam,ID_Nhan_vien_ban_hang,
ID_nhan_vien_giao_hang,ID_cua_hang,Tong_tien,
is_dang_giao_hang,is_da_giao_hang,is_huy_don_hang).
Bị hạ chuẩn xuống 2NF do:
+khóa chính:ID_don_dat_hang
+tập phụ thuộc hàm : F={ID_don_dat_hang->
ID_khach_hang,ngay_dat_hang,ngay_giao_hang,tien_ship,So_tien_duoc_giam,ID_N
han_vien_ban_hang, ID_nhan_vien_giao_hang,ID_cua_hang,Tong_tien,
is_dang_giao_hang,is_da_giao_hang,is_huy_don_hang;
ID_khach_hang->so_tien_duoc_giam;
ID_nhan_vien_ban_hang->ID_cua_hang}
+khắc phục:thiết lập trigger sao cho:
ID_khach_hang khớp với so_tien_duoc_giam
id_nhan_vien_ban_hang khớp với id_cua_hang
id_nhan_vien_ban_hang và id_nhan_vien_giao_hang phải khớp với cùng
id_cua_hang
13.CHI_TIET_DON_DAT_HANG(ID_don_dat_hang,ID_muc,ID_xe,so_luong
,gia_ban,giam_gia)
Bị hạ chuẩn xuống 2NF do:
+khóa chính:id_don_dat_hang,id_muc
+tập phụ thuộc hàm: F={ID_don_dat_hang,ID_muc->ID_xe,
so_luong,gia_ban,giam_gia;
ID_xe->gia_ban}
+khắc phục:thiết lập trigger giá bán khớp với id_xe đó
14.DOI_TRA(ID_don_dat_hang,ID_muc,ID_xe,so_luong).
Mô hình ER cuối cùng:
2.2:ĐẶC TẢ DỮ LIỆU CHO TỪNG BẢNG
1.HANG_XE
Thuộc tính
Key
Type
Mô tả
ID_hang
Khóa chính
Ten_hang
NVARCHAR(10)
ID hãng xe
NVARCHAR(15)
Tên hãng xe
2.LOAI_XE
Thuộc tính
Key
Type
Mô tả
ID_loai
Khóa chính
NVARCHAR(10)
ID loại xe
NVARCHAR(20)
Tên loại xe
Ten_loai
3.XE
Thuộc tính
Key
Type
Mô tả
ID_xe
Khóa chính
NVARCHAR(12)
ID xe
NVARCHAR(55)
Tên xe
Ten_xe
ID_hang
Khóa phụ
NVARCHAR(10)
ID hãng xe
ID_loai
Khóa phụ
NVARCHAR(10)
ID loại xe
Model_year
SMALLINT
Mẫu năm của xe
Gia_ban
DECIMAL(6,0)
Giá bán của
xe(x1000đ)
Bao_hanh
TINYINT
Bảo hành(năm)
Mô tả
NVARCHAR(1500)
Mô tả về xe
Khuyen_mai_hien_tai
DECIMAL(3,2)
Phần tram khuyến
mại của xe hiện
tại
NVARCHAR(11)
ID của nhà sản
xuất xe này
Is_con_hang
BIT
Xe còn hàng
Is_het_hang
BIT
Xe hết hàng
Is_khong_kinh_doanh
BIT
Xe không còn
kinh doanh
ID_NSX
Khóa phụ
4.NSX
Thuộc tính
Key
Type
Mô tả
ID_NSX
Khóa chính
NVARCHAR(11)
ID nhà sản xuất
Ten_NSX
NVARCHAR(30)
Tên nhà sản xuất
SDT
VARCHAR(10)
Số điện thoại
email
VARCHAR(40)
email
Dia_chi
NVARCHAR(200)
Địa chỉ của NSX
5.DON_NHAP_HANG
Thuộc tính
Key
Type
ID_hoa_don_nhap
Khóa chính
NVARCHAR(11) ID hóa đơn nhập hàng
ID_NSX
Khóa phụ
NVARCHAR(11) ID NSX
ID_chu_kho
Khóa phụ
NVARCHAR(10) ID nhân viên chủ kho
Ngay_nhap_hang
Mô tả
DATE
ID_cua_hang
Khóa phụ
Tong_tien
Ngày nhập hàng
NVARCHAR(10) ID cửa hàng mà nhập hàng
về
DECIMAL(7,0)
Tổng tiền của đơn nhập
hàng
6. CHI_TIET_DON_NHAP_HANG
Thuộc tính
Key
Type
Mô tả
ID_hoa_don_nhap
Khóa
chính
NVARCHAR(11)
ID hóa đơn nhập hàng
ID_muc
Khóa
chính
TINYINT
ID mục trong đơn hàng
ID_Xe
Khóa
phụ
NVARCHAR(12)
ID Xe
Gia_nhap
DECIMAL(6,0)
Giá nhập xe(x1000đ)
So_luong
TINYINT
Số lượng xe
Chiet_khau
DECIMAL(3,2)
Chiết khấu (%)
7. CUA_HANG
Thuộc tính
Key
Type
Mô tả
ID_cua_hang
Khóa chính
NVARCHAR(10)
ID cửa hàng
Ten_cua_hang
NVARCHAR(15)
Tên cửa hàng
SDT
VARCHAR(10)
Số điện thoại cửa hàng
email
VARCHAR(40)
Email cửa hàng
dia_chi
NVARCHAR(100)
Địa chỉ của cửa hàng
8.KHO
Thuộc tính
Key
Type
Mô tả
ID_cua_hang
Khóa chính
NVARCHAR(10)
ID cửa hàng
ID_xe
Khóa chính
NVARCHAR(12)
ID xe
So_luong_khong_loi
SMALLINT
Số lượng sản phẩm không
bị lỗi trong kho
So_luong_bi_loi
TINYINT
Số lượng sản phẩm bị lỗi
trong kho
9.CHUC_VU
Thuộc tính
Key
Type
Mô tả
ID_chuc_vu
Khóa chính
NVARCHAR(10)
ID chức vụ
Ten_chuc_vu
NVARCHAR(20)
Tên chức vụ
Luong
DECIMAL(5,0)
Mức lương của chức vụ
10.NHAN_VIEN
Thuộc tính
Key
Type
Mô tả
ID_NV
Khóa chính
NVARCHAR(10)
ID nhân viên
Ten_nhan_vien
NVARCHAR(30)
Tên nhân viên
SDT
VARCHAR(10)
Số điện thoại nhân viên
Dia_chi
NVARCHAR(100)
Địa chỉ của nhân viên
Ngay_vao_lam_viec
DATE
Ngày vào làm việc của
nhân viên
ID_Chuc_vu
Khóa phụ
NVARCHAR(10)
ID chức vụ của nhân viên
ID_cua_hang
Khóa phụ
NVARCHAR(10)
ID cửa hàng làm việc
ID_nguoi_quan_li
Khóa phụ
NVARCHAR(10)
ID người quản lí
Is_dang_lam_viec
BIT
Trạng thái đang làm việc
Is_nghi_viec
BIT
Trạng thái nghỉ việc
11.KHACH_HANG
Thuộc tính
Key
Type
Mô tả
ID_khach_hang
Khóa chính NVARCHAR(12)
Ten_khach_hang
NVARCHAR(30)
Tên của khách hàng
SDT
VARCHAR(10)
SDT khách hàng
Dia_chi
NVARCHAR(100)
Địa chỉ của khách
hàng
So_tien_duoc_giam
DECIMAL(5,0)
Số tiền được giảm
của khách khi khách
đến cửa hàng đổi trả
do lỗi
ID của khách hàng
12.DAT_HANG
Thuộc tính
Key
Type
Mô tả
ID_don_dat_hang
Khóa
chính
NVARCHAR(11)
ID của đơn đặt hàng
ID_khach_hang
Khóa
phụ
NVARCHAR(12)
ID của khách hàng
Ngay_dat_hang
DATE
Ngày đặt hàng của khách
hàng
Ngay_giao_hang
DATE
Ngày giao hàng cho khách
Tien_ship
DECIMAL(3,0)
Tiền ship hàng (x1000đ)
So_tien_khach_duoc_giam
DECIMAL(5,0)
Số tiền khách hàng được
giảm
Id_nhan_vien_ban_hang
Khóa
phụ
NVARCHAR(10)
ID của nhân viên bán hàng
ID_Nhan_vien_giao_hang
Khóa
phụ
NVARCHAR(10)
ID nhân viên kho phụ trách
giao hàng
ID_cua_hang
Khóa
phụ
NVARCHAR(10)
ID của cửa hàng mà khách
mua hàng
Tong_tien
DECIMAL(8,0)
Tổng tiền đơn mua hàng
của khách hàng
Is_dang_giao_hang
BIT
Đang giao hàng
Is_da_giao_hang
BIT
Đã giao hàng
Is_huy_don_hang
BIT
Hủy đơn hàng
13.CHI_TIET_DON_DAT_HANG
Thuộc tính
Key
Type
Mô tả
ID_don_dat_hang
Khóa chính
NVARCHAR(11)
ID của đơn đặt hàng của
khách hàng
ID_Muc
Khóa chính
TINYINT
ID các mục mà khách hàng
mua hàng
ID_xe
Khóa phụ
NVARCHAR(12)
ID xe mà khách hàng mua
so_luong
TINYINT
Số lượng xe mà khách mua
Gia_ban
DECIMAL(6,0)
Giá bán của mỗi một ID xe
Giam_gia
DECIMAL(3,2)
Giảm giá(%) do mua nhiều
xe cùng một lúc
14.DOI_TRA
Thuộc tính
Key
Type
Mô tả
ID_don_dat_hang
Khóa chính
NVARCHAR(11)
ID của đơn đặt hàng của
khách hàng
ID_Muc
Khóa chính
TINYINT
ID các mục mà khách hàng
đổi sản phẩm
ID_xe
Khóa phụ
so_luong
NVARCHAR(12)
ID xe mà khách hàng đổi
TINYINT
Số lượng xe mà khách đổi
2.3:Cài đặt dữ liệu vào hệ thống
2.3.1.Tạo cơ sở dữ liệu QuanLyBanXeDap
-Tạo 4 schema là:ban_hang,nhap_hang,san_pham,nhan_vien
CREATE DATABASE BikeStoreShopping
GO
USE BikeStoreShopping
GO
CREATE SCHEMA san_pham
GO
CREATE SCHEMA nhan_vien
GO
CREATE SCHEMA nhap_hang
GO
CREATE SCHEMA ban_hang
GO
2.3.2:Tạo bảng vào cơ sở dữ liệu
--1.tạo bảng hãng xe
CREATE TABLE san_pham.hang_xe
(
stt INT IDENTITY(1,1),
ten_hang NVARCHAR(15),
id_hang_xe AS ISNULL('HX'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED
CONSTRAINT pk_id_hang_xe PRIMARY KEY(id_hang_xe)
)
--2.tạo bảng loại xe
CREATE TABLE san_pham.loai_xe
(
stt INT IDENTITY(1,1),
ten_loai NVARCHAR(20),
id_loai_xe AS ISNULL('LX'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED
CONSTRAINT pk_id_loai_xe PRIMARY KEY(id_loai_xe)
)
--3.tạo bảng về xe
CREATE TABLE san_pham.xe
(
stt INT IDENTITY(1,1),
id_xe AS ISNULL('XE'+RIGHT(CAST(model_year AS
NVARCHAR(4)),2)+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*') PERSISTED,
ten_xe NVARCHAR(55) NOT NULL,
id_hang_xe NVARCHAR(10) NOT NULL,
id_loai_xe NVARCHAR(10) NOT NULL,
model_year SMALLINT NOT NULL,
gia_ban DECIMAL(6,0) NOT NULL,
bao_hanh TINYINT NOT NULL DEFAULT 2,
mo_ta NVARCHAR(1500),
khuyen_mai DECIMAL(3,2) NOT NULL DEFAULT 0,
id_nsx NVARCHAR(11) NOT NULL ,
is_con_hang BIT NOT NULL DEFAULT 1,
is_het_hang BIT NOT NULL DEFAULT 0,
is_khong_kinh_doanh BIT NOT NULL DEFAULT 0,
CONSTRAINT pk_id_xe PRIMARY KEY(id_xe),
CONSTRAINT fk_id_hang FOREIGN KEY (id_hang_xe)
REFERENCES san_pham.hang_xe(id_hang_xe) ON DELETE CASCADE ON UPDATE
CASCADE,
CONSTRAINT fk_id_loai FOREIGN KEY (id_loai_xe)
REFERENCES san_pham.loai_xe(id_loai_xe) ON DELETE CASCADE ON UPDATE
CASCADE,
CONSTRAINT check_modelYear_giaBan_baoHanh_khuyenMai
CHECK((model_year BETWEEN 2000 AND 2050) AND gia_ban>100 AND (bao_hanh
BETWEEN 0 AND 3) AND (khuyen_mai BETWEEN 0 AND 1) )
)
--4.tạo bảng về NSX
CREATE TABLE nhap_hang.nsx
(
stt INT IDENTITY(1,1),
id_nsx AS ISNULL('NSX'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED,
ten_nsx NVARCHAR(30) NOT NULL UNIQUE,
SDT VARCHAR(10) UNIQUE,
email VARCHAR(40) UNIQUE,
dia_chi NVARCHAR(200),
CONSTRAINT pk_id_nsx PRIMARY KEY(id_nsx)
)
--taọ foreign key id_nsx cho san_pham.xe
ALTER TABLE san_pham.xe ADD
CONSTRAINT fk_id_nsx FOREIGN KEY(id_nsx)
REFERENCES nhap_hang.nsx(id_nsx) ON DELETE NO ACTION ON UPDATE NO ACTION
--5.tạo bảng về cửa hàng
CREATE TABLE ban_hang.cua_hang
(
stt INT IDENTITY(1,1),
id_cua_hang AS ISNULL('CH'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED,
ten_cua_hang NVARCHAR(15) NOT NULL,
SDT VARCHAR(10),
email VARCHAR(40),
dia_chi NVARCHAR(100),
CONSTRAINT pk_id_cua_hang PRIMARY KEY(id_cua_hang)
)
--6.tạo bảng chức vụ nhân viên
CREATE TABLE nhan_vien.chuc_vu
(
stt INT IDENTITY(1,1),
id_chuc_vu AS ISNULL('CV'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED,
ten_chuc_vu NVARCHAR(20) NOT NULL UNIQUE,
luong DECIMAL(5,0) NOT NULL,
CONSTRAINT pk_id_chuc_vu PRIMARY KEY(id_chuc_vu)
)
--7.tạo bảng về nhân viên
CREATE TABLE nhan_vien.nhan_viens
(
stt INT IDENTITY(1,1),
id_nhan_vien AS ISNULL('NV'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED,
ten_nhan_vien NVARCHAR(30) NOT NULL,
SDT VARCHAR(10),
dia_chi NVARCHAR(100),
ngay_vao_lam_viec DATE NOT NULL,
id_chuc_vu NVARCHAR(10) NOT NULL,
id_cua_hang NVARCHAR(10) NOT NULL,
id_nguoi_quan_li NVARCHAR(10),
is_dang_lam_viec BIT NOT NULL DEFAULT 1,
is_nghi_viec BIT NOT NULL DEFAULT 0,
CONSTRAINT pk_id_nhan_vien PRIMARY KEY(id_nhan_vien),
CONSTRAINT fk_id_chuc_vu FOREIGN KEY(id_chuc_vu)
REFERENCES nhan_vien.chuc_vu(id_chuc_vu) ON DELETE CASCADE ON UPDATE
CASCADE,
CONSTRAINT fk_id_cua_hang FOREIGN KEY(id_cua_hang)
REFERENCES ban_hang.cua_hang(id_cua_hang) ON DELETE CASCADE ON UPDATE
CASCADE,
CONSTRAINT fk_id_nguoi_quan_li FOREIGN KEY(id_nguoi_quan_li)
REFERENCES nhan_vien.nhan_viens(id_nhan_vien) ON DELETE NO ACTION ON
UPDATE NO ACTION,
CONSTRAINT check_ngayLamViec CHECK(ngay_vao_lam_viec <= GETDATE() )
)
--8.tạo bảng đơn nhập hàng
CREATE TABLE nhap_hang.don_nhap_hang
(
stt INT IDENTITY(1,1),
id_hoa_don_nhap AS ISNULL('HDN'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED,
id_nsx NVARCHAR(11) NOT NULL,
id_chu_kho NVARCHAR(10) NOT NULL,
ngay_nhap_hang DATE NOT NULL,
id_cua_hang NVARCHAR(10) NOT NULL,
tong_tien DECIMAL(7,0) NOT NULL DEFAULT 0,
CONSTRAINT pk_id_hoaDonNhap PRIMARY KEY(id_hoa_don_nhap),
CONSTRAINT fk_id_nsx FOREIGN KEY(id_nsx)
REFERENCES nhap_hang.nsx(id_nsx) ON DELETE CASCADE ON UPDATE
CASCADE,
CONSTRAINT fk_id_chu_kho FOREIGN KEY(id_chu_kho)
REFERENCES nhan_vien.nhan_viens(id_nhan_vien) ON DELETE CASCADE ON
UPDATE CASCADE,
CONSTRAINT fk_id_cuaHang FOREIGN KEY(id_cua_hang)
REFERENCES ban_hang.cua_hang(id_cua_hang) ON DELETE NO ACTION ON
UPDATE NO ACTION,
CONSTRAINT check_date_and_tongTien CHECK((ngay_nhap_hang<=GETDATE())
AND (tong_tien>=0))
)
--9.tạo bảng chi tiết đơn nhập hàng
CREATE TABLE nhap_hang.chi_tiet_nhap_hang
(
id_hoa_don_nhap NVARCHAR(11) NOT NULL,
id_muc INT NOT NULL,
id_xe NVARCHAR(12) NOT NULL,
gia_nhap DECIMAL(6,0) NOT NULL,
so_luong TINYINT NOT NULL,
chiet_khau DECIMAL(3,2) NOT NULL DEFAULT 0,
CONSTRAINT pk_id_hoaDonNhap_muc PRIMARY KEY(id_hoa_don_nhap,id_muc),
CONSTRAINT fk_id_hoa_don_nhap FOREIGN KEY(id_hoa_don_nhap)
REFERENCES nhap_hang.don_nhap_hang(id_hoa_don_nhap) ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_id_xe FOREIGN KEY(id_xe)
REFERENCES san_pham.xe(id_xe) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT check_soLuong_and_chieuKhau_and_giaNhap
CHECK((gia_nhap>0) AND (so_luong>0) AND (chiet_khau BETWEEN 0 AND 1))
)
--10.tạo bảng về kho hàng
CREATE TABLE san_pham.kho
(
id_cua_hang NVARCHAR(10) NOT NULL,
id_xe NVARCHAR(12) NOT NULL,
so_luong_khong_loi SMALLINT NOT NULL DEFAULT 0,
so_luong_bi_loi TINYINT NOT NULL DEFAULT 0,
CONSTRAINT pk_idCuaHang_idXe PRIMARY KEY(id_cua_hang,id_xe),
CONSTRAINT fk_id_cua_hang FOREIGN KEY(id_cua_hang)
REFERENCES ban_hang.cua_hang(id_cua_hang) ON DELETE CASCADE ON UPDATE
CASCADE,
CONSTRAINT fk_idXe FOREIGN KEY(id_xe)
REFERENCES san_pham.xe(id_xe) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT check_greater_than_0 CHECK(so_luong_khong_loi>=0 AND
so_luong_bi_loi>=0)
)
--11.tạo bảng về khách hàng
CREATE TABLE ban_hang.khach_hang
(
stt INT IDENTITY(1,1),
id_khach_hang AS ISNULL('KH'+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*')
PERSISTED,
ten_khach_hang NVARCHAR(30) NOT NULL,
SDT VARCHAR(10),
dia_chi NVARCHAR(100),
so_tien_duoc_giam DECIMAL(5,0) NOT NULL DEFAULT 0,
CONSTRAINT pk_id_khach_hang PRIMARY KEY (id_khach_hang),
CONSTRAINT check_greater_than_0 CHECK(so_tien_duoc_giam>=0)
)
--12.tạo bảng về đặt hàng
CREATE TABLE ban_hang.dat_hang
(
stt INT IDENTITY(1,1),
id_don_dat_hang AS ISNULL('DDH'+RIGHT(CAST(YEAR(ngay_dat_hang) AS
NVARCHAR(4)),2)+RIGHT('00000000'+CAST(stt as nvarchar(8)),8),'*') PERSISTED,
id_khach_hang NVARCHAR(10) NOT NULL,
ngay_dat_hang DATE NOT NULL,
ngay_giao_hang DATE,
tien_ship DECIMAL(3,0) NOT NULL DEFAULT 20,
so_tien_khach_duoc_giam DECIMAL(5,0) NOT NULL,
id_nhan_vien_ban_hang NVARCHAR(10) NOT NULL,
id_nhan_vien_giao_hang NVARCHAR(10) NOT NULL,
id_cua_hang NVARCHAR(10) NOT NULL,
tong_tien DECIMAL(8,0) NOT NULL DEFAULT 0,
is_dang_giao_hang BIT NOT NULL DEFAULT 0,
is_da_giao_hang BIT NOT NULL DEFAULT 1,
is_huy_don_hang BIT NOT NULL DEFAULT 0,
CONSTRAINT pk_id_donDatHang PRIMARY KEY(id_don_dat_hang),
CONSTRAINT fk_id_khach_hang FOREIGN KEY(id_khach_hang)
REFERENCES ban_hang.khach_hang(id_khach_hang) ON DELETE CASCADE ON
UPDATE CASCADE,
CONSTRAINT fk_id_nhan_vien_ban_hang FOREIGN KEY(id_nhan_vien_ban_hang)
REFERENCES nhan_vien.nhan_viens(id_nhan_vien) ON DELETE CASCADE ON
UPDATE CASCADE,
CONSTRAINT fk_id_nhan_vien_giao_hang FOREIGN KEY(id_nhan_vien_giao_hang)
REFERENCES nhan_vien.nhan_viens(id_nhan_vien) ON DELETE NO ACTION ON
UPDATE NO ACTION,
CONSTRAINT fk_id_cua_hang FOREIGN KEY(id_cua_hang)
REFERENCES ban_hang.cua_hang(id_cua_hang) ON DELETE NO ACTION ON
UPDATE NO ACTION,
CONSTRAINT check_date CHECK(ngay_giao_hang IS NULL OR (ngay_giao_hang IS
NOT NULL AND ngay_dat_hang
CONSTRAINT check_greater_than_0_dat_hang CHECK(tien_ship >=0)
)
--13.tạo bảng về chi tiet dat hang
CREATE TABLE ban_hang.chi_tiet_don_dat_hang
(
id_don_dat_hang NVARCHAR(13) NOT NULL,
id_muc INT NOT NULL,
id_xe NVARCHAR(12) NOT NULL,
so_luong TINYINT NOT NULL,
gia_ban DECIMAL(6,0) NOT NULL,
giam_gia DECIMAL(3,2) NOT NULL DEFAULT 0,
CONSTRAINT pk_idDonDatHang_idMuc PRIMARY KEY(id_don_dat_hang,id_muc),
CONSTRAINT fk_id_don_dat_hang FOREIGN KEY(id_don_dat_hang)
REFERENCES ban_hang.dat_hang(id_don_dat_hang) ON DELETE CASCADE ON
UPDATE CASCADE,
CONSTRAINT fk_id_xe FOREIGN KEY(id_xe)
REFERENCES san_pham.xe(id_xe) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT check_chiTietDonDatHang CHECK(so_luong>0 AND (giam_gia
BETWEEN 0 AND 1 ))
)
--14:tạo bảng đổi trả
CREATE TABLE ban_hang.doi_tra
(
id_don_dat_hang NVARCHAR(13) NOT NULL,
id_muc INT NOT NULL,
id_xe NVARCHAR(12) NOT NULL,
so_luong TINYINT NOT NULL CHECK(so_luong>0),
CONSTRAINT pk_idDonDatHang_idMuc_doi_tra PRIMARY
KEY(id_don_dat_hang,id_muc),
CONSTRAINT fk_id_don_dat_hang_doi_tra FOREIGN KEY(id_don_dat_hang)
REFERENCES ban_hang.dat_hang(id_don_dat_hang) ON DELETE CASCADE ON
UPDATE CASCADE,
CONSTRAINT fk_id_xe_doi_tra FOREIGN KEY(id_xe)
REFERENCES san_pham.xe(id_xe) ON DELETE CASCADE ON UPDATE CASCADE
)
2.3.5:Thiết lập Trigger và Insert dữ liệu vào bảng
--insert vào bảng hãng xe
SET IDENTITY_INSERT san_pham.hang_xe ON
INSERT INTO san_pham.hang_xe(stt,ten_hang) VALUES(1,'Electra'),(2,'Haro'),(3,'Heller'),
(4,'Pure Cycles'),(5,'Ritchey'),(6,'Strider'),(7,'Sun Bicycles'),(8,'Surly'),(9,'Trek')
SET IDENTITY_INSERT san_pham.hang_xe OFF
--insert vào bảng loại xe
SET IDENTITY_INSERT san_pham.loai_xe ON;
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(1,'Children Bicycles')
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(2,'Comfort Bicycles')
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(3,'Cruisers Bicycles')
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(4,'Cyclocross Bicycles')
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(5,'Electric Bikes')
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(6,'Mountain Bikes')
INSERT INTO san_pham.loai_xe(stt,ten_loai) VALUES(7,'Road Bikes')
SET IDENTITY_INSERT san_pham.loai_xe OFF;
--thiết lập insert vào bảng xe
--tạo hàm kiểm tra chỉ tồn tại một trạng thái của xe
--ví du: xe không thể vừa còn hàng lại vừa hết hàng hoặc xe vừa còn hàng lại vừa không kinh doanh