TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GTVT
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO HỌC PHẦN
CƠ SỞ DỮ LIỆU PHÂN TÁN
ĐỀ TÀI: QUẢN LÝ VẬT TƯ
Nhóm sinh viên thực hiện: Đồng Thanh Tuấn
Hồng Trần Nguyên
Đỗ Việt Hưng
Giảng viên hướng dẫn: Ths Bùi Thị Như
HÀ NỘI 2023
MỤC LỤC
PHÂN CHIA NHIỆM VỤ............................................................................................1
PHẦN I: THIẾT KẾ CÁC HỆ CSDL PHÂN TÁN...................................................2
1.1 Mơ hình cơ sở dữ liệu............................................................................................2
1.1.1 NhaCungCap....................................................................................................2
1.1.2 NhanVien.........................................................................................................2
1.1.4 PhieuNhapKho.................................................................................................2
1.2 Mơ hình cơ sở dữ liệu tập trung.............................................................................4
1.3 Thiết lập cơ sở dữ liệu............................................................................................4
1.3.1 Tạo CSDL QLVT.................................................................................................4
1.3.2 Tạo bảng KhoVatTu..........................................................................................4
1.3.3 Tạo bảng NhanVien..........................................................................................5
1.3.4 Tạo bảng DanhMucVatTu................................................................................5
1.3.5 Tạo bảng NhaCungCap.....................................................................................5
1.3.6 Tạo bảng PhieuNhapKho.................................................................................5
1.4 Cơ sở dữ liệu..........................................................................................................6
1.4.1 DanhMucVatTu................................................................................................6
1.4.2 NhaCungCap....................................................................................................7
1.4.3 NhanVien.........................................................................................................7
1.4.4 KhoVatTu..........................................................................................................7
1.4.5 PhieuXuat.........................................................................................................7
1.4.6 PhieuNhapKho.................................................................................................8
PHẦN II: PHÂN MẢNH DỮ LIỆU............................................................................9
2.1 Phân mảnh ngang...................................................................................................9
2.2 Phân mảnh dọc.......................................................................................................9
2.3 Phân mảnh hỗn hợp..............................................................................................10
PHẦN III: TRUY VẤN PHÂN MẢNH VÀ TRUY VẤN TÁI THIẾT..................11
3.1. Truy vấn phân mảnh...........................................................................................11
3.1.1 Truy vấn phân mảnh ngang...........................................................................11
3.1.2 Truy vấn phân mảnh dọc...............................................................................13
3.1.3 Truy vấn phân mảnh hỗn hợp.......................................................................14
3.2 Truy vấn tái thiết..................................................................................................14
PHẦN IV: TỐI ƯU TRUY VẤN BẰNG THUẬT TOÁN INGRES.......................17
4.1 Cho biết tên chi nhánh có tên kho = “Kho A”.....................................................17
4.2 Cho biết tên Miền có Mã miền= “mn” và có Mã kho= “k1”.............................17
PHẦN V: XÂY DỰNG CÂY ĐẠI SỐ QUAN HỆ VÀ RÚT GỌN CÂU TRUY
VẤN..............................................................................................................................19
5.1 Cho biết tên nhân viên có giới tính nam và có mã vật tư là MUT.......................21
5.2 Đưa ra tên nhân viên có mã chi nhánh là CN1 và có mã miền là mb.................23
PHÂN CHIA NHIỆM VỤ
Tên thành viên
Đồng Thanh Tuấn
Hoàng Trần Nguyên
Đỗ Việt Hưng
Nhiệm vụ
TRUY VẤN PHÂN MẢNH, TRUY VẤN TÁI THIẾT,
THUẬT TOÁN INGRES
PHÂN MẢNH DỮ LIỆU, XÂY DỰNG CÂY ĐẠI SỐ
QUAN HỆ
THIẾT KẾ CÁC HỆ CSDL PHÂN TÁN, RÚT GỌN
CÂU TRUY VẤN
1
PHẦN I: THIẾT KẾ CÁC HỆ CSDL PHÂN TÁN
1.1 Mô hình cơ sở dữ liệu
1.1.1 NhaCungCap
Field Name
Type
MaNhaCungCap
int
TenNhaCungCap
nvarchar(255)
Constraint
Primary key
1.1.2 NhanVien
Field Name
Type
MaNhanVien
int
TenNhanVien
nvarchar(255)
ChucVu
nvarchar(50)
Constraint
Primary key
1.1.3 KhoVatTu
Field Name
Type
Constraint
MaPhieuNhap
int
Primary Key
MaVatTu
int
Foreign key
SoLuongNhap
int
NgayNhap
date
1.1.4 PhieuNhapKho
Field Name
Type
Constraint
MaPhieuNhapKho
int
Primary Key
MaPhieuNhap
int
Foreign key
MaNhaCungCap
int
Foreign key
2
1.1.5 PhieuXuat
Field Name
Type
MaPhieuXuat
int
MaVatTu
int
SoLuongXuat
int
NgayXuat
date
Constraint
Primary Key
1.1.6 DanhMucVatTu
Field Name
Type
MaVatTu
int
TenVatTu
nvarchar(255)
DonViTinh
nvarchar(50)
Constraint
Primary Key
3
1.2 Mơ hình cơ sở dữ liệu tập trung
1.3 Thiết lập cơ sở dữ liệu
1.3.1 Tạo CSDL QLVT
USE [master]
GO
CREATE DATABASE [QLVT]
1.3.2 Tạo bảng KhoVatTu
CREATE TABLE KhoVatTu (
MaPhieuNhap INT PRIMARY KEY,
MaVatTu INT,
4
SoLuongNhap INT,
NgayNhap DATE,
FOREIGN KEY (MaVatTu) REFERENCES
DanhMucVatTu(MaVatTu)
);
1.3.3 Tạo bảng NhanVien
CREATE TABLE NhanVien (
MaNhanVien INT PRIMARY KEY,
TenNhanVien NVARCHAR(255) NOT NULL,
ChucVu NVARCHAR(50) NOT NULL
);
INSERT INTO NhanVien VALUES
(1, N'Nguyễn Văn A', N'Qua
0n lý'),
(2, N'Trầ5
n Thị B', N'Nhần viễn kho'),
(3, N'Đinh Văn C', N'Nhần viễn bán hàng');
1.3.4 Tạo bảng DanhMucVatTu
CREATE TABLE DanhMucVatTu (
MaVatTu INT PRIMARY KEY,
TenVatTu NVARCHAR(255) NOT NULL,
DonViTinh NVARCHAR(50) NOT NULL
);
5
INSERT INTO DanhMucVatTu VALUES
(1, N'Bàn cha
0i', N'Cái'),
(2, N'Dầ5
u ăn', N'Chai'),
(3, N'Bút bi', N'Cầy');
1.3.5 Tạo bảng NhaCungCap
CREATE TABLE NhaCungCap (
MaNhaCungCap INT PRIMARY KEY,
TenNhaCungCap NVARCHAR(255) NOT NULL
);
INSERT INTO NhaCungCap VALUES
(1, N'Công ty A'),
(2, N'Công ty B'),
(3, N'Công ty C');
1.3.6 Tạo bảng PhieuNhapKho
CREATE TABLE PhieuNhapKho (
MaPhieuNhapKho INT PRIMARY KEY,
MaPhieuNhap INT,
MaNhaCungCap INT,
FOREIGN KEY (MaPhieuNhap) REFERENCES
KhoVatTu(MaPhieuNhap),
FOREIGN KEY (MaNhaCungCap) REFERENCES
NhaCungCap(MaNhaCungCap)
);
6
INSERT INTO PhieuNhapKho VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 3);
1.3.7 Tạo bảng PhieuXuat
CREATE TABLE PhieuXuat (
MaPhieuXuat INT PRIMARY KEY,
MaVatTu INT,
SoLuongXuat INT,
NgayXuat DATE,
FOREIGN KEY (MaVatTu) REFERENCES
DanhMucVatTu(MaVatTu)
);
INSERT INTO PhieuXuat VALUES
(1, 1, 30, '2024-01-15'),
(2, 2, 20, '2024-01-16'),
(3, 3, 50, '2024-01-17');
7
1.4 Cơ sở dữ liệu
1.4.1 DanhMucVatTu
1.4.2 NhaCungCap
1.4.3 NhanVien
1.4.4 KhoVatTu
8
1.4.5 PhieuXuat
1.4.6 PhieuNhapKho
9
PHẦN II: PHÂN MẢNH DỮ LIỆU
2.1 Phân mảnh ngang
- Phân mảnh ngang quan hệ PhieuXuat được phân mảnh 3 mảnh theo SoLuongXuat:
PhieuXuat 1=σ SoLuongXuat=30 (PhieuXuat )
PhieuXuat 2=σ SoLuongXuat=20 (PhieuXuat )
PhieuXuat 3=σ SoLuongXuat=50 ¿)
- Phân mảnh ngang quan hệ DanhMucVatTu được phân mảnh 3 mảnh theo DonViTinh:
DanhMucVatTuA =σ DonViTinh=Cái (DanhMucVatTu)
DanhMucVatTuB =σ DonViTinh=Chai (DanhMucVatTu)
DanhMucVatTuC =σ DonViTinh=Cây ( DanhMucVatTu)
- 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)
2.2 Phân mảnh dọc
- Quan hệ NhanVien được phân thành 2 mảnh dọc
NhanVien1(MANHANVIEN, TENNHANVIEN)
NV1 = π MANV ,TENNHANVIEN ( NhanVien)
NhanVien2 (MANHANVIEN, CHUCVU).
NV2 = π MANV ,CHUCVU (NhanVien)
10
2.3 Phân mảnh hỗn hợp
- Quan hệ PhieuXuat phân mảnh hỗn hợp thành 3 mảnh:
PhieuXuatHH1 ( MaPhieuXuat , MaVatTu)
PX1 = π MaPhieuXuat , MaVatTu (PhieuXuat )
PhieuXuatHH2 ( MaPhieuXuat , SoLuongXuat )
PX2 = π MaPhieuXuat , SoLuongXuat ( PhieuXuat)
PhieuXuatHH3 ( MaPhieuXuat , NgayXuat )
PX3 = π MaPhieuXuat , NgayXuat (PhieuXuat )
11
PHẦN III: TRUY VẤN PHÂN MẢNH VÀ TRUY VẤN TÁI THIẾT
3.1. 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
Phân mảnh PhieuXuat1
SELECT
*
into PhieuXuat1
FROM
PhieuXuat
WHERE
SoLuongXuat = 30
Phân mảnh PhieuXuat2
SELECT
*
into PhieuXuat2
FROM
PhieuXuat
WHERE
SoLuongXuat = 20
Phân mảnh PhieuXuat3
SELECT
*
into PhieuXuat3
FROM
PhieuXuat
WHERE
SoLuongXuat = 50
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
PhieuXuat2 ∩ PhieuXuat3 =∅
12
PhieuXuat = PhieuXuat1 ∪ PhieuXuat2 ∪ PhieuXuat3
Truy vấn trên bảng DanhMucVatTu
Phân mảnh DanhMucVatTuA:
SELECT
*
into DanhMucVatTuA
FROM
DanhMucVatTu
WHERE
DonViTinh = 'Cái'
Phân mảnh DanhMucVatTuB:
SELECT
*
into DanhMucVatTuB
FROM
DanhMucVatTu
WHERE
DonViTinh = 'Chai'
Phân mảnh DanhMucVatTuC:
SELECT
*
into DanhMucVatTuC
FROM
DanhMucVatTu
WHERE
DonViTinh = 'Cây'
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
DanhMucVatTuA ∩ DanhMucVatTuB =∅, DanhMucVatTuA ∩
DanhMucVatTuC =∅
DanhMucVatTuB ∩ DanhMucVatTuC =∅
13
DanhMucVatTu = DanhMucVatTuA ∪ DanhMucVatTuB ∪ DanhMucVatTuC ∪
DanhMucVatTuD
Truy vấn trên bảng NhanVien
Phân mảnh NhanVien1:
SELECT
*
into NhanVien1
FROM
NhanVien
WHERE
ChucVu = 'Quản lý'
Phân mảnh NhanVien2:
SELECT
*
into NhanVien2
FROM
NhanVien
WHERE
ChucVu = ‘Nhân viên kho’
Phân mảnh NhanVien3:
SELECT
*
into NhanVien3
FROM
NhanVien
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∩
NhanVien3=∅
NhanVien = NhanVien1 ∪ NhanVien2 ∪ NhanVien3
14
3.1.2 Truy vấn phân mảnh dọc
Truy vấn trên bảng NhanVien
Phân mảnh NhanVienD1:
SELECT
MaNhanVien, TenNhanVien into NhanVienD1
FROM
NhanVien
Phân mảnh NhanVienD2:
SELECT
MaNhanVien, ChucVu into NhanVienD2
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
NhanVienD1 ⊆ NhanVien, NhanVienD2 ⊆ NhanVien
NhanVienD1 ∩ NhanVienD2 = ∅
NhanVien = NhanVienD1 ⋈ NhanVienD2
15
3.1.3 Truy vấn phân mảnh hỗn hợp
Phân mảnh PhieuXuatHH1:
SELECT
MaPhieuXuat, MaVatTu into PhieuXuatHH1
FROM
PhieuXuat
Phân mảnh PhieuXuatHH2:
SELECT
MaLop, SoLuongXuat into PhieuXuatHH2
FROM
PhieuXuat
Phân mảnh PhieuXuatHH3:
SELECT
MaLop, NgayXuat into PhieuXuatHH3
FROM
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
PhieuXuat = PhieuXuat1 ⋈ PhieuXuat2⋈ PhieuXuat3
PhieuXuat1 ∩ PhieuXuat2=∅ , PhieuXuat1 ∩ PhieuXuat3=∅
PhieuXuat2∩ PhieuXuat3=∅
3.2 Truy vấn tái thiếtn tái thiếtt
/* Lấy thông tin về số lượng tồn kho của từng vật tư: */
SELECT
16