You are on page 1of 73

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC KINH TẾ HUẾ




XÂY DỰNG CƠ SỞ DỮ LIỆU


QUẢN LÝ CỬA HÀNG NƯỚC HOA

Giảng viên
Hoàng Hữu Trung

SVTH: Phạm Văn Dũng & Nguyễn Thị Thảo Dung


Lớp: K54 TMĐT

THỪA THIÊN HUẾ, 03/2022


LỜI CẢM ƠN
----------

Để hoàn thành bản phân tích thiết kế này, em xin tỏ lòng biết ơn sâu
sắc đến Thầy Hoàng Hữu Trung, đã tận tình hướng dẫn em trong suốt quá
trình học tập vừa qua.

Với vốn kiến thức được tiếp thu trong quá trình học không chỉ là nền
tảng cho quá trình nghiên cứu khóa luận mà còn là hành trang quí báu để em
bước vào đời một cách vững chắc và tự tin.

Được sự giúp đỡ của Thầy Cô và bạn bè, cùng với những nỗ lực của bản
thân, em đã hoàn thành bản phân tích “ Xây dựng cơ sở dữ liệu quản lý cửa
hàng nước hoa Nomad Perfume ”

Do trình độ nghiên cứu và thời gian có hạn, bản phân tích thiết kế này
chắc chắn không tránh khỏi có thiếu sót và hạn chế. Rất mong được sự góp ý
và chỉ dẫn của Thầy.

Cuối cùng em kính chúc Thầy dồi dào sức khỏe và thành công trong sự
nghiệp cao quý.

Em xin chân thành cảm ơn!

Sinh viên thực hiện


Phạm Văn Dũng

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 2


MỤC LỤC

 Giới thiệu về cửa hàng nước hoa Nomad Perfume …………………………………………....4


 Mô tả bài toán …………………………………………………………………………………5
 Liệt kê tất cả các danh từ liên quan đến bài toán………………………………………………6
 Loại bỏ danh từ đồng nghĩa và các từ không cần thiết………………………………………...7
 Mô tả bài toán nghiệp vụ
 Xác định các thực thể và các thuộc tính tương ứng …………………………………………...8
 Xác định mối quan hệ giữa các thực thể từng đôi một quan hệ
…………………………………………………………………………………………………9
 Vẽ sơ đồ thực thể mối quan hệ ERD………………………………………………………….14
 Chuyển đổi mô hình ERD sang mô hình dữ liệu quan hệ
………………………………………………………………………………………………...15
 Sơ đồ ERD trên Microsoft SQL Server……………………………………………………....21
 Sơ đồ ERD trên MySQL Workbench ……………………………………………………......22
 Phần ảnh SQL Sever………………………………………………………………………….23
 Phần ảnh MySQL Workbench ……………………………………………………………….

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 3


Phân tích và thiết kế cơ sở dữ liệu

1.1. Giới thiệu về cửa hàng nước hoa Nomad Perfume

- Nomad Perfume là một tiệm nước hoa nho nhỏ bắt nguồn từ đam mê
về mùi hương cũng như mong muốn chia sẻ với tất cả mọi người về sở thích
của tụi mình. Nomad Perfume là một nơi để mọi người đến với đam mê
cũng như sắc đẹp, là nơi giúp mọi người dễ dàng sở hữu bất cứ chai nước
hoa nào bạn muốn. Và rồi cứ thế, với mục tiêu lan toả hương thơm và niềm
đam mê lớn lên Nomad Perfume được yêu thích, tin tưởng và lớn lên mỗi
ngày.
- Nomad Perfume hướng đến đối tượng thường xuyên tiếp xúc ngoài xã hội,
có cá tính riêng, thích sở hữu những mùi nước hoa đặc biệt hoặc muốn thu
hút đối phương, hương thơm của nước hoa giúp tâm trạng của họ trở nên tốt
hơn và tự tin hơn.
- Nomad Perfume hướng đến những người muốn giấu đi mùi cơ thể. Nomad
Perfume dùng cho những người thích việc chăm sóc bản thân

1.2. Mô tả bài toán

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 4


- Khi khách hàng có nhu cầu mua hàng thì khách hàng sẽ đến cửa hàng để gặp
nhân viên bán hàng, nhân viên bán hàng sẽ cho khách hàng xem sản phẩm xe
sẽ báo giá chi tiết của từng sản phẩm trong cửa hàng và dẫn khách hàng đi
xem từng sản phẩm có trong cửa hàng. Sau đó khách hàng quyết định lựa
chọn sản phẩm mình có nhu cầu mua hợp mùi hương hợp với mình, đồng
thời sẽ được nhân viên tư vấn cụ thể chi tiết về sản phẩm đó các dịch vụ và
khuyến mãi tại cửa hàng. Sau khi khách hàng đã lựa chọn sản phẩm mà mình
ưu thích có thể tới tại quầy để thanh toán.
- Cuối mỗi tuần, mỗi tháng, mỗi năm nhân viên quản lý sẽ tổng hợp các hóa
đơn bán hàng để lập báo cáo doanh thu, báo cáo sửa chữa. Sau đó gửi báo
cáo cho chủ cửa hàng.

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 5


 Liệt kê tất cả các danh từ liên quan đến bài toán

Dịch vụ Khuyến mãi Bảo hành Hỗ trợ

Nhân viên Họ và tên Email Số điện thoại

Mã sản phẩm Mã đơn hàng Doanh Thu Chi Phí

Mã nhân viên Ngày kết thúc Ngày bắt đầu Vai trò

Giá Chi tiết đơn hàng Phân loại Thẻ thành viên

Năm sinh Đơn hàng Sản phẩm Khách hàng

Ngày sinh Số lượng Danh mục Số giờ làm

Địa chỉ Quản lý Độ tuổi Ngày sinh

Giới tính Hóa đơn Tổng số sản phẩm Quê quán

Mã khách hàng Tên nhân viên Tên khách hàng Hàng tồn

Gian hàng Nhân viên tư vấn Mã nước hoa Mã gian hàng

Mức lương Ca làm Ngày nghỉ Mã quản lý

 Loại bỏ các danh từ đồng nghĩa và các từ không cần thiết

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 6


Dịch vụ Khuyến mãi Bảo hành Hỗ trợ

Nhân viên Họ và tên Email Số điện thoại

Mã sản phẩm Mã đơn hàng Doanh Thu Chi Phí

Mã nhân viên Ngày kết thúc Ngày bắt đầu Vai trò

Giá Chi tiết đơn hàng Phân loại Thẻ thành viên

Năm sinh Đơn hàng Sản phẩm Khách hàng

Ngày sinh Số lượng Danh mục Số giờ làm

Địa chỉ Quản lý Độ tuổi Ngày sinh

Giới tính Hóa đơn Tổng số sản phẩm Quê quán

Mã khách hàng Tên nhân viên Tên khách hàng Hàng tồn

Gian hàng Nhân viên tư vấn Mã nước hoa Mã gian hàng

Mức lương Ca làm Ngày nghỉ Mã quản lý

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 7


Bước 2: Mô tả bài toán/nghiệp vụ

Xây dựng CSDL để quản lý cửa hàng nước hoa

 Nước hoa có Mã nước hoa, Tên nước hoa, Số lượng, Giá nhập, Giá bán,
IDCty, Mã gian hàng Nước hoa được Công ty cung cấp thông qua những
phiếu xuất , mỗi phiếu xuất chỉ thuộc một công ty.
 Một Công ty có thể sản xuất nhiều sản phẩm nước hoa, mỗi loại nước hoa
nhập tại một công ty.Thông tin về công ty bao gồm: Mã công ty, tên công ty,
địa chỉ, SDT
 Nước hoa được nhập thông qua những phiếu xuất. Các phiếu xuất lưu trữ lại số
lượng nước hoa và loại nước hoa Mỗi phiếu xuất có ghi : Mã phiếu xuất, Ngày
xuất, Mã công ty, tên nước hoa, số lượng.
 Khi Khách hàng mua nước hoa thì sẽ nhận được Dịch vụ ở cửa hàng bao gồm
có Tên dịch vụ, Mã dịch vụ, Giá dịch vụ, mã gian hàng, tên khách hàng
 Cửa hàng nước hoa được phân chia thành những gian hàng khác nhau thông
qua những loại nước hoa được bày bán trong gian hàng .Thông tin về gian hàng
gồm : Mã cửa hàng,tên cửa hàng .

 Tại mỗi gian hàng đều có hơn một nhân viên làm việc Mỗi nhân viên đều gồm
những thông tin IDNV, Họ tên,Ngày sinh ,địa chỉ ,Số giờ làm ,Ca làm, số điện
thoại, mã quản lý.

 Cả cửa hàng chỉ có một quản lý gồm những thông tin: Mã quản lý, Họ
tên,Năm sinh ,địa chỉ, Số điện thoại,Email

Bước 3: Xác định các thực thể và các thuộc tính tương ứng của thực thể:

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 8


a) Xác định các thực thể và các thuộc tính tương ứng của thực thể

Thực Thể: NUOCHOA (Nước hoa)


- Mục đích: Quản lý thông tin về nước hoa
- Thuộc tính: Mã nước hoa, Tên nước hoa, Số lượng, Giá nhập, Giá bán,
IDCty, Mã gian hàng

Thực thể: CONGTY (Công ty)


- Mục đích: Quản lý thông tin về công ty
- Thuộc tính: Mã công ty, tên công ty, địa chỉ, SDT

Thực thể: PHIEUXUAT (Phiếu xuất)


- Mục đích: Quản lý thông tin về các phiếu xuất
- Thuộc tính: Mã phiếu xuất, Ngày xuất, Mã công ty, tên nước hoa, số lượng.

Thực thể: GIANHANG (Gian hàng)


- Mục đích: Quản lý thông tin về các gian hàng
- Thuộc tính: Mã gian hàng,tên gian hàng

Thực thể: DICHVU (Dịch vụ)


- Mục đích: Quản lý thông tin về các dịch vụ
- Thuộc tính: Tên dịch vụ, Mã dịch vụ, Giá dịch vụ, mã gian hàng, tên khách
hàng

Thực thể: NHANVIEN (Nhân viên)


- Mục đích: Quản lý thông tin về các nhân viên
- Thuộc tính: IDNV, Họ tên,Ngày sinh ,địa chỉ ,Số giờ làm ,Ca làm, số điện
thoại, mã quản lý.

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 9


Thực thể: QUAN LY (quản lý)
- Mục đích: Quản lý thông tin về các nhân viên quản lý
- Thuộc tính: Mã quản lỹ, Họ tên,Năm sinh ,địa chỉ, Số điện thoại,Email

Bước 4: Xác định mối quan hệ giữa các thực thể:

- Nước hoa có Mã nước hoa, Tên nước hoa, Số lượng, Giá nhập, Giá bán,
IDCty, Mã gian hàng Nước hoa được Công ty cung cấp thông qua những
phiếu xuất , mỗi phiếu xuất chỉ thuộc một công ty.

1 n
NUOCHOA Sản xuất PHIEUXUAT

 Một Công ty có thể sản xuất nhiều sản phẩm nước hoa, mỗi loại nước hoa
nhập tại một công ty.Thông tin về công ty bao gồm: Mã công ty, tên công ty,
địa chỉ, SDT

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 10


1 n
CONGTY Sản xuất NUOCHOA

 Nước hoa được nhập thông qua những phiếu xuất. Các phiếu xuất lưu trữ lại
số lượng nước hoa và loại nước hoa Mỗi phiếu xuất có ghi : Mã phiếu xuất,
Ngày xuất, Mã công ty, tên nước hoa, số lượng.

1 n
NUOCHOA Nhập PHIEUXUAT

 Cửa hàng cung cấp nhiều dịch vụ khi mua sản phẩm tại cửa hàng . Khi
Khách hàng mua nước hoa thì sẽ nhận được Dịch vụ ở cửa hàng bao gồm có
Tên dịch vụ, Mã dịch vụ, Giá dịch vụ, mã gian hàng, tên khách hàng

1 n
CUAHANG Cung cấp DICHVU

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 11


n n
DICHVU Sử dụng KHACHHANG

 Cửa hàng nước hoa được phân chia thành những gian hàng khác nhau thông
qua những loại nước hoa được bày bán trong gian hàng .Thông tin về gian hàng
gồm : Mã cửa hàng,tên cửa hàng

1 n
CUAHANG Trưng bày NUOCHOA

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 12


 Tại mỗi gian hàng đều có hơn một nhân viên làm việc cả cửa hàng có một
quản lý. Mỗi nhân viên đều gồm những thông tin : IDNV, Họ tên,Ngày sinh
,địa chỉ ,Số giờ làm ,Ca làm, số điện thoại, mã quản lý.

n n
GIANHANG Quản lý NHANVIEN

 Cả cửa hàng chỉ có một quản lý gồm những thông tin: Mã quản lý, Họ
tên,Năm sinh ,địa chỉ, Số điện thoại,Email

n 1
NHANVIEN ISA QUANLY

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 13


Vẽ sơ đồ thực thể mối quan hệ (Entity Relationship Diagram -ERD)

Phiếu xuất
Công ty

1 n

Sản xuất

Nhập n
Nước hoa Sử
Khách hàng
n dụng
n 1

Trưng bày Của

n n
1 n 1 n
1
Cho dịch Hóa đơn
Gian hàng Cung cấp Dịch vụ
vụ
n
n

Quản lý Quản lý

n 1
n 1
Nhân viên ISA Người Quản lý

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 14


Bước 5: Chuyển đổi mô hình ERD sang mô hình dữ liệu quan hệ

a) Xác định khóa chính cho từng thực thể:

 NUOCHOA(MaNuocHoa,TenNH,Soluong,Gianhap,Giaban,IDCty,
Magianhang)
 KHACHHANG (IDKH, TenKH,DiaChi,Email,Gioitinh,SDT)
 NHANVIEN(IDNV,Hoten,Ngaysinh,Diachi,Sogiolam,Calam,SDT,Maquanly)

 QUANLY (Maquanly, Hoten,Nam sinh ,Diachi, SDT,Email)


 DICHVU (MaDV,TenDV,GiaDV,Magianhang,TenKH)
 HOADON
(Masanpham,Ngayban,Tensanpham,Soluong,Giaban,Tenkhachhang,IDKH)
 CONGTY (Macongty, tencongty, điachi, SDT)
 PHIEUXUAT (Maphieuxuat, Ngayxuat, Macongty, tennuochoa, soluong )

b) Chuẩn hóa:

 Mối quan hệ 1-n:

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 15


1 n
KHACHHANG Của HOADON

 Hai bảng KHACHHANG và HOADON có mối liên hệ 1-n nên ta để khóa chính
của bảng KHACHHANG qua làm khóa phụ của bảng HOADON.
 HOADON (MaHD, Manuochoa,Ngayban , IDKH, IDNV, Soluong)

1 n
CUAHANG Trưng bày NUOCHOA

 Hai bảng NUOCHOA và CUAHANG có mối liên hệ 1-n nên ta để khóa chính
của bảng CUAHANG qua làm khóa phụ của bảng NUOCHOA.
 NUOCHOA (Manuochoa, TenNH, Soluong, Gianhap, Giaban, IDCty,
Magianhang)

1 n
GIANHANG Cung cấp DICHVU

 Hai bảng CUAHANG và DICH VUcó mối liên hệ 1-n nên ta để khóa chính của
bảng CUA HANG qua làm khóa phụ của bảng DICHVU.
 DICHVU (MaDV,TenDV,GiaDV,Magianhang,TenKH)

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 16


1 n
DICHVU Cho dịch vụ HOADON

 Hai bảng HOADON và DICHVU có mối liên hệ 1-n nên ta để khóa chính của
bảng DICH VU qua làm khóa phụ của bảng HOADON
 HOADON (MaHD, Manuochoa,Ngayban , IDKH, IDNV, Soluong)

CONGTY 1 n NUOCHOA
Sản xuất

 Hai bảng CONGTY và NUOCHOA có mối liên hệ 1-n nên ta để khóa chính của
bảng CONGTY qua làm khóa phụ của bảng NUOCHOA
 NUOCHOA (Manuochoa, TenNH, Soluong, Gianhap, Giaban, IDCty,
Magianhang)

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 17


n 1
NHANVIEN ISA QUANLY

 Hai bảng NHANVIEN va QUANLY có mối liên hệ 1-n nên ta để khóa chính
của bảng QUANLY qua làm khóa phụ của bảng NHANVIEN
 NHANVIEN (IDNV, Hoten,Ngaysinh
,Diachi,Sogiolam,Calam,SDT,Maquanly)

1 n
NGUOIQUANLY Quản lý DICHVU

 Hai bảng NGUOIQUANLY va DICHVUcó mối liên hệ 1-n nên ta để khóa chính
của bảng NGUOIQUANLY qua làm khóa phụ của bảng DICHVU
 DICHVU (MaDV,TenDV,GiaDV,Magianhang,TenKH)

 Quan hệ n-n:

n n
DICHVU Sử dụng KHACHHANG

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 18


 Hai bảng DICHVU và KHACHHANG có mối quan hệ n-n nên ta phải tạo
thêm 01 bảng ở giữa chúng để xác định Khách Hàng đã sử dụng Dịch Vụ nào.
- Ta phải thêm 01 bảng là DICHVUSUDUNG
- Thuộc tính của bảng mới bao gồm khóa của 02 bảng DICHVU và
KHACHHANG và một số thuộc tính khác: MaDV, IDKH, SoLuong, Gia.

n n
GIANHANG Quản lý NHANVIEN

 Hai bảng GIANHANG và NHANVIEN có mối quan hệ n-n nên ta phải


tạo thêm 01 bảng ở giữa chúng để xác định Khách Hàng đã sử dụng Dịch Vụ nào.
- Ta phải thêm 01 bảng là GIANHANGCONV
- Thuộc tính của bảng mới bao gồm khóa của 02 bảng GIANHANG và
NHANVIEN và một số thuộc tính khác: Magianhang, IDNV, SoLuong,
Gia,Tengianhang.

n n
PHIEUXUAT Nhập NUOCHOA

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 19


 Hai bảng PHIEUXUAT và NUOCHOA có mối quan hệ n-n nên ta phải
tạo thêm 01 bảng ở giữa chúng để xác định Nước hoa nhập qua phiếu xuất nào.
- Ta phải thêm 01 bảng là PHIEUXUATNHAP
- Thuộc tính của bảng mới bao gồm khóa của 02 bảng PHIEUXUAT và
NUOCHOA và một số thuộc tính khác: Maphieuxuat, Manuochoa,
SoLuong, Gia,Tengianhang.

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 20


BƯỚC 6: XÂY DỰNG MÔ HÌNH DỮ LIỆU QUAN HỆ
PHIEUXUAT *
Column Na... Data Type Allow Nulls
CONGTY *
Column Na... Data Type Allow Nulls Maphieux... int

IDCty int Ngayxuat date

TenCty nvarchar(50) TenCty nvarchar(50)

Email nvarchar(50) IDCty int

Diachi nvarchar(50) TenNH nvarchar(50) KHACHHANG *


Column Name Data Type Allow Nulls

IDKH int

Hoten nvarchar(50)

Ngaysinh date

PHIEUXUATNHAP * SDT nvarchar(10)


Column N... Data Type Allow Nulls
Diachi nvarchar(50)
Maphieu... int
Email nvarchar(50)
MaNuoc... int

Soluong float

DICHVUSUDUNG *
Column Name Data Type Allow Nulls
NUOCHOA *
Column Name Data Type Allow Nulls IDKH int

MaNuochoa int MaDV nchar(10)

TenNH nvarchar(50) Soluong float

Soluong float

Gianhap int

Giaban int

IDCty int

HOADON *
Column Name Data Type Allow Nu

MaHĐ int
DICHVU *
Column Name Data Type Allow Nulls MaNuochoa int
GIANHANG *
Column Name Data Type Allow Nulls MaDV nchar(10) Ngayban date

Magianhang int TenDV nvarchar(50) IDKH int

Tengianhang nvarchar(50) GiaDV money IDNV int

Magianhang int Soluong float

GIANHANGCONV *
Column Name Data Type Allow Nulls

Magianhang int

IDNV nvarchar(50)

Gia int

Soluong float

QUANLY *
NHANVIEN * Column Name Data Type Allow Nulls
Column Name Data Type Allow Nulls
Maquanly int
IDNV nvarchar(50)
Hoten nvarchar(50)
Hoten nvarchar(50)
Namsinh date
Ngaysinh date
Diachi nvarchar(50)
DiaChi nvarchar(50)
SDT nvarchar(10)
SoGiolam int

Calam nvarchar(12)

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 21


BƯỚC 6: XÂY DỰNG MÔ HÌNH DỮ LIỆU QUAN HỆ

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 22


SQL SEVER

Dữ liệu của bảng nhân viên

Dữ liệu của bảng công ty

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 23


Dữ liệu của bảng Nước hoa

Dữ liệu của bảng khách hàng

Dữ liệu của bảng Hóa đơn

Dữ liệu của bảng Quản lý


SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 24
Dữ liệu của bảng Phiếu xuất

Dữ liệu của bảng gian hàng

Dữ liệu của bảng dịch vụ

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 25


Dữ liệu của bảng Gian hàng có nhân viên

select NHANVIEN.IDNV, NHANVIEN.Hoten, NHANVIEN.NgaySinh,NHANVIEN.Diachi,


NHANVIEN.Sogiolam,NHANVIEN.Calam,NHANVIEN.SDT
FROM dbo.NHANVIEN
WHERE Calam= 'Sáng'
ORDER BY Sogiolam DESC

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 26


-- VIEW 1 để xem khách hàng nào đã sử dụng nước hoa của công ty nào
CREATE VIEW KHdungdv AS
SELECT HOADON.MaHĐ, KHACHHANG.Hoten, NUOCHOA.TenNH, NUOCHOA.IDCty, CONGTY.TenCty
FROM NUOCHOA as NUOCHOA , CONGTY AS CONGTY, HOADON AS HOADON, KHACHHANG AS KHACHHANG
WHERE NUOCHOA.IDCty = CONGTY.IDCty
AND KHACHHANG.idKH = HOADON.idKH
AND HOADON.Manuochoa= NUOCHOA.Manuochoa;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 27


-- truy vấn bảng ảo view
SELECT * FROM KHdungdv;

--- để Sắp xếp số lượng nước hoa


SELECT GIANHANG.Tengianhang,COUNT(*) AS Soluong
From GIANHANG, dbo.GIANHANGCONV
Where GIANHANG.Magianhang = GIANHANGCONV.Magianhang
GROUP BY GIANHANG.Tengianhang

ORDER BY Soluong DESC

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 28


select*from dbo.GIANHANGCONV
ALTER TABLE GIANHANGCONV
ADD CHECK (Soluong >= 0 AND Soluong <= 20);

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 29


ALTER TABLE DBO.NUOCHOA
ADD CONSTRAINT NH_NH
CHECK (Giaban >= Gianhap );
select*from dbo.NUOCHOA

---Tạo Stored Procedure để thêm 1 khách hàng vào bảng KHACHHANG

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 30


CREATE PROCEDURE USP_AddKHACHHANG1
@IDKH INT,
@TenKH NVARCHAR(50),
@Diachi NVARCHAR(50),
@Email NVARCHAR (50),
@Gioitinh NVARCHAR(50),
@SDT NVARCHAR(10)
AS
BEGIN
INSERT INTO KHACHHANG (IDKH, TenKH, DiaChi, Email, Gioitinh,SDT)
VALUES (@IDKH, @TenKH, @DiaChi, @Email,@Gioitinh,@SDT )
END

-- thêm 1 khách hàng vào bảng KHACHHANG


EXEC USP_AddKHACHHANG '16', N'Lê Văn Đối', N'Ngự Bình', N'binh@gmail.com','Nam','06465426413'

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 31


-- tạo Stored Procedure để sửa thông tin của 1 khách hàng trong bảng KHACHHANG
CREATE PROCEDURE USP_Update1KHACHHANG
@IDKH INT,
@Hoten NVARCHAR(50),
@Ngaysinh Date,
@SDT NVARCHAR(10),
@Diachi NVARCHAR(50),
@Email NVARCHAR (50)
AS
BEGIN
UPDATE KHACHHANG
set Hoten = @Hoten,

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 32


Ngaysinh = @Ngaysinh,
SDT= @SDT,
Diachi = @Diachi,
Email= @Email

WHERE IDKH=@IDKH
END

-- thêm 1 khách hàng vào bảng KHACHHANG


EXEC USP_AddKHACHHANG '17', N'Lê Văn Đối', '1999-09-03','06465426413', N'Ngự Bình', N'binh@gmail.com'

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 33


-- tạo Stored Procedure để sửa thông tin của 1 khách hàng trong bảng KHACHHANG
CREATE PROCEDURE USP_Update1KHACHHANG
@IDKH INT,
@Hoten NVARCHAR(50),
@Ngaysinh Date,
@SDT NVARCHAR(10),
@Diachi NVARCHAR(50),
@Email NVARCHAR (50)
AS
BEGIN
UPDATE KHACHHANG
set Hoten = @Hoten,
Ngaysinh = @Ngaysinh,
SDT= @SDT,
Diachi = @Diachi,
Email= @Email

WHERE IDKH=@IDKH
END

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 34


-- update thông tin của 1 khachhang trong bảng KHACHHANG
EXEC USP_Update2KHACHHANG '17', N'Lê Văn Đối', '1999-09-03','06465426413', N'Ngự Bình',
N'binh@gmail.com'

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 35


------ Tạo Stored Procedure Phân loại nước hoa theo từng dòng

CREATE PROCEDURE KT1


(@MaNuochoa NVarchar(50), @TenNH NVarchar(50), @Dongnuochoa Nvarchar(50) OUTPUT)
AS
BEGIN
DECLARE @p money
SELECT @p = Giaban
FROM dbo.NUOCHOA where MaNuochoa = @MaNuochoa and TenNH = @TenNH
IF @p >= 7500000
SET @Dongnuochoa = N'Nước hoa cao cấp'
ELSE IF @p <600000 and @p >= 550000
SET @Dongnuochoa = N'Nước hoa cận cao cấp'
ELSE IF @p < 550000 and @p >= 450000
SET @Dongnuochoa = N'Nước hoa tầm trung'
ELSE IF @p <450000 and @p >= 400000
SET @Dongnuochoa = N'Nước hoa sinh viên'

END
--kiểm tra
DECLARE @Dnh Nvarchar(50);
exec KT1 '4', 'XO nel', @Dongnuochoa = @Dnh output;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 36


Select @Dnh AS 'Dòng nước hoa';
-- xóa
DROP PROCEDURE KT1

Tạo Function để in ra thông tin của nhân viên có số giờ làm cao nhất (đầu vào sẽ là ca làm)
CREATE FUNCTION Maxtime2
(
@Calam nvarchar(50)
)
RETURNS TABLE AS
RETURN
Select NHANVIEN.IDNV, NHANVIEN.HoTen, NHANVIEN.NgaySinh, NHANVIEN.Diachi,
NHANVIEN.Sogiolam, NHANVIEN.Calam, NHANVIEN.SDT
From dbo.NHANVIEN
Where NHANVIEN.Calam = @Calam
and NHANVIEN.Sogiolam = (Select max(Sogiolam) from NHANVIEN where Calam = @Calam)

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 37


------in ra
Select * From Maxtime(N'Sáng')

-- Tạo Function để in ra danh sách các nhân viên làm ca nào (đầu vào sẽ là ca làm)
Create FUNCTION PointA
(

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 38


@Calam nvarchar(50)
)
RETURNS TABLE AS

RETURN
Select NHANVIEN.IDNV, NHANVIEN.HoTen, NHANVIEN.NgaySinh, NHANVIEN.Diachi,
NHANVIEN.Sogiolam, NHANVIEN.Calam, NHANVIEN.SDT
From dbo.NHANVIEN
Where NHANVIEN.Calam = @Calam
and NHANVIEN.Sogiolam >= 15

----IN RA
Select * From PointA(N'Tối')

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 39


-- Tạo Function để in ra danh sách khách hàng làm ca nào (đầu vào sẽ là ca làm)

CREATE FUNCTION TIENDV1


(
@IDKH INT
)
RETURNS float AS
begin
Declare @DTB float
Select @DTB = AVG(DICHVU.GiaDV)
From dbo.DICHVU, DICHVUSUDUNG
Where DICHVUSUDUNG.IDKH = @IDKH
RETURN @DTB
end

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 40


-----in ra
Select distinct
KHACHHANG.IDKH,KHACHHANG.Hoten,KHACHHANG.Ngaysinh,KHACHHANG.SDT,KHACHHANG.
Diachi,KHACHHANG.Email, DICHVU.MaDV as 'SỐ TIÊN DV' From KHACHHANG, DICHVU,
DICHVUSUDUNG
Where KHACHHANG.IDKH = '266'
and KHACHHANG.IDKH = DICHVUSUDUNG.IDKH
and DICHVUSUDUNG. MaDV = DICHVU.MaDV

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 41


----- Tạo TRIGGER để lưu trữ thông tin Khách Hàng vào bảng KH_audit sau khi sửa thông tin
của 1 khách hàng
CREATE TRIGGER Update1KH
ON KHACHHANG
FOR UPDATE
AS
BEGIN
Insert into KH_Audit
(
[IDKH] ,
[Hoten] ,
[Ngaysinh],
[SDT] ,
[DiaChi] ,
[Email]
)
Select IDKH = d.IDKH, Hoten = d.Hoten, Ngaysinh = d.Ngaysinh, SDT =
d.SDT,Diachi = d.Diachi,Email = d.Email
From deleted as d
END

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 42


GO

Use [ADMIN NOMAD];

----- Tạo TRIGGER để lưu trữ thông tin Khách Hàng vào bảng KH_audit sau khi xóa thông tin của khách hàng
CREATE TRIGGER updateKH
ON KHACHHANG
FOR DELETE
AS
BEGIN
Insert into [KH_Audit]
(
[IDKH] ,
[Hoten] ,
[Ngaysinh],
[SDT] ,
[DiaChi] ,
[Email]
)

Select IDKH = d.IDKH, Hoten = d.Hoten, Ngaysinh = d.Ngaysinh, SDT = d.SDT,Diachi =


d.Diachi,Email = d.Email
From deleted as d

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 43


END
GO
-- XÓA
DROP TRIGGER updateKH

---- Thêm một trường sữ liệu SoTienTB (Số tiền trung bình) vào bảng Khách hàng. Sau đó tại Trigger để tính số
tiền trung bình của khách hàng,
-- trigger này sẽ tự động cập nhập số tiền trung bình của khách hàng đến thời điểm hiện tại dựa vào số tiền đó để
chi trả cho các dịch vụ trước đó (GiaDV ở bảng DICHVU)
---Trigger này được tạo để bắt sự kiện thêm dữ liệu vào bảng KHACHHANG

-- thêm bảng --
ALTER TABLE KHACHHANG
ADD SoTienTB FLOAT
-- tạo trigeer --
CREATE TRIGGER UpdateST_Insert
ON KHACHHANG
FOR INSERT
AS
BEGIN
Declare @ST float
Declare @IDKH INT
Declare @MaDV INT
Select @IDKH = IDKH

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 44


from KHACHHANG
Select @ST = AVG(GiaDV)
from DICHVU
where MaDV = @MaDV
Update KHACHHANG
Set @ST = @ST
where IDKH = @IDKH
END
GO

MY SQL
Dữ liệu của bảng nhân viên

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 45


Dữ liệu của bảng Khách hàng

Dữ liệu của bảng Nước hoa

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 46


Dữ liệu của bảng Hóa đơn

Dữ liệu của bảng Công ty

Dữ liệu của bảng Dịch vụ

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 47


Dữ liệu của bảng gian hàng

Dữ liệu của bảng phiếu xuất

Dữ liệu của bảng quản lý

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 48


Dữ liệu của bảng phiếu xuất nhập

Dữ liệu của bảng dịch vụ sử dụng

Dữ liệu của bảng gian hàng có nhân viên

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 49


Câu 1:

-- truy vấn tất cả NHÂN VIÊN có trong bảng NHANVIEN


Select*from adminnomad.nhanvien;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 50


-- truy vấn thông tin của Nhân viên bạn trong bảng NV
Select * from adminnomad.nhanvien
where Hoten = 'Nguyễn Linh';

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 51


-- truy vấn thông tin của các Nhân viên có họ Nguyễn
Select * from adminnomad.nhanvien
where Hoten like 'Nguyễn%';

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 52


-- truy vấn thông tin của các Nhân viên sinh sau ngày 02/06/2002
Select * from adminnomad.nhanvien
where NgaySinh > '2002-03-03';

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 53


-- Đếm số lượng tất cả SV có họ Nguyễn hoặc họ HUỲNH.
Select * from adminnomad.nhanvien
Where Hoten like N'Nguyễn%' or HoTen like N'Trần%';

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 54


Alter table adminnomad.DICHVUSUDUNG ADD Khuyenmai1 int;
Select * from adminnomad.gianhangconv;
UPDATE GIANHANGCONV
SET Soluong = '12'
where Magianhang = '2' and idNHANVIEN = '215';

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 55


Select * from adminnomad.gianhangconv;
INSERT GIANHANGCONV( Magianhang,idNHANVIEN, Gia,Soluong)
VALUES ( '93','215','750000','3');

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 56


-- tra nhân viên làm ca sáng
select NHANVIEN.idNHANVIEN, NHANVIEN.Hoten, NHANVIEN.NgaySinh,NHANVIEN.Diachi,
NHANVIEN.Sogiolam,NHANVIEN.Calam,NHANVIEN.SDT
FROM adminnomad.nhanvien
WHERE Calam= 'Sáng'
ORDER BY Sogiolam DESC;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 57


-- VIEW 1 để xem khách hàng nào đã sử dụng nước hoa của công ty nào
CREATE VIEW KHdungdv AS
SELECT HOADON.MaHĐ, KHACHHANG.Hoten, NUOCHOA.TenNH, NUOCHOA.IDCty, CTY.TenCty
FROM NUOCHOA as NUOCHOA , CTY AS CTY, HOADON AS HOADON, KHACHHANG AS KHACHHANG
WHERE NUOCHOA.IDCty = CTY.IDCty
AND KHACHHANG.idKH = HOADON.idKH
AND HOADON.Manuochoa= NUOCHOA.Manuochoa;

-- truy vấn bảng ảo view


SELECT * FROM KHdungdv;
-- xóa bảng ảo view
DROP VIEW IF EXISTS KHdungdv;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 58


-- VIEW 2 để Sắp xếp số lượng nước hoa
CREATE VIEW gianhang_a AS

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 59


SELECT GIANHANG.Tengianhang,COUNT(*) AS Soluong
From GIANHANG, GIANHANGCONV
Where GIANHANG.Magianhang = GIANHANGCONV.Magianhang
GROUP BY GIANHANG.Tengianhang
ORDER BY Soluong DESC ;

-- truy vấn bảng ảo view


SELECT * FROM gianhang_a ;
-- xóa bảng ảo view
DROP VIEW IF EXISTS gianhang_a ;

-- Cau2

-- sử dụng CHECK để tạo điều kiện cho số lượng ≥ 1

Select*from DICHVUSUDUNG;
Alter table DICHVUSUDUNG ADD
Check ( SolLuong >= 1);

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 60


Select*from gianhangconv;
Alter table gianhangconv ADD

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 61


Check ( Soluong >= 3);

-- Chỉnh sửa bảng NUOCHOA và sử dụng CHECK và CONSTRAINT


-- để tạo điều kiện cho trường Gianhap luôn ≥ Giaban hoặc Giaban nhận
giá trị là NULL.

Alter table NUOCHOA


ADD Constraint CK_GIANHAP
check ( Giaban >= Gianhap );
DROP Constraint CK_GIANHAP

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 62


-- Tạo Stored Procedure truy vấn Email KHACHHANG

delimiter //
create procedure tim_email( keyword nvarchar(50))

Select * from adminnomad.khachhang


where Email like concat ('%',keyword,'%');
end //
delimiter ;
-- truy vấn
call tim_email ('y');

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 63


-- Tạo Stored Procedure truy vấn họ tên của nhân viên
delimiter //
create procedure find_nv( keyword nvarchar(10))

Select * from adminnomad.nhanvien


where Hoten like concat ('%',keyword,'%');
end //
delimiter ;
-- truy vấn
call find_nv ('inh');

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 64


-- Tạo Stored Procedure truy vấn địa chỉ của khachhang
delimiter //
create procedure dc_kh( keyword nvarchar(50))

Select * from adminnomad.khachhang


where Diachi like concat ('%',keyword,'%');
end //
delimiter ;
-- truy vấn
call dc_kh (' Q. Tân Phú');

-- Tạo Stored Procedure truy vấn tên NUOCHOA


delimiter //
create procedure name_NH( keyword nvarchar(50))

Select * from adminnomad.nuochoa


where TenNH like concat ('%',keyword,'%');
end //
delimiter ;
-- truy vấn
call name_NH ('O');

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 65


Kiểm tra đã có ít nhất 3 Trigger chưa?

-- Tạo bảng để giữ những thay đổi dữ liệu của khách hàng

CREATE TABLE khachhang_audit7


(
idKH int NOT NULL auto_increment,
Hoten varchar(50) NOT NULL,
Ngaysinh date DEFAULT NULL,
SDT varchar(10) DEFAULT NULL,
DiaChi varchar(50) DEFAULT NULL,
Email varchar (50) NOT NULL,
ThaoTac varchar(50) DEFAULT NULL,
Ngaythaydoi datetime DEFAULT NULL,
PRIMARY KEY (idKH)
);

-- tạo trigger để lưu trữ thông tin KHÁCH HÀNG vào bảng
khachhang_audit

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 66


-- trigger updata
DELIMITER //
CREATE TRIGGER before_khachhang_audit
BEFORE UPDATE ON khachhang
FOR EACH ROW
BEGIN
INSERT INTO khachhang_audit7
SET Thaotac = 'update',
Hoten = OLD.Hoten,
Ngaysinh= OLD.Ngaysinh,
SDT = OLD.SDT,
Diachi = old.Diachi,
Email = OLD.Email,
Ngaythaydoi = NOW();
END //
DELIMITER ;

-- truy vấn khách hàng


select * from khachhang ;

-- updata khách hàng


UPDATE khachhang
SET Ngaysinh = '1999-02-06', Diachi = ' 0666 Tỉnh Lộ 10, P. Tân Tạo
A, Q. Bình Tân', SDT = '089988462'
WHERE idKH = '266' ;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 67


-- truy vấn khachhang_audit
select * from khachhang_audit7;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 68


-- trigger delete
DELIMITER //
CREATE TRIGGER DELETE_khachhang_audit
BEFORE DELETE ON khachhang
FOR EACH ROW
BEGIN
INSERT INTO khachhang_audit7
SET Thaotac = 'delete',
Hoten = OLD.Hoten,
Ngaysinh= OLD.Ngaysinh,
SDT = OLD.SDT,
Diachi = old.Diachi,
Email = OLD.Email,
Ngaythaydoi = NOW();
END //
DELIMITER ;

-- delete khách hàng


DELETE khachhang
from khachhang
WHERE idKH = '266' ;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 69


select * from khachhang;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 70


select * from khachhang_audit7;

-- Tạo Trigger để tính tổng số giờ làm của nhân viên bằng cách cộng
số giờ làm với giờ làm (Giolam trong bảng nhanvien)

DELIMITER //
Create TRIGGER UpdateTongsogiolam
BEFORE UPDATE ON nhanvien
FOR EACH ROW
BEGIN
IF NEW.Giolam > 0000 THEN
SET NEW.Sogiolam = OLD .Sogiolam + NEW. Giolam;
END IF;
END //
DELIMITER ;

-- update
UPDATE nhanvien

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 71


SET Giolam = '2'
WHERE idNHANVIEN = '1';

-- in ra ---
select * from nhanvien ;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 72


-- XÓA ---
DROP TRIGGER UpdateTongsogiolam;

SVTH PHẠM VĂN DŨNG & NGUYỄN THỊ THẢO DUNG 73

You might also like