TÓM TẮTAssigment môn hệ cơ sở dữ liệu sẽ được trình bày thành 2 phần chính: Phần thứ nhất: Sinh viên tự viết đặc tả cho một nghiệp vụ nào đó thỏa mãn cácyêu cầu về mối quan hệ, vẽ mô hìn
Trang 1BÀI TẬP LỚN THỰC HÀNH MÔN HỆ CƠ SỞ DỮ LIỆU
Trang 2BÀI TẬP LỚN THỰC HÀNH MÔN HỆ CƠ SỞ DỮ LIỆU
Trang 3LỜI CẢM ƠN
Đầu tiên, tôi xin gửi lời cảm ơn chân thành đến Ban giám hiệu trường Đại HọcTôn Đức Thắng vì đã tạo điều kiện tối ưu về mặt vật chất, cung cấp một môi trườnghọc tập năng động, sáng tạo cũng như hệ thống thư viện hiện đại, đa dạng các loại tàiliệu giấy và điện từ cung cấp đầy đủ nhất tất cả các thông tin cần thiết tạo điều kiệngiúp tôi hoàn thành bài tiểu luận
Tôi xin chân thành cảm ơn ThS Doãn Xuân Thanh và ThS Lê Anh Khoa, giảngviên bộ môn Hệ Cơ Sở Dữ Liệu cho Công nghệ thông tin, đã truyền đạt kiến thức rấttận tình, giúp tôi xây dựng đủ nền tảng kiến thức để áp dụng vào việc viết bài tiểu luậnnày; do chưa có nhiều kinh nghiệm nên khó tránh khỏi sai sót, mong sẽ nhận đượcnhững góp ý quý giá của thầy để tôi có thể khắc phục, hoàn thiện và rút kinh nghiệmtrong tương lai
Một lần nữa, tôi xin chân thành cảm ơn và gửi đến trường và quý thầy cô nhữnglời chúc tốt đẹp nhất
Trang 4ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi và được sự hướng dẫn củaThs Lê Anh Khoa Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực vàchưa công bố dưới bất kỳ hình thức nào trước đây
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên quan đến
những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 28 tháng 11 năm 2023
Tác giả (ký tên và ghi rõ họ tên)
Lê Thị Hiếu Ngân
Trang 5PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn
_ _ _ _ _ _ _
Tp Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)
Phần đánh giá của GV chấm bài
_ _ _ _ _ _ _
Tp Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)
Trang 6TÓM TẮT
Assigment môn hệ cơ sở dữ liệu sẽ được trình bày thành 2 phần chính:
Phần thứ nhất: Sinh viên tự viết đặc tả cho một nghiệp vụ nào đó thỏa mãn cácyêu cầu về mối quan hệ, vẽ mô hình ERD cho đặc tả, chuyển mô hình ERD sang môhình quan hệ, Sử dụng câu lệnh SQL để thực hiện các thao tác theo yêu cầu
Phần 2 sử dụng java để thực hiện các yêu cầu cài đặt các chức năng sau:
- Yêu cầu thứ hai:
Input: File Input2.txt chứa lược đồ CSDL bao gồm các bảng, các thuộctính và các phụ thuộc hàm
Output: File Output2.txt chứa bao đóng của tập thuộc tính X (Tập thuộctính X do người dùng truyền vào); các khoá của lược đồ
Trang 7MỤC LỤC
LỜI CẢM ƠN i
PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN iii
TÓM TẮT iv
MỤC LỤC 1
PHẦN 1 : 2
1 Đặc tả 2
2 Mô hình ERD cho đặc tả 2
3 Chuyển mô hình ERD sang mô hình quan hệ 2
4 Sử dụng câu lệnh SQL và thực hiện yêu cầu 3
4.1 Tạo các bảng cho các mô hình quan hệ trên 3
4.2 Tạo ít nhất hai function để thêm dữ liệu vào bảng trên 8
4.3 Tạo ít nhất một trigger để kiểm tra ràng buộc khóa ngoại, ràng buộc miền giá trị 9
PHẦN 2 12
1 Câu 1 12
2 Câu 2 13
TÀI LIỆU THAM KHẢO 15
Trang 8CHƯƠNG 1 :
1 Đặc tả:
Sự kiện quyên góp được tổ chức cho các bạn sinh viên của trường đại học Tôn Đức Thắng, biết mỗi sinh viên có mssv, họ tên, khoa, số điện thoại Thông tin về khoa bao gồm mã khoa và tên khoa Mỗi sinh viên chỉ thuộc một khoa nhưng mỗi khoa có thể có nhiều sinh viên
Khi sinh viên quyên góp sách sẽ lưu lại ngày quyên góp Mỗi sinh viên có quyên góp một hoặc nhiều quyển sách Mỗi quyển sách bao gồm mã sách, tên nhà xuấtbản, tác giả Sách được chia làm hai loại là tài liệu giáo trình và sách khác Tài liệu giáo trình tương ứng với môn học nhất định; còn sách khác cần được bổ sung thể loại sách Một quyển sách có thể có một hoặc nhiều tác giả, một tác giả có thể có một hoặc nhiều sách Thông tin tác giả bao gồm họ và tên, năm sinh, năm mất
Mỗi quyển sách có thể có được đính kèm một ghi chú về cảm nhận - review từ người quyên góp Ghi chú có thể có mã sách, mssv người quyên góp, mức độ đánh giá trên thang 5, và bình luận từ người quyên góp
2 Mô hình ERD cho đặc tả
3 Chuyển mô hình ERD sang mô hình quan hệ
Trang 94 Sử dụng câu lệnh SQL và thực hiện yêu cầu 4.1 Tạo các bảng cho các mô hình quan hệ trên
-Tạo database CONGTYMON:
CREATE DATABASE BAITAPLON
hoten nvarchar(50) NOT NULL,
namsinh INT NOT NULL,
nammat INT NOT NULL,
PRIMARY KEY (hoten)
);
Trang 10CREATE TABLE Sinhvien
(
mssv int NOT NULL,
hoten nvarchar(50) NOT NULL,
sdt varchar(10) NOT NULL,
makhoa varchar(7) NOT NULL,
masach int NOT NULL,
nhaxuatban nvarchar(20) NOT NULL,
mssv int NOT NULL,
PRIMARY KEY (masach),
FOREIGN KEY (mssv) REFERENCES Sinhvien(mssv));
CREATE TABLE tailieugiaotrinh
(
monhoc nvarchar(20) NOT NULL,
masach int NOT NULL,
PRIMARY KEY (masach),
FOREIGN KEY (masach) REFERENCES Sach(masach));
Trang 11CREATE TABLE sachkhac
(
theloai nvarchar(15) NOT NULL,
masach int NOT NULL,
PRIMARY KEY (masach),
FOREIGN KEY (masach) REFERENCES Sach(masach));
CREATE TABLE Ghichu
(
diem FLOAT NOT NULL,
binhluan varchar(50) NOT NULL,
masach int NOT NULL,
PRIMARY KEY (masach),
FOREIGN KEY (masach) REFERENCES Sach(masach));
CREATE TABLE ghichuboi
(
mssv int NOT NULL,
masach int NOT NULL,
PRIMARY KEY (mssv, masach),
FOREIGN KEY (mssv) REFERENCES Sinhvien(mssv), FOREIGN KEY (masach) REFERENCES Ghichu(masach));
CREATE TABLE duocvietboi
Trang 12masach int NOT NULL,
hoten nvarchar(50) NOT NULL,
PRIMARY KEY (masach, hoten),
FOREIGN KEY (masach) REFERENCES Sach(masach), FOREIGN KEY (hoten) REFERENCES tacgia(hoten));
-Thêm một số dữ liệu mẫu để tiện xử lí ở những yêu cầu sau:
Sample data for Khoa table
INSERT INTO Khoa VALUES
('CNTT', N'Công nghệ thông tin'),
('LDCD', N'Lao động công đoàn'),
('NNA', N'Ngôn ngữ Anh'),
('D', N'Dược'),
('TCNH', N'Tài chính ngân hàng');
Sample data for Tacgia table
INSERT INTO Tacgia VALUES
(N'Tác Giả 1', 1980, 2010),
(N'Tác Giả 2', 1975, 2005),
(N'Tác Giả 3', 1990, 2020);
Sample data for Sinhvien table
INSERT INTO Sinhvien VALUES
('123456', N'Nguyễn Văn A', '1234567890', 'CNTT'),('789012', N'Trần Thị B', '0987654321', 'LDCD'),
('345678', N'Lê Văn C', '1122334455', 'NNA');
Trang 13Sample data for Sach table
INSERT INTO Sach VALUES
Sample data for sachkhac table
INSERT INTO sachkhac VALUES(N'Thể loại C', '12'),
(N'Thể loại B', '89');
Sample data for Ghichu table
INSERT INTO Ghichu VALUES
(9.0, 'Interesting content', '12'),
(7.5, 'Helpful for exams', '2');
Sample data for ghichuboi table
INSERT INTO ghichuboi VALUES
Trang 14DECLARE @NextID INT;
Lấy mã sách lớn nhất hiện tại
SELECT @NextID = ISNULL(MAX(CAST(masach AS INT)), 0) + 1 FROM Sach;
RETURN @NextID;
END;
-Insert dữ liệu vào để kiểm tra function 1:
INSERT INTO Sach (masach, nhaxuatban, mssv)
VALUES (dbo.GenerateBookID(), 'NXB ABC', 123456);
-Kiểm tra lại kết quả thực hiện:
SELECT * FROM Sach;
-Kết quả (function1):
Trang 15-Function 2: tự động tăng các mã số sinh viên:
Function để phát sinh tự động mã sinh viên dạng số nguyên
CREATE FUNCTION dbo.GenerateStudentID()
RETURNS INT
AS
BEGIN
DECLARE @NextID INT;
Lấy mã sinh viên lớn nhất hiện tại
SELECT @NextID = ISNULL(MAX(CAST(mssv AS INT)), 0) + 1
FROM Sinhvien;
RETURN @NextID;
END;
-Insert dữ liệu vào để kiểm tra function 2:
INSERT INTO Sinhvien (mssv, hoten, sdt, makhoa)
VALUES (dbo.GenerateStudentID(), 'Nguyen Van B', '987654321', 'CNTT');-Kiểm tra lại kết quả thực hiện:
SELECT * FROM Sinhvien;
-Kết quả (function 2):
4.3 Tạo ít nhất một trigger để kiểm tra ràng buộc khóa ngoại, ràng buộc miền giá trị:
Trang 16-Trigger kiểm tra ràng buộc khóa ngoại giữa Sinh viên và mã khoa:
CREATE TRIGGER CheckSinhvienMakhoa
ON Sinhvien
INSTEAD OF INSERT, UPDATE
AS
BEGIN
DECLARE @InvalidMakhoa TABLE (makhoa varchar(7));
INSERT INTO @InvalidMakhoa (makhoa)
SELECT i.makhoa
FROM inserted i
LEFT JOIN Khoa k ON i.makhoa = k.makhoa
WHERE k.makhoa IS NULL;
IF EXISTS (SELECT 1 FROM @InvalidMakhoa)
INSERT INTO Sinhvien (mssv, hoten, sdt, makhoa)
SELECT mssv, hoten, sdt, makhoa
FROM inserted;
END
Trang 17-Kiểm tra tính đúng sai của trigger:
INSERT INTO Sinhvien VALUES ('189331', 'Lê Văn D', '0987654321', 'HI'); This should raise an error
-Trigger kiểm tra ràng buộc miền giá trị cho cột điểm trong bảng Ghichu
CREATE TRIGGER CheckDiemRange
INSERT INTO Ghichu (diem, binhluan, masach)
SELECT diem, binhluan, masach
FROM inserted;
END
END;
-Kiểm tra sự đúng sai của trigger:
INSERT INTO Sach (masach, nhaxuatban, mssv) VALUES
('6', 'PublisherA', '123456'),
Trang 18('4', 'PublisherB', '789012'),
('64', 'PublisherC', '345678');
INSERT INTO Ghichu VALUES (15, 'Invalid diem value', '4'); This shouldraise an error
Trang 19PHẦN 2
1.Câu 1
Input: File txt chứa các thực thể và mối quan hệ giữa các thực thể của mô hìnhERD Output: File txt chứa các bảng dữ liệu và mối quan hệ giữa các bảng Định dạngcủa file Input.txt do sinh viên tự thiết lập
Định dạng file Input1.txt và Output1.txt:
Trang 20Code : được thể hiện trong file đính kèm
2.Câu 2
Input: File Input2.txt chứa lược đồ CSDL bao gồm các bảng, các thuộc tính và các phụ thuộc hàm Output: File Output2.txt chứa bao đóng của tập thuộc tính X (Tập thuộc tính X do người dùng truyền vào); các khoá của lược đồ quan hệ Định dạng của file Input2.txt và Output2.txt do sinh viên tự thiết lập.
Định dạng file Input2.txt và Output2.txt:
Trang 22TÀI LIỆU THAM KHẢO
1 John Russel (2020), “Begginer’s Guide & 7-Day Crash Course”, Monticello
Solutions Limited
2 Allen G.Tayler (2019), “SQL All-in-One For Dummies(3rd edition)”, Wiley