Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

Yêu Cầu 1 ASS CSDL

1.Các Tập Thực Thể:


A. Tập Thực Thể "Sách":
 Thuộc Tính:
 Mã Sách [PK]
 Tiêu Đề
 Nhà Xuất Bản
 Tác Giả
 Số Trang
 Số Lượng Bản Sao
 Giá Tiền
 Ngày Nhập Kho
 Vị Trí Đặt Sách
 Mã Loại [FK]
 Quan Hệ:
 Mối Quan Hệ 1-N với Thực Thể "Nhân Viên" (1 văn phòng có nhiều nhân viên)
 Mối Quan Hệ 1-1 với Thực Thể "Trưởng Văn Phòng" (mỗi văn phòng có một
trưởng văn phòng)
B. Tập Thực Thể "Loại Sách":
 Thuộc Tính:
 Mã Loại [PK]
 Tên Loại
 Quan Hệ:
 Mối Quan Hệ N-N với Thực Thể "Thân Nhân" (mỗi nhân viên có thể có nhiều
thân nhân)
C. Tập Thực Thể "Sinh Viên":
 Thuộc Tính:
 Mã Sinh Viên [PK]
 Tên Sinh Viên
 Ngày Hết Hạn
 Chuyên Ngành
 Email
 Số Điện Thoại
 Quan Hệ:
 Mối Quan Hệ 1-1 với Thực Thể "Văn Phòng" (mỗi văn phòng có một trưởng
phòng)
D. Tập Thực Thể "Phiếu Mượn":
 Thuộc Tính:
 Số Phiếu [PK]
 Ngày Mượn
 Ngày Trả
 Trạng Thái
 Mã Sinh Viên [FK]

E. Tập Thực Thể "Phiếu Mượn Chi Tiết ":


 Thuộc Tính:
 Số Phiếu [PK] [FK]
 Mã Sách
 Ghi Chú
 Quan Hệ:
 Mối Quan Hệ N-N với Thực Thể "Văn Phòng" (mỗi văn phòng có nhiều BĐS, và
mỗi BĐS thuộc một văn phòng)

2. Mối Quan Hệ:


 Mối Quan Hệ 1-N giữa Thực Thể "Sách" và "Loại Sách" (Một sách chỉ có thể thuộc
một loại sách, nhưng một loại sách có thể có nhiều sách).
 Mối Quan Hệ 1-N giữa Thực Thể "Sách" và "Phiếu Mượn Chi Tiết" (Một sách có thể
được mượn nhiều lần, nhưng một lần mượn chỉ có thể mượn một sách).
 Mối Quan Hệ 1-N giữa Thực Thể "Phiếu Mượn" và "Phiếu Mượn Chi Tiết" (Một
phiếu mượn có thể có nhiều chi tiết mượn, nhưng một chi tiết mượn chỉ thuộc về một
phiếu mượn.).
 Mối Quan Hệ 1-N giữa Thực Thể "Sinh Viên và "Phiếu Mượn" (Một sinh viên có thể
mượn nhiều phiếu mượn, nhưng một phiếu mượn chỉ có thể được mượn bởi một sinh
viên.).
Y3.
create database Quanlythuvien
go
use Quanlythuvien
go

create table Sach(


maSach nvarchar(15) not null,
tieuDe nvarchar(30) null,
nhaXuatBan nvarchar(50) null,
tacGia nvarchar(30) null,
soTrang nvarchar(100) null,
soLuongBanSao nvarchar(100) null,
giaTien decimal(9,0) null,
ngayNhapKho Date null,
viTriDatSach nvarchar(50) null,
loaiSach nvarchar(50) null,
PRIMARY KEY(maSach)
);
go

create table SinhVien(


maSinhVien nvarchar(15) not null,
tenSinhVien nvarchar(30) null,
ngayHetHan Date null,
chuyenNghanh nvarchar(30) null,
Email nvarchar(50) null,
soDienThoai nvarchar(15) null,
PRIMARY KEY(maSinhVien)
);
go

create table PhieuMuon(


soPhieu nvarchar(15) not null,
ngayMuon Date null,
ngayTra Date null,
trangThai nvarchar(50) null,
maSinhVien nvarchar(15) null,
PRIMARY KEY(soPhieu),
FOREIGN KEY(maSinhVien) REFERENCES SinhVien(maSinhVien)
);
go

create table PhieuMuonChiTiet(


soPhieu nvarchar(15) not null,
maSach nvarchar(15) null,
ghiChu nvarchar(50) null,
PRIMARY KEY(soPhieu),
FOREIGN KEY(maSach) REFERENCES Sach(maSach),
FOREIGN KEY(soPhieu) REFERENCES PhieuMuon(soPhieu)
);
--y4.
CREATE TABLE LoaiSach (
MaLoaiSach INT PRIMARY KEY,
TenLoaiSach VARCHAR(50) UNIQUE
);

CREATE TABLE Sach (


MaSach INT PRIMARY KEY,
TenSach VARCHAR(100),
MaLoaiSach INT,
SoLuongBanSao INT,
GiaTien DECIMAL(10, 2),
TacGia VARCHAR(100),
CONSTRAINT fk_LoaiSach FOREIGN KEY (MaLoaiSach) REFERENCES LoaiSach(MaLoaiSach)
);

CREATE TABLE SinhVien (


MaSinhVien VARCHAR(10) PRIMARY KEY,
TenSinhVien VARCHAR(100),
Email VARCHAR(100) UNIQUE
);

CREATE TABLE PhieuMuon (


MaPhieuMuon INT PRIMARY KEY,
MaSach INT,
TrangThai VARCHAR (10),
MaSinhVien VARCHAR(10),
NgayMuon DATE,
NgayTra DATE,
CONSTRAINT fk_Sach FOREIGN KEY (MaSach) REFERENCES Sach(MaSach),
CONSTRAINT fk_SinhVien FOREIGN KEY (MaSinhVien) REFERENCES SinhVien(MaSinhVien)
);
--y5
INSERT INTO LoaiSach (MaLoaiSach, TenLoaiSach) VALUES
(1, 'IT'),
(2, 'Toán Học'),
(3, 'Văn học'),
(4, 'Khoa học');

INSERT INTO Sach (MaSach, TenSach, MaLoaiSach, GiaTien, TacGia) VALUES


(1, 'SQL huong dan', 1, 25.99, 'Tac gia a'),
(2, 'Sach Hoa Hoc', 4, 19.99, 'Tac gia b'),
(3, 'IT Huong Dan', 1, 15.99, 'Tac gia c'),
(4, 'Sach Tieng Viet', 3, 29.99, 'Tac gia d'),
(5, 'Sach Toan', 2, 29.99, 'Tac gia e');

INSERT INTO SinhVien (MaSinhVien, TenSinhVien, Email) VALUES


('SV001', 'Nguyen Van A', 'vana@gmail.com'),
('SV002', 'Tran Thi B', 'tranb@gmail.com'),
('SV003', 'Le Van C', 'levanc@gmail.com'),
('SV004', 'Pham Thi D', 'phamd@gmail.com'),
('SV005', 'Hoang Van E', 'hoange@gmail.com');

INSERT INTO PhieuMuon (MaPhieuMuon, MaSach, MaSinhVien, NgayMuon, NgayTra) VALUES


(1, 1, 'SV001', '2017-01-05', '2017-01-20'),
(2, 2, 'SV002', '2017-01-10', '2017-01-25'),
(3, 3, 'SV003', '2017-02-01', '2017-02-15'),
(4, 4, 'SV004', '2017-02-05', '2017-02-20'),
(5, 5, 'SV005', '2017-02-10', '2017-02-25');
--y6
--6.1
SELECT TenSach, MaSach, GiaTien, TacGia
FROM Sach
WHERE MaLoaiSach = (
SELECT MaLoaiSach
FROM LoaiSach
WHERE MaLoaiSach = 'IT');
--6.2
SELECT pm.MaPhieuMuon, pm.MaSach, pm.NgayMuon, pm.MaSinhVien
FROM PhieuMuon pm
WHERE pm.NgayMuon BETWEEN '2017-01-01' AND '2017-01-31';
--6.3
SELECT *
FROM PhieuMuon
WHERE NgayTra IS NULL
ORDER BY NgayMuon ASC;
--6.4
SELECT ls.MaLoaiSach, ls.TenLoaiSach, COUNT(s.MaSach) AS TongSoLuong
FROM Sach s
JOIN LoaiSach ls ON s.MaLoaiSach = ls.MaLoaiSach
GROUP BY ls.MaLoaiSach, ls.TenLoaiSach;
--6.5
SELECT COUNT(DISTINCT MaSinhVien) AS SoLuotMuon
FROM PhieuMuon;
--6.6
SELECT *
FROM Sach
WHERE TenSach LIKE '%SQL%';
--6.7
SELECT pm.MaSinhVien, sv.TenSinhVien, pm.MaPhieuMuon, s.TenSach, pm.NgayMuon, pm.NgayTra
FROM PhieuMuon pm, SinhVien sv, Sach s
WHERE pm.MaSinhVien = sv.MaSinhVien
AND pm.MaSach = s.MaSach
ORDER BY pm.NgayMuon;
--6.8
SELECT s.MaSach, s.TenSach, COUNT(*) AS SoLanMuon
FROM PhieuMuon pm, Sach s
WHERE pm.MaSach = s.MaSach
GROUP BY s.MaSach, s.TenSach
HAVING COUNT(*) > 20;
--6.9
UPDATE Sach
SET GiaTien = GiaTien * 0.7
WHERE YEAR((SELECT NgayMuon FROM PhieuMuon WHERE Sach.MaSach = PhieuMuon.MaSach)) < 2014;
--6.10
UPDATE PhieuMuon
SET TrangThai = 'DaTra'
WHERE MaSinhVien = 'PD12301';
--6.11
--6.12
UPDATE Sach
SET SoLuongBanSao = SoLuongBanSao + 5
WHERE MaSach IN (
SELECT MaSach
FROM PhieuMuon
GROUP BY MaSach
HAVING COUNT(*) > 10
);
--6.13
DELETE FROM PhieuMuon
WHERE NgayMuon < '2010-01-01' OR (NgayTra IS NOT NULL AND NgayTra < '2010-01-01');

You might also like