You are on page 1of 19

CƠ SỞ DỮ LIỆU

QUẢN LÝ THƯ VIỆN


MÔN DBI202
GIẢNG VIÊN: TRẦN LÂM QUÂN

TÁC GIẢ:
NGUYỄN PHÙNG THỊNH | HE151359
ĐÀO DUY THÁI | HE176315

DBI202 ASSIGNMENT
Page |1

MỤC LỤC
I. GIỚI THIỆU VẤN ĐỀ
1. MÔ TẢ VẤN ĐỀ …………………………………………………… 2
2. MỤC TIÊU……………………………………………………………. 2

II. MÔ HÌNH MỐI QUAN HỆ - THỰC THỂ (ERD)


1. SƠ ĐỒ MỐI QUAN HỆ - THỰC THỂ……………………………… 3
2. CHI TIẾT THỰC THỂ - THUỘC TÍNH………………………………4

III. CÀI ĐẶT CƠ SỞ DỮ LIỆU


1. CÀI ĐẶT DATABASE ……………………………………………… 4
2. CÀI ĐẶT CÁC BẢNG……………………………………………… 5
3. MÔ TẢ CHUNG CỦA CƠ SỞ DỮ LIỆU……………………………12

IV. CÂU LỆNH SQL


1. CÂU LỆNH SỬ DỤNG ORDER BY……………………………… 13
2. CÂU LỆNH SỬ DỤNG INNER JOIN……………………………… 13
3. CÂU LỆNH SỬ DỤNG FULL JOIN………………………………...13
4. CÂU LỆNH SỬ DỤNG HÀM TỔNG HỢP…………………………14
5. CÂU LỆNH SỬ DỤNG GROUP BY VÀ MỆNH ĐỀ HAVING…… 14
6. CÂU LỆNH SỬ DỤNG SUB-QUERY NHƯ MỘT QUAN HỆ…… 14
7. CÂU LỆNH SỬ DỤNG PARTIAL MATCH TRONG MỆNH ĐỀ
WHERE……………………………………………………………… 16
8. PROCEDURE……………………………………………………… 16
9. TRIGGER…………………………………………………………… 16

DBI202 ASSIGNMENT
Page |2

I) GIỚI THIỆU VẤN ĐỀ


1. MÔ TẢ VẤN ĐỀ
Ngày nay, sách đã trở thành 1 phần không thể thiếu trong cuộc sống hằng ngày
của chúng ta, là kho tàng chứa đựng những hiểu biết của con người đã được
khám phá, chọn lọc, thử thách, tổng hợp. Sách đã đi qua suốt quá trình lịch sử
của nhân loại, vì thế nên số lượng bùng nổ của những cuốn sách là điều dĩ
nhiên.
Với một số lượng lớn cuốn sách như vậy, nếu như một thư viện chỉ sử dụng các
phương pháp ghi chép truyền thống về việc mượn/trả sách có thể gặp rất nhiều
khó khan và sai sót. Chia sẻ chung đam mê đọc sách, nhóm chúng em quyết
định thiết kế một cơ sở dữ liệu của một thư viện để thực hiện assignment của
môn học này.
Qua tìm hiểu về cách thư viện vận hành thì chúng em đã thu thập được những
thông tin như sau:
 Mỗi người đến mượn sách cần có một tài khoản riêng để quản lý thông
tin thay vì kiểm tra tài khoản thư viện vật lý, thông tin đó bao gồm các
thông tin cá nhân cần thiết như số điện thoại, địa chỉ, giới tính, ngày
tháng năm sinh ...
 Mỗi nhân viên của thư viện cũng có một tài khoản riêng để quản lý việc
mượn sách của thư viện, đồng thời có thêm thông tin của nhân viên
giống như người đến mượn sách .
 Sách được phân loại theo nhà xuất bản và thể loại sách, một nhà sản xuất
có thể sản xuất nhiều sách và một thể loại có thể có nhiều sách.
 Phiếu mượn sách sẽ có liên kết giữa nhân viên và người mượn sách để
đại diện cho mỗi lần mượn sách chứa thông tin về ngày mượn.
 Phần chi tiết của phiếu mượn sẽ lưu trữ thông tin về phiếu mượn, sách
đã mượn, số sách đã mượn và ngày trả.

2. MỤC TIÊU
Cơ sở dữ liệu này được thiết kế để giải quyết các công đoạn và quy trình của
người thủ thư bằng cách truy xuất thông tin trên máy tính thay vì sử dụng đến
các thao tác thủ công như trước đây. Điều này giúp cả người quản lý thư viện
và học sinh dễ dàng kiểm soát thông tin của sách cũng như việc mượn/trả sách
trong thư viện.

DBI202 ASSIGNMENT
Page |3

II) MÔ HÌNH MỐI QUAN HỆ - THỰC THỂ (ERD)


1) SƠ ĐỒ MỐI QUAN HỆ - THỰC THỂ
* Một vài ký hiệu được sử dụng trong sơ đồ
 Khoá chính
Attribute Attibute

 Thuộc tính
Attribute Attribute

 Thực thể
ENTITY

 Thực thể yếu


WEAK ENTIRY

 Quan hệ Relationship

 Connectivity (force) = 1

 Connectivity = N

DBI202 ASSIGNMENT
Page |4

2) CHI TIẾT THỰC THỂ - THUÔC TÍNH


Dựa trên mô tả vấn đề và mục tiêu, chúng em có thể trình bày một số thực thể
và thuộc tính của chúng như sau:
- Publisher: PublisherID, Name, Address, Website, Other.
- KindOfBook: BookCode, Category.
- Books: BookID, BookCode, PublisherID, Title, AuthorName, Year,
Edition, Quantity, Brief.
- Staffs: StaffID, Password, Name, Date_of_birth, Address, Gender, Phone,
Email, Date-started.
- Readers: ReaderID, Password, Name, Date_of_birth, Address, Gender,
Email.
- Borrow: BorrowedID, StaffID, ReaderID, Date_start.
- BorrowBooks_details: BorrowID,BookID, Quantity, Date_end.
- Books_return: BorrowID,Date_return.
- Compensation: BorrowedID, Reason.

III) CÀI ĐẶT CƠ SỞ DỮ LIỆU


1. CÀI ĐẶT DATABASE

--create database
CREATE DATABASE [Assignment5]

DBI202 ASSIGNMENT
Page |5

2. CÀI ĐẶT CÁC BẢNG


2.1. Cài đặt bảng Publisher

--create table Pulisher


CREATE TABLE Publisher(
PublisherID char(50) NOT NULL PRIMARY KEY,
Name nvarchar(200) NOT NULL,
Address nvarchar(200) NOT NULL,
Website char(100),
Other nvarchar(200)
)

2.2. Cài đặt bảng KindOfBook

DBI202 ASSIGNMENT
Page |6

--create table KindOfBook


CREATE TABLE KindOfBook(
BookCode char(50) NOT NULL PRIMARY KEY,
Category nvarchar(200) NOT NULL
)

2.3. Cài đặt bảng Books

--create table Books


create table Books(
BookID char(50) NOT NULL PRIMARY KEY,
Title nvarchar(100) NOT NULL,
AuthorName nvarchar(100),
PublisherID char(50) NOT NULL,
BookCode char(50) NOT NULL,
Year int check (Year <= YEAR(getDate())),
Edition int,
Quantity int NOT NULL,
Briefly nvarchar(1000)
constraint fk_Books_KindOfBook FOREIGN KEY(BookCode)
references KindOfBook(BookCode),
constraint fk_Books_Publisher FOREIGN KEY(PublisherID)
references Publisher(PublisherID)
)

DBI202 ASSIGNMENT
Page |7

2.4. Cài đặt bảng Staffs

--create table Staffs


CREATE TABLE Staffs(
StaffID char(50) NOT NULL PRIMARY KEY CHECK (StaffID
like 'FU[0-9][0-9][0-9][0-9][0-9][0-9]'),
Name nvarchar(100) NOT NULL,
Address nvarchar(200),
Date_of_birth date NOT NULL check (Date_of_birth <
getDate()),
Gender bit NOT NULL check (Gender like 0 or Gender
like 1),
Phone char(50) UNIQUE CHECK (Phone like '[0-9][0-9][0-
9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
Email char(100),
Date_started date NOT NULL,
Password char(50) NOT NULL
)
DBI202 ASSIGNMENT
Page |8

2.5. Cài đặt bảng Readers

--create table Readers


create table Readers(
ReaderID char(50) NOT NULL PRIMARY KEY CHECK (ReaderID
like '[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9][0-9]'),
Name nvarchar(100) NOT NULL,
Address nvarchar(200),
Date_of_birth date NOT NULL check (Date_of_birth <
getDate()),
Email char(100),
Gender bit NOT NULL check (Gender like 0 or Gender
like 1),
Password char(50) NOT NULL
)

DBI202 ASSIGNMENT
Page |9

2.6. Cài đặt bảng Borrow

--create table Borrow


create table Borrow(
BorrowID char(50) NOT NULL PRIMARY KEY,
StaffID char(50) NOT NULL,
ReaderID char(50) NOT NULL,
Date_start date NOT NULL,
constraint fk_Borrow_Readers FOREIGN KEY(ReaderID)
references Readers(ReaderID),
constraint fk_Borrow_Staffs FOREIGN KEY(StaffID)
references Staffs(StaffID)
)

DBI202 ASSIGNMENT
P a g e | 10

2.7. Cài đặt bảng BorrowBooks_Details

--create table BorrowBooks_details


CREATE TABLE BorrowBooks_details(
BorrowID char(50) NOT NULL,
BookID char(50) NOT NULL,
Quantity int NOT NULL,
Date_end date NOT NULL,
constraint fk_BorrowBooks_details_Borrow FOREIGN
KEY(BorrowID) references Borrow(BorrowID),
constraint fk_BorrowBooks_details_Books FOREIGN
KEY(BookID) references Books(BookID)
primary key(BorrowID,BookID)
)

2.8. Cài đặt bảng Books_Return

DBI202 ASSIGNMENT
P a g e | 11

--create table Books_return


CREATE TABLE Books_return(
BorrowID char(50) NOT NULL,
Date_return date NOT NULL,
constraint fk_Books_return_Borrow FOREIGN
KEY(BorrowID) references Borrow(BorrowID)
)

2.9. Cài đặt bảng Compensation

--create table Compensation


create table Compensation(
BorrowID char(50) NOT NULL,
Reason nvarchar(200) NOT NULL,
constraint fk_PHAT_MUONSACH FOREIGN KEY(BorrowID)
references Borrow(BorrowID)
)

DBI202 ASSIGNMENT
P a g e | 12

3. MÔ TẢ CHUNG CỦA CƠ SỞ DỮ LIỆU

Books_return
BorrowID

Date_return

Readers
ReaderID
Borrow
Name
BorrowID Compensation
Address BorrowID
StaffID
Date_of_birth Reason
ReaderID
Email
Date_start
Gender
Password

BorrowBooks_details Staffs
BorrowID StaffID
BookID Name

Quantity Address

Date_end Date_of_birth
Gender
Phone
Email
Date_started
Books Password
BookID
Title
AuthorName
KindOfBook
PublisherID BookCode
BookCode Category
Year
Edition
Quantity
Briefly

Publisher
PublisherID
Name
Address
Website
Other

DBI202 ASSIGNMENT
P a g e | 13

V. CÂU LỆNH SQL


1. CÂU LỆNH SỬ DỤNG ORDER BY
SELECT * FROM Staffs s
ORDER BY s.Name DESC
Result:

2. CÂU LỆNH SỬ DỤNG INNER JOIN


SELECT * FROM Books b
inner join Publisher p
ON b.PublisherID = p.PublisherID
WHERE b.Year = 2019
Result:

3. CÂU LỆNH SỬ DỤNG FULL JOIN


Code:
Select BookID, Category
From Books FULL OUTER JOIN KindOfBook
On Books.BookCode = KindOfBook.BookCode
Where Books.Year = 2019

DBI202 ASSIGNMENT
P a g e | 14

Result:

4. CÂU LỆNH SỬ DỤNG HÀM TỔNG HỢP


SELECT COUNT(B.BookID) as numOfBook FROM Books B,
Publisher P
WHERE B.PublisherID = P.PublisherID
AND P.Name = N'Bách Khoa Hà Nội'
Result:

5. CÂU LỆNH SỬ DỤNG GROUP BY VÀ MỆNH ĐỀ HAVING


Code:
SELECT S.StaffID, S.Name, COUNT(B.BorrowID) AS
TOTALMANAGE FROM Staffs S, Borrow B
WHERE S.StaffID = B.StaffID
GROUP BY S.StaffID, S.Name
HAVING COUNT(B.BorrowID) > 3
Result:

6. CÂU LỆNH SỬ DỤNG SUB-QUERY NHƯ MỘT QUAN HỆ


Code1:
SELECT b.BookID,
b.Title,
count(br.ReaderID) AS TotalBorrows
FROM Books b,
BorrowBooks_details bd,
Borrow br,
Readers r
WHERE b.BookID = bd.BookID
AND bd.BorrowID = br.BorrowID
AND br.ReaderID = r.ReaderID
DBI202 ASSIGNMENT
P a g e | 15

GROUP BY b.BookID,
b.Title
HAVING count(br.BorrowID) =
(SELECT top(1) count(br.ReaderID) AS TotalBorrows
FROM Books b,
BorrowBooks_details bd,
Borrow br,
Readers r
WHERE b.BookID = bd.BookID
AND bd.BorrowID = br.BorrowID
AND r.ReaderID = br.ReaderID
GROUP BY b.BookID,
b.Title
ORDER BY count(br.BorrowID) DESC)
Result1:

Code2:
SELECT r.ReaderID,
r.Name,
sum(bd.Quantity) AS NumberOfBorrowedBooks
FROM Readers r,
Borrow b,
BorrowBooks_details bd
WHERE r.ReaderID = b.ReaderID
AND b.BorrowID = bd.BorrowID
GROUP BY r.ReaderID, r.Name
HAVING sum(bd.Quantity) =
(SELECT top(1) sum(bd.Quantity) AS
NumberOfBorrowedBooks
FROM Readers r,
Borrow b,
BorrowBooks_details bd
WHERE r.ReaderID = b.ReaderID
AND b.BorrowID = bd.BorrowID
GROUP BY r.ReaderID,
r.Name,
bd.BorrowID
ORDER BY sum(bd.Quantity) DESC)

DBI202 ASSIGNMENT
P a g e | 16

Result2:

7. CÂU LỆNH SỬ DỤNG PARTIAL MATCH TRONG MỆNH ĐỀ


WHERE
Code:
SELECT *
FROM Books
WHERE Title like N'%Trái Tim%' and Quantity > 10
Result:

8. PROCEDURE
Code:
CREATE PROC check_Quantity @Book_ID CHAR(10),
@NumberofBooks INT OUTPUT
AS
BEGIN
SET @NumberofBooks = (SELECT Quantity
FROM Books WHERE BookID = @Book_ID)
END

DECLARE @t INT
EXEC check_Quantity'054JD', @t OUTPUT
SELECT @t AS Quantity
Result:

9. TRIGGER
Code1:
CREATE TRIGGER checkCompensation
ON Books_return AFTER INSERT
AS
BEGIN
DECLARE @borrowID CHAR(50);
DECLARE @date_end INT

DBI202 ASSIGNMENT
P a g e | 17

SELECT @borrowID = i.BorrowID, @date_end =


DATEDIFF(day,bd.Date_end,i.Date_return) FROM inserted
i,
(SELECT DISTINCT bd.BorrowID, bd.Date_end FROM
BorrowBooks_details bd) AS bd
WHERE bd.BorrowID = i.BorrowID
IF(@date_end >0)
BEGIN
INSERT INTO Compensation(BorrowID,Reason) VALUES
(@borrowID, N'Bị nộp muộn ' +
CONVERT(NVARCHAR(200),@date_end) + N' ngày')
END
END
Result1:

Code2:
CREATE TRIGGER checkRemainQuanity
ON BorrowBooks_details AFTER INSERT
AS
BEGIN
DECLARE @quantity INT;
SELECT @quantity = (SELECT b.Quantity - (SELECT
sum(b.Quantity) FROM inserted i, BorrowBooks_details b
WHERE i.BookID = b.BookID)
FROM Books b, inserted i WHERE b.BookID = i.BookID)
IF(@quantity<0)
BEGIN
PRINT 'Not enough quantity'
DELETE FROM BorrowBooks_details
where Quantity = (SELECT i.Quantity FROM inserted
i) and
BorrowID = (SELECT i.BorrowID FROM inserted i)
and BookID = (SELECT i.BookID FROM inserted i)
END
END

DBI202 ASSIGNMENT
P a g e | 18

Result2:

DBI202 ASSIGNMENT

You might also like