Bên trên là đề tài môn cơ sở dữ liệu phân tán đề tài quản lý vật tư tại trường Đại học Công nghệ GTVT. Các bạn xem nếu cần mình support gì liên hệ email mình: matchless2003gmail.com. Cảm ơn các bạn rất nhiều
THIẾT KẾ CÁC HỆ CSDL PHÂN TÁN
Mô hình cơ sở dữ liệu
Thiết lập cơ sở dữ liệu
MaPhieuNhap INT PRIMARY KEY, MaVatTu INT,
TenNhanVien NVARCHAR(255) NOT NULL, ChucVu NVARCHAR(50) NOT NULL
(2, N'Trầ5n Thị B', N'Nhần viễn kho'),
(3, N'Đinh Văn C', N'Nhần viễn bán hàng');
FOREIGN KEY (MaPhieuNhap) REFERENCES KhoVatTu(MaPhieuNhap),
FOREIGN KEY (MaNhaCungCap) REFERENCES NhaCungCap(MaNhaCungCap)
FOREIGN KEY (MaVatTu) REFERENCES DanhMucVatTu(MaVatTu)
Cơ sở dữ liệu
PHÂN MẢNH DỮ LIỆU
Phân mảnh ngang
- Phân mảnh ngang quan hệ PhieuXuat được phân mảnh 3 mảnh theo SoLuongXuat:
- Phân mảnh ngang quan hệ DanhMucVatTu được phân mảnh 3 mảnh theo DonViTinh:
- Phân mảnh ngang quan hệ NhanVien được phân mảnh 3 mảnh theo ChucVu:
NhanVien1 = σ ChucVu=Quản lý ( NhanVien)
NhanVien2 = σ ChucVu= Nhân viên kho ( NhanVien )
NhanVien3 = σ ChucVu=Nhân viên bán hàng ( NhanVien)
Phân mảnh dọc
- Quan hệ NhanVien được phân thành 2 mảnh dọc
Phân mảnh hỗn hợp
- Quan hệ PhieuXuat phân mảnh hỗn hợp thành 3 mảnh:
TRUY VẤN PHÂN MẢNH VÀ TRUY VẤN TÁI THIẾT
Truy vấn phân mảnh
3.1.1 Truy vấn phân mảnh ngang
Truy vấn trên bảng PhieuXuat
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
PhieuXuat1 ⊆ PhieuXuat, PhieuXuat2 ⊆ PhieuXuat, PhieuXuat3 ⊆ PhieuXuat PhieuXuat1 ∩ PhieuXuat2 = ∅ , PhieuXuat1 ∩ PhieuXuat3
Truy vấn trên bảng DanhMucVatTu
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
DanhMucVatTuA ⊆ DanhMucVatTu, DanhMucVatTuAB⊆ DanhMucVatTu, DanhMucVatTuC⊆ DanhMucVatTu
DanhMucVatTu = DanhMucVatTuA ∪ DanhMucVatTuB ∪ DanhMucVatTuC ∪ DanhMucVatTuD
Truy vấn trên bảng NhanVien
WHERE ChucVu = ‘Nhân viên kho’
WHERE ChucVu = ‘Nhân viên bán hàng’
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
NhanVien1 ⊆ NhanVien, NhanVien2 ⊆ NhanVien, NhanVien3 ⊆ NhanVien
NhanVien1 ∩ NhanVien2 = ∅ , NhanVien1 ∩ NhanVien3= ∅ , NhanVien2 ∩
3.1.2 Truy vấn phân mảnh dọc
Truy vấn trên bảng NhanVien
SELECT MaNhanVien, TenNhanVien into NhanVienD1
SELECT MaNhanVien, ChucVu into NhanVienD2
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
SELECT MaPhieuXuat, MaVatTu into PhieuXuatHH1
SELECT MaLop, SoLuongXuat into PhieuXuatHH2
SELECT MaLop, NgayXuat into PhieuXuatHH3
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
PhieuXuat1 ⊆ PhieuXuat, PhieuXuat2 ⊆ PhieuXuat, PhieuXuat3 ⊆ PhieuXuat PhieuXuat = PhieuXuat1 ⋈ PhieuXuat2⋈ PhieuXuat3
3.2 Truy v n tái thi t ấn tái thiết ết
/* Lấy thông tin về số lượng tồn kho của từng vật tư: */
SELECT dv.MaVatTu, dv.TenVatTu, dv.DonViTinh,
COALESCE(SUM(kvt.SoLuongNhap), 0) - COALESCE(SUM(px.SoLuongXuat),
LEFT JOIN KhoVatTu kvt ON dv.MaVatTu = kvt.MaVatTu
LEFT JOIN PhieuXuat px ON dv.MaVatTu = px.MaVatTu
GROUP BY dv.MaVatTu, dv.TenVatTu, dv.DonViTinh;
/* Lấy thông tin về các phiếu nhập kho và nhà cung cấp: */
SELECT pnk.MaPhieuNhapKho, dv.TenVatTu, kvt.SoLuongNhap, ncc.TenNhaCungCap
JOIN KhoVatTu kvt ON pnk.MaPhieuNhap = kvt.MaPhieuNhap
JOIN DanhMucVatTu dv ON kvt.MaVatTu = dv.MaVatTu
JOIN NhaCungCap ncc ON pnk.MaNhaCungCap = ncc.MaNhaCungCap;
/* Lấy thông tin về các phiếu xuất kho và nhân viên thực hiện: */
SELECT px.MaPhieuXuat, dv.TenVatTu, px.SoLuongXuat, nv.TenNhanVien, nv.ChucVu, px.NgayXuat
JOIN DanhMucVatTu dv ON px.MaVatTu = dv.MaVatTu
JOIN NhanVien nv ON px.MaVatTu = nv.MaNhanVien;
Truy vấn tái thiết
4.1 Cho biết tên chi nhánh có tên kho = “Kho A” p: SELECT ChiNhanh.TenChiNhanh
WHERE ChiNhanh.MaKho = Kho.Makho AND Kho.TenKho = “ Kho A” p1: SELECT Kho.Makho into Kho1
WHERE Kho.TenKho = “Kho A” p2: SELECT TenChiNhanh
WHERE ChiNhanh.MaKho = Kho1.MaKho
Truy vấn p đã được rút gọn thành chuỗi truy vấn p1p2.
4.2 Cho biết tên Miền có Mã miền= “mn” và có Mã kho= “k1” q: SELECT TenMien
WHERE Mien.MaMien = ChiNhanh.MaMien AND makho= “k1” AND Mien.MaMien = “mn”
TỐI ƯU TRUY VẤN BẰNG THUẬT TOÁN INGRES
Cho biết tên chi nhánh có tên kho = “Kho A”
WHERE ChiNhanh.MaKho = Kho.Makho AND Kho.TenKho = “ Kho A” p1: SELECT Kho.Makho into Kho1
WHERE Kho.TenKho = “Kho A” p2: SELECT TenChiNhanh
WHERE ChiNhanh.MaKho = Kho1.MaKho
Truy vấn p đã được rút gọn thành chuỗi truy vấn p1p2.
Cho biết tên Miền có Mã miền= “mn” và có Mã kho= “k1”
WHERE Mien.MaMien = ChiNhanh.MaMien AND makho= “k1” AND Mien.MaMien = “mn” q1: SELECT ChiNhanh.MaMien into ChiNhanh1
WHERE Mien.MaMien = ChiNhanh1.MaMien AND MaMien= “mn” q2: SELECT TenMien into ChiNhanh2
WHERE Mien.MaMien = ChiNhanh1.MaMien q3: SELECT TenMien
Truy vấn q đã được rút gọn thành chuỗi truy vấn q1 q2q3.
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 nhân viên có giới tính nam và có mã vật tư là MUT
WHERE NV.MANV = XuatHang.MANV AND GioiTinh = “1” AND MaVatTu =
Cây đại số quan hệ ban đầu
=> Câu truy vấn sau khi rút gọn
WHERE XuatHang2.MANV = NV32.MANV AND GioiTinh = “1” AND MaVatTu= “MUT”
Đưa ra tên nhân viên có mã chi nhánh là CN1 và có mã miền là mb
WHERE NV.MACN= ChiNhanh.MACN
AND ChiNhanh.MaMien = Mien.MaMien
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