BÁO CÁO TỔNG THỂ
XÂY DỰNG HỆ CƠ SỞ DỮ LIỆU QUẢN LÝ CỬA HÀNG THUỐC LÁ
VÀ DƯỢC PHẨM
Họ và tên: Đỗ Minh Huy
Lớp:58TH3
Mã sv: 1651060851
BÀI TẬP LỚN
MÔN HỌC: CƠ SỞ DỮ LIỆU
1.Tên đề tài
Xây dựng cơ sở dữ liệu cho bài toán quản lý hoạt động của cửa hàng
2.Mục đích
Xây dựng cơ sở dữ liệu cho bài toán trên hệ quản trị MS SQL Sever
3.Công việc cần thực hiện
-
Xác định quy tắc /ràng buộc, xây dựng mô hình thực thể liên kết ER
Chuyển từ mô hình thực thể liên kết sang mô hình quan hệ
Xác định khóa
Chuẩn hóa lược đồ quan hệ 3NF hoặc BCNF
Câu lệnh truy vấn dữ liệu SQL
4.Yêu cầu
Yêu cầu mỗi báo cáo phải trình bày rõ ràng, không có lỗi chính tả, từ 15-25
trang, cỡ chữ Times New Roman 13 hoặc tương đương, dãn dòng 1.2cm, đầu trang
cuối trang 2cm, lề trái 3.5cm, lề phải 2cm.
5. Tài liệu tham khảo
- Bài giảng của giáo viên
*** Bài toán thực tế***
1, Hệ CSDL :
- Quản lí danh sách các nhân viên trong cửa hàng.
- Quản lí việc xuất các hàng hóa trong cửa hàng, các hóa đơn nhập hàng,
hóa đơn bán hàng và đơn đặt hàng.
- Quản lí danh sách các khách hàng và các đối tác cung cấp hàng hóa.
2, Yêu cầu:
- Dữ liệu về các nhân viên trong cửa hàng, gồm các thông tin về: họ tên,
ngày sinh, số điện thoại, địa chỉ, mã nhân viên, …
- Dữ liệu về hàng hóa: mã hàng hóa, tên, số lượng, giá thành, …
- Dữ liệu về thông tin khách hàng: mã khách hàng, họ tên, địa chỉ, số điện
thoại, mặt hàng đã mua, …
- Dữ liệu về các đối tác cung cấp hàng( các nhà sản xuất dụng cụ văn phòng
phẩm, nhà xuất bản,… ): mã đối tác, tên, địa chỉ, số điện thoại sản phẩm,
…
- Dữ liệu về các hóa đơn nhập hàng: đỗi tác, hàng hóa, số lượng, đơn giá, …
I.
Xác định quy tắc/rằng buộc, xây dựng mô hình thực thể
liên kết ER
3
Quy tắc/ rằng buộc:
-
TênNV
Địa chỉ
SĐT
Tên CH
Cửa hàng
Giới tính
Quản lí
Nhân viên
Chủ cửa hàng
Địa chỉ
MaNV
Địa chỉ
Nhiệm vụ
SĐT
4
LoạiThuốc lá
Mãhh Công dụng
Sđt
Dược phẩm
Tên
II.
Loại
Chuyển từ mô hình thực thể sang mô hình quan hệ
Chủ cửa hàng
Tên chủ | Địa chỉ | SĐT .
Làm
Mã NV | Tên CH | Tên chủ .
Cửa hàng
5
Bán
Tên CH | Địa chỉ | SĐT .
Nhân viên
Mã NV | Tên NV | Địa chỉ | Tuổi | Giới tính | Nhiệm vụ | SĐT .
Bán hàng
Mã KH | Mã NV | Mã HH | Số lượng .
Khách hàng
Mã KH | Tên KH | Địa chỉ | Giới tính | Tuổi | SĐT.
Hàng hóa
Mã HH | Tên HH | Số lượng | Giá thành | Loại.
→
Loại}
F8 = {Mã HH → Loại, Mã HH → Tên, Mã HH → Loại, Mã HH → Công dụng}
F9 = {Mã HH → Loại}
F10 = {Mã nhập hàng → Mã NV, Mã nhập hàng → Mã HH, Mã nhập hàng →
Mã CC}
-
F11 ={Mã CC → Tên CC; Mã CC → Địa chỉ; Tên CC, Địa chỉ → Mã CC, Mã
CC → SĐT}
Xác định khóa:
-
Xét quan hệ CHUCH
Đặt Tenchu=A, Diachi=B, SĐT=C
Khi đó F={A→B, A→C}
U=ABC
T=A(T là tập thuộc tính xuất hiện bên trái)
P=BC (P là tập thuộc tính xuất hiện bên phải)
K=U/P= A
Ta có K+=ABC=U nên K=A là khóa . Tức là khóa của quan hệ CHUCH là
TenChu.
-
Xét quan hệ CUAHANG
Đặt TenCH=A, Diachi=B, SĐT=C
Khi đó F={A→B, A→C}
U=ABC
Ta có K+=ABC=U nên K=AB là khóa . Tức là khóa của quan hệ LAM là
MaNV, TenCH.
-
Xét quan hệ KHACHHANG
Đặt MaKH=A, TenKH=B, DiaChi=C, SĐT =D, GioiTinh=F, Tuoi=G
Khi đó F={A→B, A→C,A→D, A→F, A→G }
U=ABCDFG
T=A(T là tập thuộc tính xuất hiện bên trái)
P=BCDFG (P là tập thuộc tính xuất hiện bên phải)
K=U/P= A
Ta có K+=ABCDFG=U nên K=A là khóa . Tức là khóa của quan hệ
KHACHANG là MaKH.
-
Xét quan hệ HANGHOA
8
Đặt MaHH=A, Loai=B, SoLuong=C, Gia =D, TenHH=E
Khi đó F={A→B, A→C,A→D, A→E }
U=ABCDE
T=A(T là tập thuộc tính xuất hiện bên trái)
P=BCDE (P là tập thuộc tính xuất hiện bên phải)
K=U/P= A
Ta có K+=ABCDE=U nên K=A là khóa . Tức là khóa của quan hệ
HANGHOA là MaHH.
-
U=AB
T=A(T là tập thuộc tính xuất hiện bên trái)
P=B (P là tập thuộc tính xuất hiện bên phải)
K=U/P= A
Ta có K+=AB=U nên K=A là khóa . Tức là khóa của quan hệ THUOCLA là
MaHH.
-
Xét quan hệ NHAPHANG
Đặt MaNH=A, MaNV=B, MaCC =C, SoLuong =D
Khi đó F={A→B, A→C,A→D}
U=ABCD
T=A(T là tập thuộc tính xuất hiện bên trái)
P=BCD (P là tập thuộc tính xuất hiện bên phải)
K=U/P= A
Ta có K+=ABCD=U nên K=A là khóa . Tức là khóa của quan hệ
NHAPHANG là MaNH.
-
Xét quan hệ NHACC
Đặt MaCC=A, TenCC=B, DiaChi=C, SĐT =D
Khi đó F={A→B, A→C,A→D }
U=ABCD
T=A(T là tập thuộc tính xuất hiện bên trái)
P=BCD (P là tập thuộc tính xuất hiện bên phải)
K=U/P= A
Ta có K+=ABCD=U nên K=A là khóa . Tức là khóa của quan hệ NHACC là
MaCC.
Tên CH: lược đồ ở dạng chuẩn 2NF.
Do Tên CH → Địa chỉ, Tên CH là siêu khóa: lược đồ ở dạng chuẩn 3NF.
•
Làm (Mã NV, Tên CH, Tên chủ)
F3 = {Mã NV → Tên CH, Mã NV → Tên chủ }
Lược đồ quan hệ chỉ chứa các thuộc tính nguyên tố: lược đồ ở
dạng chuẩn 1NF.
Mã NV là khóa dự bị, thuộc tính Tên chủ, Tên CH phụ thuộc hàm
đầy đủ vào Mã NV: lược đồ ở dạng chuẩn 2NF.
Do Mã NV → Tên CH, Mã NV → Tên chủ và Mã NV là siêu
khóa, lược đồ thuộc chuẩn 3NF.
Nhân viên (Mã NV, Tên NV, Địa chỉ, Tuổi, Giới tính, SĐT)
F4 = {Mã NV → Tên NV, Mã NV → Địa chỉ, Mã NV → Tuổi, Mã NV →
Giới tính, Mã NV → SĐT}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyên tố: lược đồ ở
dạng chuẩn 1NF.
11
Lược đồ có khóa dự bị là Mã NV, các thuộc tính khác phụ thuộc
đầy đủ vào Mã NV, nên lược đồ ở dạng chuẩn 2NF.
→
Loại}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyên tố: lược đồ ở dạng
chuẩn 1NF.
Mã HH là khóa dự bị, các thuộc tính không khóa phụ thuộc hàm đầy đủ
vào Mã HH nên lược đồ ở dạng chuẩn 2NF.
Do Mã HH → Tên HH, Mã HH → Số lượng, Mã HH → Giá thành, Mã
HH → Loại, Mã HH là siêu khóa, nên lược đồ ở dạng chuẩn 3NF.
•
Dược phẩm (Mã HH, Tên, Loại, Công dụng)
12
F8 = {Mã HH → Loại, Mã HH → Tên, Mã HH → Loại, Mã HH → Công dụng}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyên tố: lược đồ ở
dạng chuẩn 1NF.
Mã HH là khóa dự bị, các thuộc tính không khóa phụ thuộc hàm
đầy đủ vào Mã HH nên lược đồ ở dạng chuẩn 2NF.
Do Mã HH → Loại, Mã HH → Tên, Mã HH → Loại, Mã HH →
Công dụng, Mã HH là siêu khóa, nên lược đồ ở dạng chuẩn 3NF.
•
Thuốc lá (Mã HH, Loại)
F9 = {Mã HH → Loại}
13
V.
Câu hỏi truy vấn dữ liệu SQL.
Từ 11 lược đồ ở dạng chuẩn 3NF, ta xaya dựng thành 11 bảng dữ liệu:
** 11 bảng dữ liệu
1.
Bảng CHUCH: thông tin về chủ cửa hàng
Create table CHUCH(
TenChu nvarchar(30) not null primary key,
Diachi nvarchar(50),
SĐT char(15) );
2.
Bảng CUAHANG: thông tin về cửa hàng
Create table CUAHANG(
TenCH nvarchar(30) not null primary key,
Diachi nvarchar(50),
SĐT char(15) );
3.
Bảng NHANVIEN: thông tin về các nhân viên
6.
Bảng DUOCPHAM: thông tin dược phẩm
Create table DUOCPHAM(
MaHH char(8) not null primary key,
Ten nvarchar(10) ,
CongDung nvarchar(20),
Loai nvarchar(10) ,
Foreign key (MaHH) references HANGHOA (MaHH) );
7.
Bảng THUOCLA: thông tin về thuốc lá
Create table THUOCLA(
MaHH char(8) not null primary key,
Loai nvarchar(10),
Foreign key (MaHH) references HANGHOA(MaHH) );
8.
Bang KHACHHANG: thông tin về khách hàng
Create table KHACHHANG(
MaKH char(8) not null primary key,
Ten nvarchar(30) ,
DiaChi nvarchar (50),
GioiTinh nvarchar(4),
Tuoi int,
SĐT char(15) );
9.
MaCC char (8),
MaNV char(8),
MaHH char(8),
SoLuong int,
Foreign key (MaCC) references NHACC (MaCC),
Foreign key (MaHH) references HANGHOA (MaHH),
Foreign key (MaNV) references NHANVIEN (MaNV) );
** Thêm giá trị cho các bảng :
Bảng CHUCH:
Bảng CUAHANG:
Bảng HANGHOA:
16
Bảng NHANVIEN:
Bảng LAM:
Bảng THUOCLA:
17
Bảng DUOCPHAM:
Bảng BANHANG:
Câu 4: Tính giá tiền trung bình của thuốc lá:
Câu lệnh SQL:
Select AVG(Gia) as giaTB
From HANGHOA, THUOCLA
Where HANGHOA.MaHH=THUOCLA.MaHH
Câu 5: Tính tổng số khách hàng trong bảng KHACHHANG có đại chỉ là Bắc Ninh:
Câu lệnh SQL:
Select count(MaKH) as tongso
From KHACHHANG
Where DiaChi like N“Bắc Ninh”;
Câu 6: Đưa ra tên hàng hóa có giá thành lớn nhât:
Câu lệnh SQL:
Select Ten
20
From HANGHOA
Where Gia=(select max(Gia) from HANGHOA );
Kết quả:
Câu 7: Số lượng hàng bán của từng nhân viên :
Câu lệnh SQL:
Select NV.Ten, SUM(BH.SoLuong) As solanban
From NHANVIEN NV, BANHANG BH
Where NV.MaNV=BH.MaNV
Group by NV.Ten;
From HANGHOA
Where HANGHOA.MaHH Not in (select BANHANG.MaHH from BANHANG);
Kết quá:
Câu 12: Cho biết các mặt hàng có số lượng không phải lớn nhất:
Câu lệnh SQL:
Select *
From HANGHOA
Where SoLuong< some (select SoLuong from HANGHOA);
Kết quá:
Câu 13: Số lượng trung bình 1 lần đặt hàng của 1 mặt hàng:
Câu lệnh SQL:
Select MaHH, AVG(SoLuong)
From BANHANG
Group by MaHH;
23
Kết quá:
Câu 14: Mặt hàng có số lượng trung bình lớn nhất:
Câu lệnh SQL:
Select MaHH, AVG(SoLuong)
From BANHANG
Group by MaHH
Having AVG(SoLuong)>=All( Select Avg(SoLuong) from BANHANG group by
MaHH);
Kết quá: