MỤC LỤC
CHƯƠNG 1: ĐẶC TẢ HỆ THỐNG....................................................................3
1.1. Mục đích, yêu cầu.......................................................................................3
1.2. Mô tả hệ thống.............................................................................................3
1.3. Đặc tả các chức năng cần xây dựng...........................................................4
CHƯƠNG 2: PHÂN TÍCH DỮ LIỆU HTHỐNG...........................................5
2.1. Mô tả hệ thống dưới dạng mối quan hệ dữ liệu.......................................5
2.2. Xây dựng mô hình liên kết thực thể..........................................................5
2.2.1. Xác định tập thực thể và thuộc tính.......................................................5
2.2.2. Xác định các mối quan hệ......................................................................5
2.3. Cách chuyển đổi từ ER sang mô hình quan hệ........................................7
2.4. Phân tích nhu cầu sử dụng thông tin........................................................8
2.5. Chuẩn hóa mô hình quan hệ......................................................................8
2.5.1. Dạng chuẩn 1NF....................................................................................8
2.5.2. Dạng chuẩn 2NF....................................................................................9
2.5.3. Dạng chuẩn 3NF...................................................................................9
2.6. Đặc tả các bảng dữ liệu.............................................................................11
CHƯƠNG 3: CÀI ĐẶT VÀ KHAI THÁC CƠ SỞ DỮ LIỆU.........................13
3.1. Cài đặt Cơ sở dữ liệu Kho hàng..............................................................13
3.1.1. Tạo cở sở dữ liệu..................................................................................13
3.1.2. Nhập dữ liệu cho các bảng...................................................................13
3.2. Khai thác cơ sở dữ liệu.............................................................................15
3.2.1. Đại số quan hệ......................................................................................15
3.2.2. Truy vấn cơ bản...................................................................................16
3.2.3. Truy vấn nâng cao................................................................................17
3.2.4. Lập trình T-SQL...................................................................................18
CHƯƠNG 4: CÀI ĐẶT ỨNG DỤNG................................................................22
4.1. Kiến trúc menu hệ thống..........................................................................22
4.2. Giao diện các chức năng...........................................................................22
4.2.1 Giao diện đăng nhập.............................................................................22
4.2.2. Giao diện Home...................................................................................23
4.2.3. Giao diện nhập hàng............................................................................23
4.2.4. Giao diện xuất hàng.............................................................................24
4.2.5. Giao diện quản lý sản phẩm.................................................................24
4.2.6. Giao diện quản lý nhà cung cấp...........................................................25
4.2.7. Giao diện quản lý đại lý.......................................................................25
4.2.8. Giao diện quản lý phiếu nhập..............................................................26
4.2.9. Giao diện chi tiết phiếu nhập...............................................................26
4.2.10. Giao diện quản lý phiếu xuất.............................................................27
4.2.11. Giao diện chi tiết phiếu xuất..............................................................27
4.2.12. Giao diện quản lý nhân viên..............................................................28
4.2.13. Giao diện thông tin nhân viên............................................................28
CHƯƠNG 1: ĐẶC TẢ HỆ THỐNG
Yêu cầu: Một kho tổng lưu trữ các sản phẩm, kho tổng này có một số nhân viên đảm
nhiệm việc nhập hàng từ nhà cung cấp về kho. Các sản phẩm được quản theo nhóm sản
phẩm, mỗi sản phẩm đều được quản lý số lượng một cách chặt chẽ. Căn cứ vào số lượng này
người quản kho tổng kế hoạch nhập hàng về kho. Kho tổng sẽ nhập hàng từ các nhà cung
cấp khác nhau. Mỗi phiếu nhập snhập nhiều mặt hàng nhưng nhập trọn vẹn từ một nhà cung
cấp.
1.1. Mục đích, yêu cầu
Trong thời buổi công nghệ số hiện nay, nhiều quy trình, công đoạn hay các hệ thống
quản trị đều được hóa vận nh bởi các thiết bị, phần mềm nhằm giúp doanh nghiệp,
cửa hàng, cơ sở kinh doanh... đạt được hiệu suất làm việc tốt nhất. Trên cơ sở đó, c hệ thống
quản trị cơ sở dữ liệu ra đời và đóng vai trò quan trọng trong xử lý và kiểm soát nguồn thông
tin. Do vậy, công tác quản lý hàng hoá là một công tác không thể thiếu của tất cả các tổ chức
về kinh tế. Thông tin về dữ liệu quản thay đổi hàng ngày, hàng giờ sổ sách không thể
cập nhật những thông tin đó một cách chính xác được. Vì vậy, xây dựng một hệ thống thông
tin quản các phiếu xuất, nhập trong các hệ thống kho hàng giúp người quản nắm bắt được
tình hình về số lượng sản phẩm xuất, nhập cũng như là số lượng sản phẩm tồn kho giúp công
tác quản lý nhanh gọn, hiệu quả hơn. Bài toán đặt ra là kho tổng A cần giảm đi công việc lưu
trữ thông tin bằng sổ sách cũng như tính toán lượng sản phẩm xuất, nhập tồn kho họ
đang quản lý.
- Thống kê số lượng hàng tồn kho.
- Mỗi sản phẩm được phân nhóm và quản lý theo mã riêng biệt.
- Thông tin về quá trình nhập hàng do nhân viên thực hiện với nhà cung cấp.
- Thông tin chi tiết về số lượng sản phẩm nhập trong từng phiếu nhập, số tiềnthanh
toán…
Yêu cầu được đề ra: xây dựng cơ sở dữ liệu cho kho tổng A về quản lý sản phẩm trong
kho một cách hiệu quả, nhanh chóng và chính xác nhất.
1.2. Mô tả hệ thống
Kho tổng A squản số lượng hàng trong kho, các sản phẩm được phân thành các
nhóm được quản theo các riêng biệt. Việc nhập hàng vào kho được giao cho các nhân
viên thực hiện với phía nhà cùng cấp. Sau mỗi lần thực hiện nhập sản phẩm, thông tin của
phiếu nhập sẽ được cập nhật vào hệ thống cơ sở dữ liệu của kho cũng như tính toán, cập nhật
những thay đổi của từng loại sản phẩm đang quản lý.
Để thiết kế cơ sở dữ liệu cho hệ thống quản kho tổng cần xác định các yêu cầu cụ thể
và mối quan hệ giữa các thực thể trong hệ thống. Dưới đây là mô tả chi tiết về các yêu cầu dữ
liệu cần xậy dựng:
- Nhà cung cấp: Thông tin về các nhà cung cấp, bao gồm tên, địa chỉ, số điện
thoại, và các thông tin khác liên quan.
- Nhóm sản phẩm: Các sản phẩm được phân nhóm để dễ dàng quản lý. Mỗi nhóm
sản phẩm cần có tên nhóm và các thuộc tính khác liên quan.
- Sản phẩm: Thông tin về sản phẩm bao gồm:
+ Tên sản phẩm.
+ Số lượng tồn kho để theo dõi tình trạng hàng trong kho.
+ Liên kết với Nhóm sản phẩm để dễ dàng phân loại.
- Nhân viên: Thông tin về các nhân viên thực hiện việc nhập hàng, bao gồm tên,
địa chỉ, số điện thoại, và các thông tin liên quan.
- Phiếu nhập hàng:
+ Mỗi lần nhập hàng từ một nhà cung cấp sẽ được ghi lại trong một phiếu nhập hàng.
Thông tin về ngày nhập hàng, nhà cung cấp, nhân viên thực hiện.
+ Liệt danh sách các sản phẩm được nhập trong mỗi phiếu nhập hàng. Ghi lại số
lượng nhập, số tiền thanh toán và các thông tin khác liên quan đến từng sản phẩm trong phiếu
nhập hàng.
Dựa vào những yêu cầu cụ thể trên ta tiến hành xây dựng mô hình dữ liệu đđáp ứng
tốt nhất cho nhu cầu quản lý kho tổng của mình.
1.3. Đặc tả các chức ng cần xây dựng
- Hệ thống phải quản chính xác số lượng sản phẩm hiện trong kho theo
từngmã sản phẩm.
- Sau khi thực hiện nhập, xuất kho hệ thống phải tự động cập nhật các thay đổi
vềsố lượng sản phẩm còn lại trong kho.
- Quản được việc xuất, nhập hàng từng nhân viên đã thực hiện, quản
thờigian xuất, nhập và số tiền thanh toán.
CHƯƠNG 2: PHÂN TÍCH DỮ LIỆU HỆ THỐNG
2.1. Mô tả hệ thống dưới dạng mối quan hệ dữ liệu
- Các sản phẩm trong kho được phân thành các nhóm sản phẩm, mỗi nhóm cónhiều
sản phẩm cùng loại. Mỗi sản phẩm chỉ thuộc một nhóm sản phẩm nhất định.
- Quá trình nhập hàng được tiến hành giữa nhân viên nhà cung cấp. Việc
nhậphàng được quản bằng các phiếu nhập. Mỗi nhân viên hoặc nhà cung cấp có thể thực
hiện nhiều phiếu nhập khác nhau nhưng trong mỗi phiếu nhập chỉ do 1 nhân viên 1 nhà
cung cấp thực hiện.
- Trong mỗi phiếu nhập, thể nhiều sản phẩm khác nhau. Mỗi sản phẩm
cũngcó thể xuất hiện trong nhiều phiếu nhập.
2.2. Xây dựng mô hình liên kết thực thể
2.2.1. Xác định tập thực thể và thuộc tính
Hình 2.1: Xác định tập thực thể và thuộc tính
2.2.2. Xác định các mối quan hệ
- Quan hệ sản phẩm nhóm sản phẩm: Một nhóm sản phẩm nhiều sản
phẩm,một sản phẩm chỉ thuộc một nhóm sản phẩm (Quan hệ 1-n).
Hình 2.2: Quan hệ san pham – nhom san pham
- Quan hệ nhân viên phiếu nhập: Một nhân viên thể thực hiện nhiều
phiếunhập, một phiếu nhập chỉ do một nhân viên thực hiện (Quan hệ 1-n).
Hình 2.3: Quan hệ nhân viên – phiếu nhập
- Quan hệ n cung cấp phiếu nhập: Một nhà cung cấp thể thực hiện
nhiềuphiếu nhập, một phiếu nhập chỉ do một nhà cung cấp thực hiện (Quan hệ 1-n).
Hình 2.3: Quan hệ nhà cung cấp – phiếu nhập
- Quan hệ phiếu nhập sản phẩm: một phiếu nhập thể nhiều sản phẩm,
mộtsản phẩm có thể có mặt trong nhiều phiếu nhập (quan hệ n-n).
Hình 2.4: Quan hệ nhà phiếu nhập – sản phẩm
Sau khi xác định đầy đủ các mối quan hệ ta thu được mô hình liên kết thực thể:
Hình 2.5: Mô hình liên kết thực thể thu được 2.3.
Cách chuyển đổi từ ER sang mô hình quan hệ Thực hiện việc
chuyển đổi theo các quy tắc:
Quy tắc 1: Với kiểu liên kết 1:1
* Cách 1: Chuyển khóa chính của LĐQH này sang làm khóa ngoại của LĐQH kia
hoặc ngược lại.
* Cách 2: Nhập 2 kiểu thực thể và mối liên kết thành 1 LĐQH, chọn khóa chính
cho phù hợp.
- Trong các mối quan hệ đã xác định theo yêu cầu không có kiểu liên kết 1:1.
Quy tắc 2: Với kiểu liên kết 1:n
Chuyển khóa chính của LĐQH bên 1 (cha) sang làm khóa ngoại của LĐQH bên nhiều
(con).
- Quan hệ SanPham NhomSanPham: Ta chọn nhóm của nhóm sản phẩm
làm khóa ngoại cho sản phẩm. Các lược đồ quan hệ thu được:
+ NhomSanPham(MaNhom, TenNhom)
+ SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
- Quan hệ NhanVien PhieuNhap: Ta chọn nhân viên của nhân viên làm
khóa ngoại cho phiếu nhập.
- Quan hệ NhaCungCap PhieuNhap: Ta chọn công ty của nhà cung cấp
làm khóa ngoại cho phiếu nhập. Các lược đồ quan hệ thu được:
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi)
+ NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
+ PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Quy tắc 3: Với kiểu liên kết n:n
Chuyển mối liên kết thành một LĐQH thuộc tính thuộc tính của mối liên kết, thêm
các thuộc tính khóa chính của các LĐQH có liên quan, khóa chính của LĐQH mới này là các
thuộc tính mới thêm vào.
- Quan hệ SanPham – PhieuNhap: Ta tạo ra lược đồ quan hệ chi tiết phiếu nhập
với khóa chính là mã phiếu nhập và mã sản phẩm . Ta thu được lược đồ quan hệ:
+ ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap)
2.4. Phân tích nhu cầu sử dụng thông tin
- Để đảm bảo về vấn đbảo mật, phân quyền cụ thể cho từng nhân viên, tronglược
đồ quan hệ nhân viên ta bổ sung thêm các thuộc tính mật khẩu và quản lý.
- Để thuận tiện cho việc thống kê tiền nhập hàng ta thêm thuộc tính thành tiền
vàolược đồ chi tiết phiếu nhập.
* Sau khi phân tích ta thu được mô hình quan hệ:
- NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
- NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
- NhomSanPham(MaNhom, TenNhom)
- SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
- PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
- ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien).
2.5. Chuẩn hóa mô hình quan hệ
2.5.1. Dạng chuẩn 1NF
* Tất cả các thuộc tính chỉ chứa giá trị nguyên tố.
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
Không cần điều chỉnh, các thuộc tính chỉ chứa giá trị nguyên tố. +
NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố.
+ NhomSanPham(MaNhom, TenNhom)
Không cần điều chỉnh, các thuộc tính chỉ chứa giá trị nguyên tố. +
SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
Không cần điều chỉnh, các thuộc tính chỉ chứa giá trị nguyên tố. +
PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố.
+ ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien) Không
cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố.
2.5.2. Dạng chuẩn 2NF
* Mỗi bảng cần chuẩn hóa dạng 1NF. Tất cả các thuộc tính không khoá phụ thuộc
hàm đầy đủ vào khoá chính
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
Không cần điều chỉnh, vì MaNV là khóa chính và các thuộc tính còn lại phụ thuộc hàm
đầy đủ vào khóa chính.
+ NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
Không cần điều chỉnh, vì MaCongTy là khóa chính và các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ NhomSanPham(MaNhom, TenNhom)
Không cần điều chỉnh, MaNhom khóa chính các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
Không cần điều chỉnh, MaSanPham khóa chính các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Không cần điều chỉnh, MaPhieu khóa chính các thuộc tính còn lại phthuộc
hàm đầy đủ vào khóa chính.
+ ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien)
Không cần điều chỉnh, (MaPhieuNhap, MaSanPham) khóa chính các thuộc tính
còn lại phụ thuộc hàm đầy đủ vào khóa chính.
2.5.3. Dạng chuẩn 3NF
* Mỗi bảng cần chuẩn hóa dạng 2NF. Mọi thuộc tính không khoá đều không ph
thuộc bắc cầu vào khoá chính.
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính.
+ NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
Không cần điều chỉnh, không thuộc tính phụ thuộc bắc cầu vào khóa chính. +
NhomSanPham(MaNhom, TenNhom)
Không cần điều chỉnh, không thuộc tính phụ thuộc bắc cầu vào khóa chính. +
SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
Không cần điều chỉnh, không thuộc tính phụ thuộc bắc cầu vào khóa chính. +
PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. +
ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien) Không
cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. - Sau khi
chuẩn hóa ta thu được mô hình quan hệ sau:
Hình 2.6: Mô hình quan hệ thu được
2.6. Đặc tả các bảng dữ liệu
Các bảng dữ liệu đã xây dựng:
Bảng NhaCungCap: Lưu thông tin của công ty cung cấp sản phẩm.
Thuộc tính
Kiểu dữ liệu
Độ dài
Mô tả
Ghi chú
MaCongTy
char
10
Mã công ty
Khóa chính
TenCongTy
nvarchar
50
Tên công ty
SDT
char
20
SĐT công ty
DiaChi
nvarchar
100
Địa chỉ công ty
Bảng NhomSanPham: Lưu thông tin về các nhóm sản phẩm.
Thuộc tính
Kiểu dữ liệu
Độ dài
Mô tả
Ghi chú
MaNhom
char
10
Mã nhóm SP
Khóa chính
TenNhom
nvarchar
50
Tên nhóm SP
Bảng SanPham: Lưu thông tin của từng sản phẩm và phân nhóm sản phẩm.
Thuộc tính
Kiểu dữ liệu
Độ dài
Mô tả
Ghi chú
MaSanPham
char
10
Mã sản phẩm
Khóa chính
TenSanPham
nvarchar
50
Tên sản phẩm
SoLuong
int
Số lượng tồn
kho
MaNhom
nvarchar
100
Mã nhóm SP
Khóa ngoại
Bảng NhanVien:u thông tin cá nhân của từng nhân viên.
Thuộc tính
Kiểu dữ liệu
Độ dài
Mô tả
Ghi chú
MaNV
char
10
Mã nhân viên
Khóa chính
HoVaTen
nvarchar
50
Họ tên
SDT
char
20
SĐT NV
DiaChi
nvarchar
100
Địa chỉ NV
MatKhau
varchar
20
Mật khẩu
QuanLy
int
Phân quyền
NV
Bảng PhieuNhap: Lưu các thông tin về phiếu nhập. Mỗi phiếu nhập do 01 nhân viên
và 01 nhà cung cấp thực hiện.
Thuộc tính
Kiểu dữ liệu
Độ dài
Ghi chú
MaPhieu
char
10
Khóa chính
ThoiGian
date
MaNV
char
10
Khóa ngoại
MaCongTy
char
10
Khóa ngoại
Bảng ChiTietPhieuNhap: Lưu các thông tin chi tiết về các sản phẩm trong phiếu
nhập. Mỗi phiếu nhập có thể bao gồm nhiều sản phẩm.
Thuộc tính
Kiểu dữ liệu
Độ dài
Mô tả
Ghi chú
MaPhieuNhap
char
10
Mã phiếu nhập
Khóa chính
MaSanPham
date
10
Mã sản phẩm
Khóa chính
SoLuongNhap
int
Số lượng nhập
ThanhTien
float
Tiền nhập SP
CHƯƠNG 3: CÀI ĐẶT VÀ KHAI THÁC CƠ SỞ DỮ LIỆU
3.1. Cài đặt Cơ sở dữ liệu Kho hàng
3.1.1. Tạo cở sở dữ liệu
-- Tạo database KhoHang
CREATE DATABASE KhoHang
GO
USE KhoHang
GO
-- Tạo bang NhanVien
CREATE TABLE NhanVien (
MaNV NVARCHAR(50) PRIMARY KEY,
HoVaTen NVARCHAR(100),
SDT NVARCHAR(20),
DiaChi NVARCHAR(100),
MatKhau VARCHAR(20),
QuanLy INT
);
GO
-- Tạo bang NhaCungCap
CREATE TABLE NhaCungCap (
MaCongTy CHAR(10) PRIMARY KEY,
TenCongTy NVARCHAR(100),
SDT NVARCHAR(20),
DiaChi NVARCHAR(100)
);
GO
-- Tạo bang NhomSanPham
CREATE TABLE NhomSanPham (
MaNhom CHAR(10) PRIMARY KEY,
TenNhom NVARCHAR(100)
);
GO
-- Tạo bang SanPham
CREATE TABLE SanPham (
MaSanPham CHAR(10) PRIMARY KEY,
TenSanPham NVARCHAR(100),
SoLuong INT,
MaNhom CHAR(10),
FOREIGN KEY (MaNhom) REFERENCES NhomSanPham(MaNhom)
);
GO
-- Tạo bang PhieuNhap
CREATE TABLE PhieuNhap (
MaPhieu CHAR(20) PRIMARY KEY,
ThoiGian DATETIME,
MaNV NVARCHAR(50),
MaCongTy CHAR(10),
FOREIGN KEY (MaNV) REFERENCES NhanVien(MaNV),
FOREIGN KEY (MaCongTy) REFERENCES NhaCungCap(MaCongTy));
GO
-- Tạo bang ChiTietPhieuNhap
CREATE TABLE ChiTietPhieuNhap (
MaPhieu CHAR(20),
MaSanPham CHAR(10),
SoLuongNhap INT, ThanhTien
FLOAT,
PRIMARY KEY (MaPhieu, MaSanPham),
FOREIGN KEY (MaPhieu) REFERENCES PhieuNhap(MaPhieu),
FOREIGN KEY (MaSanPham) REFERENCES SanPham(MaSanPham));
3.1.2. Nhập dữ liệu cho các bảng
-- Thêm dữ liệu bang NhanVien
INSERT INTO NhanVien (MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
VALUES
('NV001', N'Nguyê7n Trọng Đạt', '0123456789', N'Hà Nội', '%Co050296', 1),
('NV002', N'TrầEn Thị Bình', '0987654321', N'Hà Nội', '123456', 0),
('NV003', N'Lê Văn ChiêIn', '0369852147', N'Hà Nội', 'qwerty', 0),
('NV004', N'Phạm Thị Dung', '0321478963', N'Vĩnh Phúc', '123456', 0),
('NV005', N'Hoàng Văn Minh', '0157986423', N'Nam Định', 'abcdef', 0), GO
-- Thêm dữ liệu bang NhaCungCap
INSERT INTO NhaCungCap (MaCongTy, TenCongTy, SDT, DiaChi) VALUES
('NCC001', N'Vinamilk', '0123456789', 'BăIc Giang'),
('NCC002', N'Coca-Cola Việt Nam', '0451236789', 'HồE Chí Minh'),
('NCC003', N'Libby Việt Nam', '0369871234', 'Bình Dương'),
('NCC004', N'Acecook Việt Nam', '0321654978', 'HồE Chí Minh'),
('NCC005', N'Knorr Việt Nam', '0451236789', 'ĐồEng Nai'),
('NCC006', N'Cồng ty Cồ phầEn Nồng san Việt Nam', '0912345678', 'Hà Nội'),
('NCC007', N'Cồng ty Cồ phầEn XuầIt khầu RồEng Việt', '0369876543', 'TiêEn Giang'),
GO
-- Thêm dữ liệu bang NhomSanPham
INSERT INTO NhomSanPham (MaNhom, TenNhom)
VALUES
('NH001', N'Sữa'),
('NH002', N'ĐồE uồIng'),
('NH003', N'ĐồE hộp'), ('NH004',
N'Mì gói'),
('NH005', N'Gia vị'),
('NH006', N'Rau cu qua'),
('NH007', N'Trái cầy'),
('NH008', N'Thực phầm khồ'),
('NH009', N'ĐồE dùng nhà bêIp'),
('NH010', N'Hóa phầm tầy rưa');
GO
-- Thêm dữ liệu bang SanPham
INSERT INTO SanPham (MaSanPham, TenSanPham, SoLuong, MaNhom)
VALUES
('SP001', N'Sữa tươi Vinamilk', 100, 'NH001'),
('SP002', N'Nước ngọt Coca-Cola', 150, 'NH002'),
('SP003', N'Hộp cá ngừ ngầm dầEu', 80, 'NH003'),
('SP004', N'Mì gói Acecook', 120, 'NH004'),
('SP005', N'Nước măIm Maggi', 50, 'NH005'),
('SP006', N'Cà chua', 100, 'NH006'),
('SP007', N'Cam sành', 200, 'NH007'),
('SP008', N'Mộc nhĩ', 30, 'NH008'),
('SP009', N'Chao chồIng dính', 20, 'NH009'),
('SP010', N'Nước lau sàn Vim', 15, 'NH010');
GO
-- Thêm dữ liệu bang PhieuNhap
INSERT INTO PhieuNhap (MaPhieu, ThoiGian, MaNV, MaCongTy)
VALUES
('PN001', '2024-03-01', 'NV001', 'NCC001'),
('PN002', '2024-03-05', 'NV002', 'NCC002'),
('PN003', '2024-03-08', 'NV003', 'NCC003'),
('PN004', '2024-03-10', 'NV004', 'NCC004'),
('PN005', '2024-03-12', 'NV005', 'NCC005'),
GO
-- Thêm dữ liệu bang ChiTietPhieuNhap
INSERT INTO ChiTietPhieuNhap (MaPhieu, MaSanPham, SoLuongNhap, ThanhTien)
VALUES
('PN001', 'SP001', 50, 250000),
('PN002', 'SP002', 30, 120000),
('PN003', 'SP003', 40, 160000),
('PN004', 'SP004', 60, 108000),
('PN005', 'SP005', 25, 75000),
Hình 3.1: Mô hình dữ liệu (Diagram)
3.2. Khai thác cơ sở dữ liệu
3.2.1. Đại số quan hệ
* Cho biếtsố nhân viên hoặc số nhà cung cấp được quản trong Database
của kho tổng
- Quan hệ: NhanVien, NhaCungCap
KQ
MaNV
(NhanVien) v
MaCongTy
(NhaCungCap)
* Tìm thông tin các nhà cung cấp đã từng cung cấp hàng cho cả 2 nhân viên A, B
(A, B đại diện cho Họ và tên của 2 nhân viên)
- Quan hệ: NhanVien, NhaCungCap, PhieuNhap
NhanVien_A
MaNV
(
NhanVien.HovaTen=A
(NhanVien)) (Lấy mã số nhân viên A) NhanVien_B
MaNV
(
NhanVien.HovaTen=B
(NhanVien)) (Lấy mã số nhân viên B)
PN_A PhieuNhap ►◄
MaNV = MaNV
(NhanVien_A) (Các phiếu nhập của A)
PN_B PhieuNhap ►◄
MaNV = MaNV
(NhanVien_B) (Các phiếu nhập của B)
C
MaCongTy
(PN_A) ^
MaCongTy
(PN_B) (MaCongTy A, B cùng lấy hàng)
KQ NhaCungCap ►◄ C
* Cho biết các thông tin chi tiết của sản phẩm số lượng nhập lớn nhất (chỉ xét
trong các bộ của quan hệ ChiTietPhieuNhap, không tính tổng số lượng nhập của các sản
phẩm có cùng MaSanPham).
- Quan hệ: ChiTietPhieuNhap
B1
SoLuongNhap
(ChiTietPhieuNhap) (Lấy số lượng nhập của các bộ trong quan hệ)
B2 ChiTietPhieuNhap x B1 (Tạo ra một quan hệ mới để so sánh)
B3 ChiTietPhieuNhap.SoLuongNhap < B1.SoLuongNhap(B2)
B4 ChiTietPhieuNhap.SoLuongNhap(B3)
B5 B1 – B4 (Phép trừ) (B3, B4, B5 tìm ra số lượng nhập lớn nhất)
KQ ChiTietPhieuNhap ►◄ B5
3.2.2. Truy vấn cơ bản
--1.LầIy tầIt ca thồng tin cua bang NhanVien
SELECT * FROM NhanVien;
--2.LầIy thồng tin các nhần viên có địa chỉ ơ Hà Nội
SELECT * FROM NhanVien WHERE DiaChi LIKE N'%Hà Nội%';
--3.LầIy thồng tin các nhà cung cầIp ơ HồE Chí Minh
SELECT * FROM NhaCungCap WHERE DiaChi LIKE N'%HồE Chí Minh%';
--4.LầIy thồng tin những nhần viên là quan lý
SELECT * FROM NhanVien WHERE QuanLy = 1;
--5.LầIy thồng tin các nhần viên theo thứ tự địa chỉ
SELECT * FROM NhanVien ORDER BY DiaChi ASC;
--6.LầIy tên san phầm theo từng nhóm san phầm
SELECT TenNhom, TenSanPham FROM SanPham
JOIN NhomSanPham ON SanPham.MaNhom = NhomSanPham.MaNhom ORDER BY
TenNhom;
--7.ĐêIm sồI lượng các san phầm trong từng nhóm san phầm
SELECT TenNhom, COUNT(*) AS SoLuongSanPham FROM SanPham
JOIN NhomSanPham ON NhomSanPham.MaNhom = SanPham.MaNhom
GROUP BY TenNhom
ORDER BY SoLuongSanPham DESC;
--8.LầIy danh sách tên những san phầm được nhập vào bơi nhần viên có mã là 'NV001'
SELECT DISTINCT TenSanPham FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
WHERE MaNV = 'NV001';
--9.LầIy thồng tin các san phầm có giá trị nhập hàng từ 100,000 VNĐ đêIn 200,000 VNĐ
SELECT MaPhieu, SanPham.MaSanPham, TenSanPham, SoLuong, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
WHERE ThanhTien BETWEEN 100000 AND 200000;
--10.LầIy thồng tin các san phầm có sồI lượng tồEn kho lớn nhầIt
SELECT * FROM SanPham
WHERE SoLuong = (SELECT MAX(SoLuong) FROM SanPham);
--11.LầIy thồng tin các san phầm có sồI lượng tồEn kho nho nhầIt
SELECT * FROM SanPham
WHERE SoLuong = (SELECT MIN(SoLuong) FROM SanPham);
--12.LầIy thồng tin các san phầm có tên chứa từ 'Mì' hoặc 'Nước măIm'
SELECT * FROM SanPham WHERE TenSanPham LIKE N'%Mì%' OR TenSanPham LIKE N'%Nước măIm
%';
--13.LầIy thồng tin các san phầm thuộc nhóm 'Sữa'
SELECT SanPham.MaNhom, TenSanPhaM, SoLuong FROM SanPham
JOIN NhomSanPham ON SanPham.MaNhom = NhomSanPham.MaNhom WHERE
TenNhom LIKE N'Sữa';
--14.LầIy thồng tin san phầm có giá trị nhập hàng cao nhầIt
SELECT MaPhieu, SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
WHERE ThanhTien = (SELECT MAX(ThanhTien) FROM ChiTietPhieuNhap);
--15.LầIy thồng tin san phầm có giá trị nhập hàng thầIp nhầIt
SELECT MaPhieu, SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
WHERE ThanhTien = (SELECT MIN(ThanhTien) FROM ChiTietPhieuNhap);
--16.LầIy tên những san phầm được nhập vào từ nhà cung cầIp 'Vinamilk' hoặc 'Coca-Cola
Việt
Nam'
SELECT TenSanPham FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
JOIN NhaCungCap ON PhieuNhap.MaCongTy = NhaCungCap.MaCongTy WHERE
TenCongTy IN ('Vinamilk', N'Coca-Cola Việt Nam');
--17.LầIy thồng tin các san phầm có sồI lượng tồEn kho giữa 10 và 50
SELECT * FROM SanPham
WHERE SoLuong BETWEEN 10 AND 50;
--18.LầIy thồng tin các san phầm có sồI lượng tồEn kho nho hơn 10 hoặc lớn hơn 50
SELECT * FROM SanPham
WHERE SoLuong < 10 OR SoLuong > 50;
--19.LầIy thồng tin các san phầm được nhập trong tháng 2/2024
SELECT SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThoiGian, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu WHERE
YEAR(ThoiGian) = 2024 AND MONTH(ThoiGian) = 2;
--20.LầIy thồng tin các san phầm được nhập từ 15-20/3/2024
SELECT SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThoiGian, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
WHERE YEAR(ThoiGian) = 2024 AND MONTH(ThoiGian) = 3 AND DAY(ThoiGian) BETWEEN 15 AND
20;
3.2.3. Truy vấn nâng cao
--21.Tính tồng giá trị nhập hàng từng ngày
SELECT ThoiGian, SUM(ThanhTien) AS TongGiaTriNhap
FROM PhieuNhap JOIN ChiTietPhieuNhap ON PhieuNhap.MaPhieu = ChiTietPhieuNhap.MaPhieu
GROUP BY ThoiGian;
--22.Tính đơn giá cua mồ7i san phầm trong từng phiêIu nhập
SELECT MaPhieu, SanPham.MaSanPham, (ThanhTien/SoLuongNhap) AS DonGia
FROM SanPham JOIN ChiTietPhieuNhap ON SanPham.MaSanPham =
ChiTietPhieuNhap.MaSanPham;
--23.SăIp xêIp các nhà cung cầIp theo thứ tự giam dầEn sồI lượng phiêIu nhập
SELECT TenCongTy, COUNT(MaPhieu) SoPhieuNhap
FROM NhaCungCap JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
GROUP BY TenCongTy
ORDER BY SoPhieuNhap DESC;
--24.Tính trung bình tiêEn nhập hàng trên mồ7i phiêIu nhập trong tháng 2/2024
SELECT SUM(ThanhTien)/COUNT(DISTINCT PhieuNhap.MaPhieu) AS TrungBinh
FROM ChiTietPhieuNhap JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
WHERE YEAR(ThoiGian) = 2024 AND MONTH(ThoiGian) = 2;
--25.Tính trung bình tiêEn nhập hàng trên mồ7i phiêIu nhập trong các ngày có nhập hàng
SELECT ThoiGian, SUM(ThanhTien)/COUNT(DISTINCT PhieuNhap.MaPhieu) AS TrungBinh
FROM ChiTietPhieuNhap JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
GROUP BY ThoiGian;
--26.LầIy thồng tin các san phầm có sồI lượng tồEn kho lớn hơn 50 và thuộc nhóm san phầm
'Sữa'
SELECT * FROM SanPham
WHERE SoLuong > 50 AND MaNhom = (SELECT MaNhom FROM NhomSanPham WHERE TenNhom =
N'Sữa');
--27.LầIy tên các nhà cung cầIp có sồI lượng phiêIu nhập lớn hơn 1
SELECT TenCongTy
FROM (
SELECT TenCongTy, COUNT(MaPhieu) AS SoPhieuNhap
FROM NhaCungCap JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
GROUP BY TenCongTy ) AS
SubQuery
WHERE SoPhieuNhap > 1;
--28.LầIy thồng tin nhần viên có nhiêEu phiêIu nhập nhầIt
SELECT MaNV, HoVaTen, DiaChi, SoPhieuNhap
FROM (
SELECT NhanVien.MaNV, HoVaTen, DiaChi, COUNT(MaPhieu) AS SoPhieuNhap
FROM NhanVien JOIN PhieuNhap ON NhanVien.MaNV = PhieuNhap.MaNV GROUP BY
NhanVien.MaNV, HoVaTen, DiaChi
) AS SubQuery
WHERE SoPhieuNhap = (
SELECT MAX(SoPhieuNhap)
FROM (
SELECT MaNV, COUNT(MaPhieu) AS SoPhieuNhap
FROM PhieuNhap
GROUP BY MaNV
) AS SubQuery
);
--29.LầIy tên san phầm có trong nhiêEu phiêIu nhập nhầIt
SELECT TenSanPham
FROM (
SELECT TenSanPham, COUNT(MaPhieu) AS SoPhieuNhap
FROM SanPham JOIN ChiTietPhieuNhap ON SanPham.MaSanPham =
ChiTietPhieuNhap.MaSanPham
GROUP BY TenSanPham
) AS SubQuery
WHERE SoPhieuNhap = (
SELECT MAX(SoPhieuNhap)
FROM (
SELECT MaSanPham, COUNT(MaPhieu) AS SoPhieuNhap
FROM ChiTietPhieuNhap
GROUP BY MaSanPham
) AS SubQuery
);
--30.LầIy thồng tin các nhà cung cầIp có tồng giá trị nhập hàng lớn nhầIt
SELECT TenCongTy, TongTienNhapHang
FROM (
SELECT TenCongTy, SUM(ThanhTien) AS TongTienNhapHang FROM NhaCungCap
JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
JOIN ChiTietPhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
GROUP BY TenCongTy ) AS SubQuery
WHERE TongTienNhapHang = (
SELECT MAX(TongTienNhapHang)
FROM (
SELECT TenCongTy, SUM(ThanhTien) AS TongTienNhapHang FROM NhaCungCap
JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
JOIN ChiTietPhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
GROUP BY TenCongTy ) AS SubQuery
);
3.2.4. Lập trình T-SQL
--31.LầIy thồng tin san phầm bằng cách sư dụng cursor
DECLARE @MaNhom VARCHAR(20);
DECLARE @TenNhom NVARCHAR(100);
DECLARE @MaSanPham NVARCHAR(20);
DECLARE @TenSanPham NCHAR(25);
DECLARE @SoLuong INT;
DECLARE list_sp CURSOR FOR
SELECT MaSanPham, TenSanPham, SoLuong, MaNhom
FROM SanPham
OPEN list_sp
FETCH NEXT FROM list_sp INTO @MaSanPham, @TenSanPham, @SoLuong, @MaNhom WHILE
@@FETCH_STATUS = 0
BEGIN
SELECT @TenNhom = TenNhom FROM NhomSanPham WHERE @MaNhom = MaNhom
PRINT @MaSanPham + ' ' + @TenSanPham + CAST(@SoLuong AS NCHAR(10)) + @TenNhom FETCH
NEXT FROM list_sp INTO @MaSanPham, @TenSanPham, @SoLuong, @MaNhom END
CLOSE list_sp
DEALLOCATE list_sp;
--32.Cập nhật sồI lượng san phầm trong mồ7i nhóm san phầm
DECLARE @SoLuong INT
DECLARE @MaNhom VARCHAR(10)
DECLARE Nhom CURSOR FOR SELECT
MaNhom, COUNT(*)
FROM SanPham
GROUP BY MaNhom
OPEN Nhom
FETCH NEXT FROM Nhom INTO @MaNhom, @SoLuong
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE NhomSanPham SET SoLuong = @SoLuong
WHERE @MaNhom = MaNhom
FETCH NEXT FROM Nhom INTO @MaNhom, @SoLuong
END
CLOSE Nhom
DEALLOCATE Nhom;
--33.Thu tục lọc san phầm theo nhóm san phầm
CREATE PROCEDURE LocSanPham @MaNhom VARCHAR(20) AS
BEGIN
SELECT *
FROM SanPham
WHERE MaNhom = @MaNhom
END;
--34.Tìm kiêIm san phầm theo tên
CREATE PROCEDURE TimKiemSanPham @search NVARCHAR(50) AS BEGIN
SELECT *
FROM SanPham
WHERE TenSanPham LIKE '%' + @search + '%';
END;
--35.Thu tục tìm kiêIm thồng tin nhần viên theo tên, hoặc theo mã nhần viên
CREATE PROCEDURE TimKiemNhanVien @search NVARCHAR(50) AS BEGIN
SELECT *
FROM NhanVien
WHERE MaNV LIKE @search OR HoVaTen LIKE '%' + @search + '%';
END;
--36.Thu tục tìm kiêIm thồng tin phiêIu nhập theo ngày
CREATE PROCEDURE TimKiemPhieuNhap_1 @Date DATE AS
BEGIN
SELECT MaPhieu, HoVaTen, TenCongTy, ThoiGian
FROM PhieuNhap
INNER JOIN NhanVien ON PhieuNhap.MaNV = NhanVien.MaNV
INNER JOIN NhaCungCap ON PhieuNhap.MaCongTy = NhaCungCap.MaCongTy
WHERE ThoiGian = @Date;
END;
--37.Thu tục tìm kiêIm thồng tin phiêIu nhập theo khoang thời gian
CREATE PROCEDURE TimKiemPhieuNhap_2 @From DATE, @To DATE
AS
BEGIN
SELECT MaPhieu, HoVaTen, TenCongTy, ThoiGian
FROM PhieuNhap
INNER JOIN NhanVien ON PhieuNhap.MaNV = NhanVien.MaNV
INNER JOIN NhaCungCap ON PhieuNhap.MaCongTy = NhaCungCap.MaCongTy
WHERE ThoiGian BETWEEN @From AND @To
END;
--38.Thu tục tìm kiêIm thồng tin chi tiêIt phiêIu nhập theo mã phiêIu nhập CREATE
PROCEDURE ChiTiet @MaPhieu VARCHAR(20)
AS
BEGIN
SELECT MaPhieu, TenSanPham, SoluongNhap, ThanhTien
FROM ChiTietPhieuNhap
INNER JOIN SanPham ON ChiTietPhieuNhap.MaSanPham = SanPham.MaSanPham
WHERE MaPhieu = @MaPhieu;
END;
--39.Function đầEu vào mã phiêIu nhập, đầEu ra các chi tiêIt phiêIu nhập cua phiêIu nhập
đó
CREATE FUNCTION ThongKeSanPham (@MaPhieu VARCHAR(20))
RETURNS TABLE
AS RETURN (
SELECT TenSanPham, ThoiGian, SoLuongNhap, ThanhTien, TenCongTy, HoVaTen
FROM ChiTietPhieuNhap
INNER JOIN SanPham ON ChiTietPhieuNhap.MaSanPham = SanPham.MaSanPham
INNER JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
INNER JOIN NhaCungCap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
INNER JOIN NhanVien ON NhanVien.MaNV = PhieuNhap.MaNV
WHERE ChiTietPhieuNhap.MaPhieu = @MaPhieu
);
--40.Function thồIng kê các phiêIu nhập trong 1 ngày hoặc các phiêIu nhập trong tháng
CREATE FUNCTION ThongKePhieuNhap (@Ngay DATE = NULL)
RETURNS TABLE
AS RETURN (
SELECT * FROM PhieuNhap
WHERE (@Ngay IS NOT NULL AND ThoiGian = @Ngay) OR (@Ngay IS NULL OR @Ngay = ''
AND YEAR(ThoiGian) = YEAR(GETDATE()) AND MONTH(ThoiGian) = MONTH(GETDATE()))
);
--41.Function đầEu vào mã phiêIu nhập, đầEu ra là sồI tiêEn phai thanh toán cho phiêIu
nhập đó

Preview text:

MỤC LỤC
CHƯƠNG 1: ĐẶC TẢ HỆ THỐNG....................................................................3
1.1. Mục đích, yêu cầu.......................................................................................3
1.2. Mô tả hệ thống.............................................................................................3
1.3. Đặc tả các chức năng cần xây dựng...........................................................4
CHƯƠNG 2: PHÂN TÍCH DỮ LIỆU HỆ THỐNG...........................................5
2.1. Mô tả hệ thống dưới dạng mối quan hệ dữ liệu.......................................5
2.2. Xây dựng mô hình liên kết thực thể..........................................................5
2.2.1. Xác định tập thực thể và thuộc tính.......................................................5
2.2.2. Xác định các mối quan hệ......................................................................5
2.3. Cách chuyển đổi từ ER sang mô hình quan hệ........................................7
2.4. Phân tích nhu cầu sử dụng thông tin........................................................8
2.5. Chuẩn hóa mô hình quan hệ......................................................................8
2.5.1. Dạng chuẩn 1NF....................................................................................8
2.5.2. Dạng chuẩn 2NF....................................................................................9
2.5.3. Dạng chuẩn 3NF...................................................................................9
2.6. Đặc tả các bảng dữ liệu.............................................................................11
CHƯƠNG 3: CÀI ĐẶT VÀ KHAI THÁC CƠ SỞ DỮ LIỆU.........................13
3.1. Cài đặt Cơ sở dữ liệu Kho hàng..............................................................13
3.1.1. Tạo cở sở dữ liệu..................................................................................13
3.1.2. Nhập dữ liệu cho các bảng...................................................................13
3.2. Khai thác cơ sở dữ liệu.............................................................................15
3.2.1. Đại số quan hệ......................................................................................15
3.2.2. Truy vấn cơ bản...................................................................................16
3.2.3. Truy vấn nâng cao................................................................................17
3.2.4. Lập trình T-SQL...................................................................................18
CHƯƠNG 4: CÀI ĐẶT ỨNG DỤNG................................................................22
4.1. Kiến trúc menu hệ thống..........................................................................22
4.2. Giao diện các chức năng...........................................................................22
4.2.1 Giao diện đăng nhập.............................................................................22
4.2.2. Giao diện Home...................................................................................23
4.2.3. Giao diện nhập hàng............................................................................23
4.2.4. Giao diện xuất hàng.............................................................................24
4.2.5. Giao diện quản lý sản phẩm.................................................................24
4.2.6. Giao diện quản lý nhà cung cấp...........................................................25
4.2.7. Giao diện quản lý đại lý.......................................................................25
4.2.8. Giao diện quản lý phiếu nhập..............................................................26
4.2.9. Giao diện chi tiết phiếu nhập...............................................................26
4.2.10. Giao diện quản lý phiếu xuất.............................................................27
4.2.11. Giao diện chi tiết phiếu xuất..............................................................27
4.2.12. Giao diện quản lý nhân viên..............................................................28
4.2.13. Giao diện thông tin nhân viên............................................................28
CHƯƠNG 1: ĐẶC TẢ HỆ THỐNG
Yêu cầu: Một kho tổng lưu trữ các sản phẩm, kho tổng này có một số nhân viên đảm
nhiệm việc nhập hàng từ nhà cung cấp về kho. Các sản phẩm được quản lý theo nhóm sản
phẩm, mỗi sản phẩm đều được quản lý số lượng một cách chặt chẽ. Căn cứ vào số lượng này
người quản lý kho tổng có kế hoạch nhập hàng về kho. Kho tổng sẽ nhập hàng từ các nhà cung
cấp khác nhau. Mỗi phiếu nhập sẽ nhập nhiều mặt hàng nhưng nhập trọn vẹn từ một nhà cung cấp.
1.1. Mục đích, yêu cầu
Trong thời buổi công nghệ số hiện nay, nhiều quy trình, công đoạn hay các hệ thống
quản trị đều được mã hóa và vận hành bởi các thiết bị, phần mềm nhằm giúp doanh nghiệp,
cửa hàng, cơ sở kinh doanh... đạt được hiệu suất làm việc tốt nhất. Trên cơ sở đó, các hệ thống
quản trị cơ sở dữ liệu ra đời và đóng vai trò quan trọng trong xử lý và kiểm soát nguồn thông
tin. Do vậy, công tác quản lý hàng hoá là một công tác không thể thiếu của tất cả các tổ chức
về kinh tế. Thông tin về dữ liệu quản lý thay đổi hàng ngày, hàng giờ mà sổ sách không thể
cập nhật những thông tin đó một cách chính xác được. Vì vậy, xây dựng một hệ thống thông
tin quản lý các phiếu xuất, nhập trong các hệ thống kho hàng giúp người quản lý nắm bắt được
tình hình về số lượng sản phẩm xuất, nhập cũng như là số lượng sản phẩm tồn kho giúp công
tác quản lý nhanh gọn, hiệu quả hơn. Bài toán đặt ra là kho tổng A cần giảm đi công việc lưu
trữ thông tin bằng sổ sách cũng như tính toán lượng sản phẩm xuất, nhập và tồn kho mà họ đang quản lý. -
Thống kê số lượng hàng tồn kho. -
Mỗi sản phẩm được phân nhóm và quản lý theo mã riêng biệt. -
Thông tin về quá trình nhập hàng do nhân viên thực hiện với nhà cung cấp. -
Thông tin chi tiết về số lượng sản phẩm nhập trong từng phiếu nhập, số tiềnthanh toán…
Yêu cầu được đề ra: xây dựng cơ sở dữ liệu cho kho tổng A về quản lý sản phẩm trong
kho một cách hiệu quả, nhanh chóng và chính xác nhất.
1.2. Mô tả hệ thống
Kho tổng A sẽ quản lý số lượng hàng trong kho, các sản phẩm được phân thành các
nhóm và được quản lý theo các mã riêng biệt. Việc nhập hàng vào kho được giao cho các nhân
viên thực hiện với phía nhà cùng cấp. Sau mỗi lần thực hiện nhập sản phẩm, thông tin của
phiếu nhập sẽ được cập nhật vào hệ thống cơ sở dữ liệu của kho cũng như tính toán, cập nhật
những thay đổi của từng loại sản phẩm đang quản lý.
Để thiết kế cơ sở dữ liệu cho hệ thống quản lý kho tổng cần xác định các yêu cầu cụ thể
và mối quan hệ giữa các thực thể trong hệ thống. Dưới đây là mô tả chi tiết về các yêu cầu dữ liệu cần xậy dựng: -
Nhà cung cấp: Thông tin về các nhà cung cấp, bao gồm tên, địa chỉ, số điện
thoại, và các thông tin khác liên quan. -
Nhóm sản phẩm: Các sản phẩm được phân nhóm để dễ dàng quản lý. Mỗi nhóm
sản phẩm cần có tên nhóm và các thuộc tính khác liên quan. -
Sản phẩm: Thông tin về sản phẩm bao gồm: + Tên sản phẩm.
+ Số lượng tồn kho để theo dõi tình trạng hàng trong kho.
+ Liên kết với Nhóm sản phẩm để dễ dàng phân loại. -
Nhân viên: Thông tin về các nhân viên thực hiện việc nhập hàng, bao gồm tên,
địa chỉ, số điện thoại, và các thông tin liên quan. -
Phiếu nhập hàng:
+ Mỗi lần nhập hàng từ một nhà cung cấp sẽ được ghi lại trong một phiếu nhập hàng.
Thông tin về ngày nhập hàng, nhà cung cấp, nhân viên thực hiện.
+ Liệt kê danh sách các sản phẩm được nhập trong mỗi phiếu nhập hàng. Ghi lại số
lượng nhập, số tiền thanh toán và các thông tin khác liên quan đến từng sản phẩm trong phiếu nhập hàng.
Dựa vào những yêu cầu cụ thể trên ta tiến hành xây dựng mô hình dữ liệu để đáp ứng
tốt nhất cho nhu cầu quản lý kho tổng của mình.
1.3. Đặc tả các chức năng cần xây dựng -
Hệ thống phải quản lý chính xác số lượng sản phẩm hiện có trong kho theo từngmã sản phẩm. -
Sau khi thực hiện nhập, xuất kho hệ thống phải tự động cập nhật các thay đổi
vềsố lượng sản phẩm còn lại trong kho. -
Quản lý được việc xuất, nhập hàng mà từng nhân viên đã thực hiện, quản lý
thờigian xuất, nhập và số tiền thanh toán.
CHƯƠNG 2: PHÂN TÍCH DỮ LIỆU HỆ THỐNG
2.1. Mô tả hệ thống dưới dạng mối quan hệ dữ liệu -
Các sản phẩm trong kho được phân thành các nhóm sản phẩm, mỗi nhóm cónhiều
sản phẩm cùng loại. Mỗi sản phẩm chỉ thuộc một nhóm sản phẩm nhất định. -
Quá trình nhập hàng được tiến hành giữa nhân viên và nhà cung cấp. Việc
nhậphàng được quản lý bằng các phiếu nhập. Mỗi nhân viên hoặc nhà cung cấp có thể thực
hiện nhiều phiếu nhập khác nhau nhưng trong mỗi phiếu nhập chỉ do 1 nhân viên và 1 nhà cung cấp thực hiện. -
Trong mỗi phiếu nhập, có thể có nhiều sản phẩm khác nhau. Mỗi sản phẩm
cũngcó thể xuất hiện trong nhiều phiếu nhập.
2.2. Xây dựng mô hình liên kết thực thể
2.2.1. Xác định tập thực thể và thuộc tính
Hình 2.1: Xác định tập thực thể và thuộc tính
2.2.2. Xác định các mối quan hệ -
Quan hệ sản phẩm – nhóm sản phẩm: Một nhóm sản phẩm có nhiều sản
phẩm,một sản phẩm chỉ thuộc một nhóm sản phẩm (Quan hệ 1-n).
Hình 2.2: Quan hệ san pham – nhom san pham -
Quan hệ nhân viên – phiếu nhập: Một nhân viên có thể thực hiện nhiều
phiếunhập, một phiếu nhập chỉ do một nhân viên thực hiện (Quan hệ 1-n).
Hình 2.3: Quan hệ nhân viên – phiếu nhập -
Quan hệ nhà cung cấp – phiếu nhập: Một nhà cung cấp có thể thực hiện
nhiềuphiếu nhập, một phiếu nhập chỉ do một nhà cung cấp thực hiện (Quan hệ 1-n).
Hình 2.3: Quan hệ nhà cung cấp – phiếu nhập -
Quan hệ phiếu nhập – sản phẩm: một phiếu nhập có thể có nhiều sản phẩm,
mộtsản phẩm có thể có mặt trong nhiều phiếu nhập (quan hệ n-n).
Hình 2.4: Quan hệ nhà phiếu nhập – sản phẩm
Sau khi xác định đầy đủ các mối quan hệ ta thu được mô hình liên kết thực thể:
Hình 2.5: Mô hình liên kết thực thể thu được 2.3.
Cách chuyển đổi từ ER sang mô hình quan hệ Thực hiện việc
chuyển đổi theo các quy tắc:
Quy tắc 1: Với kiểu liên kết 1:1 *
Cách 1: Chuyển khóa chính của LĐQH này sang làm khóa ngoại của LĐQH kia hoặc ngược lại. *
Cách 2: Nhập 2 kiểu thực thể và mối liên kết thành 1 LĐQH, chọn khóa chính cho phù hợp. -
Trong các mối quan hệ đã xác định theo yêu cầu không có kiểu liên kết 1:1.
Quy tắc 2: Với kiểu liên kết 1:n
Chuyển khóa chính của LĐQH bên 1 (cha) sang làm khóa ngoại của LĐQH bên nhiều (con). -
Quan hệ SanPham – NhomSanPham: Ta chọn mã nhóm của nhóm sản phẩm
làm khóa ngoại cho sản phẩm. Các lược đồ quan hệ thu được:
+ NhomSanPham(MaNhom, TenNhom)
+ SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom) -
Quan hệ NhanVien – PhieuNhap: Ta chọn mã nhân viên của nhân viên làm
khóa ngoại cho phiếu nhập. -
Quan hệ NhaCungCap – PhieuNhap: Ta chọn mã công ty của nhà cung cấp
làm khóa ngoại cho phiếu nhập. Các lược đồ quan hệ thu được:
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi)
+ NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
+ PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Quy tắc 3: Với kiểu liên kết n:n
Chuyển mối liên kết thành một LĐQH có thuộc tính là thuộc tính của mối liên kết, thêm
các thuộc tính khóa chính của các LĐQH có liên quan, khóa chính của LĐQH mới này là các
thuộc tính mới thêm vào. -
Quan hệ SanPham – PhieuNhap: Ta tạo ra lược đồ quan hệ chi tiết phiếu nhập
với khóa chính là mã phiếu nhập và mã sản phẩm . Ta thu được lược đồ quan hệ:
+ ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap)
2.4. Phân tích nhu cầu sử dụng thông tin -
Để đảm bảo về vấn đề bảo mật, phân quyền cụ thể cho từng nhân viên, tronglược
đồ quan hệ nhân viên ta bổ sung thêm các thuộc tính mật khẩu và quản lý. -
Để thuận tiện cho việc thống kê tiền nhập hàng ta thêm thuộc tính thành tiền
vàolược đồ chi tiết phiếu nhập.
* Sau khi phân tích ta thu được mô hình quan hệ:
- NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
- NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
- NhomSanPham(MaNhom, TenNhom)
- SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
- PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
- ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien).
2.5. Chuẩn hóa mô hình quan hệ 2.5.1. Dạng chuẩn 1NF
* Tất cả các thuộc tính chỉ chứa giá trị nguyên tố.
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố. +
NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố.
+ NhomSanPham(MaNhom, TenNhom)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố. +
SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố. +
PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Không cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố.
+ ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien) Không
cần điều chỉnh, vì các thuộc tính chỉ chứa giá trị nguyên tố. 2.5.2. Dạng chuẩn 2NF
* Mỗi bảng cần chuẩn hóa dạng 1NF. Tất cả các thuộc tính không khoá phụ thuộc
hàm đầy đủ vào khoá chính
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
Không cần điều chỉnh, vì MaNV là khóa chính và các thuộc tính còn lại phụ thuộc hàm
đầy đủ vào khóa chính.
+ NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
Không cần điều chỉnh, vì MaCongTy là khóa chính và các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ NhomSanPham(MaNhom, TenNhom)
Không cần điều chỉnh, vì MaNhom là khóa chính và các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
Không cần điều chỉnh, vì MaSanPham là khóa chính và các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Không cần điều chỉnh, vì MaPhieu là khóa chính và các thuộc tính còn lại phụ thuộc
hàm đầy đủ vào khóa chính.
+ ChiTietPhieuNhap(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien)
Không cần điều chỉnh, vì (MaPhieuNhap, MaSanPham) là khóa chính và các thuộc tính
còn lại phụ thuộc hàm đầy đủ vào khóa chính. 2.5.3. Dạng chuẩn 3NF
* Mỗi bảng cần chuẩn hóa dạng 2NF. Mọi thuộc tính không khoá đều không phụ
thuộc bắc cầu vào khoá chính.
+ NhanVien(MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính.
+ NhaCungCap(MaCongTy, TenCongTy, SDT, DiaChi)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. +
NhomSanPham(MaNhom, TenNhom)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. +
SanPham(MaSanPham, TenSanPham, SoLuong, MaNhom)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. +
PhieuNhap(MaPhieu, ThoiGian, MaNV, MaCongTy)
Không cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. +
ChiTietPhieuNhap
(MaPhieuNhap, MaSanPham, SoLuongNhap, ThanhTien)
Không
cần điều chỉnh, vì không có thuộc tính phụ thuộc bắc cầu vào khóa chính. - Sau khi
chuẩn hóa ta thu được mô hình quan hệ sau:
Hình 2.6: Mô hình quan hệ thu được
2.6. Đặc tả các bảng dữ liệu
Các bảng dữ liệu đã xây dựng:
Bảng NhaCungCap: Lưu thông tin của công ty cung cấp sản phẩm. Thuộc tính Kiểu dữ liệu Độ dài Mô tả Ghi chú MaCongTy char 10 Mã công ty Khóa chính TenCongTy nvarchar 50 Tên công ty SDT char 20 SĐT công ty DiaChi nvarchar 100 Địa chỉ công ty
Bảng NhomSanPham: Lưu thông tin về các nhóm sản phẩm. Thuộc tính Kiểu dữ liệu Độ dài Mô tả Ghi chú MaNhom char 10 Mã nhóm SP Khóa chính TenNhom nvarchar 50 Tên nhóm SP
Bảng SanPham: Lưu thông tin của từng sản phẩm và phân nhóm sản phẩm. Thuộc tính Kiểu dữ liệu Độ dài Mô tả Ghi chú MaSanPham char 10 Mã sản phẩm Khóa chính TenSanPham nvarchar 50 Tên sản phẩm SoLuong int Số lượng tồn kho MaNhom nvarchar 100 Mã nhóm SP Khóa ngoại
Bảng NhanVien: Lưu thông tin cá nhân của từng nhân viên. Thuộc tính Kiểu dữ liệu Độ dài Mô tả Ghi chú MaNV char 10 Mã nhân viên Khóa chính HoVaTen nvarchar 50 Họ tên SDT char 20 SĐT NV DiaChi nvarchar 100 Địa chỉ NV MatKhau varchar 20 Mật khẩu QuanLy int Phân quyền NV
Bảng PhieuNhap: Lưu các thông tin về phiếu nhập. Mỗi phiếu nhập do 01 nhân viên
và 01 nhà cung cấp thực hiện. Thuộc tính Kiểu dữ liệu Độ dài Mô tả Ghi chú MaPhieu char 10 Mã phiếu Khóa chính ThoiGian date Ngày nhập MaNV char 10 Mã nhân viên Khóa ngoại MaCongTy char 10 Mã công ty Khóa ngoại
Bảng ChiTietPhieuNhap: Lưu các thông tin chi tiết về các sản phẩm có trong phiếu
nhập. Mỗi phiếu nhập có thể bao gồm nhiều sản phẩm. Thuộc tính Kiểu dữ liệu Độ dài Mô tả Ghi chú MaPhieuNhap char 10 Mã phiếu nhập Khóa chính MaSanPham date 10 Mã sản phẩm Khóa chính SoLuongNhap int Số lượng nhập ThanhTien float Tiền nhập SP
CHƯƠNG 3: CÀI ĐẶT VÀ KHAI THÁC CƠ SỞ DỮ LIỆU
3.1. Cài đặt Cơ sở dữ liệu Kho hàng
3.1.1. Tạo cở sở dữ liệu -- Tạo database KhoHang CREATE DATABASE KhoHang GO USE KhoHang GO -- Tạo bang NhanVien CREATE TABLE NhanVien (
MaNV NVARCHAR(50) PRIMARY KEY, HoVaTen NVARCHAR(100), SDT NVARCHAR(20), DiaChi NVARCHAR(100), MatKhau VARCHAR(20), QuanLy INT ); GO -- Tạo bang NhaCungCap CREATE TABLE NhaCungCap (
MaCongTy CHAR(10) PRIMARY KEY, TenCongTy NVARCHAR(100), SDT NVARCHAR(20), DiaChi NVARCHAR(100) ); GO -- Tạo bang NhomSanPham CREATE TABLE NhomSanPham ( MaNhom CHAR(10) PRIMARY KEY, TenNhom NVARCHAR(100) ); GO -- Tạo bang SanPham CREATE TABLE SanPham (
MaSanPham CHAR(10) PRIMARY KEY, TenSanPham NVARCHAR(100), SoLuong INT, MaNhom CHAR(10),
FOREIGN KEY (MaNhom) REFERENCES NhomSanPham(MaNhom) ); GO -- Tạo bang PhieuNhap CREATE TABLE PhieuNhap (
MaPhieu CHAR(20) PRIMARY KEY, ThoiGian DATETIME, MaNV NVARCHAR(50), MaCongTy CHAR(10),
FOREIGN KEY (MaNV) REFERENCES NhanVien(MaNV),
FOREIGN KEY (MaCongTy) REFERENCES NhaCungCap(MaCongTy)); GO
-- Tạo bang ChiTietPhieuNhap
CREATE TABLE ChiTietPhieuNhap ( MaPhieu CHAR(20), MaSanPham CHAR(10), SoLuongNhap INT, ThanhTien FLOAT,
PRIMARY KEY (MaPhieu, MaSanPham),
FOREIGN KEY (MaPhieu) REFERENCES PhieuNhap(MaPhieu),
FOREIGN KEY (MaSanPham) REFERENCES SanPham(MaSanPham));
3.1.2. Nhập dữ liệu cho các bảng
-- Thêm dữ liệu bang NhanVien
INSERT INTO NhanVien (MaNV, HoVaTen, SDT, DiaChi, MatKhau, QuanLy) VALUES
('NV001', N'Nguyê7n Trọng Đạt', '0123456789', N'Hà Nội', '%Co050296', 1),
('NV002', N'TrầEn Thị Bình', '0987654321', N'Hà Nội', '123456', 0),
('NV003', N'Lê Văn ChiêIn', '0369852147', N'Hà Nội', 'qwerty', 0),
('NV004', N'Phạm Thị Dung', '0321478963', N'Vĩnh Phúc', '123456', 0),
('NV005', N'Hoàng Văn Minh', '0157986423', N'Nam Định', 'abcdef', 0), GO
-- Thêm dữ liệu bang NhaCungCap
INSERT INTO NhaCungCap (MaCongTy, TenCongTy, SDT, DiaChi) VALUES
('NCC001', N'Vinamilk', '0123456789', 'BăIc Giang'),
('NCC002', N'Coca-Cola Việt Nam', '0451236789', 'HồE Chí Minh'),
('NCC003', N'Libby Việt Nam', '0369871234', 'Bình Dương'),
('NCC004', N'Acecook Việt Nam', '0321654978', 'HồE Chí Minh'),
('NCC005', N'Knorr Việt Nam', '0451236789', 'ĐồEng Nai'),
('NCC006', N'Cồng ty Cồ phầEn Nồng san Việt Nam', '0912345678', 'Hà Nội'),
('NCC007', N'Cồng ty Cồ phầEn XuầIt khầu RồEng Việt', '0369876543', 'TiêEn Giang'), GO
-- Thêm dữ liệu bang NhomSanPham
INSERT INTO NhomSanPham (MaNhom, TenNhom) VALUES ('NH001', N'Sữa'),
('NH002', N'ĐồE uồIng'),
('NH003', N'ĐồE hộp'), ('NH004', N'Mì gói'), ('NH005', N'Gia vị'), ('NH006', N'Rau cu qua'), ('NH007', N'Trái cầy'),
('NH008', N'Thực phầm khồ'),
('NH009', N'ĐồE dùng nhà bêIp'),
('NH010', N'Hóa phầm tầy rưa'); GO
-- Thêm dữ liệu bang SanPham
INSERT INTO SanPham (MaSanPham, TenSanPham, SoLuong, MaNhom) VALUES
('SP001', N'Sữa tươi Vinamilk', 100, 'NH001'),
('SP002', N'Nước ngọt Coca-Cola', 150, 'NH002'),
('SP003', N'Hộp cá ngừ ngầm dầEu', 80, 'NH003'),
('SP004', N'Mì gói Acecook', 120, 'NH004'),
('SP005', N'Nước măIm Maggi', 50, 'NH005'),
('SP006', N'Cà chua', 100, 'NH006'),
('SP007', N'Cam sành', 200, 'NH007'),
('SP008', N'Mộc nhĩ', 30, 'NH008'),
('SP009', N'Chao chồIng dính', 20, 'NH009'),
('SP010', N'Nước lau sàn Vim', 15, 'NH010'); GO
-- Thêm dữ liệu bang PhieuNhap
INSERT INTO PhieuNhap (MaPhieu, ThoiGian, MaNV, MaCongTy) VALUES
('PN001', '2024-03-01', 'NV001', 'NCC001'),
('PN002', '2024-03-05', 'NV002', 'NCC002'),
('PN003', '2024-03-08', 'NV003', 'NCC003'),
('PN004', '2024-03-10', 'NV004', 'NCC004'),
('PN005', '2024-03-12', 'NV005', 'NCC005'), GO
-- Thêm dữ liệu bang ChiTietPhieuNhap
INSERT INTO ChiTietPhieuNhap (MaPhieu, MaSanPham, SoLuongNhap, ThanhTien) VALUES
('PN001', 'SP001', 50, 250000),
('PN002', 'SP002', 30, 120000),
('PN003', 'SP003', 40, 160000),
('PN004', 'SP004', 60, 108000),
('PN005', 'SP005', 25, 75000),
Hình 3.1: Mô hình dữ liệu (Diagram)
3.2. Khai thác cơ sở dữ liệu 3.2.1. Đại số quan hệ
* Cho biết mã số nhân viên hoặc mã số nhà cung cấp được quản lý trong Database
của kho tổng
- Quan hệ: NhanVien, NhaCungCap
KQ MaNV(NhanVien) v MaCongTy(NhaCungCap)
* Tìm thông tin các nhà cung cấp đã từng cung cấp hàng cho cả 2 nhân viên A, B
(A, B đại diện cho Họ và tên của 2 nhân viên)
- Quan hệ: NhanVien, NhaCungCap, PhieuNhap
NhanVien_A MaNV( NhanVien.HovaTen=A(NhanVien)) (Lấy mã số nhân viên A) NhanVien_B
MaNV( NhanVien.HovaTen=B(NhanVien)) (Lấy mã số nhân viên B)
PN_A PhieuNhap ►◄MaNV = MaNV(NhanVien_A) (Các phiếu nhập của A)
PN_B PhieuNhap ►◄MaNV = MaNV(NhanVien_B) (Các phiếu nhập của B)
C MaCongTy(PN_A) ^ MaCongTy(PN_B) (MaCongTy A, B cùng lấy hàng) KQ NhaCungCap ►◄ C
* Cho biết các thông tin chi tiết của sản phẩm có số lượng nhập lớn nhất (chỉ xét
trong các bộ của quan hệ ChiTietPhieuNhap, không tính tổng số lượng nhập của các sản
phẩm có cùng MaSanPham).
- Quan hệ: ChiTietPhieuNhap
B1 SoLuongNhap(ChiTietPhieuNhap) (Lấy số lượng nhập của các bộ trong quan hệ)
B2 ChiTietPhieuNhap x B1 (Tạo ra một quan hệ mới để so sánh)
B3 ChiTietPhieuNhap.SoLuongNhap < B1.SoLuongNhap(B2)
B4 ChiTietPhieuNhap.SoLuongNhap(B3)
B5 B1 – B4 (Phép trừ) (B3, B4, B5 tìm ra số lượng nhập lớn nhất) KQ ChiTietPhieuNhap ►◄ B5 3.2.2. Truy vấn cơ bản
--1.LầIy tầIt ca thồng tin cua bang NhanVien SELECT * FROM NhanVien;
--2.LầIy thồng tin các nhần viên có địa chỉ ơ Hà Nội
SELECT * FROM NhanVien WHERE DiaChi LIKE N'%Hà Nội%';
--3.LầIy thồng tin các nhà cung cầIp ơ HồE Chí Minh
SELECT * FROM NhaCungCap WHERE DiaChi LIKE N'%HồE Chí Minh%';
--4.LầIy thồng tin những nhần viên là quan lý
SELECT * FROM NhanVien WHERE QuanLy = 1;
--5.LầIy thồng tin các nhần viên theo thứ tự địa chỉ
SELECT * FROM NhanVien ORDER BY DiaChi ASC;
--6.LầIy tên san phầm theo từng nhóm san phầm
SELECT TenNhom, TenSanPham FROM SanPham
JOIN NhomSanPham ON SanPham.MaNhom = NhomSanPham.MaNhom ORDER BY TenNhom;
--7.ĐêIm sồI lượng các san phầm trong từng nhóm san phầm
SELECT TenNhom, COUNT(*) AS SoLuongSanPham FROM SanPham
JOIN NhomSanPham ON NhomSanPham.MaNhom = SanPham.MaNhom GROUP BY TenNhom ORDER BY SoLuongSanPham DESC;
--8.LầIy danh sách tên những san phầm được nhập vào bơi nhần viên có mã là 'NV001'
SELECT DISTINCT TenSanPham FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu WHERE MaNV = 'NV001';
--9.LầIy thồng tin các san phầm có giá trị nhập hàng từ 100,000 VNĐ đêIn 200,000 VNĐ
SELECT MaPhieu, SanPham.MaSanPham, TenSanPham, SoLuong, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
WHERE ThanhTien BETWEEN 100000 AND 200000;
--10.LầIy thồng tin các san phầm có sồI lượng tồEn kho lớn nhầIt SELECT * FROM SanPham
WHERE SoLuong = (SELECT MAX(SoLuong) FROM SanPham);
--11.LầIy thồng tin các san phầm có sồI lượng tồEn kho nho nhầIt SELECT * FROM SanPham
WHERE SoLuong = (SELECT MIN(SoLuong) FROM SanPham);
--12.LầIy thồng tin các san phầm có tên chứa từ 'Mì' hoặc 'Nước măIm'
SELECT * FROM SanPham WHERE TenSanPham LIKE N'%Mì%' OR TenSanPham LIKE N'%Nước măIm %';
--13.LầIy thồng tin các san phầm thuộc nhóm 'Sữa'
SELECT SanPham.MaNhom, TenSanPhaM, SoLuong FROM SanPham
JOIN NhomSanPham ON SanPham.MaNhom = NhomSanPham.MaNhom WHERE TenNhom LIKE N'Sữa';
--14.LầIy thồng tin san phầm có giá trị nhập hàng cao nhầIt
SELECT MaPhieu, SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
WHERE ThanhTien = (SELECT MAX(ThanhTien) FROM ChiTietPhieuNhap);
--15.LầIy thồng tin san phầm có giá trị nhập hàng thầIp nhầIt
SELECT MaPhieu, SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
WHERE ThanhTien = (SELECT MIN(ThanhTien) FROM ChiTietPhieuNhap);
--16.LầIy tên những san phầm được nhập vào từ nhà cung cầIp 'Vinamilk' hoặc 'Coca-Cola Việt Nam'
SELECT TenSanPham FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
JOIN NhaCungCap ON PhieuNhap.MaCongTy = NhaCungCap.MaCongTy WHERE
TenCongTy IN ('Vinamilk', N'Coca-Cola Việt Nam');
--17.LầIy thồng tin các san phầm có sồI lượng tồEn kho giữa 10 và 50 SELECT * FROM SanPham
WHERE SoLuong BETWEEN 10 AND 50;
--18.LầIy thồng tin các san phầm có sồI lượng tồEn kho nho hơn 10 hoặc lớn hơn 50 SELECT * FROM SanPham
WHERE SoLuong < 10 OR SoLuong > 50;
--19.LầIy thồng tin các san phầm được nhập trong tháng 2/2024
SELECT SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThoiGian, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu WHERE
YEAR(ThoiGian) = 2024 AND MONTH(ThoiGian) = 2;
--20.LầIy thồng tin các san phầm được nhập từ 15-20/3/2024
SELECT SanPham.MaSanPham, TenSanPham, SoLuongNhap, ThoiGian, ThanhTien FROM SanPham
JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham
JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
WHERE YEAR(ThoiGian) = 2024 AND MONTH(ThoiGian) = 3 AND DAY(ThoiGian) BETWEEN 15 AND 20; 3.2.3. Truy vấn nâng cao
--21.Tính tồng giá trị nhập hàng từng ngày
SELECT ThoiGian, SUM(ThanhTien) AS TongGiaTriNhap
FROM PhieuNhap JOIN ChiTietPhieuNhap ON PhieuNhap.MaPhieu = ChiTietPhieuNhap.MaPhieu GROUP BY ThoiGian;
--22.Tính đơn giá cua mồ7i san phầm trong từng phiêIu nhập
SELECT MaPhieu, SanPham.MaSanPham, (ThanhTien/SoLuongNhap) AS DonGia
FROM SanPham JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham;
--23.SăIp xêIp các nhà cung cầIp theo thứ tự giam dầEn sồI lượng phiêIu nhập
SELECT TenCongTy, COUNT(MaPhieu) SoPhieuNhap
FROM NhaCungCap JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy GROUP BY TenCongTy ORDER BY SoPhieuNhap DESC;
--24.Tính trung bình tiêEn nhập hàng trên mồ7i phiêIu nhập trong tháng 2/2024
SELECT SUM(ThanhTien)/COUNT(DISTINCT PhieuNhap.MaPhieu) AS TrungBinh
FROM ChiTietPhieuNhap JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
WHERE YEAR(ThoiGian) = 2024 AND MONTH(ThoiGian) = 2;
--25.Tính trung bình tiêEn nhập hàng trên mồ7i phiêIu nhập trong các ngày có nhập hàng
SELECT ThoiGian, SUM(ThanhTien)/COUNT(DISTINCT PhieuNhap.MaPhieu) AS TrungBinh
FROM ChiTietPhieuNhap JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu GROUP BY ThoiGian;
--26.LầIy thồng tin các san phầm có sồI lượng tồEn kho lớn hơn 50 và thuộc nhóm san phầm 'Sữa' SELECT * FROM SanPham
WHERE SoLuong > 50 AND MaNhom = (SELECT MaNhom FROM NhomSanPham WHERE TenNhom = N'Sữa');
--27.LầIy tên các nhà cung cầIp có sồI lượng phiêIu nhập lớn hơn 1 SELECT TenCongTy FROM (
SELECT TenCongTy, COUNT(MaPhieu) AS SoPhieuNhap
FROM NhaCungCap JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy GROUP BY TenCongTy ) AS SubQuery WHERE SoPhieuNhap > 1;
--28.LầIy thồng tin nhần viên có nhiêEu phiêIu nhập nhầIt
SELECT MaNV, HoVaTen, DiaChi, SoPhieuNhap FROM (
SELECT NhanVien.MaNV, HoVaTen, DiaChi, COUNT(MaPhieu) AS SoPhieuNhap
FROM NhanVien JOIN PhieuNhap ON NhanVien.MaNV = PhieuNhap.MaNV GROUP BY
NhanVien.MaNV, HoVaTen, DiaChi ) AS SubQuery WHERE SoPhieuNhap = ( SELECT MAX(SoPhieuNhap) FROM (
SELECT MaNV, COUNT(MaPhieu) AS SoPhieuNhap FROM PhieuNhap GROUP BY MaNV ) AS SubQuery );
--29.LầIy tên san phầm có trong nhiêEu phiêIu nhập nhầIt SELECT TenSanPham FROM (
SELECT TenSanPham, COUNT(MaPhieu) AS SoPhieuNhap
FROM SanPham JOIN ChiTietPhieuNhap ON SanPham.MaSanPham = ChiTietPhieuNhap.MaSanPham GROUP BY TenSanPham ) AS SubQuery WHERE SoPhieuNhap = ( SELECT MAX(SoPhieuNhap) FROM (
SELECT MaSanPham, COUNT(MaPhieu) AS SoPhieuNhap FROM ChiTietPhieuNhap GROUP BY MaSanPham ) AS SubQuery );
--30.LầIy thồng tin các nhà cung cầIp có tồng giá trị nhập hàng lớn nhầIt
SELECT TenCongTy, TongTienNhapHang FROM (
SELECT TenCongTy, SUM(ThanhTien) AS TongTienNhapHang FROM NhaCungCap
JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
JOIN ChiTietPhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
GROUP BY TenCongTy ) AS SubQuery WHERE TongTienNhapHang = ( SELECT MAX(TongTienNhapHang) FROM (
SELECT TenCongTy, SUM(ThanhTien) AS TongTienNhapHang FROM NhaCungCap
JOIN PhieuNhap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
JOIN ChiTietPhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
GROUP BY TenCongTy ) AS SubQuery ); 3.2.4. Lập trình T-SQL
--31.LầIy thồng tin san phầm bằng cách sư dụng cursor DECLARE @MaNhom VARCHAR(20);
DECLARE @TenNhom NVARCHAR(100);
DECLARE @MaSanPham NVARCHAR(20);
DECLARE @TenSanPham NCHAR(25); DECLARE @SoLuong INT; DECLARE list_sp CURSOR FOR
SELECT MaSanPham, TenSanPham, SoLuong, MaNhom FROM SanPham OPEN list_sp
FETCH NEXT FROM list_sp INTO @MaSanPham, @TenSanPham, @SoLuong, @MaNhom WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @TenNhom = TenNhom FROM NhomSanPham WHERE @MaNhom = MaNhom
PRINT @MaSanPham + ' ' + @TenSanPham + CAST(@SoLuong AS NCHAR(10)) + @TenNhom FETCH
NEXT FROM list_sp INTO @MaSanPham, @TenSanPham, @SoLuong, @MaNhom END CLOSE list_sp DEALLOCATE list_sp;
--32.Cập nhật sồI lượng san phầm trong mồ7i nhóm san phầm DECLARE @SoLuong INT DECLARE @MaNhom VARCHAR(10)
DECLARE Nhom CURSOR FOR SELECT MaNhom, COUNT(*) FROM SanPham GROUP BY MaNhom OPEN Nhom
FETCH NEXT FROM Nhom INTO @MaNhom, @SoLuong WHILE @@FETCH_STATUS = 0 BEGIN
UPDATE NhomSanPham SET SoLuong = @SoLuong WHERE @MaNhom = MaNhom
FETCH NEXT FROM Nhom INTO @MaNhom, @SoLuong END CLOSE Nhom DEALLOCATE Nhom;
--33.Thu tục lọc san phầm theo nhóm san phầm
CREATE PROCEDURE LocSanPham @MaNhom VARCHAR(20) AS BEGIN SELECT * FROM SanPham WHERE MaNhom = @MaNhom END;
--34.Tìm kiêIm san phầm theo tên
CREATE PROCEDURE TimKiemSanPham @search NVARCHAR(50) AS BEGIN SELECT * FROM SanPham
WHERE TenSanPham LIKE '%' + @search + '%'; END;
--35.Thu tục tìm kiêIm thồng tin nhần viên theo tên, hoặc theo mã nhần viên
CREATE PROCEDURE TimKiemNhanVien @search NVARCHAR(50) AS BEGIN SELECT * FROM NhanVien
WHERE MaNV LIKE @search OR HoVaTen LIKE '%' + @search + '%'; END;
--36.Thu tục tìm kiêIm thồng tin phiêIu nhập theo ngày
CREATE PROCEDURE TimKiemPhieuNhap_1 @Date DATE AS BEGIN
SELECT MaPhieu, HoVaTen, TenCongTy, ThoiGian FROM PhieuNhap
INNER JOIN NhanVien ON PhieuNhap.MaNV = NhanVien.MaNV
INNER JOIN NhaCungCap ON PhieuNhap.MaCongTy = NhaCungCap.MaCongTy WHERE ThoiGian = @Date; END;
--37.Thu tục tìm kiêIm thồng tin phiêIu nhập theo khoang thời gian
CREATE PROCEDURE TimKiemPhieuNhap_2 @From DATE, @To DATE AS BEGIN
SELECT MaPhieu, HoVaTen, TenCongTy, ThoiGian FROM PhieuNhap
INNER JOIN NhanVien ON PhieuNhap.MaNV = NhanVien.MaNV
INNER JOIN NhaCungCap ON PhieuNhap.MaCongTy = NhaCungCap.MaCongTy
WHERE ThoiGian BETWEEN @From AND @To END;
--38.Thu tục tìm kiêIm thồng tin chi tiêIt phiêIu nhập theo mã phiêIu nhập CREATE
PROCEDURE ChiTiet @MaPhieu VARCHAR(20) AS BEGIN
SELECT MaPhieu, TenSanPham, SoluongNhap, ThanhTien FROM ChiTietPhieuNhap
INNER JOIN SanPham ON ChiTietPhieuNhap.MaSanPham = SanPham.MaSanPham WHERE MaPhieu = @MaPhieu; END;
--39.Function đầEu vào mã phiêIu nhập, đầEu ra các chi tiêIt phiêIu nhập cua phiêIu nhập đó
CREATE FUNCTION ThongKeSanPham (@MaPhieu VARCHAR(20)) RETURNS TABLE AS RETURN (
SELECT TenSanPham, ThoiGian, SoLuongNhap, ThanhTien, TenCongTy, HoVaTen FROM ChiTietPhieuNhap
INNER JOIN SanPham ON ChiTietPhieuNhap.MaSanPham = SanPham.MaSanPham
INNER JOIN PhieuNhap ON ChiTietPhieuNhap.MaPhieu = PhieuNhap.MaPhieu
INNER JOIN NhaCungCap ON NhaCungCap.MaCongTy = PhieuNhap.MaCongTy
INNER JOIN NhanVien ON NhanVien.MaNV = PhieuNhap.MaNV
WHERE ChiTietPhieuNhap.MaPhieu = @MaPhieu );
--40.Function thồIng kê các phiêIu nhập trong 1 ngày hoặc các phiêIu nhập trong tháng
CREATE FUNCTION ThongKePhieuNhap (@Ngay DATE = NULL) RETURNS TABLE AS RETURN ( SELECT * FROM PhieuNhap
WHERE (@Ngay IS NOT NULL AND ThoiGian = @Ngay) OR (@Ngay IS NULL OR @Ngay = ''
AND YEAR(ThoiGian) = YEAR(GETDATE()) AND MONTH(ThoiGian) = MONTH(GETDATE())) );
--41.Function đầEu vào mã phiêIu nhập, đầEu ra là sồI tiêEn phai thanh toán cho phiêIu nhập đó