Quản lý bán hàng Cơ sở dữ liệu phân tán UTT trường đại học công nghệ giao thông vận tải. Nếu các bạn thấy tài liệu hay hãy tải về và sử dụng nhé. Chúc các bạn được thật nhiều điểm cao trong kỳ thi tới. Thân ái
THIẾT KẾ CÁC HỆ CSDL PHÂN TÁN
Mô hình cơ sở dữ liệu
Bài viết này mô tả cấu trúc dữ liệu của một bảng thông tin nhân viên, bao gồm các trường như "manv" (Mã nhân viên) với kiểu dữ liệu Varchar 10, "tennv" (Tên nhân viên) với kiểu Nvarchar 100, "ngaysinh" (Ngày sinh) với kiểu Date, "ngaylamviec" (Ngày làm việc) với kiểu Date, "diachi" (Địa chỉ) với kiểu Nvarchar 100, "sdt" (Số điện thoại) với kiểu Varchar 10, và "chucvu" (Chức vụ) với kiểu Nvarchar 50.
Tên trường Kiểu Độ rộng Giải thích chucvu Nvarchar 50 Khóa chính, Chức vụ luongcoban Money Luong cơ bản phucap Money Phụ cấp
Bài viết mô tả cấu trúc bảng dữ liệu khách hàng với các trường sau: "makh" (Mã khách hàng) có kiểu dữ liệu Varchar 10, là khóa chính; "tenkh" (Tên khách hàng) có kiểu Nvarchar 100; "gioitinh" (Giới tính) có kiểu Nvarchar 15; "diachi" (Địa chỉ) có kiểu Nvarchar 100; "sdt" (Số điện thoại) có kiểu Varchar 10; và "email" có kiểu Varchar 100.
Tên trường Kiểu Độ rộng Giải thích maloaisp Varchar 10 Khóa chính, Mã loại sản phẩm tenloaisp Nvarchar 100 Tên loại sản phẩm
Tên trường Kiểu Độ rộng Giải thích masp Varchar 10 Khóa chính, Mã sản phẩm tensp Nvarcha r
100 Tiêu đề sản phẩm maloaisp Varchar 10 Mã loại sản phẩm mancc Varchar 10 Mã nhà cung cấp gia Money Mã giá soluong Int Số Luong sản phẩm
Trường dữ liệu bao gồm: "mancc" là khóa chính với kiểu dữ liệu Varchar 10, "tenncc" chứa tên nhà cung cấp với kiểu Nvarchar 100, "diachi" lưu trữ địa chỉ nhà cung cấp cũng với kiểu Nvarchar 100, và "sdt" là số điện thoại với kiểu Varchar 10.
Trường "Tên trường" có kiểu "Độ rộng" và giải thích là "madh" với loại dữ liệu Varchar 10, là khóa chính Mã đơn hàng được định nghĩa bằng trường "manv" với kiểu Varchar 10, trong khi "makh" là mã nhân viên cũng có kiểu Varchar 10 Mã khách hàng được lưu trữ trong trường "diachi" với loại dữ liệu Nvarchar 100, thể hiện địa chỉ của khách hàng Ngày đặt hàng được ghi nhận qua trường "ngaydat" với kiểu dữ liệu Date, và ngày giao hàng được lưu trong trường "ngaygiao" cũng với kiểu Date.
Trường "Tên trường" có kiểu dữ liệu "Varchar" với độ rộng 10, đóng vai trò là khóa chính Trường "Mã đơn hàng" (masp) cũng có kiểu "Varchar" và độ rộng 10, được xác định là khóa chính Trường "Mã sản phẩm" có kiểu dữ liệu "gia" là "Money", dùng để lưu trữ giá sản phẩm Trường "soluong" có kiểu dữ liệu "Int", dùng để ghi nhận số lượng sản phẩm Cuối cùng, trường "giamgia" có kiểu "Money", dùng để lưu trữ tiền giảm giá.
Thiết lập cơ sở dữ liệu
( manv VARCHAR (10) PRIMARY KEY NOT NULL, tennv NVARCHAR (100), ngaysinh DATE, ngaylamviec DATE, dichi NVARCHAR (100), sdt VARCHAR (50), chucvu NVARCHAR(50),
( chucvu NVARCHAR(50) PRIMARY KEY NOT NULL, luongcoban MONEY, phucap MONEY
( makh VARCHAR (10) PRIMARY KEY NOT NULL, tenkh NVARCHAR (100), dichi NVARCHAR (100), sdt VARCHAR (50), email VARCHAR (50)
5 Tạo bảng Loại sản phẩm
( maloaisp VARCHAR (10) PRIMARY KEY NOT NULL, tenloaisp NVARCHAR (100),
6 Tạo bảng Nhà cung cấp
( mancc VARCHAR (10) PRIMARY KEY NOT NULL, dichi NVARCHAR (100), sdt VARCHAR (50)
( masp VARCHAR (10) PRIMARY KEY NOT NULL, tensp NVARCHAR (100), maloaisp VARCHAR (10) NOT NULL, mancc VARCHAR (10) NOT NULL, soluong INT, gia MONEY ,
( madh VARCHAR (10) PRIMARY KEY NOT NULL, manv VARCHAR (10) NOT NULL, makh VARCHAR (10) NOT NULL, dichi NVARCHAR (100), ngaydat DATE, ngaygiao DATE
9 Tạo bảng Chi tiết đơn hàng
( madh VARCHAR (10) NOT NULL, masp VARCHAR (10) NOT NULL, gia MONEY, soluong INT, giamgia MONEY,
CONSTRAINT pk_ChiTietDonHang PRIMARY KEY (madh,masp)
To establish relationships between data tables in a database, you can use foreign key constraints For example, in the 'SanPham' table, you can add a foreign key constraint for 'mancc' referencing the 'nhacungcap' table and 'maloaisp' referencing the 'loaisp' table Similarly, in the 'DonHang' table, you can create foreign key constraints for 'makh' referencing the 'khachhang' table and 'manv' referencing the relevant employee table This ensures data integrity and enforces relationships among the tables.
NhanVien(manv) alter table ChiTietDonHang add constraint fk_chitiet_DonHang foreign key (madh) references
DonHang(madh) alter table ChiTietDonHang add constraint fk_chitiet_SanPham foreign key (masp) references
Cơ sở dữ liệu
PHÂN MẢNH DỮ LIỆU
Phân mảnh ngang
- Phân mảnh ngang quan hệ Luong được phân mảnh 3 mảnh theo các chức vụ:
● Luong1= σ chucvu=Quản lý ( Luong)
● Luong2= σ chucvu=Nhân viên} (Luong¿
● Luong3= σ chucvu=Thu ngân ( Luong)
- Phân mảnh ngang quan hệ NhaCungCap được phân mảnh 3 mảnh theo các chức vụ:
● NCC1= σ diachi=Hà Nội (NhaCungCap )
● NCC2= σ diachi=Thanh Hóa} (NhaCungCap ¿
● NCC3= σ diachi=Hồ Chí Minh (NhaCungCap)
- Phân mảnh ngang nguyên thủy trên quan hệ LoaiSP thành 4 mảnh ngang như sau:
- Phân mảnh ngang dẫn xuất trên quan hệ SanPham theo quan hệ LoaiSP thành
Phân mảnh dọc
- Quan hệ NhanVien được phân thành 2 mảnh dọc
● NhanVien1(manv, tennv, ngaysinh, ngaylamviec, diachi, sdt) NV1 = π manv , tennv ,ngaysinh , ngaylamviec ,diachi , sdt ( NhanVien)
Phân mảnh hỗn hợp
- Quan hệ SanPham phân mảnh hỗn hợp thành 4 mảnh:
● SP3 (masp, tensp, gia, soluong) với gia 500.000
Đồ thị phân mảnh và ảnh vật lý của quan hệ tổng thể
Sơ đồ định vị tại các trạm làm việc được chia thành 3 trạm:
● SITE 1: NV1, NV2, Luong1, Luong2, NCC1, LoaiSP1, SP1, SP3, DH
● SITE 2: NV1, NCC2, LoaiSP1, LoaiSP2, LoaiSP3, LoaiSP4, SP2, SP4, DH
● SITE 3: NV1, NV2, Luong3, NCC3, LoaiSP3, SP3, SP4, KH, DH, CTDH
III TRUY VẤN PHÂN MẢNH VÀ TRUY VẤN TÁI THIẾT
3.1.1 Truy vân phân mảnh ngang
❖ Truy vấn trên bảng Luong
Phân mảnh Luong1: select * into Luong1 from Luong where chucvu = 'Quản lý'
Phân mảnh Luong2: select * into Luong2 from Luong where chucvu = 'Nhân viên'
Phân mảnh Luong3: select * into Luong3 from Luong where chucvu = 'Thu ngân'
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
Luong1 ⊆ Luong, Luong2 ⊆ Luong, Luong3 ⊆ Luong
Luong1 ∩ Luong2 = ∅ , Luong1 ∩ Luong3 = ∅ , Luong2 ∩ Luong3 = ∅
❖ Truy vấn trên bảng NhaCungCap
Phân mảnh NCC1: select * into NCC1 from NhaCungCap where diachi = 'Hà Nội'
Phân mảnh NCC2: select * into NCC2 from NhaCungCap where diachi = 'Thanh Hóa'
Phân mảnh NCC3: select * into NCC3 from NhaCungCap where diachi = 'Hồ Chí Minh'
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
NCC1 ⊆ NhaCungCap, NCC2 ⊆ NhaCungCap, NCC3 ⊆ NhaCungCap NhaCungCap = NCC1 ∪ NCC2 ∪ NCC3
NCC1 ∩ NCC2 = ∅ , NCC1 ∩ NCC3 = ∅ , NCC2 ∩ NCC3 = ∅
❖ Truy vấn trên bảng LoaiSP
Phân mảnh LoaiSP1: select * into LoaiSP1 from LoaiSP where maloaisp = 'DGD'
Phân mảnh LoaiSP2: select * into LoaiSP2 from LoaiSP where maloaisp = 'QA'
Phân mảnh LoaiSP3: select * into LoaiSP3 from LoaiSP where maloaisp = 'TP'
Phân mảnh LoaiSP4: select * into LoaiSP4 from LoaiSP where maloaisp = 'VPP'
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
LoaiSP1 ⊆ LoaiSP, LoaiSP2 ⊆ LoaiSP, LoaiSP3 ⊆ LoaiSP, LoaiSP4 ⊆ LoaiSP LoaiSP1 ∩ LoaiSP2 = ∅ , LoaiSP1 ∩ LoaiSP3= ∅ , LoaiSP1 ∩ LoaiSP4= ∅ LoaiSP2 ∩ LoaiSP3 = ∅ , LoaiSP2 ∩ LoaiSP4= ∅ , LoaiSP3 ∩ LoaiSP4= ∅ LoaiSP = LoaiSP1 ∪ LoaiSP2 ∪ LoaiSP3 ∪ LoaiSP4
3.1.2 Truy vấn phân mảnh dọc
❖ Truy vấn trên bảng NhanVien
Phân mảnh NV1: select manv, tennv, ngaysinh, ngaylamviec, diachi, sdt into NV1 from NhanVien
Phân mảnh NV2: select manv, chucvu into NV2 from NhanVien
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
3.1.3 Truy vấn phân mảnh hỗn hợp
Phân mảnh SP1: select masp, maloaisp into SP1 from SanPham
Phân mảnh SP2: select masp, tensp, mancc into SP2 from SanPham
Phân mảnh SP3: select masp, tensp, gia, soluong into SP3 from SanPham where gia 500000
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
SP1 ⊆ SanPham, SP2 ⊆ SanPham, SP3 ⊆ SanPham, SP4 ⊆ SanPham SanPham = SP1 ⋈ SP2 ⋈ (SP3 ∪ SP4)
SP1 ∩ SP2 = ∅ , SP1 ∩ SP3 = ∅ , SP1 ∩ SP4 = ∅ , SP2 ∩ SP3 = ∅ ,
❖ Tái thiết bảng NhanVien select * into NhanVien from NV1, NV2 where NV1.manv= NV2.manv
❖ Tái thiết bảng NhaCungCap select * into NhaCungCap from NCC1, NCC2, NCC3
❖ Tái thiết bảng Luong select * into Luong from Luong1, Luong2, Luong3
❖ Tái thiết bảng LoaiSP select * into LoaiSP from LoaiSP1, LoaiSP2, LoaiSP3, LoaiSP4
❖ Tái thiết bảng SanPham select * into SanPham from SP1, SP2, ( Select * From SP3 Union
Select * From SP4) as SP where SP1.masp= SP2.masp and SP1.masp = SP.masp
TỐI ƯU TRUY VẤN BẰNG THUẬT TOÁN INGRES
Cho biết tên các khách hàng đã mua sản phẩm có tên là “Mỳ hảo hảo chua cay “
To retrieve customer information for the product "Mỳ hảo hảo chua cay," a series of SQL queries are executed First, the product ID (masp) is selected from the SanPham table based on the product name Next, customer names (tenkh) are obtained by joining the KhachHang, DonHang, and ChiTietDonHang tables using the retrieved masp This process is further refined by selecting the order ID (madh) linked to the product ID, followed by extracting customer details associated with that order Ultimately, the final query retrieves the customer names corresponding to the identified customer IDs, ensuring a comprehensive data retrieval process.
Sử dụng phép thế bộ :
Assuming the customer codes are KH4 and KH3, the corresponding SQL queries to retrieve customer names are: "SELECT tenkh FROM KhachHang WHERE makh = 'KH4'" and "SELECT tenkh FROM KhachHang WHERE makh = 'KH3'."
Đưa ra những nhân viên đã lập hoá đơn cho những khách hàng có tên là “Nguyễn Văn Dũng”
The query begins by selecting all employee details associated with the customer named "Nguyễn Văn Dũng." It first retrieves the customer ID from the KhachHang table, which is stored in a temporary table (TG1) Next, it retrieves employee information by joining the NhanVien, DonHang, and TG1 tables, filtering based on the employee ID from the DonHang table stored in another temporary table (TG2) The final result returns the relevant employee details linked to the specified customer.
Sử dụng phép thế bộ:
Giả sử manv ở đây là NV2 ta có các câu truy vấn tương ứng select nhanVien.* from nhanVien where manv = ‘NV2’
Đưa ra tên sản phẩm được mua trong tháng 12
The SQL query retrieves product details from the tables SanPham, ChiTietDonHang, and DonHang, specifically focusing on orders placed in December Initially, it selects the order IDs from DonHang for that month Then, it identifies the product IDs associated with those orders Finally, it extracts the product names corresponding to the selected product IDs, providing a comprehensive overview of the products ordered in December.
Using the substitution method, let masp represent SP1 and SP2 The corresponding queries are: "SELECT tensp FROM SanPham WHERE masp = 'SP1'" and "SELECT tensp FROM SanPham WHERE masp = 'SP2'."
XÂY DỰNG CÂY ĐẠI SỐ QUAN HỆ VÀ RÚT GỌN CÂU TRUY VẤN
Cho biết tên sản phẩm thuộc loại Văn phòng phẩm và có giá > 10000
select tensp from sanpham a, loaisp b where a.maloaisp=b.maloaisp and b.tenloaisp= N'Văn phòng phẩm' and gia>10000
Cây đại số quan hệ ban đầu
Cây đại số quan hệ rút gọn
The query retrieves the names of products from the SP4 table, specifically office supplies, by joining SP1 and LoaiSP4 based on matching product and category IDs, while filtering for items priced over 10,000.
Đưa ra tên sản phẩm của NCC ở Hà Nội và được bán trong năm 2023
From Sanpham a, Donhang b, Chitietdonhang c, nhacungcap d
Where a.masp = c.masp and c.madh = b.madh and a.mancc=d.mancc and d.diachi = N'Hà Nội' and year(ngaydat) = 2023
Cây đại số quan hệ ban đầu
Cây đại số quan hệ rút gọn
Câu truy vấn sau khi rút gọn
From SP2, Donhang b, Chitietdonhang c, NCC2
Where SP2.masp = c.masp and c.madh = b.madh and SP2.mancc=NCC2.mancc and NCC2.diachi = N'Hà Nội' and year(ngaydat) = 2023
Đưa ra tên sản phẩm thuộc loại Thực phẩm, đã được bán ra ngày '07/08/2023' tổng hóa đơn = 860000
From Sanpham a, Chitietdonhang b, donhang c, loaisp d
Where a.masp = b.masp and b.madh=c.madh and a.maloaisp=d.maloaisp and c.ngaydat='2020-08-07' and (b.gia*b.soluong-giamgia) 0000 and d.maloaisp='TP'
Cây đại số quan hệ ban đầu
Cây đại số quan hệ rút gọn
Câu truy vấn sau khi rút gọn
From SP1, Chitietdonhang b, donhang c, LoaiSP3
Where SP1.masp = b.masp and b.madh=c.madh and SP1.maloaisp= LoaiSP3.maloaisp and c.ngaydat='2020-08-07' and (b.gia*b.soluong-giamgia) 0000 and LoaiSP3.maloaisp='TP'
Đưa ra tên nhân viên trên 20 tuổi có lương >=4000000 và chức vụ không phải Quản lý
Where a.chucvu=b.chucvu and YEAR(GETDATE()) - YEAR(ngaysinh) > 20 and luongcoban >= 4000000 and a.chucvu N'Quản lý'
Cây đại số quan hệ ban đầu
Cây đại số quan hệ rút gọn
Câu truy vấn sau khi rút gọn
Where NV22.chucvu=Luong22.chucvu and NV11.chucvu N'Quản lý' andYEAR(GETDATE())YEAR(ngaysinh) > 20 and luongcoban >= 4000000
Tên khách hàng ở Hà Nội có hóa đơn do nhân viên 'Bạch Minh Tuấn' tạo ngày 10/12/2023
Where a.makh=b.makh and b.manv=c.manv and a.diachi = N'Hà Nội' and c.tennv=N'Bạch Minh Tuấn' and b.ngaydat='10-12-2023'
Cây đại số quan hệ ban đầu
Cây đại số quan hệ rút gọn
Câu truy vấn sau khi rút gọn
Where a.makh=b.makh and b.manv=NV1.manv and a.diachi = N'Hà Nội' and NV1.tennv=N'Bạch Minh Tuấn' and b.ngaydat='10-12-2023'