Tải bản đầy đủ (.pdf) (19 trang)

BÁO cáo CUỐI kỳ môn hệ cơ sở dữ LIỆU viết các câu lệnh SQL để thực hiện các thao tác sau

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (541.52 KB, 19 trang )

TỔNG LIÊN ĐỒN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CUỐI KỲ
MÔN HỆ CƠ SỞ DỮ LIỆU

[]

Người hướng dẫn: GV Trần Thanh Phước
Người thực hiện: Qch Thịnh - 51800814
Lớp

:

18050203

Khố

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021

0

0

:

22


TỔNG LIÊN ĐỒN LAO ĐỘNG VIỆT NAM


TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CUỐI KỲ
MÔN HỆ CƠ SỞ DỮ LIỆU

[]

Người hướng dẫn: GV Trần Thanh Phước
Người thực hiện:

Qch Thịnh - 51800814
Lớp

:

18050203

Khố

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021

0

0

:

22



i

LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành cùng sự tri ân sâu sắc tới toàn thể quý thầy
cô, giảng viên, viên chức đang giảng dạy và làm việc tại trường Đại học Tôn Đức
Thắng, đặc biệt là quý thầy cô ở Khoa Công nghệ thông tin đã tạo điều kiện và thời
gian tận tình giúp đỡ em trong quá trình thực hiện bài báo cáo này cũng như quá trình
học tập tại trường.
Trên hết, em xin được tỏ lòng biết ơn sâu sắc đến thầy Nguyễn Văn Phước –
Giảng viên Khoa Cơng nghệ thơng tin vì đã hết lòng giảng dạy, truyền đạt kiến thức
quý báu đến tất cả sinh viên nói chung và bản thân em nói riêng một cách tận tình và
nghiêm túc. Nhờ lượng kiến thức của thầy truyền đạt mà đã giúp em hồn thành thuận
lợi bài báo cáo này nói riêng và vững vàng hơn trong lượng kiến thức khổng lồ của
môn học.
Trong quá trình thực hiện bài báo cáo, do lượng kiến thức và kinh nghiệm thực
tiễn còn hạn chế nên kết quả cịn nhiều thiếu sót, em kính mong nhận được ý kiến đóng
góp của thầy đề từ đó bản thân em có thể cải thiện kỹ năng trình bài báo một cách tinh
tế và chuẩn mực hơn trong các bài báo cáo sắp tới.
Kinh chúc thầy có nhiều sức khỏe và thành công trong công việc.
Em xin chân thành cảm ơn!

0

0


ii

ĐỒ ÁN ĐƯỢC HỒ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ủa
TS. Nguyễn Văn A;. 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. Những số liệu trong các bảng biểu
phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các
nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo.
Ngồi ra, trong đồ án cịn sử dụng một số nhận xét, đánh giá cũng như số liệu
của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc.
Nếu phát hiện có bất kỳ sự gian lận nào tơi xin hồn tồ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 q trình thực hiện (nếu có).
TP. Hồ Chí Minh, ngày 18 tháng 7 năm 2021
Tác giả
(ký tên và ghi rõ họ tên)

Quách Thịnh

0

0


iii

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)

0

0


1

MỤC LỤC
LỜI CẢM ƠN.................................................................................................................i
Phần đánh giá của GV chấm bài....................................................................................iii
MỤC LỤC......................................................................................................................1
PHẦN 1 – Tạo bảng và thực hiện các câu lệnh SQL......................................................3
Câu 1: Viết các câu lệnh SQL để thực hiện các thao tác sau:..........................................3
a.

Tạo Cơ sở dữ liệu, tạo bảng có ràng buộc khó chính khóa ngoại..............3

b.

Thêm dữ liệu cho bảng theo đúng trình tự bên 1 trước bên nhiều sau. Mỗi

bảng ít nhất 5 dịng dữ liệu..................................................................................4
Câu 2: Viết câu lệnh SQL thực hiện các yêu cầu:...........................................................5
a.


Cho biết những dữ án có nhiều nhận viên tham gia nhất..........................5

ORDER BY COUNT(MADA) DESC.......................................................................5
b.

Liệt kê tất cả nhân viên và mã dữ án mà nhân viên đó tham gia, nếu nhân

viên đó chưa tham giá dự án nào thì cột Mã dữ án để trống (null).......................5
ORDER BY NHANVIEN.MANV.............................................................................6
Câu 3: Viết các hàm :......................................................................................................6
a.

Viết hàm trả về số lượng dự án mà một nhân viên đã tham gia. Cho biết:

Hàm có 1 tham số đầu vào là Mã nhân viên........................................................6
SELECT * FROM CAU3A('NV03')..................................................................6
b.

Viết hàm trả về danh sách gồm: Mã nhân viên, tên nhân viên, tên thân

nhân của nhân viên, tổng số dự án đã tham gia, tổng số thời gian đã tham gia.
Danh sách giảm dần theo tổng số dự án, nếu tổng số dự án bằng nhau thì tăng
dần theo tổng số thời gian đã tham gia................................................................6
Câu 4 : Viết các thủ tục :.................................................................................................6
a.

Thêm vào một nhân viên, có kiểm tra khóa chính, khóa ngoại.................6

EXEC CAU4A 'NV12', N'Đ ường Đ ại Hi ệp', '6/3/1989', N'Ngũ
Hành S ơn', N'Nam', '12000000', 'XAYDUNG'......................................6


0

0


2

b.

Tăng lương cho những nhân viên có từ 3 thân nhân trở lên thêm

20.000.000 đồng. Tăng 10.000.000 đồng cho nhân viên có từ 1 đến 2 thân nhân.
6
EXEC CAU4B.......................................................................................................7
Câu 5 : Viết các trigger :.................................................................................................7
a.

Xố một nhân viên nào đó, nhưng nếu nhân viên đó có thân nhân thì

khơng được xố...................................................................................................7
b.

Thêm dữ liệu vào bảng Phân cơng theo ràng buộc sau: chỉ những nhân

viên >= 30 tuổi mới được tham gia dự án từ 100 ngày trở lên.............................7
PHẦN 2 – Thực hiện các yêu cầu của lược đồ quan hệ.................................................9
Câu 1 : Tìm tất cả các khóa (khóa dự tuyển) của lược đồ quan hệ.......................9
Câu 2 : Tìm phủ tối thiểu của tập phụ thuộc hàm................................................9
Câu 3 : Xác định dạng chuẩn cao nhất của lược đồ quan hệ..............................10

Câu 4 : Nếu lược đồ quan hệ chưa đạt dạng chuẩn BC, đưa lược đồ về dạng
chuẩn BC...........................................................................................................10
PHẦN 3 – Thực hiện vẽ mơ hình ERD, chuyển mơ hình ERD sang mơ hình quan hệ.13
Câu 1: Viết đặc tả...............................................................................................13
Câu 2: Vẽ ERD..................................................................................................13
Câu 3: Chuyển ERD sang mơ hình quan hệ.......................................................13

0

0


3

PHẦN 1 – Tạo bảng và thực hiện các câu lệnh SQL
Cho lược đồ CSDL như sau:
NHANVIEN (MANV, HOTEN, NGAYSINH, DCHI, PHAI, LUONG, MAPB)
Tân từ: Mỗi nhân viên có mã số nhân viên, họ tên, ngày sinh, địa chỉ, giới tính (PHAI),
có mức lương (LUONG) và thuộc vào một phịng ban (MAPB).
THANNHAN (MANV, TENTN, PHAI, NGAYSINH, QUANHE)
Tân từ: Bảng THANNHAN lưu trữ thông tin về người thân của một nhân viên bao gồm
mã nhân viên, tên nhân nhân (TENTN), giới tính, ngày sinh và quan hệ (QUANHE) với
nhân viên.
PHONGBAN (MAPB, DIADIEM)
DUAN (MADA, TENDA, DIADIEM, MAPB)
Tân từ: Mỗi dự án có một mã dự án (MADA) duy nhất, tên dự án, địa điểm thực hiện
dự án, và do một phòng ban (MAPB) phụ trách.
PHANCONG (MANV, MADA, THOIGIAN)
Tân từ: Mỗi nhân viên sẽ được phân công tham gia một hoặc nhiều dự án, và thời gian
tham gia các dự án của nhân viên (đơn vị tính là Ngày)


Câu 1: Viết các câu lệnh SQL để thực hiện các thao tác sau:
a. Tạo Cơ sở dữ liệu, tạo bảng có ràng buộc khó chính khóa ngoại.
CREATE DATABASE BAOCAOCUOIKI
USE BAOCAOCUOIKI
CREATE TABLE PHONGBAN
(
MAPB VARCHAR(10) PRIMARY KEY,
DIADIEMPB NVARCHAR(100)
)
CREATE TABLE DUAN
(
MADA VARCHAR(10) PRIMARY KEY,
TENDA NVARCHAR(50),
DIADIEMAD NVARCHAR(100),
MAPB VARCHAR(10) FOREIGN KEY REFERENCES PHONGBAN(MAPB)
)
CREATE TABLE NHANVIEN
(
MANV VARCHAR(10) PRIMARY KEY,
HOTEN NVARCHAR (50),
NGAYSINH DATE,
DCHI NVARCHAR(100),
PHAI NVARCHAR(10),
LUONG INT,

0

0



4

MAPB VARCHAR(10) FOREIGN KEY REFERENCES PHONGBAN(MAPB)
)
CREATE TABLE THANNHAN
(
MANV VARCHAR(10) FOREIGN KEY REFERENCES NHANVIEN(MANV),
TENTN NVARCHAR (50),
PHAITN NVARCHAR(10),
NGAYSINHTN DATE,
QUANHE NVARCHAR(20),
PRIMARY KEY (MANV, TENTN)
)
CREATE TABLE PHANCONG
(
MANV VARCHAR(10) FOREIGN KEY REFERENCES NHANVIEN(MANV),
MADA VARCHAR(10) FOREIGN KEY REFERENCES DUAN(MADA),
THOIGIAN INT,
PRIMARY KEY (MANV, MADA)
)

b. Thêm dữ liệu cho bảng theo đúng trình tự bên 1 trước bên nhiều sau.
Mỗi bảng ít nhất 5 dịng dữ liệu.
INSERT INTO PHONGBAN VALUES
('KITHUAT', N'Quận 3, TP HCM'),
('KETOAN', N'Quận 7, TP HCM'),
('KINHDOANH', N'Quận 7, TP HCM'),
('THIETKE', N'Quận 4, TP HCM'),
('XAYDUNG', N'Quận 2, TP HCM'),

('VATLIEU', N'Quận 2, TP HCM')
INSERT INTO DUAN VALUES
('DA01', N'Shop thời trang', N'Quận 5, TP HCM', 'THIETKE'),
('DA02', N'Thương m ại đi ện tử' ,N'Quận 3, TP HCM', 'KETOAN'),
('DA03', N'Quay số may mắn', N'Quận 6, TP HCM', 'KINHDOANH'),
('DA04', N'Năng lượng m ặt trời', N'T ỉnh Bình Dương', 'XAYDUNG'),
('DA05', N'Trang trại', N'T ỉnh Thái Nguyên', 'KINHDOANH')
SET DATEFORMAT DMY
INSERT INTO NHANVIEN VALUES
('NV01', N'Nguyễn Văn A', '17/4/1997', N'Quận 4, TP HCM', N'Nam', 14000000,
'KINHDOANH'),
('NV02', N'Nguyễn Văn B', '21/4/1995', N'T ỉnh Long Xuyên', N'Nam', 10000000,
'XAYDUNG'),
('NV03', N'Lê Đức Trí', '1/6/1988', N'Quận 6, TP HCM', N'Nam', 25000000,
'KITHUAT'),
('NV04', N'Hồng Văn Thống', '25/11/1992', N'Biên Hòa, Đồng Nai', N'Nam', 8000000,
'VATLIEU'),
('NV05', N'Lý Thế Kiệt', '13/9/1990', N'Quận 3, TP HCM', N'Nam', 22000000,
'THIETKE'),
('NV06', N'Vũ Hoàng Yến', '2/4/1996', N'Quận 4, TP HCM', N'Nữ', 12000000,
'KETOAN'),

0

0


5

('NV07', N'Nguyễn Bảo Như', '22/12/1993', N'T ỉnh Bình Dương', N'Nữ', 15000000,

'THIETKE'),
('NV08', N'Đinh Tuấn Tú', '30/3/1989', N'Qu ận 10, TP HCM', N'Nam', 19000000,
'THIETKE'),
('NV09', N'Lê Đức Anh', '6/7/1986', N'T ỉnh Thái Nguyên', N'Nam', 17000000,
'XAYDUNG'),
('NV10', N'Hoàng Thị Cẩm Tú', '21/12/1994', N'Tỉnh Thái Nguyên' , N'Nữ', 14000000,
'KETOAN'),
('NV11', N'Dương Cẩm Ly', '10/9/1995', N'Quận 5, TP HCM', N'Nữ', 12000000,
'KINHDOANH')
INSERT INTO THANNHAN VALUES
('NV01', N'Lê Chí Tài', N'Nam', '14/3/1982', N'Chú'),
('NV02', N'Nguyễn Lô Tô', N'Nam', '3/7/1981', N'Dượng'),
('NV03', N'Nguyễn Thanh Mai', N'Nữ', '21/9/1991', N'Vợ'),
('NV04', N'Hồng Chí Tơn', N'Nam', '27/11/1963', N'Bố'),
('NV05', N'Dương Cẩm Thạch' , N'Nữ', '6/1/1994', N'Vợ'),
('NV06', N'Hoàng Bảo Long', N'Nam', '27/12/1992', N'Chồng'),
('NV07', N'Tr ần Thị Tuyết Nhung', N'Nữ', '5/9/1964', N'Mẹ'),
('NV08', N'Đinh Thế Bảo', N'Nam', '17/6/1986', N'Anh'),
('NV09', N'Nguy ễn Xuân Thanh', N'Nữ', '4/8/1991', N'Vợ'),
('NV10', N'Quách Gia Lâm', N'Nam', '21/10/1992', N'Chồng'),
('NV11', N'Tơ Chí Thanh', N'Nam', '24/2/1982', N'Chú')
INSERT INTO PHANCONG VALUES
('NV01', 'DA03', 14),
('NV02', 'DA04', 180),
('NV03', 'DA04', 180),
('NV04', 'DA02', 7),
('NV05', 'DA01', 14),
('NV06', 'DA05', 7),
('NV07', 'DA01', 14),
('NV08', 'DA04', 14),

('NV09', 'DA05', 180),
('NV10', 'DA05', 30),
('NV11', 'DA04', 30)

Câu 2: Viết câu lệnh SQL thực hiện các yêu cầu:
a. Cho biết những dữ án có nhiều nhận viên tham gia nhất.
SELECT TOP 1 MADA, COUNT(MADA) AS 'Số NV'
FROM PHANCONG
GROUP BY (MADA)
ORDER BY COUNT(MADA) DESC

b. Liệt kê tất cả nhân viên và mã dữ án mà nhân viên đó tham gia, nếu
nhân viên đó chưa tham giá dự án nào thì cột Mã dữ án để trống
(null).

0

0


6

SELECT NHANVIEN.MANV, PHANCONG.MADA
FROM NHANVIEN
FULL OUTER JOIN PHANCONG ON NHANVIEN.MANV = PHANCONG.MANV
ORDER BY NHANVIEN.MANV

Câu 3: Viết các hàm :
a. Viết hàm trả về số lượng dự án mà một nhân viên đã tham gia. Cho
biết: Hàm có 1 tham số đầu vào là Mã nhân viên.

CREATE FUNCTION CAU3A (@MANV VARCHAR(10))
RETURNS TABLE
AS
RETURN SELECT MANV, COUNT(MADA) AS N'Dự án tham gia' FROM PHANCONG WHERE MANV =
@MANV GROUP BY MANV
--Thực thi
SELECT * FROM CAU3A('NV03')

b. Viết hàm trả về danh sách gồm: Mã nhân viên, tên nhân viên, tên
thân nhân của nhân viên, tổng số dự án đã tham gia, tổng số thời gian
đã tham gia. Danh sách giảm dần theo tổng số dự án, nếu tổng số dự
án bằng nhau thì tăng dần theo tổng số thời gian đã tham gia.
CREATE FUNCTION CAU3B()
RETURNS TABLE
AS
RETURN SELECT PHANCONG.MANV, NHANVIEN.HOTEN, COUNT(THANNHAN.MANV) AS N'SỐ THÂN
NHÂN', COUNT (PHANCONG.MANV) AS N'Tổng số dự án', SUM(PHANCONG.THOIGIAN) AS N'T ổng
thời gian'
FROM NHANVIEN, THANNHAN, PHANCONG
WHERE NHANVIEN.MANV = THANNHAN.MANV AND NHANVIEN.MANV =
PHANCONG.MANV
GROUP BY PHANCONG.MANV, NHANVIEN.HOTEN
ORDER BY COUNT(PHANCONG.MANV) DESC, SUM(PHANCONG.THOIGIAN)
--Thực thi
SELECT * FROM CAU3B()

Câu 4 : Viết các thủ tục :
a. Thêm vào một nhân viên, có kiểm tra khóa chính, khóa ngoại.
CREATE PROC CAU4A (@MANV VARCHAR(10), @HOTEN NVARCHAR(50), @NGAYSINH DATE, @DCHI
NVARCHAR(100), @PHAI NVARCHAR(10), @LUONG INT, @MAPB VARCHAR(10))

AS
BEGIN
IF NOT EXISTS (SELECT * FROM NHANVIEN WHERE MANV = @MANV) AND EXISTS (SELECT *
FROM PHONGBAN WHERE MAPB = @MAPB)
INSERT INTO NHANVIEN VALUES (@MANV, @HOTEN, @NGAYSINH, @DCHI, @PHAI,
@LUONG, @MAPB)
END

0

0


7

--Thực thi
EXEC CAU4A 'NV12', N'Đường Đ ại Hiệp', '6/3/1989', N'Ngũ Hành Sơn', N'Nam',
'12000000', 'XAYDUNG'

b. Tăng lương cho những nhân viên có từ 3 thân nhân trở lên thêm
20.000.000 đồng. Tăng 10.000.000 đồng cho nhân viên có từ 1 đến 2
thân nhân.
CREATE PROC CAU4B
AS
BEGIN
UPDATE NHANVIEN
SET LUONG = LUONG + 20000000
WHERE MANV IN (SELECT MANV FROM THANNHAN GROUP BY MANV HAVING COUNT(MANV)
>= 3)
UPDATE NHANVIEN

SET LUONG = LUONG + 10000000
WHERE MANV IN (SELECT MANV FROM THANNHAN GROUP BY MANV HAVING COUNT(MANV)
>= 1 AND COUNT(MANV) <=2)
END
--Thực thi
EXEC CAU4B

Câu 5 : Viết các trigger :
a. Xố một nhân viên nào đó, nhưng nếu nhân viên đó có thân nhân thì
khơng được xố.
CREATE TRIGGER CAU5A
ON NHANVIEN
FOR DELETE
AS
DECLARE @MANV_DLT VARCHAR(10)
SELECT @MANV_DLT = MANV FROM DELETED
IF EXISTS (SELECT * FROM THANNHAN WHERE MANV=@MANV_DLT)
BEGIN
PRINT N'Nhân viên này có nhân thân, khơng được xóa'
ROLLBACK TRAN
END
ELSE
DELETE FROM NHANVIEN WHERE MANV = @MANV_DLT
PRINT N'Xóa thành cơng'

b. Thêm dữ liệu vào bảng Phân công theo ràng buộc sau: chỉ những
nhân viên >= 30 tuổi mới được tham gia dự án từ 100 ngày trở lên.
CREATE TRIGGER CAU5B

0


0


8

ON PHANCONG
FOR INSERT
AS
DECLARE @MANV_INS VARCHAR(10)
DECLARE @MADA_INS VARCHAR(10)
DECLARE @THOIGIAN_INS INT
SELECT @MANV_INS = MANV FROM inserted
SELECT @MADA_INS = MADA FROM inserted
SELECT @THOIGIAN_INS = THOIGIAN FROM inserted
IF EXISTS (SELECT MANV FROM NHANVIEN WHERE MANV = @MANV_INS AND
(YEAR(GETDATE())-YEAR(NGAYSINH)) < 30)
AND EXISTS (SELECT * FROM PHANCONG WHERE MANV=@MANV_INS AND
MADA=@MADA_INS AND THOIGIAN=@THOIGIAN_INS AND @THOIGIAN_INS >=100)
BEGIN
PRINT N'Nhân viên ch ưa đ ủ 30 tu ổi nên không th ể tham gia d ự án trên 100
ngày'
ROLLBACK TRAN
END
ELSE
BEGIN
INSERT INTO PHANCONG VALUES (@MANV_INS, @MADA_INS, @THOIGIAN_INS)
PRINT N'Thêm thành công'
END


0

0


9

PHẦN 2 – Thực hiện các yêu cầu của lược đồ quan hệ
Cho lược đồ quan hệ R(U, F), U = MNOPQRS
F = {SMR; NSQM; PQRS; MONR; NR}
Câu 1 : Tìm tất cả các khóa (khóa dự tuyển) của lược đồ quan hệ.
Ta có phủ tối thiểu của lược đồ quan hệ
G’’ = { SM(1); SR(2); NSQ(3); PQS(4); MON(5); NR(6)}
U = MNOPQRS
UR = MRQSN
UL = SNPQMO
N = U – UR = OP
+¿
¿
N = OP, lược đồ có nhiều khóa
D = UR – UL = R
L = U – (N ˅D) = MNQS
+ Xét Li gồm 1 thuộc tính
+¿
¿
MOP = MOPNR
+¿
¿
NOP = NROP
+¿

K 1 = OPQ là một khóa
¿
QOP = QPOSMRN = U,
+¿
K 2 = OPS là một khóa
¿
SOP = SOPMRNQ = U,
+ Xét Li gồm 2 thuộc tính
+¿ ¿
MNOP = MNOPR
Vậy có 2 khóa : OPQ, OPS

Câu 2 : Tìm phủ tối thiểu của tập phụ thuộc hàm.
B1: Phân rã vế phải cịn một thuộc tính
F = {SMR; NSQM; PQRS; MONR; NR}
G = {SM(1); SR(2); NSQ(3); NSM(4); PQR(5); PQS(6); MON(7);
MOR(8); NR(9)}
B2: Loại bỏ phụ thuộc hàm dư thừa
+¿
Bỏ (1), không được, do S ¿ = SR
+¿
Bỏ (2), không được, do S ¿ = SM
+¿
Bỏ (3), không được, do NS¿ = NSM
+¿
Bỏ (4), được, do NS¿ = NSM

0

0



10

Bỏ (5), được, do

+¿
¿
PQ

= PQSMR
+¿
Bỏ (6), không được, do PQ¿ = PQ
+¿
Bỏ (7), không được, do MO¿ = MOR
+¿
Bỏ (8), được, do MO¿ = MONR
+¿
Bỏ (9), không được, do N ¿ = N
Vậy G’ = { SM(1); SR(2); NSQ(3); PQS(4); MON(5); NR(6)}
B3: Loại bỏ thuộc tính dư thừa ở vế trái
+¿
Xét (3), Xóa N, S ¿ = SMR, khơng được
+¿
Xóa S, N ¿ = NR, khơng được
+¿
Xét (4), Xóa N, S ¿ = SMR, khơng được
+¿
Xóa S, N ¿ = NR, khơng được
+¿

Xét (5), Xóa P, Q ¿ = Q, khơng dược
+¿
Xóa Q, P¿ = P, khơng được
+¿
Xét (6), Xóa M, O ¿ = O, khơng được
+¿
Xóa O, M ¿ = M, không được
Vậy phủ tối thiểu của lược đồ quan hệ : G’’ = { SM(1); SR(2); NSQ(3); NSM(4);
PQS(5); MON(6); NR(7)}

Câu 3 : Xác định dạng chuẩn cao nhất của lược đồ quan hệ.
Ta có phủ tối thiểu của lược đồ quan hệ
G’’ = { SM(1); SR(2); NSQ(3); PQS(4); MON(5); NR(6)}
Khóa của lược đồ : OPS, OPQ
Thuộc tính khóa : O, P, Q, S
Thuộc tính khơng khóa : M, N, R
Đạt chuẩn dạng 1NF vì tập phụ thuộc hàm ở dạng tối thiểu.
Khơng đạt chuẩn dạng 2NF vì S  M (1), S  R (2)
Chuẩn cao nhất của lược đồ quan hệ là chuẩn 1NF

0

0


11

Câu 4 : Nếu lược đồ quan hệ chưa đạt dạng chuẩn BC, đưa lược đồ về dạng
chuẩn BC.
Ta có phủ tối thiểu của lược đồ quan hệ

G’’ = { SM(1); SR(2); NSQ(3); PQS(4); MON(5); NR(6)}
Vì lược đồ quan hệ đạt chuẩn cao nhất dạng 1NF
 Đưa về chuẩn 2NF:
Q1(SM), F1={ SM }, K1 = S, thỏa BCNF
Q2(SR), F2={ SR }, K2 = S, thỏa BCNF
Q3(MNOPQRS), F3={ NSQ(1); PQS(2); MON(3); NR(4)}
U = MNOPQRS
UR = NQRS
UL = MNOPQS
N = U – UR = MOP
+¿
¿
N = MNOPR  lược đồ có nhiều khóa
D = UR – UL = R
L = U – (N˅D) = QS
+ Xét Li gồm 1 thuộc tính
+¿
MOPQ¿ = MNOPQRS = U, K3a = MOPQ
+¿
¿
MOPS = MNOPRSQ = U, K3b = MOPS
Thuộc tính khóa : M, O, P, Q, S
Thuộc tính khơng khóa : N, R
 Xét 2NF
(3) khơng thỏa 2NF
Đưa về 2NF
Q31(MNO), F31 = { MON }, K31 = MO, thỏa BCNF
Q32(MNOPQS) = { NSQ(1); PQS(2); NR(3) }
U = NPQSR
UR = QSR

UL = NPQS
N = U – UR = NP
+¿
¿
N = OP  lược đồ có nhiều khóa
D = UR – UL = R
L = U – (N˅D) = QS
+ Xét Li gồm 1 thuộc tính
+¿
¿
NPQ = NPQSR = U, K32a = NPQ
+¿
¿
NPS = NPSQR = U, K32b = NPS

0

0


12



Thuộc tính khóa : N, P, Q, S
 Thỏa 2NF, 3NF, không thỏa BCNF
Xét BCNF
Q321(NSQ), F321 = {NSQ}, K321 = NS, thỏa BCNF
Q323(PQS), F323 = {PQS}, K323 = PQ, thỏa BCNF
Q324(NR), F324 = {NR}, K324 = N, thỏa BCNF


Vậy các lược đồ con thỏa BCNF gồm :
Q1(SM), F1={ SM }, K1 = S, thỏa BCNF
Q2(SR), F2={ SR }, K2 = S, thỏa BCNF
Q31(MNO), F31 = { MON }, K31 = MO, thỏa BCNF
Q321(NSQ), F321 = {NSQ}, K321 = NS, thỏa BCNF
Q323(PQS), F323 = {PQS}, K323 = PQ, thỏa BCNF
Q324(NR), F324 = {NR}, K324 = N, thỏa BCNF

0

0


13

PHẦN 3 – Thực hiện vẽ mơ hình ERD, chuyển mơ hình ERD sang
mơ hình quan hệ
Câu 1: Viết đặc tả.
Trường Đại học Tôn Đức Thắng cần hệ thống quản lý việc đăng ký môn học của các sinh viên.
Thông tin về sinh viên cần nắm là mã sinh viên, tên, ngày sinh, quê quán, giới tính, số điện
thoại, email. Mỗi sinh viên do một khoa quản lý. Thông tin cần lưu về khoa là mã khoa, tên
khoa, địa điểm văn phòng khoa, số điện thoại liên lạc. Sinh viên có thể đăng ký nhiều mơn học
trong một học kỳ. Thông tin về môn học bao gồm mã môn học, tên mơn học, số tín chỉ. Mỗi
mơn học có các điểm học phần trong lớp, điểm giữa kì, điểm cuối kì. Hệ thống cần ghi lại
những điểm số làm cơ sở tính điểm trung bình của mơn học. Các mơn học có thể có một số
mơn tiên quyết. Để đăng ký được một môn học, sinh viên phải học đạt các mơn tiên quyết của
mơn học đó. Sinh viên có thể đăng ký một môn học nhiều lần và kết quả của tất cả các lần học
đều phải được hệ thống lưu lại.


Câu 2: Vẽ ERD.

Tên khoa

Môn học
tiên quyết

Địa điểm
Mã khoa
Khoa

Số điện
thoại
Tên mơn
học
Mã mơn
học

Nhóm ngành

Mơn học

Email

Mã sinh
viên

Số tín
chỉ


Đăng ký
Tên

Ngày sinh

Giới tính

Has

Sinh viên

Số điện
thoại

Điểm mơn học

Q qn
Điểm học
phần

0

0

Điểm
giữa kì

Điểm
cuối kì



14

Câu 3: Chuyển ERD sang mơ hình quan hệ.
Khoa (mã khoa, tên khoa, địa điểm, số điện thoại khoa)
SinhVien (mã sinh viên , tên, ngày sinh, giới tính, quê quán, số điện thoại, email, mã khoa)
MonHoc (mã môn học , tên mơn học, số tín chỉ, mã mơn học tiên quyết)
Dangky_Monhoc (mã sinh viên, mã môn học)
KQ_Sinhvien_MonHoc (mã sinh viên, mã mơn học, điểm học phần, điểm giữa kì, điểm cuối
kì)

0

0



×