Báo cáo hệ quản trị cơ sở dữ liệu

Báo cáo bài tập 

lOMoARcPSD| 36006831
TRƯỜNG ĐH CÔNG NGHỆ GIAO THÔNG VẬN TẢI
KHOA HỆ THỐNG THÔNG TIN
-----
o0o
-----
BÁO CÁO BÀI TẬP LỚN
Đề tài: Quản Lý Thư Viện
Hà Nội
2023
Giảng viên bộ môn :
Lớp:
72
DCHT
22
1
.Ninh Đức Toàn
Nhóm sinh viên :
2
. Lã Văn Toàn
3
. Vũ Thanh Nam
4
. Trần Đình Thành
lOMoARcPSD| 36006831
MỤC LỤC
No table of contents entries found.
lOMoARcPSD| 36006831
lOMoARcPSD| 36006831
1
I.Phát biểu bài toán
Để quản lý thư viện một cách hợp lý và hiệu quả , ta cần xây dựng một hệ thống
quản lý thư viện một cách hiệu quả và tối ưu nhất. Vì vậy, cần xác định rõ các chủ thể
cần quản lý cũng như các hoạt động chính.
Qua việc tìm kiếm và tham khảo các mô hình quản lý các hoạt động của thư viện
trường học, ta có thể thấy được các chủ thể chính cần được quản lý : quản lý sách
của thư viện, quản lý nhân viên làm việc cho thư viện, quản lý NXB, quản lý việc
mượn trả sách của thư viện và quản lý thẻ độc giả.
Quản lý Sách:
- Thư viện có nhiều SÁCH, mỗi sách sẽ bao gồm các thông tin như mã
sách,tên sách, tác giả, thể loại, năm xuất bản,số lượng, giá tiền. Các cuốn
sách phân biệt với nhau bằng mã sách và tên sách không trùng nhau.
Quản lý NXB:
- Trong mỗi cuốn sách có chứa thông tin của NHÀ XUẤT BẢN. Một NXB
cóthể cung cấp một hoặc nhiều sách cho thư viện.Và để tiện cho việc liên
lạc cần lưu lại thông tin của NXB gồm: Mã NXB ,tên NXB, Địa chỉ,email,
SĐT. Quản lý Nhân viên:
- Mỗi NHÂN VIÊN làm việc trong thư viện cần lưu lại các thông tin sau:
MãNV, Họ tên, Ngày sinh, Ngày vào làm , SĐT, Giới tính,Địa chỉ, HSL, PC.
Quy định mỗi nhân viên phải có mã riêng biệt và lớn hơn 18 tuổi.
Quản lý Thẻ Độc Giả:
- Khi đến mượn sách, độc giả sẽ được cấp một THẺ ĐỘC GIẢ, trên đó có
mãthẻ (Mã thẻ được đánh số tự động bắt dầu từ 1,2,3…), tên độc giả ,
ngày sinh, giới tính, địa chỉ, số điện thoại, ngày bắt đầu, ngày hết hạn. Với
mỗi thẻ, độc giả có thể mượn được nhiều sách và ngược lại mỗi sách
thể được mượn bởi nhiều thẻ độc giả.
lOMoARcPSD| 36006831
2
Quản lý Phiếu Mượn Trả:
- Độc giả sau khi đến mượn sách cần lưu lại thông tin của PHIẾU MƯỢN
TRẢ bao gồmmã mượn trả, ngày mượn , ngày hẹn trả. Độc giả chỉ được
mượn sách tối đa trong 15 ngày kể từ ngày mượn.
II.Xây dựng bảng cơ sở dữ liệu của bài toán
1.Mô hình cơ sở dữ liệu (cấu trúc các bảng)
NXB: lưu trữ thông tin của bảng NXB
STT
Tên thuộc tính
Kiểu dữ liệu
Ràng buộc
Ghi chú
1
MaNXB
varchar(10)
PK
Mã nhà xuất bản
2
TenNXB
nvarchar(100)
Tên nhà xuất bản
3
Diachi
nvarchar(100)
Địa chỉ
4
Email
varchar(100)
Email
5
SDT
int
Số điện thoại
SACH: lưu trữ thông tin của bảng sách
STT
Tên thuộc
tính
Kiểu dữ liệu
Ràng buộc
Ghi chú
1
MaSach
varchar(10)
PK
Mã sách
2
MaNXB
varchar(10)
FK, tham chiếu NXB
Mã nhà xuất
bản
3
TenSach
nvarchar(100)
Tên sách
4
TacGia
nvarchar(100)
Tác giả
5
TheLoai
varchar(100)
Thể loại
6
NamXB
date
Năm xuất bản
7
SoLuong
int
Số lượng
8
GiaTien
float
Giá tiền
NHANVIEN : lưu trữ thông tin của bảng NHÂN VIÊN
lOMoARcPSD| 36006831
3
STT
Tên thuộc
tính
Kiểu dữ liệu
Ràng buộc
Ghi chú
1
MaNV
varchar(10)
PK
Mã nhân viên
2
TenNV
nvarchar(100)
Tên nhân viên
3
NgaySinh
Date
Ngày sinh
4
NgayVaoLam
date
Ngày vào làm
5
SDT
int
Số diện thoại
6
GioiTinh
varchar(10)
Giới tính
7
DiaChi
Nvarchar(100)
Địa chỉ
8
HeSoLuong
Float
Hệ số lương
9
PhuCap
Float
Phụ cấp
THEDOCGIA: lưu trữ thông tin của bảng THẺ ĐỘC GIẢ
STT
Tên thuộc tính
Kiểu dữ liệu
Ràng buộc
Ghi chú
1
Mathe
Varchar(10)
PK
Mã thẻ
2
TenDG
nvarchar(100)
Tên độc giả
3
NgaySinh
Date
Ngày sinh
4
GioiTinh
varchar(10)
Giới tính
5
DiaChi
nvarchar(30)
Địa chỉ
6
SDT
varchar(10)
Số diện
thoại
2
Ngaybatdau
Date
Ngày bắt
đầu
3
Ngayhethan
Date
Ngày hết
hạn
PHIEUMUONTRA: lưu trữ thông tin của PHIẾU MƯỢN TRẢ
lOMoARcPSD| 36006831
4
STT
Tên thuộc tính
Kiểu dữ liệu
Ràng buộc
Ghi chú
1
MaMT
varchar(10)
PK
Mã mượn
trả
2
Mathe
varchar(10)
FK, tham chiếu đến
THEDOCGIA
Mã thẻ
3
MaNV
varchar(10)
FK, tham chiếu đến
NHANVIEN
Mã nhân
viên
4
NgayMuon
Date
Ngày
mượn
5
NgayHenTra
Date
Ngày hẹn
trả
CT_PHIEUMUONTRA :lưu trữ thông tin của bảng CHI TIẾT PHIẾU MƯỢN
TRẢ
STT
Tên thuộc tính
Kiểu dữ liệu
Ràng buộc
Ghi chú
1
MaMT
varchar(10)
PK
Mã mượn trả
2
Masach
varchar(10)
PK,FK, tham chiếu
đến SACH
Mã sách
3
NgayTra
Date
Ngày trả
4
TinhTrang
Nvarchar(20)
Tình trạng
2.Mô hình thực thể liên kết(diagram):
lOMoARcPSD| 36006831
5
III.Thiết Lập Cơ Sở Dữ Liệu a.Tạo
database
CREATE DATABASE QLTHUVIEN
GO
USE QLTHUVIEN
GO
b.Tạo bảng
1. Bảng NXB
CREATE TABLE NXB (
lOMoARcPSD| 36006831
6
MaNXB VARCHAR(10) NOT NULL,
TenNXB NVARCHAR(100) UNIQUE NOT
NULL,
Diachi NVARCHAR(100) NOT NULL,
Email VARCHAR(100) NOT NULL,
SDT INT NOT NULL
CONSTRAINT PRK_NXB PRIMARY KEY (MaNXB));
2. Bảng SACH
CREATE TABLE SACH ( MaSach
VARCHAR(10) NOT NULL,
MaNXB VARCHAR(10) NOT NULL,
TenSach NVARCHAR(100) UNIQUE NOT NULL,
TacGia NVARCHAR(100) NOT NULL, TheLoai NVARCHAR(100)
NULL,
NamXB INT NOT NULL, SoLuong
INT NOT NULL,
GiaTien FLOAT NOT NULL,
CONSTRAINT PRK_MaSach PRIMARY KEY (MaSach));
3. Bảng NHANVIEN
CREATE TABLE NHANVIEN ( MaNV
VARCHAR(10) NOT NULL,
TenNV NVARCHAR(100) NOT NULL, NgaySinh
DATE NOT NULL,
NgayVaoLam DATE NOT NULL, SDT INT
NOT NULL,
GioiTinh VARCHAR(10) NOT NULL,
DiaChi NVARCHAR(100) NOT NULL , HeSoLuong
FLOAT NOT NULL ,
PhuCap FLOAT NOT NULL ,
CONSTRAINT PRK_MaNV PRIMARY KEY (MaNV) );
4. Bảng THEDOCGIA
CREATE TABLE THEDOCGIA( MaThe
VARCHAR(10) NOT NULL,
lOMoARcPSD| 36006831
7
TenDG NVARCHAR(100) NOT NULL,
NgaySinh DATE NULL, GioiTinh VARCHAR(10)
NOT NULL,
DiaChi NVARCHAR(100) NOT NULL, SDT
INT NULL,
Ngaybatdau DATE NOT NULL,
Ngayhethan DATE NOT NULL,
CONSTRAINT PK_MaThe PRIMARY KEY (MaThe));
5. Bảng PHIEUMUONTRA
CREATE TABLE PHIEUMUONTRA (
MaMT INT NOT NULL, MaThe
VARCHAR(10) NOT NULL,
MaNV VARCHAR(10) NOT NULL,
NgayMuon DATE NOT NULL,
NgayHenTra DATE NOT NULL
CONSTRAINT PK_MaMT PRIMARY KEY (MaMT));
6. Bảng CT_PHIEUMUONTRA
CREATE TABLE CT_PHIEUMUONTRA ( MaMT
INT NOT NULL,
MaSach VARCHAR(10) NOT NULL ,
NgayTra DATE NULL,
TinhTrang NVARCHAR(20) NOT NULL
CONSTRAINT PK_CT_MaMT PRIMARY KEY (MaMT,MaSach)); c,
Tạo ràng buộc
1. Ràng buộc trong bảng SACH
ALTER TABLE SACH ADD CONSTRAINT FK_MaNXB FOREIGN KEY (MaNXB )
REFERENCES NXB (MaNXB)
2. Ràng buộc trong bảng PHIEUMUONTRA
ALTER TABLE PHIEUMUONTRA ADD CONSTRAINT FK_Mathe FOREIGN
KEY(MaThe) REFERENCES THEDOCGIA(MaThe);
ALTER TABLE PHIEUMUONTRA ADD CONSTRAINT FK_MaNV FOREIGN
lOMoARcPSD| 36006831
8
KEY(MaNV) REFERENCES NHANVIEN(MaNV);
3. Ràng buộc trong bảng CT_PHIEUMUONTRA
ALTER TABLE CT_PHIEUMUONTRA ADD CONSTRAINT FK_MaMT FOREIGN
KEY(MaMT ) REFERENCES PHIEUMUONTRA (MaMT );
ALTER TABLE CT_PHIEUMUONTRA ADD CONSTRAINT FK_MaSach
FOREIGN KEY(MaSach ) REFERENCES SACH(MaSach);
IV. Chèn dữ liều vào bảng
1.Chèn dữ liệu bảng NXB
INSERT INTO NXB VALUES
('NXB001', N'Kim Đồng', N'55 Quang Trung,Hà Nội','nxbkimdong@gmail.com',
'0343023261'),
('NXB002', N'Bách Khoa Hà Nội', N'42 Hai Bà Tng,Hà
Nội','nxbbachkhoahn@gmail.com', '0968103472'),
('NXB003', N'Dân Trí', N'Hoàng Cầu,Đống Đa,Hà Nội','nxbdantri@gmail.com',
'0344688190'),
('NXB004', N'Phụ Nữ', N'39 Hàng Chuối,Hà Nội','nxbphunu@gmail.com', '0267748899'),
('NXB005', N'Thông Tấn', N'79 Hoàn Kiếm,Hà Nội','nxbthongtan@gmail.com',
'0927361782'),
('NXB006', N'Thời Đại', N'Mỹ Đình 1,Từ Liêm,Hà Nội','nxbthoidai@gmail.com',
'0349960221'),
('NXB007', N'Văn học', N'Trúc Bạch,Ba Đình,Hà Nội','nxbvanhoc@gmail.com',
'0349991890'),
('NXB008', N'Hà Nội', N'Tống Duy Tân,Hoàn Kiếm,Hà Nội','nxbhanoi@gmail.com',
'0260201988')
2.Chèn dữ liệu bảng SACH
lOMoARcPSD| 36006831
9
INSERT INTO SACH VALUES
('S001', 'NXB001', N'Chiến tranh hòa bình', N'L.Tonxtoi', N'Văn học nghệ thuật', 2009,
120,70000),
('S002', 'NXB001', N'Tuổi thơ dữ dội', N'Phùng Quán', N'Truyện ngắn', 2015, 120,70000),
('S003', 'NXB002', N'Tôi thấy hoa vàng trên cỏ xanh', N'Nguyễn Nhật Ánh',N'Tiểu thuyết',
2015, 100,63000),
('S004', 'NXB002', N'Bến không chồng', N'Dương Hướng', N'Tiểu thuyết', 2014, 90,50000),
('S005', 'NXB003', N'Vợ nhặt', N'Kim Lân', N'Truyện ngắn', 2010, 110,70000),
('S006', 'NXB003', N'Người xa lạ', N'Abert Camus', N'Văn học nghệ thuật', 2010,
78,100000),
('S007', 'NXB003', N'Mắt biếc', N'Nguyễn Nhật Ánh', N'Truyện ngắn', 2014, 60,45000),
('S008', 'NXB004', N'Tam quôc diên nghĩa', N'La Quán Trung', N'Văn học nghệ thuật', 2010,
100,200000),
('S009', 'NXB004', N'Những ngày thơ ấu', N'Nguyên Hồng ', N'Truyện ngắn', 2015,
190,45000),
('S010', 'NXB004', N'Số đỏ', N'Vũ Trọng Phụng', N'Tiểu thuyết', 2015, 100,95000),
('S011', 'NXB005', N'Những tấm long cao cả', N'Emondo De Amicis', N'Tiêu thuyết', 2010,
30,100000),
('S012', 'NXB005', N'Lò sát sinh số 5', N'Kurt Vonnegut', N'Kinh dị ', 2013, 190,65000),
('S013', 'NXB006', N'Phía sau nghi can X', N'Higasino Keigo', N'Trinh thám', 2013,
40,105000),
('S014', 'NXB006', N'Bí mật của Naoko', N'Higasino Keigo', N'Trinh thámTruyện ngắn',
2016, 170,210000),
('S015', 'NXB007', N'Đề thi đấm máu', 'Lôi Mễ', N'Kinh dị', 2010, 150,80000),
('S016', 'NXB007', N'Tắt Đèn', N'Ngô Tất Tố',N'Truyện ngắn', 2013, 100,45000),
('S017', 'NXB008', N'Án mạng trên sông Nile', N'Agatha Christie',N'Trinh thám', 2011,
32,199000);
lOMoARcPSD| 36006831
10
3.Chèn dữ liệu bảng NHANVIEN
INSERT INTO NHANVIEN VALUES
('NV001', N'Lã Văn Toàn', '2003/12/10','2022/01/01','0963974836', N'Nam', N'Hai
Tng,Hà Nội',5.6,0.5),
('NV002', N'Vı Ngọc Quỳnh', '2000/08/18','2022/11/01', '0967220264',N'Nữ', N'Gia Lâm,Hà
Nội',4.3,0.2),
('NV003', N'Ninh Đức Toàn', '2003/07/13','2023/8/01', '0965458216',N'Nam', N'Triều
khúc,Hà Nội',6.1,0.4),
('NV004', N'Vũ Thanh Nam', '2000/09/19','2022/11/01', '0967468137',N'Nam', N'Kim
Giang,Hà Nội',4.5,0.3),
('NV005', N'Trần Đình Thành', '2001/05/17','2023/11/01', '0964563249',N'Nam', N'Gia
Lâm,Hà Nội',4.9,0.4),
('NV006', N'Trần Nghĩa Trung', '2000/06/18','2023/05/01', '0965647825',N'Nữ', N'Gia
Lâm,Hà Nội',4.1,0.5),
('NV007', N'Đào Bích Hạnh', '1995-05-16','2014-12-19','0383640295',N'Nam', N'Huyện Ý
Yên, Nam Định',6.3,0.6);
lOMoARcPSD| 36006831
11
4.Chèn dữ liệu bảng THEDOCGIA
INSERT INTO THEDOCGIA VALUES
('T001', N'Đào Thị Quỳnh','1999/11/20',N'Nữ',N'Q.Hoàng Mai,Hà
Nội','0929033563','2022/07/12','2023/07/12'),
('T002', N'Giang Bích Ngọc','2001/10/10',N'Nữ',N'Tân Sơn,Phú
Thọ','0965273925','2022/05/20','2023/05/20'),
('T003', N'NGuyễn Phúc Ninh','2006/06/13',N'Nam',N'Kiên Xương , Thái
Bình','0912364892','2022/05/20','2023/05/20'),
('T004', N'Trần Hoang Lân','2007/04/30',N'Nam',N'Vụ Bản, Nam
Định','0912567953','2022/06/20','2023/06/20'),
('T005', N'Nguyễn Thị Lan Nhi','2001/04/12',N'Nữ',N'Nghĩa Hưng, Nam
Định','091215697','2022/01/20','2023/01/20'),
('T006', N'Đỗ Tuấn Phong','2003/08/03',N'Nam',N'Thanh Xuân,
Nội','091265259','2022/12/20','2023/12/20'),
('T007', N'Phạm Minh Nhật','2003/05/03',N'Nam',N'Ba Vì, Hà
Nội','091265549','2022/11/27','2023/11/27'),
('T008', N'Chu Thanh Hà','2003/09/28',N'Nữ',N'Ninh
Bình','091265659','2022/12/20','2023/12/20'),
('T009', N'Cao Minh Kỳ','1990/04/11',N'Nam',N'Q.Ba Đình,Hà
Nội','0374950570','2022/10/09','2023/10/09'),
('T010', N'Trần Tiến Minh','2002/11/29',N'Nam',N'Hải Hậu,Nam
Định','0337488963','2023/05/19','2023/05/19')
lOMoARcPSD| 36006831
12
5.Chèn bảng dữ liệu PHIEUMUONTRA
INSERT INTO PHIEUMUONTRA
VALUES
('1','T001', 'NV001', '2023/08/20','2023/08/30'), ('2','T001',
'NV002', '2023/11/05','2023/11/19'),
('3','T002', 'NV003', '2023/05/21','2023/05/29'), ('4','T002',
'NV001', '2023/09/11','2023/09/17'),
('5','T003', 'NV006', '2022/12/29','2023/01/10'),
('6','T004', 'NV007', '2023/03/10','2023/03/21'),
('7','T006', 'NV005', '2022/12/27','2023/01/06'),
('8','T008', 'NV004', '2022/11/22','2022/12/02'),
('9','T009', 'NV003', '2023/10/10','2023/10/20'),
('10','T010', 'NV002', '2023/05/20','2023/05/30')
6.Chèn dữ liệu bảng CT_PHIEUMUONTRA
INSERT INTO CT_PHIEUMUONTRA
VALUES
('1', 'S001','2023/08/26', N'Đã trả'),
('1', 'S002','2023/08/30', N'Đã trả'),
lOMoARcPSD| 36006831
13
('1', 'S003','2023/08/30', N'Đã trả'), ('2',
'S004',NULL, N'Đang mượn'),
('2', 'S005',NULL, N'Đang mượn'), ('3',
'S006','2023/05/29', N'Đã trả'),
('3', 'S007', NULL , N'Làm mất'),
('4', 'S003', NULL , N'Làm mất'),
('5', 'S006','2023/01/15', N'Đã trả'), ('5',
'S008', NULL, N'Làm mất'),
('5', 'S014','2023/01/10', N'Đã trả'),
('6', 'S001','2023/03/18', N'Đã trả'),
('6', 'S003','2023/03/23', N'Đã trả'),
('6', 'S006','2023/03/18', N'Đã trả'),
('7', 'S001','2023/01/10', N'Đã trả'),
('8', 'S002','2022/12/02', N'Đã trả'),
('8', 'S008','2022/12/09', N'Đã trả'),
('9', 'S011',NULL, N'Làm mất'),
('10', 'S010','2023/05/30', N'Đã trả'),
('10', 'S016','2023/05/30', N'Đã trả')
V. Truy vấn dữ liệu
lOMoARcPSD| 36006831
14
--1. Cho biết tên những cuốn sách chưa được mượn lần nào
SELECT MaSach,TenSach
FROM SACH
WHERE MaSach NOT IN
(SELECT MaSach FROM CT_PHIEUMUONTRA)
--2. Cho biết những nhân viên có địa chỉ ở Hà Nội và đã làm việc từ 1 năm trở lên
SELECT TenNV
FROM NHANVIEN
WHERE Diachi LIKE N'%Hà Nội%'
AND YEAR(GETDATE()) - YEAR(Ngayvaolam) >=1
--3. Hiện những độc giả chưa đủ 18 tuổi
SELECT Mathe,TenDG
FROM THEDOCGIA
WHERE YEAR(GETDATE()) -YEAR(Ngaysinh) <18
--4. Cho biết tên các sách ,tên NXB thuộc thể loại 'Truyện ngắn'
SELECT TenSach,TenNXB, TheLoai
FROM SACH INNER JOIN NXB
ON NXB.MaNXB = SACH.MaNXB
WHERE TheLoai=N'Truyện ngắn'
lOMoARcPSD| 36006831
15
--5.Cho biết tổng số lượng sach và tổng số tiền sach của từng NXB
SELECT TenNXB,SUM(SoLuong)AS [Tổng số lượng] ,SUM(SoLuong * GiaTien) AS
[Tổng tiền]
FROM SACH INNER JOIN NXB
ON NXB.MaNXB = SACH.MaNXB
GROUP BY TenNXB
--6. Cho xem danh sách top 3 các đầu sách có số lần mượn nhiều nhất
SELECT TOP (3) TenSach,COUNT(SACH.MaSach) AS [Số lần mượn]
FROM SACH INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaSach = SACH.MaSach
GROUP BY TenSach
ORDER BY COUNT(SACH.MaSach ) DESC
--7. Hiện tên những độc giả trả sách quá hạn và tính số ngày quá hạn
SELECT PHIEUMUONTRA.Mathe,TenDG,DATEDIFF(DAY,Ngayhentra,Ngaytra) AS
[Số ngày quá hạn]
FROM THEDOCGIA INNER JOIN PHIEUMUONTRA
lOMoARcPSD| 36006831
16
ON PHIEUMUONTRA.MaThe= THEDOCGIA.Mathe INNER JOIN
CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT
WHERE Ngaytra > Ngayhentra
--8. Cho biết tên độc giả và tính số tiền đền bù khi độc giả làm mất sach ,biết số tiền đền bù
bằng 20 % giá sách
SELECT THEDOCGIA.Mathe,TenDG,(GiaTien*0.2) AS [Số tiền đền bù] FROM
THEDOCGIA
INNER JOIN PHIEUMUONTRA ON PHIEUMUONTRA.Mathe = THEDOCGIA.Mathe
INNER JOIN CT_PHIEUMUONTRA ON CT_PHIEUMUONTRA.MaMT =
PHIEUMUONTRA.MaMT
INNER JOIN SACH ON SACH.MaSach = CT_PHIEUMUONTRA.MaSach
AND TinhTrang =N'Làm mất'
VI. Xây dựng các view
-- 1.Tạo view hiện thÙng tin những độc giả chưa trả s·ch
CREATE VIEW DocGia_ChuaTraSach
AS
SELECT DISTINCT THEDOCGIA.MaThe,TenDG
FROM THEDOCGIA
INNER JOIN PHIEUMUONTRA
ON PHIEUMUONTRA.MaThe = THEDOCGIA.MaThe
INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT AND
TinhTrang =N'Đang mượn'
lOMoARcPSD| 36006831
17
--2. Tạo view hiện tên trong năm 2023, những độc giả nào chỉ đến mượn sách 2 lần
CREATE VIEW DOCGIA_MUON2LAN
AS
SELECT TenDG , COUNT(*) AS [số lần]
FROM THEDOCGIA INNER JOIN PHIEUMUONTRA
ON PHIEUMUONTRA.MaThe = THEDOCGIA.MaThe
AND YEAR(NgayMuon) =2023
GROUP BY TenDG
HAVING COUNT(THEDOCGIA.MaThe) = 2
--3. Tạo view tính tổng số đầu sách của từng nhà xuất bản
CREATE VIEW Tongdausach_NXB
AS
SELECT TenNXB, COUNT(SACH.MaNXB) AS [Tổng đầu sách]
FROM SACH,NXB
WHERE SACH.MaNXB=NXB.MaNXB
GROUP BY TenNXB
--4. Tạo view thống kê số lượng nhân viên theo giới tính
CREATE VIEW NhanVien_GioiTinh
AS
SELECT
CASE GioiTinh
WHEN 'Nữ' THEN N'Nữ'
lOMoARcPSD| 36006831
18
ELSE N'Nam'
END AS [Giới tính],
COUNT(MaNV) AS [Số Lượng]
FROM NHANVIEN
GROUP BY GioiTinh;
--5. Tạo view hiện tên những cuốn sách không được mượn vào 12/2022
CREATE VIEW Sach_Khongduocmuon
AS
SELECT CT_PHIEUMUONTRA.Masach,Tensach
FROM SACH
INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaSach = SACH.MaSach
INNER JOIN PHIEUMUONTRA
ON PHIEUMUONTRA.MaMT = CT_PHIEUMUONTRA.MaMT
AND MONTH(Ngaymuon) <>12 AND YEAR(NgayMuon) <>2022
VII. Xây dựng các thủ tục
--1.Tạo thủ tục in ra thông tin cơ bản của nhân viên với tên nhân viên được nhập vào
lOMoARcPSD| 36006831
19
CREATE PROC pr_thongtincoban_NhanVien @tennv nvarchar(30)
AS
BEGIN
IF NOT EXISTS (SELECT* FROM NHANVIEN WHERE TenNV = @tennv )
PRINT N'Không tìm thấy nhân viên có tên '+@tennv
ELSE
SELECT *FROM NhanVien WHERE TenNV=@tennv END
pr_thongtincoban_NhanVien @tennv= N'Vı Ngọc Quỳnh'
pr_thongtincoban_NhanVien @tennv= N'Nguyễn Thanh Thủy'
--2.Tạo thủ tục in ra tổng tiền của cuốn sách nào đó với tham số truyền vào là tên sách
CREATE PROC pr_tongtien_sach @tensach NVARCHAR(50)
AS
BEGIN
IF not exists (SELECT* FROM Sach WHERE Tensach= @tensach)
PRINT N'không tồn tại sách có tên '+@tensach
ELSE
SELECT Tensach [tên sách], SUM(Soluong*Giatien) [tổng tiền sách]
FROM Sach
WHERE Tensach=@tensach
GROUP BY Tensach
END
EXEC pr_tongtien_sach N'Tuổi thơ dữ dội'
--3 .Tạo thủ tục cho biết tên nhân viên đã lập phiếu mượn trả với mã phiếu mượn truyền
vào
CREATE PROC pr_NV_Lap_PM @maphieu INT
AS
BEGIN
SELECT TenNV AS [tên nhân viên lập phiếu]
FROM NHANVIEN ,PHIEUMUONTRA
lOMoARcPSD| 36006831
20
WHERE NHANVIEN.MaNV=PHIEUMUONTRA.MaNV
AND MaMT = @maphieu
END
EXEC pr_NV_Lap_PM @maphieu = 5
--4 . thủ tục cho biết nhân viên có HSL cao nhất
CREATE PROC pr_nhanvien_luongcaonhat
AS
BEGIN
DECLARE @hsluongmax FLOAT
SET @hsluongmax =(SELECT MAX(hesoluong) AS N'Hệ số lương cao nhất' FROM
NHANVIEN)
SELECT MaNV [mã nhân viên] ,TenNV [ tên nhân viên ], @hsluongmax [hệ số lương cao
nhất]
FROM NHANVIEN
WHERE hesoluong = @hsluongmax
END
EXEC pr_nhanvien_luongcaonhat
--5 .Tạo thủ tục cho biết tình trạng sách lúc trả của của những độc giả mượn sách với mã
sách đuọc nhập vào
CREATE PROC pr_TinhTrangSach_ĐG (@masach VARCHAR(10))
AS
BEGIN
IF NOT EXISTS (SELECT* FROM CT_PHIEUMUONTRA WHERE Masach =
@masach )
PRINT N'không tồn tại mã sách ' +@masach
ELSE
SELECT TenDG [tên độc giả], Tinhtrang [tình trạng sách]
FROM PHIEUMUONTRA INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT
INNER JOIN THEDOCGIA
ON THEDOCGIA.Mathe=PHIEUMUONTRA.Mathe
AND Masach=@masach
lOMoARcPSD| 36006831
21
GROUP BY TenDG, Tinhtrang
END
EXEC pr_TinhTrangSach_ĐG @masach ='S001'
| 1/24

Preview text:

lOMoAR cPSD| 36006831
TRƯỜNG ĐH CÔNG NGHỆ GIAO THÔNG VẬN TẢI
KHOA HỆ THỐNG THÔNG TIN
----- o0o -----
BÁO CÁO BÀI TẬP LỚN
MÔN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Đề tài: Quản Lý Thư Viện
Giảng viên bộ môn : Lớp:
72 DCHT 22 Nhóm sinh viên :
1 .Ninh Đức Toàn
2 . Lã Văn Toàn
3 . Vũ Thanh Nam
4 . Trần Đình Thành
Hà Nội 2023 lOMoAR cPSD| 36006831 MỤC LỤC
No table of contents entries found. lOMoAR cPSD| 36006831 lOMoAR cPSD| 36006831
I.Phát biểu bài toán
Để quản lý thư viện một cách hợp lý và hiệu quả , ta cần xây dựng một hệ thống
quản lý thư viện một cách hiệu quả và tối ưu nhất. Vì vậy, cần xác định rõ các chủ thể
cần quản lý cũng như các hoạt động chính.
Qua việc tìm kiếm và tham khảo các mô hình quản lý các hoạt động của thư viện
trường học, ta có thể thấy được các chủ thể chính cần được quản lý : quản lý sách
của thư viện, quản lý nhân viên làm việc cho thư viện, quản lý NXB, quản lý việc
mượn trả sách của thư viện và quản lý thẻ độc giả. Quản lý Sách: -
Thư viện có nhiều SÁCH, mỗi sách sẽ bao gồm các thông tin như mã
sách,tên sách, tác giả, thể loại, năm xuất bản,số lượng, giá tiền. Các cuốn
sách phân biệt với nhau bằng mã sách và tên sách không trùng nhau. Quản lý NXB: -
Trong mỗi cuốn sách có chứa thông tin của NHÀ XUẤT BẢN. Một NXB
cóthể cung cấp một hoặc nhiều sách cho thư viện.Và để tiện cho việc liên
lạc cần lưu lại thông tin của NXB gồm: Mã NXB ,tên NXB, Địa chỉ,email,
SĐT. Quản lý Nhân viên: -
Mỗi NHÂN VIÊN làm việc trong thư viện cần lưu lại các thông tin sau:
MãNV, Họ tên, Ngày sinh, Ngày vào làm , SĐT, Giới tính,Địa chỉ, HSL, PC.
Quy định mỗi nhân viên phải có mã riêng biệt và lớn hơn 18 tuổi.
Quản lý Thẻ Độc Giả: -
Khi đến mượn sách, độc giả sẽ được cấp một THẺ ĐỘC GIẢ, trên đó có
mãthẻ (Mã thẻ được đánh số tự động bắt dầu từ 1,2,3…), tên độc giả ,
ngày sinh, giới tính, địa chỉ, số điện thoại, ngày bắt đầu, ngày hết hạn. Với
mỗi thẻ, độc giả có thể mượn được nhiều sách và ngược lại mỗi sách có
thể được mượn bởi nhiều thẻ độc giả. 1 lOMoAR cPSD| 36006831
Quản lý Phiếu Mượn Trả: -
Độc giả sau khi đến mượn sách cần lưu lại thông tin của PHIẾU MƯỢN
TRẢ bao gồmmã mượn trả, ngày mượn , ngày hẹn trả. Độc giả chỉ được
mượn sách tối đa trong 15 ngày kể từ ngày mượn.
II.Xây dựng bảng cơ sở dữ liệu của bài toán
1.Mô hình cơ sở dữ liệu (cấu trúc các bảng)
NXB: lưu trữ thông tin của bảng NXB STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú 1 MaNXB varchar(10) PK Mã nhà xuất bản 2 TenNXB nvarchar(100) Tên nhà xuất bản 3 Diachi nvarchar(100) Địa chỉ 4 Email varchar(100) Email 5 SDT int Số điện thoại
SACH: lưu trữ thông tin của bảng sách STT Tên thuộc Kiểu dữ liệu Ràng buộc Ghi chú tính 1 MaSach varchar(10) PK Mã sách 2 MaNXB varchar(10) FK, tham chiếu NXB Mã nhà xuất bản 3 TenSach nvarchar(100) Tên sách 4 TacGia nvarchar(100) Tác giả 5 TheLoai varchar(100) Thể loại 6 NamXB date Năm xuất bản 7 SoLuong int Số lượng 8 GiaTien float Giá tiền
NHANVIEN : lưu trữ thông tin của bảng NHÂN VIÊN 2 lOMoAR cPSD| 36006831 STT Tên thuộc Kiểu dữ liệu Ràng buộc Ghi chú tính 1 MaNV varchar(10) PK Mã nhân viên 2 TenNV nvarchar(100) Tên nhân viên 3 NgaySinh Date Ngày sinh 4 NgayVaoLam date Ngày vào làm 5 SDT int Số diện thoại 6 GioiTinh varchar(10) Giới tính 7 DiaChi Nvarchar(100) Địa chỉ 8 HeSoLuong Float Hệ số lương 9 PhuCap Float Phụ cấp
THEDOCGIA: lưu trữ thông tin của bảng THẺ ĐỘC GIẢ
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú 1 Mathe Varchar(10) PK Mã thẻ 2 TenDG nvarchar(100) Tên độc giả 3 NgaySinh Date Ngày sinh 4 GioiTinh varchar(10) Giới tính 5 DiaChi nvarchar(30) Địa chỉ 6 SDT varchar(10) Số diện thoại 2 Ngaybatdau Date Ngày bắt đầu 3 Ngayhethan Date Ngày hết hạn
PHIEUMUONTRA: lưu trữ thông tin của PHIẾU MƯỢN TRẢ 3 lOMoAR cPSD| 36006831 STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú 1 MaMT varchar(10) PK Mã mượn trả 2 Mathe varchar(10) FK, tham chiếu đến Mã thẻ THEDOCGIA 3 MaNV varchar(10) FK, tham chiếu đến Mã nhân NHANVIEN viên 4 NgayMuon Date Ngày mượn 5 NgayHenTra Date Ngày hẹn trả
CT_PHIEUMUONTRA :lưu trữ thông tin của bảng CHI TIẾT PHIẾU MƯỢN TRẢ STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ghi chú 1 MaMT varchar(10) PK Mã mượn trả 2 Masach varchar(10) PK,FK, tham chiếu Mã sách đến SACH 3 NgayTra Date Ngày trả 4 TinhTrang Nvarchar(20) Tình trạng
2.Mô hình thực thể liên kết(diagram): 4 lOMoAR cPSD| 36006831
III.Thiết Lập Cơ Sở Dữ Liệu a.Tạo
database CREATE DATABASE QLTHUVIEN GO USE QLTHUVIEN GO b.Tạo bảng 1. Bảng NXB CREATE TABLE NXB ( 5 lOMoAR cPSD| 36006831 MaNXB VARCHAR(10) NOT NULL,
TenNXB NVARCHAR(100) UNIQUE NOT NULL,
Diachi NVARCHAR(100) NOT NULL, Email VARCHAR(100) NOT NULL, SDT INT NOT NULL
CONSTRAINT PRK_NXB PRIMARY KEY (MaNXB)); 2. Bảng SACH CREATE TABLE SACH ( MaSach VARCHAR(10) NOT NULL, MaNXB VARCHAR(10) NOT NULL,
TenSach NVARCHAR(100) UNIQUE NOT NULL,
TacGia NVARCHAR(100) NOT NULL, TheLoai NVARCHAR(100) NULL, NamXB INT NOT NULL, SoLuong INT NOT NULL, GiaTien FLOAT NOT NULL,
CONSTRAINT PRK_MaSach PRIMARY KEY (MaSach)); 3. Bảng NHANVIEN CREATE TABLE NHANVIEN ( MaNV VARCHAR(10) NOT NULL,
TenNV NVARCHAR(100) NOT NULL, NgaySinh DATE NOT NULL,
NgayVaoLam DATE NOT NULL, SDT INT NOT NULL,
GioiTinh VARCHAR(10) NOT NULL,
DiaChi NVARCHAR(100) NOT NULL , HeSoLuong FLOAT NOT NULL , PhuCap FLOAT NOT NULL ,
CONSTRAINT PRK_MaNV PRIMARY KEY (MaNV) ); 4. Bảng THEDOCGIA CREATE TABLE THEDOCGIA( MaThe VARCHAR(10) NOT NULL, 6 lOMoAR cPSD| 36006831 TenDG NVARCHAR(100) NOT NULL,
NgaySinh DATE NULL, GioiTinh VARCHAR(10) NOT NULL,
DiaChi NVARCHAR(100) NOT NULL, SDT INT NULL, Ngaybatdau DATE NOT NULL, Ngayhethan DATE NOT NULL,
CONSTRAINT PK_MaThe PRIMARY KEY (MaThe));
5. Bảng PHIEUMUONTRA CREATE TABLE PHIEUMUONTRA ( MaMT INT NOT NULL, MaThe VARCHAR(10) NOT NULL, MaNV VARCHAR(10) NOT NULL, NgayMuon DATE NOT NULL, NgayHenTra DATE NOT NULL
CONSTRAINT PK_MaMT PRIMARY KEY (MaMT));
6. Bảng CT_PHIEUMUONTRA
CREATE TABLE CT_PHIEUMUONTRA ( MaMT INT NOT NULL, MaSach VARCHAR(10) NOT NULL , NgayTra DATE NULL,
TinhTrang NVARCHAR(20) NOT NULL
CONSTRAINT PK_CT_MaMT PRIMARY KEY (MaMT,MaSach)); c,
Tạo ràng buộc
1. Ràng buộc trong bảng SACH
ALTER TABLE SACH ADD CONSTRAINT FK_MaNXB FOREIGN KEY (MaNXB ) REFERENCES NXB (MaNXB)
2. Ràng buộc trong bảng PHIEUMUONTRA
ALTER TABLE PHIEUMUONTRA ADD CONSTRAINT FK_Mathe FOREIGN
KEY(MaThe) REFERENCES THEDOCGIA(MaThe); ALTER TABLE PHIEUMUONTRA ADD CONSTRAINT FK_MaNV FOREIGN 7 lOMoAR cPSD| 36006831
KEY(MaNV) REFERENCES NHANVIEN(MaNV);
3. Ràng buộc trong bảng CT_PHIEUMUONTRA
ALTER TABLE CT_PHIEUMUONTRA ADD CONSTRAINT FK_MaMT FOREIGN
KEY(MaMT ) REFERENCES PHIEUMUONTRA (MaMT );
ALTER TABLE CT_PHIEUMUONTRA ADD CONSTRAINT FK_MaSach
FOREIGN KEY(MaSach ) REFERENCES SACH(MaSach);
IV. Chèn dữ liều vào bảng
1.Chèn dữ liệu bảng NXB INSERT INTO NXB VALUES
('NXB001', N'Kim Đồng', N'55 Quang Trung,Hà Nội','nxbkimdong@gmail.com', '0343023261'),
('NXB002', N'Bách Khoa Hà Nội', N'42 Hai Bà Trưng,Hà
Nội','nxbbachkhoahn@gmail.com', '0968103472'),
('NXB003', N'Dân Trí', N'Hoàng Cầu,Đống Đa,Hà Nội','nxbdantri@gmail.com', '0344688190'),
('NXB004', N'Phụ Nữ', N'39 Hàng Chuối,Hà Nội','nxbphunu@gmail.com', '0267748899'),
('NXB005', N'Thông Tấn', N'79 Hoàn Kiếm,Hà Nội','nxbthongtan@gmail.com', '0927361782'),
('NXB006', N'Thời Đại', N'Mỹ Đình 1,Từ Liêm,Hà Nội','nxbthoidai@gmail.com', '0349960221'),
('NXB007', N'Văn học', N'Trúc Bạch,Ba Đình,Hà Nội','nxbvanhoc@gmail.com', '0349991890'),
('NXB008', N'Hà Nội', N'Tống Duy Tân,Hoàn Kiếm,Hà Nội','nxbhanoi@gmail.com', '0260201988')
2.Chèn dữ liệu bảng SACH 8 lOMoAR cPSD| 36006831 INSERT INTO SACH VALUES
('S001', 'NXB001', N'Chiến tranh và hòa bình', N'L.Tonxtoi', N'Văn học nghệ thuật', 2009, 120,70000),
('S002', 'NXB001', N'Tuổi thơ dữ dội', N'Phùng Quán', N'Truyện ngắn', 2015, 120,70000),
('S003', 'NXB002', N'Tôi thấy hoa vàng trên cỏ xanh', N'Nguyễn Nhật Ánh',N'Tiểu thuyết', 2015, 100,63000),
('S004', 'NXB002', N'Bến không chồng', N'Dương Hướng', N'Tiểu thuyết', 2014, 90,50000),
('S005', 'NXB003', N'Vợ nhặt', N'Kim Lân', N'Truyện ngắn', 2010, 110,70000),
('S006', 'NXB003', N'Người xa lạ', N'Abert Camus', N'Văn học nghệ thuật', 2010, 78,100000),
('S007', 'NXB003', N'Mắt biếc', N'Nguyễn Nhật Ánh', N'Truyện ngắn', 2014, 60,45000),
('S008', 'NXB004', N'Tam quôc diên nghĩa', N'La Quán Trung', N'Văn học nghệ thuật', 2010, 100,200000),
('S009', 'NXB004', N'Những ngày thơ ấu', N'Nguyên Hồng ', N'Truyện ngắn', 2015, 190,45000),
('S010', 'NXB004', N'Số đỏ', N'Vũ Trọng Phụng', N'Tiểu thuyết', 2015, 100,95000),
('S011', 'NXB005', N'Những tấm long cao cả', N'Emondo De Amicis', N'Tiêu thuyết', 2010, 30,100000),
('S012', 'NXB005', N'Lò sát sinh số 5', N'Kurt Vonnegut', N'Kinh dị ', 2013, 190,65000),
('S013', 'NXB006', N'Phía sau nghi can X', N'Higasino Keigo', N'Trinh thám', 2013, 40,105000),
('S014', 'NXB006', N'Bí mật của Naoko', N'Higasino Keigo', N'Trinh thámTruyện ngắn', 2016, 170,210000),
('S015', 'NXB007', N'Đề thi đấm máu', 'Lôi Mễ', N'Kinh dị', 2010, 150,80000),
('S016', 'NXB007', N'Tắt Đèn', N'Ngô Tất Tố',N'Truyện ngắn', 2013, 100,45000),
('S017', 'NXB008', N'Án mạng trên sông Nile', N'Agatha Christie',N'Trinh thám', 2011, 32,199000); 9 lOMoAR cPSD| 36006831
3.Chèn dữ liệu bảng NHANVIEN INSERT INTO NHANVIEN VALUES
('NV001', N'Lã Văn Toàn', '2003/12/10','2022/01/01','0963974836', N'Nam', N'Hai Bà Trưng,Hà Nội',5.6,0.5),
('NV002', N'Vı Ngọc Quỳnh', '2000/08/18','2022/11/01', '0967220264',N'Nữ', N'Gia Lâm,Hà Nội',4.3,0.2),
('NV003', N'Ninh Đức Toàn', '2003/07/13','2023/8/01', '0965458216',N'Nam', N'Triều khúc,Hà Nội',6.1,0.4),
('NV004', N'Vũ Thanh Nam', '2000/09/19','2022/11/01', '0967468137',N'Nam', N'Kim Giang,Hà Nội',4.5,0.3),
('NV005', N'Trần Đình Thành', '2001/05/17','2023/11/01', '0964563249',N'Nam', N'Gia Lâm,Hà Nội',4.9,0.4),
('NV006', N'Trần Nghĩa Trung', '2000/06/18','2023/05/01', '0965647825',N'Nữ', N'Gia Lâm,Hà Nội',4.1,0.5),
('NV007', N'Đào Bích Hạnh', '1995-05-16','2014-12-19','0383640295',N'Nam', N'Huyện Ý Yên, Nam Định',6.3,0.6); 10 lOMoAR cPSD| 36006831
4.Chèn dữ liệu bảng THEDOCGIA INSERT INTO THEDOCGIA VALUES
('T001', N'Đào Thị Quỳnh','1999/11/20',N'Nữ',N'Q.Hoàng Mai,Hà
Nội','0929033563','2022/07/12','2023/07/12'),
('T002', N'Giang Bích Ngọc','2001/10/10',N'Nữ',N'Tân Sơn,Phú
Thọ','0965273925','2022/05/20','2023/05/20'),
('T003', N'NGuyễn Phúc Ninh','2006/06/13',N'Nam',N'Kiên Xương , Thái
Bình','0912364892','2022/05/20','2023/05/20'),
('T004', N'Trần Hoang Lân','2007/04/30',N'Nam',N'Vụ Bản, Nam
Định','0912567953','2022/06/20','2023/06/20'),
('T005', N'Nguyễn Thị Lan Nhi','2001/04/12',N'Nữ',N'Nghĩa Hưng, Nam
Định','091215697','2022/01/20','2023/01/20'),
('T006', N'Đỗ Tuấn Phong','2003/08/03',N'Nam',N'Thanh Xuân, Hà
Nội','091265259','2022/12/20','2023/12/20'),
('T007', N'Phạm Minh Nhật','2003/05/03',N'Nam',N'Ba Vì, Hà
Nội','091265549','2022/11/27','2023/11/27'),
('T008', N'Chu Thanh Hà','2003/09/28',N'Nữ',N'Ninh
Bình','091265659','2022/12/20','2023/12/20'),
('T009', N'Cao Minh Kỳ','1990/04/11',N'Nam',N'Q.Ba Đình,Hà
Nội','0374950570','2022/10/09','2023/10/09'),
('T010', N'Trần Tiến Minh','2002/11/29',N'Nam',N'Hải Hậu,Nam
Định','0337488963','2023/05/19','2023/05/19') 11 lOMoAR cPSD| 36006831
5.Chèn bảng dữ liệu PHIEUMUONTRA INSERT INTO PHIEUMUONTRA VALUES
('1','T001', 'NV001', '2023/08/20','2023/08/30'), ('2','T001',
'NV002', '2023/11/05','2023/11/19'),
('3','T002', 'NV003', '2023/05/21','2023/05/29'), ('4','T002',
'NV001', '2023/09/11','2023/09/17'),
('5','T003', 'NV006', '2022/12/29','2023/01/10'),
('6','T004', 'NV007', '2023/03/10','2023/03/21'),
('7','T006', 'NV005', '2022/12/27','2023/01/06'),
('8','T008', 'NV004', '2022/11/22','2022/12/02'),
('9','T009', 'NV003', '2023/10/10','2023/10/20'),
('10','T010', 'NV002', '2023/05/20','2023/05/30')
6.Chèn dữ liệu bảng CT_PHIEUMUONTRA INSERT INTO CT_PHIEUMUONTRA VALUES
('1', 'S001','2023/08/26', N'Đã trả'),
('1', 'S002','2023/08/30', N'Đã trả'), 12 lOMoAR cPSD| 36006831
('1', 'S003','2023/08/30', N'Đã trả'), ('2',
'S004',NULL, N'Đang mượn'),
('2', 'S005',NULL, N'Đang mượn'), ('3',
'S006','2023/05/29', N'Đã trả'),
('3', 'S007', NULL , N'Làm mất'),
('4', 'S003', NULL , N'Làm mất'),
('5', 'S006','2023/01/15', N'Đã trả'), ('5', 'S008', NULL, N'Làm mất'),
('5', 'S014','2023/01/10', N'Đã trả'),
('6', 'S001','2023/03/18', N'Đã trả'),
('6', 'S003','2023/03/23', N'Đã trả'),
('6', 'S006','2023/03/18', N'Đã trả'),
('7', 'S001','2023/01/10', N'Đã trả'),
('8', 'S002','2022/12/02', N'Đã trả'),
('8', 'S008','2022/12/09', N'Đã trả'),
('9', 'S011',NULL, N'Làm mất'),
('10', 'S010','2023/05/30', N'Đã trả'),
('10', 'S016','2023/05/30', N'Đã trả')
V. Truy vấn dữ liệu 13 lOMoAR cPSD| 36006831
--1. Cho biết tên những cuốn sách chưa được mượn lần nào SELECT MaSach,TenSach FROM SACH WHERE MaSach NOT IN
(SELECT MaSach FROM CT_PHIEUMUONTRA)
--2. Cho biết những nhân viên có địa chỉ ở Hà Nội và đã làm việc từ 1 năm trở lên SELECT TenNV FROM NHANVIEN
WHERE Diachi LIKE N'%Hà Nội%'
AND YEAR(GETDATE()) - YEAR(Ngayvaolam) >=1
--3. Hiện những độc giả chưa đủ 18 tuổi SELECT Mathe,TenDG FROM THEDOCGIA
WHERE YEAR(GETDATE()) -YEAR(Ngaysinh) <18
--4. Cho biết tên các sách ,tên NXB thuộc thể loại 'Truyện ngắn'
SELECT TenSach,TenNXB, TheLoai FROM SACH INNER JOIN NXB ON NXB.MaNXB = SACH.MaNXB
WHERE TheLoai=N'Truyện ngắn' 14 lOMoAR cPSD| 36006831
--5.Cho biết tổng số lượng sach và tổng số tiền sach của từng NXB
SELECT TenNXB,SUM(SoLuong)AS [Tổng số lượng] ,SUM(SoLuong * GiaTien) AS [Tổng tiền] FROM SACH INNER JOIN NXB ON NXB.MaNXB = SACH.MaNXB GROUP BY TenNXB
--6. Cho xem danh sách top 3 các đầu sách có số lần mượn nhiều nhất
SELECT TOP (3) TenSach,COUNT(SACH.MaSach) AS [Số lần mượn]
FROM SACH INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaSach = SACH.MaSach GROUP BY TenSach
ORDER BY COUNT(SACH.MaSach ) DESC
--7. Hiện tên những độc giả trả sách quá hạn và tính số ngày quá hạn
SELECT PHIEUMUONTRA.Mathe,TenDG,DATEDIFF(DAY,Ngayhentra,Ngaytra) AS [Số ngày quá hạn]
FROM THEDOCGIA INNER JOIN PHIEUMUONTRA 15 lOMoAR cPSD| 36006831
ON PHIEUMUONTRA.MaThe= THEDOCGIA.Mathe INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT WHERE Ngaytra > Ngayhentra
--8. Cho biết tên độc giả và tính số tiền đền bù khi độc giả làm mất sach ,biết số tiền đền bù bằng 20 % giá sách
SELECT THEDOCGIA.Mathe,TenDG,(GiaTien*0.2) AS [Số tiền đền bù] FROM THEDOCGIA
INNER JOIN PHIEUMUONTRA ON PHIEUMUONTRA.Mathe = THEDOCGIA.Mathe
INNER JOIN CT_PHIEUMUONTRA ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT
INNER JOIN SACH ON SACH.MaSach = CT_PHIEUMUONTRA.MaSach AND TinhTrang =N'Làm mất'
VI. Xây dựng các view
-- 1.Tạo view hiện thÙng tin những độc giả chưa trả s·ch
CREATE VIEW DocGia_ChuaTraSach AS
SELECT DISTINCT THEDOCGIA.MaThe,TenDG FROM THEDOCGIA INNER JOIN PHIEUMUONTRA
ON PHIEUMUONTRA.MaThe = THEDOCGIA.MaThe INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT AND TinhTrang =N'Đang mượn' 16 lOMoAR cPSD| 36006831
--2. Tạo view hiện tên trong năm 2023, những độc giả nào chỉ đến mượn sách 2 lần CREATE VIEW DOCGIA_MUON2LAN AS
SELECT TenDG , COUNT(*) AS [số lần]
FROM THEDOCGIA INNER JOIN PHIEUMUONTRA
ON PHIEUMUONTRA.MaThe = THEDOCGIA.MaThe AND YEAR(NgayMuon) =2023 GROUP BY TenDG
HAVING COUNT(THEDOCGIA.MaThe) = 2
--3. Tạo view tính tổng số đầu sách của từng nhà xuất bản CREATE VIEW Tongdausach_NXB AS
SELECT TenNXB, COUNT(SACH.MaNXB) AS [Tổng đầu sách] FROM SACH,NXB WHERE SACH.MaNXB=NXB.MaNXB GROUP BY TenNXB
--4. Tạo view thống kê số lượng nhân viên theo giới tính CREATE VIEW NhanVien_GioiTinh AS SELECT CASE GioiTinh WHEN 'Nữ' THEN N'Nữ' 17 lOMoAR cPSD| 36006831 ELSE N'Nam' END AS [Giới tính],
COUNT(MaNV) AS [Số Lượng] FROM NHANVIEN GROUP BY GioiTinh;
--5. Tạo view hiện tên những cuốn sách không được mượn vào 12/2022
CREATE VIEW Sach_Khongduocmuon AS
SELECT CT_PHIEUMUONTRA.Masach,Tensach FROM SACH INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaSach = SACH.MaSach INNER JOIN PHIEUMUONTRA
ON PHIEUMUONTRA.MaMT = CT_PHIEUMUONTRA.MaMT
AND MONTH(Ngaymuon) <>12 AND YEAR(NgayMuon) <>2022
VII. Xây dựng các thủ tục
--1.Tạo thủ tục in ra thông tin cơ bản của nhân viên với tên nhân viên được nhập vào 18 lOMoAR cPSD| 36006831
CREATE PROC pr_thongtincoban_NhanVien @tennv nvarchar(30) AS BEGIN
IF NOT EXISTS (SELECT* FROM NHANVIEN WHERE TenNV = @tennv )
PRINT N'Không tìm thấy nhân viên có tên '+@tennv ELSE
SELECT *FROM NhanVien WHERE TenNV=@tennv END
pr_thongtincoban_NhanVien @tennv= N'Vı Ngọc Quỳnh'
pr_thongtincoban_NhanVien @tennv= N'Nguyễn Thanh Thủy'
--2.Tạo thủ tục in ra tổng tiền của cuốn sách nào đó với tham số truyền vào là tên sách
CREATE PROC pr_tongtien_sach @tensach NVARCHAR(50) AS BEGIN
IF not exists (SELECT* FROM Sach WHERE Tensach= @tensach)
PRINT N'không tồn tại sách có tên '+@tensach ELSE
SELECT Tensach [tên sách], SUM(Soluong*Giatien) [tổng tiền sách] FROM Sach WHERE Tensach=@tensach GROUP BY Tensach END
EXEC pr_tongtien_sach N'Tuổi thơ dữ dội'
--3 .Tạo thủ tục cho biết tên nhân viên đã lập phiếu mượn trả với mã phiếu mượn truyền vào
CREATE PROC pr_NV_Lap_PM @maphieu INT AS BEGIN
SELECT TenNV AS [tên nhân viên lập phiếu] FROM NHANVIEN ,PHIEUMUONTRA 19 lOMoAR cPSD| 36006831
WHERE NHANVIEN.MaNV=PHIEUMUONTRA.MaNV AND MaMT = @maphieu END
EXEC pr_NV_Lap_PM @maphieu = 5
--4 . thủ tục cho biết nhân viên có HSL cao nhất
CREATE PROC pr_nhanvien_luongcaonhat AS BEGIN DECLARE @hsluongmax FLOAT
SET @hsluongmax =(SELECT MAX(hesoluong) AS N'Hệ số lương cao nhất' FROM NHANVIEN)
SELECT MaNV [mã nhân viên] ,TenNV [ tên nhân viên ], @hsluongmax [hệ số lương cao nhất] FROM NHANVIEN WHERE hesoluong = @hsluongmax END EXEC pr_nhanvien_luongcaonhat
--5 .Tạo thủ tục cho biết tình trạng sách lúc trả của của những độc giả mượn sách với mã sách đuọc nhập vào
CREATE PROC pr_TinhTrangSach_ĐG (@masach VARCHAR(10)) AS BEGIN
IF NOT EXISTS (SELECT* FROM CT_PHIEUMUONTRA WHERE Masach = @masach )
PRINT N'không tồn tại mã sách ' +@masach ELSE
SELECT TenDG [tên độc giả], Tinhtrang [tình trạng sách]
FROM PHIEUMUONTRA INNER JOIN CT_PHIEUMUONTRA
ON CT_PHIEUMUONTRA.MaMT = PHIEUMUONTRA.MaMT INNER JOIN THEDOCGIA
ON THEDOCGIA.Mathe=PHIEUMUONTRA.Mathe AND Masach=@masach 20 lOMoAR cPSD| 36006831 GROUP BY TenDG, Tinhtrang END
EXEC pr_TinhTrangSach_ĐG @masach ='S001' 21