TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GIAO THÔNG VẬN TẢI
KHOA CÔNG NGHỆ THÔNG TIN
-----o0o-----
HỌC PHẦN: CƠ SỞ DỮ LIỆU PHÂN TÁN
BÁO CÁO BÀI TẬP LỚN
ĐỀ TÀI: QUẢN LÝ BÁN Ơ TƠ
Nhóm sinh viên thực hiện: Nhóm 18
Lớp: 72DCTT21
Giảng viên hướng dẫn : Bùi Thị Như
Thành viên thực hiện: Lại Khánh Nam
Đinh Quốc Khánh
Nguyễn Thế Khoan
HÀ NỘI 2024
MỤC LỤC
1
I. THIẾT KẾ CÁC HỆ CSDL PHÂN TÁN......................................................5
1.1. Mơ hình cơ sở dữ liệu.............................................................................5
1.1.1. Nhân Viên...........................................................................................5
1.1.2. Lương.................................................................................................5
1.1.3. Khách hàng.........................................................................................5
1.1.4. Loại sản phẩm.....................................................................................5
1.1.5. Sản phẩm............................................................................................6
1.1.6. Nhà cung cấp......................................................................................6
1.1.7. Đơn hàng............................................................................................6
1.1.8. Chi tiết đơn hàng................................................................................6
1.2.Mơ hình cơ sở dữ liệu tập trung................................................................7
1.3. Thiết lập cơ sở dữ liệu............................................................................7
1. Tạo CSDL Websitebanoto.......................................................................7
2. Tạo bảng Nhân viên................................................................................7
3. Tạo bảng Lương.......................................................................................8
4. Tạo bảng Khách hàng.............................................................................8
5. Tạo bảng Loại sản phẩm.........................................................................8
6. Tạo bảng Nhà cung cấp...........................................................................8
7. Tạo bảng Sản phẩm.................................................................................8
8. Tạo bảng Đơn hàng.................................................................................9
9. Tạo bảng Chi tiết đơn hàng.....................................................................9
10.
Tạo Liên Kết Giữa Các Bảng Dữ Liệu................................................9
1.4. Cơ sở dữ liệu..........................................................................................10
1.4.1. Nhân Viên.........................................................................................10
1.4.2. Lương...............................................................................................10
1.4.3. Nhà cung cấp....................................................................................10
1.4.4. Loại sản phẩm...................................................................................10
1.4.5. Sản phẩm..........................................................................................10
1.4.6. Khách hàng.......................................................................................11
2
1.4.7. Đơn hàng..........................................................................................11
1.4.8. Chi tiết đơn hàng..............................................................................11
II. PHÂN MẢNH DỮ LIỆU.............................................................................12
2.1. Phân mảnh ngang.................................................................................12
2.2. Phân mảnh dọc......................................................................................12
2.3. Phân mảnh hỗn hợp..............................................................................13
2.4. Đồ thị phân mảnh và ảnh vật lý của quan hệ tổng thể......................13
III. TRUY VẤN PHÂN MẢNH VÀ TRUY VẤN TÁI THIẾT.....................15
3.1. Truy vấn phân mảnh..............................................................................15
3.1.1. Truy vấn phân mảnh ngang.................................................................15
3.1.2. Truy vấn phân mảnh dọc.....................................................................17
3.1.3. Truy vấn phân mảnh hỗn hợp.............................................................17
3.2 Truy vấn tái thiết......................................................................................18
IV. TỐI ƯU TRUY VẤN BẰNG THUẬT TOÁN INGRES.........................19
4.1. Cho biết tên loại sản phẩm Madaz và có giá tiền = 500000000........19
4.2. Cho biết tên sản phẩm được nhập từ nhà cung cấp tại Hà Nội........19
V. XÂY DỰNG CÂY ĐẠI SỐ QUAN HỆ VÀ RÚT GỌN CÂU TRUY VẤN20
1. Cho biết tên sản phẩm thuộc loại Rolls Roys và có giá > 400000000....20
2. Đưa ra tên sản phẩm của NCC ở Hà Nội và được bán trong năm 202023
3. Đưa ra tên sản phẩm thuộc loại Honda, đã được bán ra ngày '19/10/2020'
tổng hóa đơn >200000000..............................................................................24
3
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. Nhân Viên
Tên trường
Kiểu
Độ rộng
Giải thích
Manv
Varchar
50
Khóa chính, Mã nhân viên
Tennv
50
Tên nhân viên
Ngaysinh
Nvarcha
r
Date
Ngaylamviec
Date
Diachi
Nvarcha
r
Varchar
Max
Địa chỉ
50
Số điện thoại
Nvarcha
r
50
Chức vụ
Kiểu
Nvarcha
r
Money
Money
Độ rộng
50
Giải thích
Khóa chính, Chức vụ
Kiểu
Varchar
Nvarcha
r
nvarchar
Nvarcha
r
Varchar
Varchar
Độ rộng
50
50
Giải thích
Khóa chính, Mã khách hàng
Tên khách hàng
50
Max
Giới tính
Địa chỉ
50
50
Số điện thoại
Email
Sdt
Chucvu
Ngày sinh
Ngày làm việc
1.1.2. Lương
Tên trường
Chucvu
Luongcoban
Phucap
Lương cơ bản
Phụ cấp
1.1.3. Khách hàng
Tên trường
Makh
Tenkh
Gioitinh
Diachi
Sdt
Email
4
1.1.4. Loại sản phẩm
Tên trường
Maloaisp
Tenloaisp
Kiểu
Varchar
Nvarcha
r
Độ rộng
50
Max
Giải thích
Khóa chính, Mã loại sản phẩm
Tên loại sản phẩm
1.1.5. Sản phẩm
Tên trường
Kiểu
Độ rộng
Giải thích
Masp
Varchar
50
Khóa chính, Mã sản phẩm
Tensp
Nvarcha
r
Max
Maloaisp
Varchar
50
Mã loại sản phẩm
Mancc
Varchar
50
Mã nhà cung cấp
gia
Money
Mã giá
Soluong
Int
Số lượng sản phẩm
Tiêu đề sản phẩm
1.1.6. Nhà cung cấp
Tên trường
Mancc
Tenncc
Diachi
Sdt
Kiểu
Varchar
Nvarcha
r
Nvarcha
r
Varchar
Độ rộng
50
50
Giải thích
Khóa chính, Mã nhà cung cấp
Tên nhà cung cấp
Max
Địa chỉ
50
Số điện thoại
Kiểu
Varchar
Varchar
Varchar
Nvarcha
Độ rộng
50
50
50
Max
Giải thích
Khóa chính, Mã đơn hàng
Mã nhân viên
Mã khách hàng
Địa chỉ
1.1.7. Đơn hàng
Tên trường
Madh
Manv
Makh
Diachi
5
Ngaydat
Ngaygiao
r
Date
Date
Ngày đặt
Ngày giao
1.1.8. Chi tiết đơn hàng
Tên trường
Madh
Masp
Gia
Soluong
Giamgia
Kiểu
Varcha
r
Varcha
r
Money
Int
Money
Độ rộng
50
Giải thích
Khóa chính, Mã đơn hàng
50
Khóa chính, Mã sản phẩm
Gía sản phẩm
Số lượng sản phẩm
Tiền giảm giá
6
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. Tạo CSDL Websitebanoto
CREATE DATABASE Website_ bán ô tô
USE Website_bán ô tô
2. Tạo bảng Nhân viên
CREATE TABLE nhanvien
(
manv
VARCHAR (50) PRIMARY KEY NOT NULL,
tennv
NVARCHAR (50),
7
ngaysinh
ngaylamviec
dichi
sdt
chucvu
DATE,
DATE,
NVARCHAR (Max),
VARCHAR (50),
NVARCHAR(50),
)
3. Tạo bảng Lương
CREATE TABLE luong
(
chucvu
NVARCHAR(50) PRIMARY KEY NOT NULL,
luongcoban
MONEY,
phucap
MONEY
)
4. Tạo bảng Khách hàng
CREATE TABLE khachhang
(
Makh
VARCHAR (50) PRIMARY KEY NOT NULL,
tenkh
NVARCHAR (50),
dichi
NVARCHAR (Max),
sdt
VARCHAR (50),
email
VARCHAR (50)
)
5. Tạo bảng Loại sản phẩm
CREATE TABLE loaisp
(
maloaisp
tenloaisp
VARCHAR (50) PRIMARY KEY NOT NULL,
NVARCHAR (Max),
)
6. Tạo bảng Nhà cung cấp
CREATE TABLE nhacungcap
(
mancc
VARCHAR (50) PRIMARY KEY NOT NULL,
8
dichi
sdt
NVARCHAR (Max),
VARCHAR (50)
)
7. Tạo bảng Sản phẩm
CREATE TABLE sanpham
(
masp
VARCHAR (50) PRIMARY KEY NOT NULL,
tensp
NVARCHAR (50),
maloaisp
VARCHAR (50) NOT NULL,
mancc
VARCHAR (50) NOT NULL,
soluong
INT,
gia
MONEY ,
)
8. Tạo bảng Đơn hàng
CREATE TABLE donhang
(
madh
VARCHAR (50) PRIMARY KEY NOT NULL,
manv
VARCHAR ( 50) NOT NULL,
makh
VARCHAR (50) NOT NULL,
dichi
NVARCHAR (Max),
ngaydat
DATE,
ngaygiao
DATE
)
9. Tạo bảng Chi tiết đơn hàng
CREATE TABLE chitietdonhang
(
madh
VARCHAR (50) NOT NULL,
masp
VARCHAR (50) NOT NULL,
gia
MONEY,
soluong
INT,
giamgia
MONEY,
CONSTRAINT pk_chitietdonhang PRIMARY KEY (madh,masp)
)
9
10.Tạo Liên Kết Giữa Các Bảng Dữ Liệu
alter table sanpham
add
constraint
fk_nhacungcap
foreign
key
(mancc)
references
nhacungcap(mancc)
alter table sanpham
add constraint fk_loaisp foreign key (maloaisp) references loaisp(maloaisp)
alter table donhang
add constraint fk_donhang_khachhang foreign key (makh)
khachhang(makh)
alter table donhang
add constraint fk_donhang_nhanvien foreign key (manv)
nhanvien(manv)
alter table chitietdonhang
add constraint fk_chitiet_donhang
donhang(madh)
alter table chitietdonhang
add constraint fk_chitiet_sanpham
sanpham(masp)
1.4. Cơ sở dữ liệu
references
references
foreign
key
(madh)
references
foreign
key
(masp)
references
1.4.1. Nhân Viên
10
1.4.2. Lương
1.4.3. Nhà cung cấp
1.4.4. Loại sản phẩm
1.4.5. Sản phẩm
11
1.4.6. Khách hàng
1.4.7. Đơn hàng
1.4.8. Chi tiết đơn hàng
II. PHÂN MẢNH DỮ LIỆU
2.1.
Phân mảnh ngang
- Phân mảnh ngang quan hệ Luong được phân mảnh 3 mảnh theo lương cơ bản:
Luong1=σ Luongcoban >16000000 (Luong)
12
Luong2=σ Luongcoban=16000000 (Luong)
Luong3=σ Luongcoban <16000000 (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=Hà Nam (NhaCungCap)
NCC3=σ diachi=Nam Định (NhaCungCap)
- Phân mảnh ngang nguyên thủy trên quan hệ LoaiSP thành 4 mảnh ngang như
sau:
LoaiSP1= σ maloaisp=RR ( LoaiSP)
LoaiSP2=σ maloaisp=HD ( LoaiSP)
LoaiSP3=σ maloaisp=TYT (LoaiSP)
LoaiSP4=σ maloaisp=MD ( LoaiSP)
- Phân mảnh ngang dẫn xuất trên quan hệ SanPham theo quan hệ LoaiSP thành 4
mảnh:
SanPham1 = SanPham
SanPham2 = SanPham
SanPham3 = SanPham
SanPham4 = SanPham
2.2.
LoaiSP1
LoaiSP2
LoaiSP3
LoaiSP4
Phân mảnh dọc
- Quan hệ NhanVien được phân thành 3 mảnh dọc
NhanVien1(Manv, Tennv, Ngaysinh, Sdt)
NV1 = π MaNV ,TenNV , Ngaysinh ,SDT ( NhanVien)
NhanVien2 (MaNV, Ngaylamviec, Diachi).
13
NV2 = π MaNV , Ngaylamviec , Diachi ( NhanVien)
NhanVien3 (MaNV,Chucvu,Luong).
NV3 = π MaNV ,Chucvu , Luong( NhanVien)
2.3.
Phân mảnh hỗn hợp
- Quan hệ SanPham phân mảnh hỗn hợp thành 4 mảnh:
SP1 (MaSP, MaLoaiSP)
SP1 = π MaSP , MaLoaiSP (SanPham)
SP2 (MaSP, MaNCC)
SP2 = π MaSP , MaNCC (SanPham)
SP3 (MaSP, TenSP, Gia, SoLuong) với Gia <= 400000000
SP3 = σ Gia≤ 400000000 (π MaSP , TenSP , SoLuong,Gia ( SanPham))
14
SP4 (MaSP, TenSP, Gia, SoLuong) với Gia > 400000000
SP4 = σ Gia> 400000000 ( π MaSP, TenSP, SoLuong, Gia ( SanPham ))
2.4.
Đồ 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, NV3, Luong1, Luong2, NCC1, LoaiSP1, LoaiSP4, SP1,
SP3, DH
SITE 2: NV3, Luong3, NCC2, NCC3, LoaiSP2, LoaiSP3, SP1, KH
SITE 3: NV3, Luong3, NCC3, LoaiSP2, LoaiSP4, SP2, SP4, KH, CTDH
15
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 lương
Phân mảnh luong1:
select
* into Luong1
16
from
Luong
where Luongcoban>16000000
Phân mảnh luong2:
select
* into Luong1
from
Luong
where Luongcoban=16000000
Phân mảnh luong3:
select
* into Luong1
from
Luong
where Luongcoban<16000000
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
Luong = Luong1 ∪ Luong2 ∪ Luong3
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 NCC1
from
NhaCungCap
where diachi = 'Hà Nam'
Phân mảnh NCC3:
select
* into NCC1
from
NhaCungCap
where diachi = 'Nam Định'
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
17
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 = 'RR'
Phân mảnh LoaiSP2:
select
* into LoaiSP1
from
LoaiSP
where
maLoaisp = 'HD'
Phân mảnh LoaiSP3:
select
* into LoaiSP1
from
LoaiSP
where
maLoaisp = 'TYT'
Phân mảnh LoaiSP4:
select
* into LoaiSP1
from
LoaiSP
where
maLoaisp = 'MD'
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
18
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,Sdt into NV1
from
NhanVien
Phân mảnh NV2:
select
MaNV, Ngaylamviec, Diachi into NV2
from
NhanVien
Phân mảnh NV3:
select
MaNV, Chucvu,Luong into NV3
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
NV1 ⊆ NhanVien, NV2 ⊆ NhanVien, NV3 ⊆ NhanVien
NV1 ∩ NV2 = ∅ , NV1 ∩ NV3 = ∅ , NV3 ∩ NV2 = ∅
NhanVien = NV1 ⋈ NV2 ⋈ NV3
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 <= 400000000
Phân mảnh SP4:
select
MaSP, TenSP, Gia, SoLuong into SP4
from
SanPham
where Gia > 400000000
Dễ thấy cách mảnh thỏa mãn được tính tái thiết, đầy đủ và tách biệt
19
SP1 ⊆ SanPham, SP2 ⊆ SanPham, SP3 ⊆ SanPham, SP4 ⊆ SanPham
SanPham = SP1 ⋈ SP2 ⋈ (SP3 ∪ SP4)
SP1 ∩ SP2 = ∅ , SP1 ∩ SP3 = ∅ , SP1 ∩ SP4 = ∅ , SP2 ∩ SP3 = ∅ ,
SP2 ∩ SP4 = ∅ , SP3 ∩ SP4 = ∅
3.2 Truy vấn tái thiết
Tái thiết bảng NhanVien
select
* into NhanVien
from
NV1, NV2, NV3
where
NV1.MaNV= NV2.MaNV and NV1.MaNV= NV3.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)
20