Báo cáo đề tài môn Cơ sở dữ liệu: Quản lý hệ thống thi trắc nghiệm trên giấy. Đề tài làm đơn giản, dễ hiểu nhưng đầy đủ yêu cầu và logic của giảng viên đề ra, đã được chỉnh sửa sao cho hợp lý, đặc biệt có hơn 80 câu hỏi truy vấn bao gồm phép toán đại số của từng câu.
Trang 1Báo Cáo Đề Tài:
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
cơ sở tại TP Hồ Chí Minh Khoa Công Nghệ Thông Tin 2
o0o
Trang 2MỤC LỤC
1
Mô tả chi tiết bài toán 2
2 Phân tích và xác định các thực thể, thuộc tính và mối liên kết 3
3 Thiết kế
Sơ đồ ERD cho cơ sở dữ liệu thi trắc nghiệm 4
Chuyển đổi ERD sang mô hình dữ liệu quan hệ 5
Bảng cơ sở dữ liệu 6
4.Chuẩn hóa 7
5.Viết SQL tạo CSDL trong SQL SeVer 16
*Lược đồ Diagram cơ sở dữ liệu 19
6.Nhập dữ liệu: (Dùng lệnh INSERT) 20
7.Chạy các Truy vấn: (Dùng lệnh SELECT) 27
8 Báo cáo tổng hợp 48
Trang 3Mô tả chi tiết bài toán
-Trường thì sẽ có nhiều khoa, mỗi khoa có mã khoa để phân biệt các khoa với nhau và tên khoa
- Mỗi khoa quản lý nhiều lớp, mỗi lớp chỉ thuộc một khoa Mỗi lớp có mã lớp dùng để phân biệt các lớp và tên lớp, năm nhập học Một sinh viên chỉ thuộc 1 lớp Thông tin về sinh viên gồm có mã sinh viên để phân biệt các sinh viên, họ, tên sinh viên, giới tính, địa chỉ
- Thông tin về giảng viên gồm mã giảng viên dùng để phân biệt các giảng viên, họtên giảng viên, giới tính, chuyên môn Một giảng viên chỉ thuộc duy nhất một khoa,
có thể dạy nhiều lớp nhưng chỉ dạy một môn
-Thông tin về môn học gồm mã môn học dùng để phân biệt các môn học, tên môn học, các tiết lý thuyết, các tiết thực hành
- Giảng viên là người chịu trách nhiệm soạn thảo câu hỏi các môn học để đưa vào
bộ đề thi sau đó nộp cho phòng khảo thí Một câu hỏi thi có dạng: chọn 1 trong nhiều lựa chọn
- Thông tin về phòng gồm mã phòng và tên phòng, mã phòng để phân biệt phòng giáo vụ và phòng khảo thí:
+ Phòng giáo vụ sẽ có nhân viên phụ trách tiến hành xếp lịch thi cho lớp: gồm môn học, lần thi và ngày thi
+ Phòng khảo thí sẽ có nhân viên phụ trách nhận bộ đề thi từ giảng viên sau đó
in ra cho sinh viên thi, nếu như sinh viên đã thi rồi thì không cho thi nữa
- Sau khi hết thời gian làm bài, giảng viên canh thi sẽ thu bài lại
Thực thể Thuộc tính Mối liên kết Tập thực thể
1 Sinh Viên - Mã sinh viên
+ Họ tên sinh viên + Giới tính + Địa chỉ
(1,n)(1,n)(n,n)
- Lớp
- Khoa
- Môn
Trang 42 Giảng Viên - Mã giảng viên
+ Họ tên giảng viên + Giới tính
+ Chuyên môn
(1,n)(1,n)(n,n)(n,1)
(n,n)(n,1)
- Giảng viên
- Sinh viên
5 Nhân Viên - Mã nhân viên
+ Họ tên nhân viên + Giới tính
(1,n) - Phòng
6 Lịch thi - Mã lịch thi
+ Ngày thi + Lần thi + Thời gian
(n,n)(n,n)
- Lớp
- Môn
7 Bộ đề thi - Mã đề thi
+ Tên bộ đề thi + Số đề thi
(1,1)(1,n)(n,1)
(n,1)(1,n)(n,n)(n,n)(n,n)
(1,1) - Câu hỏi
11 Phòng - Mã phòng
+ Tên phòng
(n,1) - Nhân viên
Trang 5Thiết kế
Sơ đồ ERD cho cơ sở dữ liệu thi trắc nghiệm
Chuyển đổi ERD sang mô hình dữ liệu quan hệ
*Qui ước:
Primary Key: In đậm, gạch chân
Foreign Key: In nghiên
KHOA (IDKhoa, TenKhoa)
LOP (IDLop, TenLop, IDKhoa, NamNhapHoc)
GIANGVIEN (IDGiangVien, IDKhoa, HoTenGV, GioiTinh, ChuyenMon)
NHANVIEN (IDNhanVien , HoTenNV, GioiTinh)
PHONG (IDPhong, TenPhong)
SINHVIEN (IDSinhVien, IDLop, HoTenSV, GioiTinh, DiaChi)
CAUHOI (IDCauHoi, IDMonHoc,IDKetQua, IDGiangVien, IDBoDeThi,
SoCauHoi, NoiDung)
BODETHI (IDBoDeThi, IDNhanVien, IDGiangVien, TenBoDeThi, SoDeThi)
Trang 6LICHTHI (IDLichThi, IDMon, IDNhanVien, LanThi, NgayThi, TimeThi)
KETQUA (IDKetQua, DapAn)
MONHOC (IDMonHoc, IDSinhVien, IDGiangVien, TenMonHoc, TietLyThuyet,
IDKhoa
nchar(20)
nvarchar(40)int
IDKhoa
nvarchar(20)
nvarchar(40)nvarchar(30)nchar(3)
DiaChi
IDLop
nchar(20)
nvarchar(40)nvarchar(3)
IDPhong
nchar(20)
nvarchar(40)nchar(3)nchar(20)
Trang 7IDNhanVien IDGiangVien
nchar(20)
nvarchar(40)int
nchar(20) nvarchar(20)
Primary Key
Not Null
Foreign Key Foreign Key
SoCauHoiNoiDung
IDMon IDKetQua IDGiangVien IDBoDeThi
nchar(20)
inttext
nchar(20) nchar(20) nvarchar(20) nchar(20)
Primary Key
>=10 Not nullNot Null
Foreign Key Foreign Key Foreign Key Foreign Key
SoLanThiNgayThiTimeThi
IDSinhVien
nchar(20)
intnvarchar(20)nvarchar(20)
IDSinhVien IDGiangVien
nchar(20)
nvarchar(40)intint
nchar(20) nchar(20)
Primary Key
Not NullNot NullNot Null
Foreign Key Foreign Key
IDSinhVien
nchar(20) nchar(20)
Primary Key Primary Key
DANGKILICHTH
I
IDMon IDLichThi
nchar(20) nchar(20)
Primary Key Primary Key
Trang 8=>> Phụ thuộc hàm: ( IDKhoa ) → { TenKhoa }
=> IDKhoa là Key của bảng KHOA
Bao đóng: { IDKhoa }+ → {IDKhoa,TenKhoa}
Lược đồ ở dạng chuẩn BCNF.
* LỚP
D16CQCN01 Công nghệ thông tin 1
Trang 9=> IDLop là Key của bảng LỚP.
IDKhoa là Foreign Key của bảng Lớp
Bao đóng: {IDKhoa}+ → {IDKhoa,TenKhoa}
VT Lê Duy Khánh Nam An ninh mạng viễn thông
Ta có: + IDGV → HoTenGV , IDKhoa , GioiTinh , ChuyenMon
=> IDGV là Key của bảng GIẢNG VIÊN
IDKhoa là Foreign Key của bảng GIẢNG VIÊN
Bao đóng: {IDKhoa}+ → {IDKhoa,TenKhoa}
=>> {IDGV}+
Trang 10→ {IDGV, HoTenGV,IDKhoa,TenKhoa,GioiTinh,ChuyenMon}
Lược đồ ở dạng chuẩn BCNF.
* SINH VIÊN
N16DCCN059 D16CQCN01 Bùi Xuân Toàn Nam Hà NộiN16DCCN122 D16CQCN02 Nguyễn Thị Lan Phương Nữ Quảng TrịN16DCCN130 D16CQCN03 Phạm Lý Quỳnh Nữ TP.HCMN15DCDT020 D15CQDT01 Tô Quang Huy Nam HuếN17DCQT098 D17CQQT01 Cao Thảo My Nữ Nha TrangN17DCQT001 D17CQQT02 Mai Sơn Nam Đà LạtN15DCVT025 D15CQVT01 Nguyễn Ngọc Luân Nam Đà Nẵng
Ta có: + IDSV → HoTenSV , IDLop , GioiTinh , DiaChi
=> IDSV là Key của bảng SINH VIÊN
IDLop là Foreign Key của bảng SINH VIÊN
Trang 11
Ta có: + IDPhong => TenPhong
+ TenPhong => TenPhong
=>> Phụ thuộc hàm: ( IDPhong ) => { TenPhong }
=> IDPhong là Key của bảng PHÒNG
Bao đóng: { IDPhong }+ => { IDPhong,TenPhong}
=>> Phụ thuộc hàm : ( IDNV ) → { HoTenNV,IDPhong,GioiTinh }
=> IDNV là Key của bảng NHÂN VIÊN
IDPhong là Foreign Key của bảng NHÂN VIÊN
Bao đóng: {IDPhong}+ → {IDPhong,TenPhong}
INT1313 Môn Cơ sở dữ liệu 40 5 N16DCCN059 0211018
Trang 12INT1319 Môn Hệ điều hành 20 3 N16DCCN122 0244193INT1154 Môn Tin học cơ sở 2 30 4 N16DCCN130 0211012INT1330 Môn Kỹ thuật vi xử lí 40 0 N15DCDT020 0211044BSA1349 Môn Quản trị học 30 2 N17DCQT098 0211062BSA1412 Môn Tài chính tiền tệ 30 0 N17DCQT001 0211065TEL1414 Môn An ninh mạng
=> IDMon là Key của bảng MÔN HỌC
IDSV,IDGV là Foreign Key của bảng MÔN HỌC
Bao đóng: {IDSV}+ → {IDSV,IDLop,HoTenSV,GioiTinh,DiaChi}
Trang 13=> IDLichThi là Key của bảng LỊCH THI.
IDMon,IDNV là Foreign Key của bảng LỊCH THI
GioiTinh,ChuyenMon,NgayThi,SoLanThi,IDNV,IDPhong,TenPhong,
HoTenNV,GioiTinh,TimeThi}
Lược đồ ở dạng chuẩn BCNF.
*KẾT QUẢ
Trang 14=>> Phụ thuộc hàm: ( IDKetQua ) → { IDKetQua,ĐapAn}
=> IDKetQua là Key của bảng KẾT QUẢ
Bao đóng: { IDKetQua }+ → { IDKetQua,ĐapAn}
Lược đồ ở dạng chuẩn BCNF.
*BỘ ĐỀ THI
BĐT1112 Bộ Cơ sở dữ liệu 1 1001 0211018BĐT1113 Bộ Hệ điều hành 1 1002 0244193BĐT1114 Bộ Tin học cơ sở 2 1 1003 0211012BĐT1115 Bộ Kỹ thuật vi xử lí 1 1004 0211044BĐT1116 Bộ Quản trị học 1 1002 0211062BĐT1117 Bộ Tài chính tiền tệ 1 1004 0211065BĐT1118 Bộ An ninh mạng viễn thông 1 1001 0211079
Ta có: + IDBoĐeThi → TenBoĐeThi , SoBoĐeThi , IDNV , IDGV
Trang 15IDNV,IDGV là Foreign Key của bảng BỘ ĐỀ THI.
CH1112 10 Chương I+II+V INT1313 0211018 BĐT1112 A1112CH1113 15 Chương II+IV+V INT1319 0244193 BĐT1113 A1113CH1114 10 Chương V+VI INT1154 0211012 BĐT1114 A1114CH1115 10 Chương II+III+V INT1330 0211044 BĐT1115 A1115CH1116 15 Chương II+V+VI BSA1349 0211062 BĐT1116 A1116CH1117 10 Chương I+III+VI BSA1412 0211065 BĐT1117 A1117CH1118 10 Chương I+IV+V TEL1414 0211079 BĐT1118 A1118
Ta có: + IDCauHoi → SoCauHoi,NoiDung,IDMon , IDGV , IDBoĐeThi
Trang 18Tạo table KHOA
IDKhoa nchar(20)primary key (IDKhoa)
,TenKhoa nvarchar(40)
)
Tạo table KẾT QUẢ
IDKetQua nchar(20)primary key (IDKetQua)
,ĐapAn nvarchar(40)
)
Tạo table PHÒNG
IDPhong nchar(20) primarykey (IDPhong)
,TenPhong nvarchar(40)
)
Tạo table LỚP
IDLop nchar(20) primarykey (IDLop)
Tạo table GIẢNG VIÊN
IDGiangVien nvarchar(20)primary key (IDGiangVien)
Tạo table SINH VIÊN
IDSinhVien nchar(20)primary key (IDSinhVien)
Trang 19Tạo table NHÂN VIÊN
IDNhanVien nchar(20)primary key (IDNhanVien)
Tạo table BỘ ĐỀ THI
IDBoDeThi nchar(20)primary key (IDBoDeThi)
,TenBoDeThi nvarchar(40)
,SoBoDeThi int
,IDNhanVien nchar(20)
,IDGiangVien nvarchar(20)
)
Tạo table MÔN
IDMon nchar(20)primary key (IDMon)
)
Tạo table CÂU HỎI
IDCauHoi nchar(20)primary key (IDCauHoi)
Trang 20,foreignkey (IDMon)references MON(IDMon)
)
Tạo table LỊCH THI
IDLichThi nchar(20) primarykey (IDLichThi)
)
Tạo table ĐĂNG KÍ MÔN
IDMon nchar(20)
IDSinhVien nchar(20),
)
Tạo table ĐĂNG LỊCH THI
IDMon nchar(20),
IDLichThi nchar(20),
)
Trang 21*Lược đồ Diagram cơ sở dữ liệu.
6.Nhập dữ liệu: (Dùng lệnh INSERT)
use ThiTracNghiem
Nhập liệu cho BẢNG KHOA
Trang 22=>> Kết quả:
('D15CQDT01','Dien Tu 1 Khoa 2015',2015,'DT'),
('D15CQVT01','Vien Thong 1 Khoa 2015',2015,'VT');
Kiểm tra
=>> Kết quả:
Nhập liệu cho BẢNG Giảng Viên
values ('0211018','Ho Manh Tai','Co So Du Lieu','Nam','CNTT'),
('0244193','Huynh Thanh Tam','He Dieu Hanh','Nam','CNTT'),
('0211012','Truong Dinh Huy','Tin hoc co so 2','Nam','CNTT'),
('0211044','Nguyen Trong Huan','Ky thuat vi xu li','Nam','DT'),
('0211062','Ho Thi Sang','Quan tri hoc','Nu','QTKD'),
('0211065','Nguyen Ngoc Thanh','Tai chinh tien te','Nu','QTKD'),
('0211079','Le Duy Khanh','An ninh mang Vien thong','Nam','VT');
Kiểm tra
=>>
Trang 23Nhập liệu cho BẢNG Sinh Viên
('N17DCQT001','Mai Son','Nam','Da Lat','D17CQQT02'),
Kiểm tra
=>> Kết quả:
Nhập liệu cho BẢNG PHONG
values ('PKT','Phong Khao Thi'),
('PGV','Phong Giao Vu');
Kiểm tra
=>> Kết quả:
Trang 24Nhập liệu cho BẢNG NHÂN VIÊN
values (1001,'Tran Minh Thu','Nu','PKT'),
(1002,'Pham Khanh Du','Nam','PKT'),
(1003,'Do Viet Nam','Nam','PKT'),
(1004,'Pham Quoc Hung','Nam','PKT'),
(1005,'Tran Thi An','Nu','PGV'),
(1006,'Tran Thi Lanh','Nu','PGV'),
(1007,'Nguyen Thi Giang','Nu','PGV');
Kiểm tra
=>> Kết quả:
Nhập liệu cho BẢNG MÔN HỌC
('INT1319','Mon He Dieu Hanh',20,3,'N16DCCN122','0244193'),
('INT1154','Mon Tin hoc co so 2',30,4,'N16DCCN130','0211012'),
('INT1330','Mon Ky Thuat vi xu li',40,0,'N15DCDT020','0211044'),
('BSA1349','Mon Quan Tri hoc',30,2,'N17DCQT098','0211062'),
('BSA1412','Mon Tai chinh tien te',30,0,'N17DCQT001','0211065'),
('TEL1414','Mon An ninh mang Vien thong',40,5,'N15DCVT025','0211079');
Kiểm tra
Trang 25=>> Kết quả:
Nhập liệu cho BẢNG LỊCH THI
values ('N2010',1,'20/10/2018',60,1001,'INT1313'),
('N2110',2,'21/10/2018',45,1002,'INT1319'),
('N2210',2,'22/10/2018',60,1003,'INT1154'),('N2310',1,'23/10/2018',45,1004,'INT1330'),('N2410',1,'24/10/2018',45,1005,'BSA1349'),('N2510',2,'25/10/2018',60,1006,'BSA1412'),('N2610',1,'26/10/2018',45,1007,'TEL1414');
Kiểm tra
=>> Kết quả:
Nhập liệu cho BẢNG KẾT QUẢ
Trang 26values ('BDT1112','Bo Co so du lieu',1,1001,'0211018'),
('BDT1113','Bo He dieu hanh',1,1002,'0244193'),
('BDT1114','Bo Tin hoc co so 2',1,1003,'0211012'),
('BDT1115','Bo Ky thuat vi xu li',1,1004,'0211044'),
('BDT1116','Bo Quan tri hoc',1,1005,'0211062'),
('BDT1117','Bo Tai chinh tien te',1,1006,'0211065'),
('BDT1118','Bo An ninh mang Vien thong',1,1007,'0211079');
Kiểm tra
=>> Kết quả:
Trang 27Nhập liệu cho BẢNG CÂU HỎI
values ('CH1112',10,'Chuong I+II+V','BDT1112','0211018','INT1313','A1112'),
('CH1113',15,'Chuong II+IV+V','BDT1113','0244193','INT1319','A1113'),
('CH1114',10,'Chuong V+VI','BDT1114','0211012','INT1154','A1114'),
('CH1115',10,'Chuong II+III+V','BDT1115','0211044','INT1330','A1115'),
('CH1116',15,'Chuong I+V+VI','BDT1116','0211062','BSA1349','A1116'),
('CH1117',10,'Chuong I+III+VI','BDT1117','0211065','BSA1412','A1117'),
('CH1118',10,'Chuong I+IV+V','BDT1118','0211079','TEL1414','A1118');
Kiểm tra
=>> Kết quả:
Nhập liệu cho BẢNG ĐĂNG KÍ MÔN
Trang 28Nhập liệu cho BẢNG ĐĂNG KÍ LỊCH THI
values ('INT1313','N2010'),
('INT1319','N2110'),
('INT1154','N2210'),('INT1330','N2310'),('BSA1349','N2410'),('BSA1412','N2510'),('TEL1414','N2610');
FROM KHOA => Kết quả:
πTenKhoa(σIDKhoa = ‘CNTT’ (KHOA))
2.Tìm mã của Khoa có tên khoa là Điện tử
FROM KHOA => Kết quả:
πIDKhoa(σTenKhoa = ‘Dien tu’ (KHOA))
3.Tìm những sinh viên có giới tính là Nam
Trang 29SELECT IDSinhVien,HoTenSV,GioiTinh,DiaChi
FROM SINHVIEN => Kết quả:
πHoTenSV(σGioiTinh = ‘Nam’ (SINHVIEN))
4.Tìm sinh viên có địa chỉ ở Hà Nội và có giới tính là Nam
FROM SINHVIEN
=> Kết quả:
πHoTenSV(σ DiaChi = ‘Ha Noi’ and GioiTinh = ‘Nam’ (SINHVIEN))
5.Tìm thông tin sinh viên học những môn học gì?
SELECT
HoTenSV,GioiTinh,DiaChi,IDMon,TenMonHoc,SoTietLyThuyet,SoTietThucHanh
FROM SINHVIEN,MON
=> Kết quả:
πHoTenSV,TenMonHoc(σSINHVIEN,IDSV = MON,IDSV (SINHVIEN×MON))
6.Cho biết sinh viên Phạm Lý Quỳnh học lớp nào?
FROM SINHVIEN,LOP
=> Kết
quả:
π HoTenSV,TenLop(σSINHVIEN,IDLop = LOP,IDLop (SINHVIEN×LOP))
7.Tìm tên sinh viên học lớp Công nghệ thông tin 2 khóa 2016?
Trang 30FROM SINHVIEN,LOP
Khoa 2016'
=> Kết
quả:
π HoTenSV,TenLop( σSINHVIEN,IDLop = LOP,IDLop and
TenLop = ‘Cong Nghe Thong Tin 2 Khoa 2016’ (SINHVIEN×LOP))
8.Cho biết những sinh viên có giới tính Nữ học lớp nào?
FROM SINHVIEN,LOP
=> Kết quả:
π HoTenSV,GioiTinh,TenLop(σSINHVIEN,IDLop = LOP,IDLop and GioiTinh = ‘Nu’
(SINHVIEN×LOP))
9.Cho biết tên sinh viên có mã lớp là D15CQDT01
FROM SINHVIEN => Kết
quả:
π HoTenSV(σ IDLop = ‘D15CQDT01’ (SINHVIEN))
10.Cho biết phòng giáo vụ có mã phòng là gì?
FROM PHONG
π TenPhong,IDPhong(σ TenPhong = ‘Phong giao vu’ (PHONG))
11.Cho biết tên phòng có mã phòng là PKT
Trang 3112.Cho biết tên nhân viên có giới tính là Nữ
FROM NHANVIEN => Kết quả:
π HoTenNV,GioiTinh(σ GioiTinh= ‘Nu’ (NHANVIEN))
13.Cho biết tên nhân viên thuộc phòng khảo thí
FROM NHANVIEN,PHONG
thi'
=> Kết quả:
π HoTenNV,TenPhong( σNHANVIEN,IDPhong = PHONG,IDPhong and TenPhong = ‘Phong khao thi’
(NHANVIEN×PHONG))
14.Cho biết thông tin nhân viên có mã nhân viên là 1006
FROM NHANVIEN,PHONG
Trang 3216.Cho biết tên môn học có mã là INT1313.
FROM MON => Kết quả:
π IDMon,TenMonHoc(σ IDMon = ‘INT1313’ (MON))
17.Tìm những môn học có số tiết lý thuyết lớn hơn 30 => Kết quả:
SELECT
IDMon,TenMonHoc,SoTietLyThuyet
π TenMonHoc,SoTietLyThuyet(σ SoTietLyThuyet > 30 (MON))
18.Cho biết tên những môn học và giảng viên dạy môn đó
FROM MON,GIANGVIEN
π HoTenGV,TenMonHoc( σ MON,IDGiangVien = GIANGVIEN,IDGiangVien
(GIANGVIEN×MON))
19.Cho biết tên môn học có số tiết lý thuyết nhỏ hơn 40 và những sinh viên nào họcmôn đó
FROM MON,SINHVIEN
=> Kết quả:
Trang 33π TenMonHoc,HoTenSV,SoTietLyThuyet(σMON,IDSinhVien = SINHVIEN,IDSinhVien and
SoTietLyThuyet <40
(SINHVIEN×MON))
20.Cho biết tên những môn học và sinh viên học môn đó
FROM MON,SINHVIEN
=> Kết quả:
π HoTenSV,TenMonHoc( σ MON,IDSinhVien = SINHVIEN,IDSinhVien
(SINHVIEN×MON))
21.Cho biết thông tin môn Tài chính tiền tệ
=> Kết quả:
π
IDMon,TenMonHoc,SoTietLyThuyet,SoTietThucHanh(σ TenMonHoc = ‘Mon Tai
chinh tien te’ (MON))
22.Tìm tên các lớp có mã khoa là CNTT và năm nhập học là 2016