Chương trình web quản lí bán hàng online là một chương trình được xây dựng nhằm đáp ứng những đòi hỏi đặt ra của quá trình quản lý như số lượng hàng hoá, đơn đặt hàng,…và rất nhiều công
PHÂN TÍCH THIẾ T K Ế H Ệ TH Ố NG
Mô t ả bài toán
Cửa hàng linh kiện máy tính NT226 Computer tại TP Hồ Chí Minh chuyên bán các linh kiện máy tính Để thiết kế một website bán hàng cho phép khách hàng đặt hàng online và quản lý đồng thời các tài khoản nhân viên, khách hàng, sản phẩm, báo cáo doanh thu một cách thuận tiện, cần xây dựng một cơ sở dữ liệu hoàn chỉnh với cấu trúc hợp lý Cơ sở dữ liệu này giúp tối ưu quy trình vận hành, tăng cường an toàn dữ liệu và cải thiện trải nghiệm người dùng trên website, đồng thời hỗ trợ quản trị viên theo dõi tồn kho, doanh thu và các hoạt động của từng người dùng Việc thiết kế cơ sở dữ liệu chuẩn và tối ưu hóa truy vấn có thể nâng cao hiệu quả quản lý bán hàng và khả năng mở rộng cho NT226 Computer.
Khách hàng có nhu cầu mua sản phẩm sẽ truy cập website, chọn sản phẩm, thêm vào giỏ hàng và đăng nhập để nhập thông tin thanh toán; đơn hàng sẽ được chuyển tới nhân viên xử lý Khi hoá đơn được xuất, hệ thống tự động trừ số lượng tồn kho của sản phẩm, giúp cơ sở dữ liệu cập nhật số lượng còn lại và quản lý tồn kho một cách chính xác.
Mô tả các chức năng của hệ thống
Hệ thống quản lý NT226 Computer sẽ gồm các chức năng:
Xem thông tin nhà cung cấp của sản phẩm
Cập nhật thông tin sản phẩm
Tìm sản phẩm: giúp khách hàng tìm được sản phẩm mong muốn nhanh hơn
Quản lý đơn hàng: sau khi đặt hàng thành công thì khách hàng có thể xem lại hoá đơn
Thêm: khi có nhân viên mới, quản lý sẽ tạo cho nhân viên đó tài khoản để đăng nhập vào hệ thống
Xoá: khi có nhân viên nghỉ việc, quản lý sẽ xoá tài khoản đó khỏi hệ thống
Cập nhật: cho phép nhân viên thay đổi thông tin cá nhân
Lập báo cáo xem doanh thu của cửa hàng
Nhân viên: được phép xem các bảng DonDatHang, SanPham,
TheLoai, DanhGiaSanPham, ThuongHieu, ThuongHieuSanPham, NhaCungCap và chỉ xem được các cột MaKH, HoTenKH, SDT,
DiaChiGiaoHang, Email của bảng KhachHang và quyền thêm vào bảng DonDatHang
Quản lý: được phép xem, thêm và sửa ở tất cả các bảng.
Xây d ựng mô hình liên k ết thực thể
Hình 1.1 Sơ đồ th ự c th ể
Mô hình quan h ệ ERD
MaSP SoDH SoLuong GiaTien GiamGia
DanhGiaSanPham id MaSP MaKH TenDanhGia ChatLuong GiaTien NoiDung NgayDanhGia
SoDH NgayDH TrangThaiDH NgayDuKienGiao NgayThucTeGiao MaKH MaNV
MaKH HoTenKH NgaySinh GioiTinh SDT DiaChiGiaoHang Email
MaNCC TenNCC DiaChi Email SDT fax
MaSP TenSP GiaSP GiaKhuyenMai MaLoai MaNCC MoTa SoLuongTon
Mô tả các b ảng
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaTL Mã thể loại nchar 20
TenTL Tên thể loại nvarchar 255
MoTa Mô tả thể loại nvarchar 255
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaKH Mã khách hàng nchar 20
HoTenKH Họ tên khách hàng nvarchar 255
SDT Số điện thoại nchar 50
DiaChiGiaoHang Địa chỉ giao hàng nvarchar 255
Email Email khách hàng nchar 50
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaNV Mã nhân viên nchar 20
HoTenNV Họ tên nhân viên nvarchar 255
SDT Số điện thoại nchar 50
Email Email nhân viên nchar 50
MaNVQL Mã quản lý nchar 20
Tên trường Mô tả Kiểu dữ liệu Độ dài
SoDH Mã sốđơn hàng nchar 20
NgayDH Ngày đặt hàng datetime
TrangThaiDH Trạng thái đơn int
NgayDuKienGiao Ngày dự kiến giao datetime
NgayThucTeGiao Ngày thực tế giao datetime
MaKH Mã khách hàng nchar 20
MaNV Mã nhân viên nchar 20
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaNCC Mã nhà cung cấp nchar 20
TenNCC Tên nhà cung cấp nvarchar 255
SDT Số điện thoại nchar 50
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaTH Mã thương hiệu nchar 20
TenTH Tên thương hiệu nvarchar 255
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaSP Mã sản phẩm nchar 20
TenSP Tên sản phẩm nvarchar 255
GiaSP Giá sản phẩm float
GiaKhuyenMai Giá khuyến mãi float 50
MaLoai Mã thể loại nchar 20
MaNCC Mã nhà cung cấp nchar 20
MoTa Mô tả sản phẩm nvarchar 255
SoLuongTon Số lượng tồn int
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaThuongHieu Mã thương hiệu nchar 20
MaSanPham Mã sản phẩm nchar 20
Tên trường Mô tả Kiểu dữ liệu Độ dài
MaSP Mã sản phẩm nchar 20
SoDH Số đơn hàng nchar 20
SoLuong Số lượng đặt hàng int
GiaTien Đơn giá sản phẩm float
Tên trường Mô tả Kiểu dữ liệu Độ dài id Số đánh giá nchar 20
MaSP Mã sản phẩm nchar 20
MaKH Mã khách hàng nchar 20
TenDanhGia Tên đánh giá nvarchar 255
Nội dung Nội dung nvarchar 255
NgayDanhGia Ngày đánh giá datetime
CÀI ĐẶT CƠ SỞ D Ữ LI Ệ U
Tạo database
create database QLCuaHangMayTinh_TranNgocThinh on
Name=QLCuaHangMayTinh_TranNgocThinh, filename='D:\QLCuaHangMayTinh_TranNgocThinh.mdf', sizeMB, maxsize0MB,
Name=QLCuaHangMayTinh_logth2, filename='D:\QLCuaHangMayTinh_TranNgocThinh.ldf', size=2MB, maxsize=UNLIMITED,
Cài đặt các b ảng
2.2.1.Tạo bảng TheLoai create table TheLoai
MaTL nchar(20) not null primary key,
2.2.2.Tạo bảng KhachHang create table KhachHang
MaKH nchar(20) not null primary key,
2.2.3.Tạo bảng NhanVien create table NhanVien
MaNV nchar(20) not null primary key,
MaNVQL nchar(20), foreign key (MaNVQL) references NhanVien(MaNV)
2.2.4.Tạo bảng DonDatHang create table DonDatHang
SoDH nchar(20) not null primary key,
MaNV nchar(20) foreign key (MaKH) references KhachHang(MaKH), foreign key (MaNV) references NhanVien(MaNV)
2.2.5.Tạo bảng NhaCungCap create table NhaCungCap
MaNCC nchar(20) not null primary key,
2.2.6.Tạo bảng ThuongHieu create table ThuongHieu
MaTH nchar(20) not null primary key,
2.2.7.Tạo bảng SanPham create table SanPham
MaSP nchar(20) not null primary key,
SoLuongTon int, foreign key (MaLoai) references TheLoai(MaTL), foreign key (MaNCC) references NhaCungCap(MaNCC)
2.2.8.Tạo bảng ThuongHieuSanPham create table ThuongHieuSanPham
MaSanPham nchar(20), primary key (MaThuongHieu, MaSanPham), foreign key (MaThuongHieu) references ThuongHieu(MaTH), foreign key (MaSanPham) references SanPham(MaSP)
2.2.9.Tạo bảng ChiTietDH create table ChiTietDH
GiamGia float, primary key (MaSP, SoDH), foreign key (MaSP) references SanPham(MaSP), foreign key (SoDH) references DonDatHang(SoDH)
2.2.10.Tạo bảng DanhGiaSanPham create table DanhGiaSanPham
( id nchar(20) not null primary key,
NgayDanhGia datetime, foreign key (MaSP) references SanPham(MaSP),
Câu lệnh
Thêm dữ liệu vào bảng ThuongHieu
Code insert ThuongHieu(MaTH, TenTH, DiaChi, SDT) values ('TH001', 'Integrated Electronics', '2200 Mission College Blvd, Santa Clara,
TH002 corresponds to Advanced Micro Devices (AMD), located on the 9th floor of the Paxsky building at 13-15-17 Truong Dinh Street, Ward 6, District 3, Ho Chi Minh City, Vietnam, with customer support at hotro@amdvietnam.com.vn TH003 is Kingston, based at No 1-5 Li-Hsin Road, Science Based Industrial Park, Hsin-Chu, Taiwan, and reachable via asiasales@kingston.com.tw A TH004 entry is listed, but its brand name, address, and email are not provided in the current data.
'Gigabyte Technology', 'No.6, Baoqiang Rd., Xindian Dist., New
Taipei City 231, Taiwan'); insert ThuongHieu(MaTH, TenTH, DiaChi) values ('TH005', 'Micro-Star International Co Ltd', N'Tân Bắc, Đài Loan.');
Thêm dữ liệu vào bảng NhaCungCap
Bài viết trình bày hai câu lệnh SQL để chèn dữ liệu vào bảng NhaCungCap, mô tả thông tin của hai nhà cung cấp Câu lệnh đầu tiên thêm NCC001 với tên Dell, địa chỉ N'23 Nguyễn Thị Huỳnh, Phường 8, Quận Phú Nhuận, TP.HCM' và số điện thoại 0838424342 Câu lệnh thứ hai thêm NCC002 với tên FPT, địa chỉ N'Tòa nhà FPT Tân Thuận, Lô L29B-31B-33B, đường số 8, KCX Tân Thuận, phường Tân Thuận Đông, quận ' và có trường email Bài viết minh họa cách lưu trữ đầy đủ các trường MaNCC, TenNCC, DiaChi, SDT và email cho nhà cung cấp, nhằm quản lý dữ liệu hiệu quả trong cơ sở dữ liệu và tối ưu hóa nội dung liên quan đến quản trị nhà cung cấp. -**Support Pollinations.AI:** -🌸 **Ad** 🌸Powered by Pollinations.AI free text APIs [Support our mission](https://pollinations.ai/redirect/kofi) to keep AI accessible for everyone.
7, Thành phố Hồ Chí Minh, Việt
Nam.','02873023456','fptshop@fpt.com.vn');
Thêm dữ liệu vào bảng NhanVien
Code insert NhanVien(MaNV, HoTenNV, NgaySinh, GioiTinh, SDT,
Email) values('NV001',N'Trần Ngọc Thịnh','2001-02-
26',N'Nam','0384735254','ngocthinh1126@gmail.com') insert NhanVien(MaNV, HoTenNV, NgaySinh, GioiTinh, SDT,
Email, MaNVQL) values('NV002',N'Trần Đinh Diệu Mi','2001-09- 29',N'Nữ','0766651677','mi.tran290901@gmail.com','NV001') insert NhanVien(MaNV, HoTenNV, NgaySinh, GioiTinh, SDT,
Email, MaNVQL) values('NV003',N'Nguyễn Ngọc Duy','1997-1-
2',N'Nam','0384765325','duynguyen960416@gmail.com ','NV001') insert NhanVien(MaNV, HoTenNV, NgaySinh, GioiTinh, SDT,
Email, MaNVQL) values('NV004',N'Huỳnh Thanh Đông','2001-12-2',N'Nam','0384','dong@gmail.com ','NV001')
Thêm dữ liệu vào bảng KhachHang
Code insert KhachHang(MaKH, HoTenKH, NgaySinh, GioiTinh, SDT, Email) values('KH001',N'Phạm Đình Lộc','2000-01-
22',N'Nam','0939545848','locoham2000@gmail.com') insert KhachHang(MaKH, HoTenKH, NgaySinh, GioiTinh, SDT, Email) values('KH002',N'Lê Huy Hoàng','2001-12-
2',N'Nam','0945739505','lehuyhoang@gmail.com') insert KhachHang(MaKH, HoTenKH, NgaySinh, GioiTinh, SDT, Email) values('KH003',N'Trần Minh Anh','2001-11-
12',N'Nam','0939532548','minhanhtran@gmail.com') insert KhachHang(MaKH, HoTenKH, NgaySinh, GioiTinh, SDT, Email) values('KH004',N'Lê Đình Chiến','2001-01-
12',N'Nam','0945269505','chienprovip@gmail.com') insert KhachHang(MaKH, HoTenKH, NgaySinh, GioiTinh, SDT, Email) values('KH005',N'Huỳnh Thanh Đông','2001-04-
10',N'Nam','0939325248','dong2k1@gmail.com') insert KhachHang(MaKH, HoTenKH, NgaySinh, GioiTinh, SDT, Email) values('KH006',N'Nguyễn Thị Kim Vui','2001-05-
Thêm dữ liệu vào bảng TheLoai
Code insert TheLoai(MaTL, TenTL, MoTa) values ('TL001',N'CPU - Bộ vi xử lý',N'vi xử lý') insert TheLoai(MaTL, TenTL, MoTa) values ('TL002',N'Mainboard -
Bo Mạch Chủ',N'bo mạch chủ') insert TheLoai(MaTL, TenTL, MoTa) values ('TL003',N'VGA - Card Màn Hình',N'card đồ hoạ ') insert TheLoai(MaTL, TenTL, MoTa) values ('TL004',N'PSU -
Three computer hardware categories are defined in the catalog: TL005 Case - Computer Case, described as 'pc case'; TL006 RAM - Internal Memory, described as 'memory'; and TL007 Hard Drive (Ổ cứng) representing storage devices.
SSD',N'lưu trữ dữ liệu')
Thêm dữ liệu vào bảng SanPham
Code insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP001',N'CPU Intel Core i3-
10105F',2699000,'TL001','NCC002',N'CPU Intel Core i3-10105F là phiên bản nâng cấp của I3-10100F ',50) insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP002',N'CPU AMD Ryzen 7
5700G',9689000,'TL001','NCC002',N'Đánh giá CPU AMD Ryzen 7 5700G chính hãng, bảo hành dài',40) insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP003',N'Mainboard MSI Z590 PRO
MSI Z590 PRO WIFI is a premium MSI motherboard that uses the Intel Z590 chipset to deliver high-end performance As part of MSI's top-tier lineup, it includes built-in WiFi for seamless wireless connectivity and a robust feature set designed for gaming and demanding workloads This MSI Z590 PRO WIFI motherboard combines quality engineering with reliable stability, making it a strong choice for enthusiasts building a high-performance PC.
SoLuongTon) values ('SP004',N'Mainboard Gigabyte Z590 AORUS PRO AX',7879000,'TL002','NCC002',N'Mainboard Gigabyte Z590 AORUS PRO AX là bo mạch chủ sử dụng chipset Z590 của
Intel.',42) insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC,
SoLuongTon) values ('SP005',N'Mainboard MSI B560M
PRO',2500000,'TL002','NCC001',15) insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP006',N'CPU Intel Core i5-
10500',5599000,'TL001','NCC001',N'Dòng Core i5 thế hệ thứ 10 dành cho máy bàn của Intel.',70); insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP007',N'CPU Intel Core i5-
10400',5159900,'TL001','NCC001',N'Dòng Core i5 thế hệ thứ 10 dành cho máy bàn của Intel.',70); insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP008',N'Card màn hình Asus ROG STRIX- LC-RTX 3080 Ti-O12G-
GAMING',55449000,'TL003','NCC001',N'Nhân đồ họa: Nvidia RTX 3080Ti.',15); insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP009',N'Card màn hình Gigabyte RTX 3090 AORUS XTREME-24GD',66999000,'TL003','NCC001',N'Dung lượng bộ nhớ: 24Gb GDDR6X.',10); insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP0010',N'Card màn hình MSI RTX 3090
VENTUS 3X OC 24G',65999000,'TL003','NCC001',N'Dung lượng bộ nhớ: 24Gb GDDR6X.',8); insert SanPham(MaSP, TenSP, GiaSP, MaLoai, MaNCC, MoTa,
SoLuongTon) values ('SP0011',N'FSP Power Supply SFX PRO Series Model FSP450-50SAC',1379000,'TL004','NCC001',N'Đáp ứng tiêu chuẩn mới nhất SFX12V V3.3.',8);
Thêm dữ liệu vào bảng ThuongHieuSanPham
These statements populate the brand-to-product mapping in the ThuongHieuSanPham table by linking brand codes (MaThuongHieu) with product codes (MaSanPham) The resulting mappings include TH001–SP001, TH002–SP002, TH005–SP003, TH004–SP004, TH001–SP006, TH001–SP007, TH001–SP009, TH005–SP0010, and TH001–SP0011, reflecting how multiple brands are connected to various products within the catalog.
Thêm dữ liệu vào bảng DonDatHang
Code insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH001','2021/10/05 17:20:00',0,'2021/10/12
17:20:00','','KH001','NV001') insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH002','2021/10/04 17:20:00',0,'2021/10/13
17:20:00','','KH001','NV001') insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH003','2021/10/04 17:20:00',0,'2021/10/12
17:20:00','','KH002','NV001') insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH004','2021/10/05 17:20:00',0,'2021/10/15
17:20:00','','KH002','NV001') insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH005','2021/10/05 17:20:00',0,'2021/10/13
17:20:00','','KH002','NV002') insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH006','2021/10/05 17:20:00',0,'2021/10/19
17:20:00','','KH002','NV002') insert into DonDatHang(SoDH, NgayDH, TrangThaiDH,
NgayDuKienGiao, NgayThucTeGiao, MaKH, MaNV) values('DH007','2021/10/05 17:20:00',0,'2021/10/19
Thêm dữ liệu vào bảng ChiTietDH
SQL inserts populate the ChiTietDH table with multiple order detail rows, each capturing MaSP, SoDH, SoLuong, GiaTien, and GiamGia The data shows DH001 includes SP001 with 2 units at 2699000 and a 100000 discount, and SP004 with 1 unit at 7879000 and a 300000 discount DH002 contains SP001 with 2 units at 2699000 and a 100000 discount, SP002 with 2 units at 2699000 and a 100000 discount, and SP003 with 2 units at 4999000 and a 500000 discount DH003 records SP001 with 2 units at 2699000 and a 100000 discount DH004 records SP003 with 2 units at 4999000 and a 500000 discount DH005 and DH006 each include SP002 with 2 units at 9689000 and a 1000000 discount DH007 includes SP003 with 2 units at 4999000 and a 500000 discount.
Thêm dữ liệu vào bảng DanhGiaSanPham
Code insert into DanhGiaSanPham(id, MaSP, MaKH, TenDanhGia,
ChatLuong, GiaTien, NoiDung, NgayDanhGia) values('DGSP001','SP001','KH001',N'CPU mạnh mẽ',5,2699000,N'Giao hàng nhanh, giá tốt','2021/10/29 07:20:00') insert into DanhGiaSanPham(id, MaSP, MaKH, TenDanhGia,
ChatLuong, GiaTien, NoiDung, NgayDanhGia) values('DGSP002','SP002','KH003',N'CPU mạnh mẽ, chất lượng',5,9689000,N'Sản phẩm ok','2021/11/1 12:45:00') insert into DanhGiaSanPham(id, MaSP, MaKH, TenDanhGia,
ChatLuong, GiaTien, NoiDung, NgayDanhGia) values('DGSP003','SP003','KH002',N'Mainboard quá chuẩn',5,4999000,N'Giao hàng nhanh, tốt','2021/10/1 17:00:00') insert into DanhGiaSanPham(id, MaSP, MaKH, TenDanhGia,
ChatLuong, GiaTien, NoiDung, NgayDanhGia) values('DGSP004','SP005','KH001',N'Mainboard tốt',4,7879000,N'Tốt','2021/10/21 17:20:00')
Câu 1: Cập nhật địa chỉ giao hàng = ‘79/8G QL 13, P26, Q Bình Thạnh’ với makh = ‘KH001’
Code update KhachHang set DiaChiGiaoHang=N'79/8G QL 13, P26, Q Bình Thạnh' where MaKH='KH001'
Câu 2: Cập nhật email= ‘dell@gmail.com’ với MaNCC = ‘NCC001’
Code update NhaCungCap set Email='dell@gmail.com' where MaNCC='NCC001'
Câu 1: Xoá dữ liệu của khách hàng có MaKH = ‘KH006’
Code delete from KhachHang where MaKH='KH006'
Câu 2: Xoá dữ liệu của thể loại có matl = ‘TL007’
Code delete from TheLoai where MaTL='TL007'
2.3.4.1 Câu truy vấn sử dụng điều kiện WHERE
Câu 1: Hiển thị 2 sản phẩm đầu tiên trong bảng sanpham, thông tin gồm masp, tensp, giasp, tenncc
Code select top(2) sp.MaSP, sp.TenSP, sp.GiaSP, ncc.TenNCC from SanPham sp, NhaCungCap ncc where sp.MaNCC = ncc.MaNCC
Câu 2: Hiển thị các sản phẩm có giá >= 500000 đến 2
Code select sp.MaLoai, count(*) as SoSanPham from SanPham sp group by sp.MaLoai having COUNT(*)>2
Câu 2: Cho biết mã thể loại nào có số sản phẩm >2
Code select c.SoDH, count(c.MaSP) as LoaiSP from ChiTietDH c group by c.SoDH having count(*)>=2
2.3.4.5 Câu truy vấn sử dụng LEFT JOIN, FULL JOIN, RIGHT JOIN Câu 1: Cho biết tensp, soluong, giatien, giamgia có sodh= ‘DH001’
Code select s.TenSP, c.SoLuong, c.GiaTien, c.GiamGia from SanPham s left join ChiTietDH c on c.MaSP = s.MaSP where c.SoDH='DH001'
Câu 2: Cho biết tên nhà cung cấp của mỗi sản phẩm, thông tin gồm masp, tensp, tenncc
Code select s.MaSP, s.TenSP, n.TenNCC from SanPham s left join NhaCungCap n on n.MaNCC = s.MaNCC
Câu 3: Trả về tất cả các hàng từ bảng khachhang và dondathang, thông tin gồm hotenkh, sodh, ngaydh, ngaydukiengiao, ngaythuctegiao,trangthaidh
Code select k.HoTenKH, d.SoDH, d.NgayDH, d.NgayDuKienGiao, d.NgayThucTeGiao, d.TrangThaiDH from KhachHang k full join DonDatHang d on k.MaKH = d.MaKH
Câu 4: Trả về tất cả các hàng từ bảng nhacungcap và dondathang, thông tin gồm tensp, tenncc, diachi
Code select s.TenSP, n.TenNCC, n.DiaChi from SanPham s full join NhaCungCap n on n.MaNCC = s.MaNCC
Câu 5: Hiển thị hotenkh, sodh, ngaydh, ngaydukiengiao, ngaythuctegiao, trangthaidh có trong bảng dondathang
Code select k.HoTenKH, d.SoDH, d.NgayDH, d.NgayDuKienGiao, d.NgayThucTeGiao, d.TrangThaiDH from KhachHang k right join DonDatHang d on k.MaKH = d.MaKH
Câu 6: Hiển thị hotennv, sodh, ngaydh, ngaydukiengiao, ngaythuctegiao, trangthaidh có trong bảng dondathang
Code select n.HoTenNV, d.SoDH, d.NgayDH, d.NgayDuKienGiao, d.NgayThucTeGiao, d.TrangThaiDH from NhanVien n right join DonDatHang d on d.MaNV = n.MaNV
2.3.4.6 Câu truy vấn sử dụng truy vấn con
Câu 1: Cho biết tổng số đơn hàng bán được của mỗi nhân viên
Code select n.MaNV, n.HoTenNV, truyvancon1.TongDonHang from NhanVien n,
(select d.MaNV, count(*) as TongDonHang from DonDatHang d group by d.MaNV) as truyvancon1 where n.MaNV = truyvancon1.MaNV
Câu 2: Cho biết sản phẩm có số lượng tồn 30
Code create view sanpham_soluongton as select * from SanPham where SoLuongTon > 30
Chạy thử select * from sanpham_soluongton
Câu 3: Cập nhật giakhuyenmai 00000 có masp = ‘SP001’ vào view_sanpham_soluongton
Code update sanpham_soluongton set GiaKhuyenMai 00000 where MaSP='SP001'
Chạy thử select * from sanpham_soluongton
Câu 1: Viết store procedure insert thể loại với matl và tentl được đưa vào từ ngoài
Code create procedure insert_theloai(@matl nchar(20), @tentl nvarchar(255)) as begin insert into TheLoai(MaTL, TenTL) values(@matl, @tentl); end
Chạy thử exec insert_theloai 'TL007', N'SSD - Ổ Cứng'
Câu 2: Viết store procedure cho biết các sách mà có thông tin của thương hiệu, thông tin gồm masp
Code create procedure thongtin_thuonghieusanpham as begin select s.MaSP from SanPham s intersect select thsp.MaSanPham from ThuongHieuSanPham thsp end
Chạy thử exec thongtin_thuonghieusanpham
Câu 3: Viết store procedure cho biết các sản phẩm có thông tin thương hiệu, hiển thị masp, tensp, soluongton
Code create procedure thongtin_thuonghieusanpham1 as begin select s.MaSP, s.TenSP, s.SoLuongTon from SanPham s where s.MaSP in (select s.MaSP intersect select thsp.MaSanPham from ThuongHieuSanPham thsp) end
Chạy thử exec thongtin_thuonghieusanpham1;
Câu 4: Viết store procedure xoá 1 dòng dữ liệu với tham số đầu vào là masp
Code create procedure xoa_sanpham(@masp nchar(20)) as begin delete from SanPham where MaSP = @masp; end
Chạy thử exec xoa_sanpham 'SP008'
Câu 1: Viết function thành tiền
Code create function thanhtien(@soluong int, @giatien float, @giamgia float) returns dec(10,2) as begin return @soluong*@giatien-@giamgia; end
Chạy thử select dbo.thanhtien(2,10000,5000) as ThanhTien;
Câu 2: Viết function cho biết số lượng sản phẩm có số lượng tồn lớn hơn số lượng tồn nhận giá trị từ bên ngoài
The dem_sanpham_soluongton is a SQL scalar function that takes an integer parameter named soluongton representing a minimum stock level, and it returns an integer count It declares a local variable @dem initialized to 0, then assigns @dem the result of counting rows from a subquery that selects the SoLuongTon column from the SanPham table where SoLuongTon is greater than or equal to @soluongton The function effectively counts how many products have stock on hand at or above the specified threshold It then returns @dem, providing a quick way to measure inventory against a minimum stock level This approach supports inventory management and reporting by giving developers an easy means to determine the number of items meeting a given stock criterion.
Chạy thử print dbo.dem_sanpham_soluongton(30)
Câu 3: Viết function tính tiền đơn hàng có sodh nhập từ bàn phím
Code create function thanhtien_donhang (@sodh nchar(20)) returns dec(10,2) as begin declare @thanhtien_donhang dec(10,2) select @thanhtien_donhang = sum(tt.thanhtien) from
(select *, dbo.thanhtien(soluong,giatien,giamgia) as thanhtien from ChiTietDH where SoDH = @sodh) as tt return @thanhtien_donhang end
Kết quả print dbo.thanhtien_donhang('DH002')
Câu 4: Viết function tính tổng số tiền của tất cả đơn hàng mà khách hàng đó đã mua có makh nhập từ bàn phím
Code create function tongtien_khachhang (@makh nchar(20)) returns dec(10,2) as begin declare @tongtien dec(10,2) select @tongtien = sum(tt.thanhtien) from
(select c.*, d.MaKH, dbo.thanhtien(soluong,giatien,giamgia) as thanhtien from ChiTietDH c full join DonDatHang d on d.SoDH c.SoDH where d.MaKH = @makh) as tt return @tongtien end
Kết quả print dbo.tongtien_khachhang('KH001')
Câu 5: Viết function trả về danh sách các sản phẩm gồm masp, tensp, giasp từ 1 thể loại nhập từ bàn phím
Code create function sanpham_theloai(@math nchar(20)) returns table as return select MaSP, TenSP, GiaSP from SanPham s where s.MaLoai = @math
Kết quả select * from sanpham_theloai('TL002')
Câu 6: Viết function trả về danh sách người dùng, khách hàng
Code create function danhsach_nguoidung() returns @lienhe table
( ma nchar(20), nguoidung nvarchar(20) ) as begin insert into @lienhe select manv, N'Nhân viên' from NhanVien insert into @lienhe select makh, N'Khách hàng' from KhachHang return; end
Kết quả select * from danhsach_nguoidung();
2.3.8.CLUSTER INDEX và NONE CLUSTER INDEX
tạo bảng khachhang_nonindex lấy dữ liệu từ bản khachhang select * into khachhang_noindex from KhachHang
Câu 1: Tạo index cluster cho bảng khachhang_noindex
Code create clustered index id_makh on khachhang_noindex(makh)
Câu 2: Đổi tên clustered index id_makh thành id_makh_khachhang
'khachhang_noindex.id_makh', 'id_makh_khachhang',
Câu 3: Tạo nonclustered index cho cột hotenkh của bảng khachhang
Code create nonclustered index id_hotenkh_customer on khachhang(hotenkh)
Câu 4: Tạo unique nonclustered index cho email của bảng nhanvien
Code create unique nonclustered index unionclus_nhanvien on nhanvien(email)
Câu 1: Khi xoá 1 dòng trong bảng ChiTietDH thì phải tăng số lượng tồn của sản phẩm
Code create trigger tr_xoaCTDH on ChiTietDH for delete as update SanPham set SoLuongTon = SoLuongTon + SoLuong from deleted where SanPham.MaSP = deleted.MaSP
Câu 2: Khi thêm 1 dòng trong bảng ChiTietDH thì phải trừ số lượng tồn của sản phẩm
This SQL trigger, named tr_themCTDH, fires on insert into ChiTietDH to enforce inventory checks during order creation It joins the inserted rows with SanPham on MaSP and counts any cases where SoLuongTon minus SoLuong would be negative If such rows exist, it prints the message “Not enough product to sell,” rolls back the transaction, and returns without changing data If stock is sufficient, it updates SanPham to decrement SoLuongTon by the ordered quantity from the inserted rows, keeping the inventory in sync with the new order.
Câu 3: Khi thay đổi cột số lượng trên bảng ChiTietDH thì cập nhật lại số lượng tồn trong bảng sản phẩm
An SQL trigger on chitietdh fires on UPDATE to enforce inventory integrity It declares a local @D and sets it to the number of affected rows where the product in SanPham matches both the old (deleted) and new (inserted) rows and where SoLuongTon + d.SoLuong - i.SoLuong would go negative If @D > 0, the trigger prints the message 'Không đủ sản phẩm để bán', rolls back the transaction, and exits Otherwise, it updates SanPham to reflect the new on-hand stock with SoLuongTon = SoLuongTon + d.SoLuong - i.SoLuong for the affected product Overall, the trigger prevents overselling during updates and maintains stock consistency.
Câu 4: Kiểm tra nếu dem >4 thì thông báo là không được mua quá 4 mặt hàng
SQL trigger tr_soCTDH on the ChiTietDH table enforces a maximum of four items per order by evaluating the number of detail rows for the same order during an insert; it checks the existing ChiTietDH rows against the newly inserted rows (inserted pseudo-table), and if the total count for a given SoDH exceeds four, it prints "The number of items cannot exceed 4" and rolls back the transaction to prevent the insert.
Câu 1: Sử dụng cursor backup dữ liệu của cơ sở dữ liệu
This SQL Server backup script declares variables for the database name, backup path, output filename, and a date-stamped suffix, fixes the backup directory to D:\backup\, and constructs a date string in yyyyMMdd format from GETDATE() It defines a cursor that selects the database name from master.dbo.sysdatabases where the name equals QLCuaHangMayTinh_TranNgocThinh, opens the cursor, fetches the database name into @name, builds the backup filename as the path plus the database name, an underscore, the date, and a bak extension, then executes BACKUP DATABASE @name TO DISK = @filename, and finally closes and deallocates the cursor.
Câu 2: Sử dụng cursor để thực hiện đọc dữ liệu từ bảng nhân viên
The SQL Server script demonstrates a cursor-based approach to enumerate all rows from the NhanVien table by declaring variables for employee code, name, and phone number, defining a cursor over the selection, and opening it to iterate through each row During the loop, it outputs the employee code, the employee name, and the phone number for every record, then advances to the next row until all data has been processed After finishing, the cursor is closed and deallocated to release resources.
Câu: Phục hổi dữ liệu mà mình đã sao lưu
Code restore database qlmy from disk = 'D:\backup\QLCuaHangMayTinh_TranNgocThinh'
Câu: Cấp quyền xem các bảng DonDatHang, SanPham, TheLoai,
DanhGiaSanPham, ThuongHieu, ThuongHieuSanPham, NhaCungCap và
KhachHang chỉ xem được MaKH, HoTenKH, SDT, DiaChiGiaoHang, Email, quyền thêm vào bảng DonDatHang,
tạo tài khoản create login nhanvien with password ='1';
tạo người dùng create user tran_ngoc_thinh for login nhanvien;
To grant data access for the user tran_ngoc_thinh, the database administrator issued SELECT permissions across key tables, including DonDatHang (orders), SanPham (products), and NhaCungCap (suppliers) The user also receives SELECT access to KhachHang (customers) with column-level visibility limited to MaKH, HoTenKH, SDT, DiaChiGiaoHang, and Email, ensuring only these fields are readable Additional SELECT rights cover TheLoai (categories), DanhGiaSanPham (product reviews), ThuongHieu (brands), and ThuongHieuSanPham (brand-specific products), enabling comprehensive read-only access to the catalog and related data.
TỔ NG K Ế T
• Hệ thống quản lý đầy đủ các chức năng phục vụ cho việc quản lý, bán hàng
• Quản lý được doanh thu của cửa hàng
• Khi bán hàng ra thì sẽ tự động cập nhật dữ liệu tồn trong sản phẩm giúp quản lý dễ dàng hơn.
• Có phân quyền nhân viên hạn chế truy chức năng truy cập vào dữ liệu giúp bảo đảm dữ liệu
• Tự động sao lưu dữ liệu đề phòng những trường hợp dữ liệu bị mất bất khả kháng
• Hệ cơ sở dữ liệu chưa được tối ưu.
• Tiếp tục học tập, nghiên cứu nâng cao kĩ năng để dần khắc phục được những hạn chế trên
• Xây dựng bảo mật dữ liệu tốt hơn
• Tối ưu hoá cơ sở dữ liệu giúp truy cập dữ liệu nhanh hơn.