Report CSDLNC Fix

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 57

TRƯỜNG ĐẠI HỌC NGOẠI NGỮ - TIN HỌC THÀNH PHỒ HỒ CHÍ MINH

KHOA CÔNG NGHỆ THÔNG TIN




BÀI BÁO CÁO KẾT THÚC HỌC PHẦN


CƠ SỞ DỮ LIỆU NÂNG CAO

HỆ THỐNG QUẢN LÝ
SINH VIÊN

Giảng viên hướng dẫn: Phạm Minh Dũng


Sinh viên thực hiện:
1. Phan Hoàng Việt 21DH114309
2. Mai Trung Kiên 19DH110421
3. Ngô Anh Hào 21DH113601

Thành phố Hồ Chí Minh, tháng 07/2023


MỤC LỤC

DANH MỤC BẢNG .........................................................................................................6

CHƯƠNG 1: MÔ TẢ ĐỀ TÀI..........................................................................................1

1.1. Giới thiệu tổng quan về đề tài: .............................................................................1

1.2. Khảo sát hiện trạng: .............................................................................................1

1.3. Các thông tin cần lưu trữ của đề tài .....................................................................4

1.4. Các yêu cầu khác ..................................................................................................8

1.5. Bố cục báo cáo .....................................................................................................9

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ................................................................................11

2.1. Các Cơ sở lý thuyết ............................................................................................11

2.2. Phụ thuộc hàm. ...................................................................................................14

2.3. Dạng chuẩn .........................................................................................................14

2.4. Bảo toàn thông tin. .............................................................................................14

2.5. Lập trình CSDL. .................................................................................................14

2.6. Ràng buộc toàn vẹn ............................................................................................15

2.7. NoSQL và NewSQL: .........................................................................................15


2.7.1. NoSQL (Non-SQL): ...................................................................................15
2.7.2. NewSQL .....................................................................................................17
2.7.2. Sự giống và khác nhau giữa NoSQL và NewSQL .....................................18

CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ CƠ SỞ DỮ LIỆU .......................................19

3.1. Mô hình thực thể kết hợp ...................................................................................19

3.2. Mô tả các thực thể ..............................................................................................22


3.2.1. KHOAHOC.................................................................................................22
3.2.2. KHOA .........................................................................................................22
3.2.3. MONHOC ...................................................................................................22
3.2.4. KHOA_MONHOC .....................................................................................22
3.2.5. LOP .............................................................................................................22
3.2.6. SINHVIEN ..................................................................................................23
3.2.7. LOAIGIANGVIEN.....................................................................................23
3.2.8. GIANGVIEN ..............................................................................................23
3.2.9. MONHOC_GIANGVIEN ..........................................................................23
3.2.10. DIEM ........................................................................................................24
3.2.11. PHONG .....................................................................................................24
3.2.12. MONHOC_PHONG .................................................................................24
3.2.13. LICHTHI...................................................................................................24
3.2.14. NGANH ....................................................................................................25
3.2.15. THOIKHOABIEU ....................................................................................25
3.2.16. HOCPHI ....................................................................................................25
3.2.17. HOADON .................................................................................................25

3.3. Lược đồ cơ sở dữ liệu quan hệ ...........................................................................26

3.4. Phân tích chuẩn của lược đồ quan hệ .................................................................26


1. Bảng KhoaHoc (Khóa học): .........................................................................26
2. Bảng Khoa (Khoa): ......................................................................................26
3. Bảng Lop (Lớp): ...........................................................................................26
4. Bảng SinhVien (Sinh viên): .........................................................................27
5. Bảng LOAIGIANGVIEN (Loại giảng viên): ..............................................27
6. Bảng GIANGVIEN (Giảng viên): ...............................................................27
7. Bảng MONHOC (Môn học): .......................................................................27
8. Bảng DIEM (Điểm):.....................................................................................27
9. Bảng PHONG (Phòng):................................................................................27
10. Bảng LICHTHI (Lịch thi): ...........................................................................27
11. Bảng NGANH (Ngành):...............................................................................27
12. Bảng NGANH_MONHOC (Bảng trung gian):............................................28
13. Bảng THOIKHOABIEU (Thời khóa biểu): .................................................28
14. Bảng HOCPHI (Học phí): ............................................................................28
15. Bảng HOADON (Hóa đơn): ........................................................................28
16. Bảng NganhMonHoc (Bảng trung gian): .....................................................28
17. Bảng ThoiKhoaBieu (Thời khóa biểu): .......................................................28

CHƯƠNG 4 TRIỂN KHAI CƠ SỞ DỮ LIỆU TRÊN MS SQL SERVER .......................28


4.1. Tạo cơ sở dữ liệu ................................................................................................28

4.2. Nhập liệu mẫu ....................................................................................................33


4.2.1. KHOAHOC.................................................................................................33
4.2.2. KHOA .........................................................................................................33
4.2.3. MONHOC ...................................................................................................33
4.2.4. KHOA_MONHOC .....................................................................................34
4.2.5. LOP .............................................................................................................34
4.2.6. SINHVIEN ..................................................................................................34
4.2.7. LOAIGIANGVIEN.....................................................................................35
4.2.9. MONHOC_GIANGVIEN ..........................................................................35
4.2.10. DIEM ........................................................................................................35
4.2.11. PHONG .....................................................................................................35
4.2.12. MONHOC_PHONG .................................................................................36
4.2.13. LICHTHI...................................................................................................36
4.2.14. NGANH ....................................................................................................36
4.2.15. THOIKHOABIEU ....................................................................................36
4.2.16. HOCPHI ....................................................................................................37
4.2.17. HOADON .................................................................................................37

4.3. Cài các store procedure ......................................................................................37


4.3.1. Xem thông tin cá nhân của Sinh viên .........................................................37
4.3.2. Sửa thông tin cá sinh viên ...........................................................................37
4.3.3. Sửa thông tin cá sinh viên ...........................................................................38
4.3.4. Xóa thông tin sinh viên ...............................................................................39
4.3.5. Xem điểm ....................................................................................................39
4.3.6. Tính điểm trung bình học kỳ.......................................................................39
4.3.7. Sửa điểm sinh viên sinh viên ......................................................................40
4.3.8. Xóa điểm sinh viên .....................................................................................40
4.3.9. Xem danh sách giảng viên dạy môn học nào..............................................41
4.3.10. Xem học phí năm học ...............................................................................41

4.4. Ràng buộc cơ sở dữ liệu (trigger) ......................................................................42


4.4.1. Check thời gian khoá học ...........................................................................42
4.4.2. Kiểm tra điểm .............................................................................................42
4.4.3. Kiểm tra ngày sinh ......................................................................................43
4.4.4.Tên sinh viên không được chứa số ..............................................................44
4.4.5.Tên sinh viên phải khác nhau: .....................................................................44
4.4.6.Tên giảng viên phải khác nhau ....................................................................45
4.4.7.Sinh viên nữ luôn phải ít hơn nam: ..............................................................46
4.4.8.Mã phòng luôn bắt đầu bằng chữ “P”: .........................................................46
4.4.9.Sinh viên phải trên 18 tuổi: ..........................................................................47
4.4.10.Học phí luôn > 0: .......................................................................................47

CHƯƠNG 5 KẾT LUẬN................................................................................................49

5.1. Kết quả đạt được và chưa đạt được ....................................................................49
5.1.1. Kết quả đạt được: ........................................................................................49
5.1.2. Kết quả chưa đạt được ................................................................................49

5.2. Hướng phát triển mở rộng ứng dụng trong tương lai. ........................................49

TÀI LIỆU THAM KHẢO ...............................................................................................50

PHỤ LỤC: .....................................................................................................................51


DANH MỤC BẢNG
Bảng 1.1. Thông tin lưu trữ của sinh viên............................................................. 5
Bảng 1.2. Thông tin lưu trữ của Môn họcLỗi! Thẻ đánh dấu không được xác
định.
Bảng 1.3. Thông tin lưu trữ của KhoaLỗi! Thẻ đánh dấu không được xác định.
Bảng 1.4. Thông tin lưu trữ của Lớp..................................................................... 4
Bảng 1.5. Thông tin lưu trữ của Khóa học ............................................................ 4
Bảng 1.6. Thông tin lưu trữ của Điểm .................................................................. 4
Bảng 1.7. Thông tin lưu trữ của Lịch thi............................................................... 4
Bảng 1.8. Thông tin lưu trữ của Phòng ................................................................. 5
Bảng 1.9. Thông tin lưu trữ của Học KỳLỗi! Thẻ đánh dấu không được xác
định.
Bảng 1.10. Thông tin lưu trữ của Ngành .............................................................. 6
Bảng 1.11. Thông tin lưu trữ của Giảng viên ....................................................... 6
Bảng 1.12. Thông tin lưu trữ của LoạiGVLỗi! Thẻ đánh dấu không được xác
định.
Bảng 1.13. Thông tin lưu trữ của Hóa đơn ........................................................... 7
Bảng 1.14. Thông tin lưu trữ của Học phíLỗi! Thẻ đánh dấu không được xác
định.
Bảng 1.15. Thông tin lưu trữ của Thời khóa biểuLỗi! Thẻ đánh dấu không
được xác định.
Bảng 1.16. Thông tin lưu trữ của Dự ánLỗi! Thẻ đánh dấu không được xác
định.
CHƯƠNG 1: MÔ TẢ ĐỀ TÀI
1.1. Giới thiệu tổng quan về đề tài:
Hiện nay, công nghệ thông tin được xem là một ngành mũi nhọn của các
quốc gia, đặc biệt là các quốc gia đang phát triển, tiến hành công nghiệp hóa và
hiện đại hoá như nước ta. Sự bùng nổ thông tin và sự phát triển mạnh mẽ của công
nghệ kỹ thuật số, yêu cầu muốn phát triển thì phải tin học hoá tất cả các ngành,
các lĩnh vực.
Cùng với sự phát triển nhanh chóng về phần cứng máy tính, các phần mềm
ngày càng trở nên đa dạng, phong phú, hoàn thiện hơn và hỗ trợ hiệu quả cho con
người. Các phần mềm hiện nay ngày càng mô phỏng được rất nhiều nghiệp vụ
khó khăn, hỗ trợ cho người dùng thuận tiện sử dụng, thời gian xử lý nhanh chóng,
và một số nghiệp vụ được tự động hoá cao.
Ví dụ như việc quản lý điểm số học sinh trong trường trung đại học. Nếu
không có sự hỗ trợ của tin học, việc quản lý này phải cần khá nhiều người, chia
thành nhiều khâu, mới có thể quản lý được toàn bộ hồ sơ học sinh (thông tin, điểm
số, học bạ,…), lớp học (sỉ số, giáo viên chủ nhiệm,…), giáo viên,… cũng như các
nghiệp vụ tính điểm trung bình, xếp loại học lực cho học sinh toàn trường (số
lượng học sinh có thể lên đến hàng ngàn). Các công việc này đòi hỏi nhiều thời
gian và công sức, mà sự chính xác và hiệu quả không cao, vì đa số đều làm bằng
thủ công rất ít tự động.
Một số nghiệp vụ như tra cứu, thống kê, và hiệu chỉnh thông tin khá vất vả.
Ngoài ra còn có một số khó khăn về vấn đề lưu trữ khá đồ sộ, dễ bị thất lạc, tốn
kém,… Trong khi đó, các nghiệp vụ này hoàn toàn có thể tin học hoá một cách dễ
dàng. Với sự giúp đỡ của tin học, việc quản lý học vụ sẽ trở nên đơn giản, thuận
tiện, nhanh chóng và hiệu quả hơn rất nhiều.
1.2. Khảo sát hiện trạng:
Trường Đại Học Tôn Đức Thắng -–Website: https://tdtu.edu.vn/

1
Trang tổng quát các chức năng dành cho sinh viên.

Trang tổng quát các chức năng dành cho sinh viên
Trường Đại Học Nguyễn Tất Thành – Website: https://ctsv.ntt.edu.vn/

Trang đăng nhập hệ thống dành cho sinh viên

2
Trang xem thời khoá biểu

Trang thông tin cá nhân của sinh viên


Website: https://dktc.vnuf.edu.vn/

Trang danh sách các học phần có thể đăng ký học kỳ tiếp theo

3
Trang danh sách các học phần đã đăng ký

Chức năng xem lịch thi cá nhân


1.3. Các thông tin cần lưu trữ của đề tài
Bảng 1.1. Thông tin lưu trữ của Khóa học
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã khóa học Text Nhập từ bàn phím Primary key
2 Tên khóa học Text Nhập từ bàn phím
3 Thời gian Date Nhập từ bàn phím
Bảng 1.1. Thông tin lưu trữ của Môn học
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã môn học Text Nhập từ bàn phím Primary key
2 Tên môn học Text Nhập từ bàn phím
3 Số tiết Int Nhập từ bàn phím
5 Số tín chỉ Int Nhập từ bàn phím
Bảng 1.2. Thông tin lưu trữ của Khoa
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã khoa Text Nhập từ bàn phím Primary key
2 Tên khoa Text Nhập từ bàn phím

4
Bảng 1.4. Thông tin lưu trữ của Khoa-Môn học
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã khoa Text Nhập từ bàn phím Primary key
2 Mã môn học Text Nhập từ bàn phím Primary key

Bảng 1.5. Thông tin lưu trữ của Lớp


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã lớp Text Nhập từ bàn phím Primary key
2 Tên lớp Text Nhập từ bàn phím
3 Mã khoa Text Nhập từ bàn phím Foreign key

Bảng 1.6. Thông tin lưu trữ của Sinh viên


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã sinh viên Text Nhập từ bàn phím Primary key
2 Tên sinh viên Text Nhập từ bàn phím
3 Giới tính Text Nhập từ bàn phím
4 Ngày sinh Date Nhập từ bàn phím
5 Quê quán Text Nhập từ bàn phím
6 Mã khóa học Text Nhập từ bàn phím Foreign key
7 Mã lớp Text Nhập từ bàn phím Foreign key

Bảng 1.7. Thông tin lưu trữ của Loại giảng viên
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc

5
1 Mã Loại Text Nhập từ bàn phím Primary key
2 Tên Loại Text Nhập từ bàn phím
Bảng 1.8. Thông tin lưu trữ của Giảng viên
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã Giảng viên Text Nhập từ bàn phím Primary key
2 Tên Giảng viên Text Nhập từ bàn phím
3 Mã loại Text Nhập từ bàn phím Foreign key
Bảng 1.9. Thông tin lưu trữ của Môn học - Giảng viên
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã Giảng viên Text Nhập từ bàn phím Primary key
2 Mã môn học Text Nhập từ bàn phím Primary key
Bảng 1.10. Thông tin lưu trữ của Điểm
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã sinh viên Text Nhập từ bàn phím Primary key
2 Mã môn học Text Nhập từ bàn phím Primary key
3 Học kì Int Nhập từ bàn phím Primary key
4 Điểm Int Nhập từ bàn phím

Bảng 1.11. Thông tin lưu trữ của Phòng


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã phòng Text Nhập từ bàn phím Primary key
2 Tên phòng Text Nhập từ bàn phím

Bảng 1.12. Thông tin lưu trữ của Môn học - Phòng
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã môn học Text Nhập từ bàn phím Primary key
2 Mã phòng Text Nhập từ bàn phím Primary key

Bảng 1.13. Thông tin lưu trữ của Lịch thi


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc

6
1 Mã môn học Text Nhập từ bàn phím Primary key
2 Mã phòng Text Nhập từ bàn phím Primary key
3 Ngày thi Date Nhập từ bàn phím

Bảng 1.14. Thông tin lưu trữ của Ngành


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã ngành Text Nhập từ bàn phím Primary key
2 Tên ngành Text Nhập từ bàn phím
3 Mã khoa Text Nhập từ bàn phím Foreign key

Bảng 1.3. Thông tin lưu trữ của Thời khóa biểu
Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã sinh viên Text Nhập từ bàn phím Foreign key
2 Mã môn học Text Nhập từ bàn phím Foreign key
3 Ngày bắt đầu Date
4 Ngày kết thúc Date

Bảng 1.16. Thông tin lưu trữ của Học phí


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Năm học Text Nhập từ bàn phím Primary key
2 Gia Int Nhập từ bàn phím

Bảng 1.17. Thông tin lưu trữ của Hóa đơn


Stt Dữ liệu Kiểu Hình thức nhập Ràng buộc
1 Mã môn học Text Nhập từ bàn phím Primary Key
2 Năm học Int Nhập từ bàn phím Primary Key
3 Mã sinh viên Date Nhập từ bàn phím Primary Key
4 Tổng tiền Text Nhập từ bàn phím

7
1.4. Các yêu cầu khác
o Yêu cầu tìm kiếm: Trình bày cụ thể các thao tác tìm kiếm cần có trong đề
tài bao gồm các từ khóa cần tìm và kết quả cần thể hiện.
- Thông tin sinh viên:
▪ Hiển thị mã sinh viên, tên sinh viên, địa chỉ,giới tính, ngày sinh
- Thông tin về lớp :
▪ Hiển thị mã lớp, tên lớp mà sinh viên đang học
- Thông tin về khóa học
▪ Hiển thị khóa học của sinh viên để biết sinh viên thuộc khóa nào
- Thông tin về khoa:
▪ Hiển thị khoa mà sinh viên đang theo
- Thông tin về điểm :
▪ Hiển thị điểm của cá nhân sinh viên theo từng đợt (đợt 1, đợt 2)
▪ Hiển thị điểm trung bình của sinh viên
- Thông tin về môn học:
▪ Hiển thị danh sách các môn học mà có sự tham gia của sinh viên
o Các công thức tính toán cho các xử lý.
o Tính toán điểm trung bình của sinh viên
▪ Điểm trung bình = (Tổng điểm của các môn học) / Tổng số môn
o Tính toán tổng số tín chỉ đã học
▪ Tổng số tín chỉ = SUM( Số tín chỉ của môn học 1, Số tín chỉ của môn học
I)
• Trong đó số tín chỉ của môn học I là số tỉn chỉ của môn học thứ I mà sinh
viên đã hoàn thành.
o Tính toán điển GPA (Điểm trung bình dựa trên hệ số 4)
▪ GPA = (Tổng (Số tín chỉ * Điểm) ) / Tổng số tín chỉ đã học
▪ Kết quả trả về dựa trên thang điểm 4 mà từ đó ra được danh hiệu:
• A: 4.0 điểm

8
• B+: 3.5 điểm
• B: 3.0 điểm
• C+: 2.5 điểm
• C: 2.0 điểm
• D+: 1.5 điểm
• D: 1.0 điểm
• F: 0 điểm (không hoàn thành)
o Tính toán số tín chỉ còn thiếu:
▪ Số tín chỉ còn thiếu = Tổng số tín chỉ yêu cầu – Tổng số tín chỉ đã học
o Tính toán tỉ lệ sinh viên thôi học:
▪ Tỉ lệ sinh viên thôi học = Số sinh viên thôi học / Tổng số sinh viên
o Các biểu đồ/ đồ thị, các báo cáo theo tháng, quý hay năm, v.v….
- Biểu đồ số lượng sinh viên theo năm học:
o Loại biểu đồ: Cột, đường, hoặc vòng tròn
o Trục x: Các năm học
o Trục y: Số lượng sinh viên
- Biểu đồ tỷ lệ sinh viên theo giới tính:
o Loại biểu đồ: Vòng tròn hoặc cột
o Phân loại: Nam, nữ
o Phần trăm sinh viên nam và nữ
- Biểu đồ điểm trung bình theo năm học:
o Loại biểu đồ: Đường
o Trục x: Các năm học
o Trục y: Điểm trung bình
1.5. Bố cục báo cáo
- Báo cáo danh sách sinh viên xuất sắc:
o Hiển thị danh sách các sinh viên có GPA cao nhất
o Có thể sắp xếp theo thứ tự giảm dần của GPA
- Báo cáo danh sách sinh viên bị kỷ luật:
o Hiển thị danh sách sinh viên bị kỷ luật và loại kỷ luật tương ứng

9
o Có thể sắp xếp theo thứ tự tăng dần của mã sinh viên hoặc thời gian kỷ
luật
- Biểu đồ phân bố điểm theo môn học:
o Loại biểu đồ: Cột hoặc đường
o Trục x: Các môn học
o Trục y: Số lượng sinh viên hoặc phần trăm sinh viên theo từng khoảng
điểm
- Báo cáo tổng kết kết quả học tập theo kỳ học:
o Hiển thị kết quả học tập của từng sinh viên trong kỳ học
o Bao gồm thông tin về môn học, điểm số, số tín chỉ, và kết quả (đạt/ không
đạt)
- Báo cáo danh sách sinh viên nợ học phí:
o Hiển thị danh sách sinh viên chưa thanh toán học phí
o Có thể sắp xếp theo thứ tự tăng dần của mã sinh viên hoặc số tiền nợ

10
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1. Mô hình thực thể kết hợp.
▪ Mô hình ERD.

11
12
13
2.2. Phụ thuộc hàm.
▪ Trong cơ sở dữ liệu, phụ thuộc hàm (functional dependency) là một khái
niệm quan trọng liên quan đến việc mô tả mối quan hệ giữa các thuộc tính trong
một bảng (table) dữ liệu. Đây là một khái niệm cơ bản trong lý thuyết thiết kế cơ
sở dữ liệu và giúp xác định quy tắc về việc thêm, sửa đổi hoặc xóa dữ liệu một
cách hợp lý để tránh việc dữ liệu bị mất mát hoặc không nhất quán.
▪ Một phụ thuộc hàm xảy ra khi một tập hợp của các thuộc tính trong một
bảng xác định một cách duy nhất giá trị của một tập hợp khác của các thuộc tính.
Cụ thể, nếu trong một bảng có hai tập hợp thuộc tính A và B, ta nói A phụ thuộc
hàm vào B (được ký hiệu là A -> B) nếu mỗi giá trị của A đối với thuộc tính A
luôn xác định một giá trị duy nhất của thuộc tính B.
2.3. Dạng chuẩn
Các dạng chuẩn trong CSDL nhằm đảm bảo tính toàn vẹn, nhất quán của dữ liệu,
tránh sự trùng lặp và phụ thuộc lẫn nhau giữa các thuộc tính. Chúng bao gồm:
- Dạng chuẩn 1: Giá trị nguyên tố trên mỗi thuộc tính.
- Dạng chuẩn 2: Các thuộc tính phụ thuộc đầy đủ vào khóa.
- Dạng chuẩn 3: Các thuộc tính không phụ thuộc bắc cầu vào khóa.
- Dạng chuẩn (BCK): Các thuộc tính không khóa không phụ thuộc lẫn nhau.
- Dạng chuẩn 4: Không cho phép phụ thuộc đa trị không rõ ràng.
2.4. Bảo toàn thông tin.
- Bảo mật cơ sở dữ liệu là những biện pháp, những cách thức khác nhau
mà các doanh nghiệp, tổ chức áp dụng và thực hiện để bảo vệ hệ thống an toàn
thông tin cũng như cơ sở dữ liệu của mình khỏi các mối đe doạ từ những cuộc tấn
công an ninh mạng cả bên ngoài và bên trong cũng như thực thi các giải pháp data
lose prevention nhằm ngăn chặn dữ liệu bị đánh cắp.
2.5. Lập trình CSDL.
- Lập trình cơ sở dữ liệu (Database Programming) là quá trình tương tác
với cơ sở dữ liệu để truy xuất, thêm, sửa đổi và xóa dữ liệu bằng cách sử dụng các
ngôn ngữ lập trình và các giao thức/đối tượng liên quan. Điều này cho phép ứng

14
dụng và hệ thống có thể tương tác với dữ liệu trong cơ sở dữ liệu, giúp quản lý và
xử lý thông tin một cách hiệu quả.
2.6. Ràng buộc toàn vẹn
Loại ràng buộc Ý nghĩa
NOT NULL Sử dụng để đảm bảo dữ liệu của cột không được nhận giá trị
NULL
DEFAULT Gán giá trị mặc định trong trường hợp dữ liệu của cột không
được nhập vào hay không được xác định.
UNIQUE Sử dụng để đảm bảo dữ liệu của cột là duy nhất, không trùng
lặp giá trị trên cùng 1 cột.
PRIMARY KEY Dùng để thiết lập khóa chính trên bảng, xác định giá trị trên
(Khóa chính) tập các cột làm khóa chính phải là duy nhất, không được
trùng lặp. Việc khai báo ràng buộc khóa chính yêu cầu các
cột phải NOT NULL.
FOREIGN KEY Dùng để thiết lập khóa ngoại trên bảng, tham chiếu đến bảng
(Khóa ngoại) khác thông qua giá trị của cột được liên kết. Giá trị của cột
được liên kết phải là duy nhất trong bảng kia.
CHECK Bảo đảm tất cả giá trị trong cột thỏa mãn điều kiện nào đó.
Đây là hình thức sử dụng phổ biến để kiểm tra tính hợp lệ
của dữ liệu (validate data)
2.7. NoSQL và NewSQL:
NoSQL và NewSQL là hai thuật ngữ được sử dụng trong lĩnh vực cơ sở dữ
liệu để chỉ đến hai hướng tiếp cận khác nhau trong việc quản lý dữ liệu. Trong
phần này, chúng ta sẽ trình bày rõ các khái niệm, công cụ và ví dụ tương ứng cho
NoSQL và NewSQL.
2.7.1. NoSQL (Non-SQL):
- Khái niệm: NoSQL là một từ viết tắt của "Not Only SQL", chỉ các hệ quản
trị cơ sở dữ liệu không phụ thuộc hoặc không sử dụng SQL (Structured Query
Language) để truy vấn dữ liệu. NoSQL tập trung vào việc xử lý lượng lớn dữ liệu
phi cấu trúc và có khả năng mở rộng tốt.

15
- Các công cụ NoSQL:
a. MongoDB: Là một hệ quản trị cơ sở dữ liệu không SQL phổ biến, lưu
trữ dữ liệu dưới dạng tài liệu JSON (BSON). MongoDB cho phép truy vấn linh
hoạt, mở rộng dễ dàng và hỗ trợ replica sets và sharding.
b. Cassandra: Được phát triển bởi Facebook, Cassandra là một cơ sở dữ
liệu phân tán được thiết kế để xử lý lượng lớn dữ liệu trên nhiều máy chủ. Nó có
khả năng mở rộng tuyến tính và cung cấp khả năng chịu lỗi cao.
c. Redis: Redis là một cơ sở dữ liệu key-value in-memory. Nó hỗ trợ các
kiểu dữ liệu phức tạp như list, set, và hash, và được sử dụng phổ biến để lưu trữ
dữ liệu tạm thời và cache.
- Ví dụ: Giả sử chúng ta có một ứng dụng xử lý dữ liệu người dùng, trong
đó thông tin người dùng được lưu trữ dưới dạng tài liệu JSON. Chúng ta có thể
sử dụng MongoDB để lưu trữ và truy vấn dữ liệu này một cách linh hoạt và mở
rộng khi cần thiết.
// Ví dụ về bảng "khoa" trong MongoDB
Db.khoa.insertMany
([
{MAKHOA: '1', TENKHOA: 'Khoa Công nghệ thông tin'},
{MAKHOA: '2', TENKHOA: 'Khoa Kinh tế'},
{MAKHOA: '3', TENKHOA: 'Khoa Quản trị kinh doanh'},
{MAKHOA: '4', TENKHOA: 'Khoa Ngôn ngữ Anh'},
{MAKHOA: '5', TENKHOA: 'Khoa Toán - Tin'},
{MAKHOA: '6', TENKHOA: 'Khoa Vật lý'},
{MAKHOA: '7', TENKHOA: 'Khoa Hóa học'},
{MAKHOA: '8', TENKHOA: 'Khoa Sinh học'},
{MAKHOA: '9', TENKHOA: 'Khoa Lịch sử'},
{MAKHOA: '10', TENKHOA: 'Khoa Địa lý'}
]);

16
2.7.2. NewSQL
- Khái niệm: NewSQL là một thuật ngữ đề cập đến hệ thống cơ sở dữ liệu
mới, kết hợp tính năng của SQL và khả năng mở rộng của NoSQL. Mục tiêu của
NewSQL là cung cấp tính nhất quán và đáng tin cậy của SQL, đồng thời vẫn duy
trì khả năng mở rộng tương tự như NoSQL.
- Các công cụ NewSQL:
a. CockroachDB: CockroachDB là một cơ sở dữ liệu phân tán, hỗ trợ SQL
và có khả năng mở rộng tuyến tính. Nó được xây dựng trên mô hình phi cấu trúc
và có khả năng chịu lỗi cao.
b. Google Spanner: Spanner là một cơ sở dữ liệu phân tán được phát triển
bởi Google. Nó kết hợp tính nhất quán của SQL với khả năng mở rộng của
NoSQL. Spanner cung cấp khả năng đọc ghi toàn cầu và đáng tin cậy trên nhiều
vùng địa lý.
-- Ví dụ bảng "khoa" trong CockroachDB
CREATE TABLE khoa (
makhoa VARCHAR(10) NOT NULL PRIMARY KEY,
tenkhoa STRING NOT NULL
);
-- Chèn dữ liệu vào bảng "khoa" trong CockroachDB
INSERT INTO khoa (makhoa, tenkhoa)
VALUES
('1', 'Khoa Công nghệ thông tin'),
('2', 'Khoa Kinh tế'),
('3', 'Khoa Quản trị kinh doanh'),
('4', 'Khoa Ngôn ngữ Anh'),
('5', 'Khoa Toán - Tin'),
('6', 'Khoa Vật lý'),
('7', 'Khoa Hóa học'),
('8', 'Khoa Sinh học'),
('9', 'Khoa Lịch sử'),
17
('10', 'Khoa Địa lý');
2.7.2. Sự giống và khác nhau giữa NoSQL và NewSQL
Tính chất NewSQL NoSQL
Mô hình dữ liệu Cơ sở dữ liệu quan hệ Dữ liệu phi cấu trúc hoặc bán cấu
truyền thống trúc
Ngôn ngữ truy Sử dụng sql truyền thống Sử dụng ngôn ngữ truy vấn riêng
vấn biệt (ví dụ: BSON, CQL)
Độ nhất quán Đảm bảo ACID Chấp nhận tính nhất quán yếu
(Atomicity, Consistency, (eventual consistency)
Isolation, Durability)
Đặc điểm sử Tính nhất quán cao, mô Xử lý dữ liệu lớn, lưu trữ phi cấu
dụng hình quan hệ truyền thống trúc, khả năng mở rộng
Tóm lại, NoSQL và NewSQL có những sự giống nhau về tính mở rộng,
khả năng chịu lỗi và tính linh hoạt. Tuy nhiên, chúng khác nhau về mô hình dữ
liệu, ngôn ngữ truy vấn, độ nhất quán và đặc điểm sử dụng. Lựa chọn giữa hai
phương pháp này phụ thuộc vào yêu cầu cụ thể của dự án và ứng dụng.

18
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ CƠ SỞ DỮ LIỆU
3.1. Mô hình thực thể kết hợp

19
20
21
3.2. Mô tả các thực thể
3.2.1. KHOAHOC
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaKH char 10 Primary key Mã khóa
2 TenKH nvarchar 100 Tên khóa học
3 Thoigian date Thời gian
3.2.2. KHOA
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaKHOA char 10 Primary key Mã khoa
2 TENKHOA nvarchar 100 Tên khoa
3.2.3. MONHOC
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaMH char 10 Primary key Mã môn
2 TenMH Nvarchar 100 Tên môn học
3 SoTiet int Số tiết
4 SoTC int Số tín chỉ
3.2.4. KHOA_MONHOC
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaMH char 10 Primary key Mã môn
2 MaKhoa char 10 Primary key Mã khoa
3.2.5. LOP
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaLOP char 10 Primary key Mã lớp

22
2 TenLop nvarchar 100 Foreign key Tên lớp học
3 MaKhoa char 10 Foreign key Mã khoa

3.2.6. SINHVIEN
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaSV char 10 Primary key Mã sinh viên
2 TenSV nvarchar 1000 Tên sinh viên
3 GioiTinh char 1 Giới tính
4 NgaySinh date Ngày sinh
5 QueQuan nvarchar 100 Quê quán
6 MaKH char 10 Foreign key Mã khoa
8 MaLop char 10 Foreign key Mã lớp
3.2.7. LOAIGIANGVIEN
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaLoai char 10 Primary key Mã loại
2 TenLoai nvarchar 100 Tên loại
3.2.8. GIANGVIEN
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaGV char 10 Primary key Mã khóa
2 TenGV nvarchar 100 Niên khóa
3 MaLoai char 10 Foreign key Mã loại
3.2.9. MONHOC_GIANGVIEN
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaMH char 10 Primary key Mã môn học

23
2 MAGV char 10 Primary key Mã giáo viên

3.2.10. DIEM
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaSV char 10 Primary key Mã sinh viên
2 MaMH char 10 Primary key Mã môn học
3 HocKy int Primary key Học kỳ
4 Diem int Điểm
3.2.11. PHONG
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaP char 10 Primary key Mã phòng
2 TenP Nvarchar 100 Tên phòng

3.2.12. MONHOC_PHONG
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaP char 10 Primary key Mã phòng
2 MaMH char 10 Primary key Mã môn học

3.2.13. LICHTHI
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaMH Char 10 Primary key Niên khóa
2 Ngaythi Date Ngày thi
3 MaP Char 10 Primary key Mã phòng

24
3.2.14. NGANH
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaNganh char 10 Primary key Mã khóa
2 TenNganh nvarchar 100 Niên khóa
3 MaKhoa char 10 Foreign key Mã khoa
3.2.15. THOIKHOABIEU
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MaMH char 10 Primary key Mã môn học
2 MaP char 10 Primary key Mã phòng
3 Ngay nvarchar 100 Ngày

3.2.16. HOCPHI
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 Nam varchar 10 Primary key Năm học
2 Gia nvarchar Giá

3.2.17. HOADON
▪ Thông tin thuộc tính
Stt Thuộc tính Kiểu dữ liệu Kích thước Ràng buộc Ghi chú
1 MAMH char 10 Primary key Mã môn học
2 NamHoc varchar 20 Primary key Năm học
2 MASV char 10 Primary key Mã sinh viên
5 TongTien int Tổng tiền

25
3.3. Lược đồ cơ sở dữ liệu quan hệ
KHOAHOC(MaKH,TenKH,Thoigian)
KHOA(MaKhoa,TenKhoa)
MONHOC(MaMH,TenMH,Sotiet,SoTC, #MaKhoa)
KHOA_MONHOC(MaMH, MaKhoa)
LOP(MaLop,TenLop,#MaKhoa)
SinhVien(MaSV,TenSV,GioiTinh,NgaySinh,QueQuan,#MaLop,#MaKH)
LoaiGiangVien(MaLoai, TenLoai)
GIANGVIEN(MaGV, Ten, #Maloai)
MONHOC_GIANGVIEN(MaGV, MaMH)
DIEM(MaSV,MaMH,HocKy,Diem)
PHONG(MaP,TenPhong)
MONHOC_PHONG(MaP,MaMH)
LICHTHI(MaMH,MaP,NGAYTHI)
NGANH(MaNganh, TenNganh, #MaKhoa)
THOIKHOABIEU(MaMon, MaPhong, Ngay)
HOCPHI(Nam, Gia)
HOADON(MaMon, NamHoc,MaSV, TongTien)
3.4. Phân tích chuẩn của lược đồ quan hệ
1. Bảng KhoaHoc (Khóa học):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
2. Bảng Khoa (Khoa):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
3. Bảng Lop (Lớp):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt

26
4. Bảng SinhVien (Sinh viên):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
5. Bảng LOAIGIANGVIEN (Loại giảng viên):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
6. Bảng GIANGVIEN (Giảng viên):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
7. Bảng MONHOC (Môn học):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
8. Bảng DIEM (Điểm):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
9. Bảng PHONG (Phòng):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
10. Bảng LICHTHI (Lịch thi):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
11. Bảng NGANH (Ngành):
• 1NF: Đạt

27
• 2NF: Đạt
• 3NF: Đạt
12. Bảng NGANH_MONHOC (Bảng trung gian):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
13. Bảng THOIKHOABIEU (Thời khóa biểu):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
14. Bảng HOCPHI (Học phí):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
15. Bảng HOADON (Hóa đơn):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
16. Bảng NganhMonHoc (Bảng trung gian):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt
17. Bảng ThoiKhoaBieu (Thời khóa biểu):
• 1NF: Đạt
• 2NF: Đạt
• 3NF: Đạt

CHƯƠNG 4 TRIỂN KHAI CƠ SỞ DỮ LIỆU TRÊN MS SQL SERVER


4.1. Tạo cơ sở dữ liệu
CREATE TABLE KhoaHoc

28
(
MaKH CHAR(10) PRIMARY KEY,
TenKH NVARCHAR(100),
Thoigian DATE
);

CREATE TABLE Khoa


(
MaKhoa CHAR(10) PRIMARY KEY,
TenKhoa NVARCHAR(100)
);
CREATE TABLE MonHoc
(
MaMH CHAR(10) PRIMARY KEY,
TenMH NVARCHAR(100),
SoTiet INT,
SoTC INT
);

CREATE TABLE Khoa_MonHoc


(
MaKhoa CHAR(10) REFERENCES Khoa(MaKhoa),
MaMH CHAR(10) REFERENCES MonHoc(MaMH),
PRIMARY KEY (MaKhoa, MaMH)
);

CREATE TABLE Lop


(
MaLop CHAR(10) PRIMARY KEY,

29
TenLop NVARCHAR(100),
MaKhoa CHAR(10) REFERENCES Khoa(MaKhoa)
);

CREATE TABLE SinhVien


(
MaSV CHAR(10) PRIMARY KEY,
TenSV NVARCHAR(1000),
GioiTinh CHAR(1),
NgaySinh DATE,
QueQuan NVARCHAR(100),
MaKH CHAR(10) REFERENCES Khoahoc(MaKH),
MaLop CHAR(10) REFERENCES Lop(MaLop)
);

CREATE TABLE LoaiGiangVien


(
MaLoai CHAR(10) PRIMARY KEY,
TenLoai NVARCHAR(100)
);

CREATE TABLE GIANGVIEN


(
MaGV CHAR(10) PRIMARY KEY,
Ten NVARCHAR(100),
MaLoai CHAR(10) REFERENCES LoaiGiangVien(MaLoai)
);

30
CREATE TABLE MonHoc_GiangVien
(
MaMH CHAR(10) REFERENCES MonHoc(MaMH),
MaGV CHAR(10) REFERENCES GiangVien(MaGV),
PRIMARY KEY (MaMH, MaGV)
);

CREATE TABLE Diem


(
MaSV CHAR(10) REFERENCES SinhVien(MaSV),
MaMH CHAR(10) REFERENCES MonHoc(MaMH),
HocKy INT CHECK(HocKy>0) NOT NULL,
Diem INT,
PRIMARY KEY (MaSV, MaMH, HocKy)
);

CREATE TABLE Phong


(
MaP CHAR(10) PRIMARY KEY,

TenPhong NVARCHAR(100)
);

CREATE TABLE MonHoc_Phong


(
MaP CHAR(10) REFERENCES Phong(MaP),

31
MaMH CHAR(10) REFERENCES MonHoc(MaMH),
PRIMARY KEY (MaP, MaMH)
);

CREATE TABLE LichThi


(
MaMH CHAR(10) REFERENCES MonHoc(MaMH),
MaP CHAR(10) REFERENCES Phong(MaP),
NgayThi DATE,
PRIMARY KEY (MaMH, MaP)
);

CREATE TABLE NGANH


(
MaNganh CHAR(10) PRIMARY KEY,
TenNganh NVARCHAR(100),
MaKhoa CHAR(10) REFERENCES KHOA(MaKhoa)
);

CREATE TABLE ThoiKhoaBieu


(
MaMon CHAR(10) REFERENCES MonHoc(MaMH),
MaPhong CHAR(10) REFERENCES Phong(MaP),
Ngay NVARCHAR(100),
PRIMARY KEY (MaMon, MaPhong)
);

CREATE TABLE HOCPHI


(

32
NamHoc varchar(20),
Gia INT,
PRIMARY KEY (NamHoc)
);

CREATE TABLE HOADON


(
MaMH CHAR(10) REFERENCES MonHoc(MaMH),
NamHoc varchar(20) REFERENCES HocPhi(NamHoc),
MaSV CHAR(10) REFERENCES SinhVien(MaSV),
TongTien INT,
PRIMARY KEY (MaMH, NamHoc, MaSV)
);
4.2. Nhập liệu mẫu
4.2.1. KHOAHOC
INSERT INTO KhoaHoc (MaKH, TenKH, Thoigian) VALUES
('KH2022A', 'Khóa học 2022A', '2022-01-15'),
('KH2022B', 'Khóa học 2022B', '2022-06-30');
4.2.2. KHOA
INSERT INTO Khoa (MaKhoa, TenKhoa) VALUES
('KH01', 'Khoa Kỹ Thuật'),
('KH02', 'Khoa Kinh Tế'),
('KH03', 'Khoa Công nghệ thông tin'),
('KH04', 'Khoa Y học'),
('KH05', 'Khoa Luật'),
4.2.3. MONHOC
INSERT INTO MonHoc (MaMH, TenMH, SoTiet, SoTC) VALUES
('MH01', 'Cơ Sở Dữ Liệu', 45, 3 ),
('MH02', 'Quản Lý Dự Án', 30, 2),
('MH03', 'Lập Trình Java', 60, 4),
33
('MH04', 'Kế Toán Tài Chính', 45, 3),
('MH05', 'Hệ Điều Hành', 45, 3)
4.2.4. KHOA_MONHOC
INSERT INTO Khoa_MonHoc (MaKhoa, MaMH) VALUES
('KH01', 'MH01'),
('KH02', 'MH02'),
('KH01', 'MH03'),
('KH02', 'MH04'),
('KH01', 'MH05'),
4.2.5. LOP
INSERT INTO Lop (MaLop, TenLop, MaKhoa) VALUES
('L01', 'Lớp CNTT 01', 'KH01'),
('L02', 'Lớp Kinh Tế 01', 'KH02'),
('L03', 'Lớp CNTT 02', 'KH01'),
('L04', 'Lớp Kinh Tế 02', 'KH02'),
('L05', 'Lớp CNTT 03', 'KH01'),
4.2.6. SINHVIEN
INSERT INTO SinhVien (MaSV, TenSV, GioiTinh, NgaySinh,
QueQuan, MaKH, MaLop) VALUES
('SV001', 'Nguyễn Văn A', 'M', '2000-03-15', 'Hà Nội',
'KH2022A', 'L01'),
('SV002', 'Trần Thị B', 'F', '2001-06-20', 'Hải Phòng',
'KH2022B', 'L02'),
('SV003', 'Phạm Minh C', 'M', '2000-01-05', 'TP.HCM',
'KH2022A', 'L03'),
('SV004', 'Lê Thị D', 'F', '2000-04-10', 'Đà Nẵng',
'KH2022B', 'L04'),
('SV005', 'Nguyễn Hoàng E', 'M', '2000-02-15', 'Hà Nội',
'KH2022A', 'L05')

34
4.2.7. LOAIGIANGVIEN
INSERT INTO LoaiGiangVien (MaLoai, TenLoai) VALUES
('LG01', 'Giảng Viên Chính'),
('LG02', 'Trợ Giảng');
4.2.8. GIANGVIEN
INSERT INTO GiangVien (MaGV, Ten, MaLoai) VALUES
('GV001', 'Lê Minh Cường', 'LG01'),
('GV002', 'Nguyễn Thị Diễm', 'LG02'),
('GV003', 'Trần Văn Đạt', 'LG01'),
('GV004', 'Nguyễn Minh Thu', 'LG02'),
('GV005', 'Lê Thị Hương', 'LG01'),
4.2.9. MONHOC_GIANGVIEN
INSERT INTO MonHoc_GiangVien (MaMH, MaGV) VALUES
('MH01', 'GV001'),
('MH02', 'GV002'),
('MH03', 'GV003'),
('MH04', 'GV004'),
('MH05', 'GV005'),
4.2.10. DIEM
INSERT INTO Diem (MaSV, MaMH, HocKy, Diem) VALUES
('SV001', 'MH01', 2, 7),
('SV001', 'MH02', 2, 6),
('SV002', 'MH01', 2, 8),
('SV002', 'MH02', 2, 9),
('SV003', 'MH01', 2, 6),
('SV003', 'MH02', 2, 7),
4.2.11. PHONG
INSERT INTO Phong (MaP, TenPhong) VALUES
('P01', 'Phòng 101'),
('P02', 'Phòng 102'),
35
('P03', 'Phòng 103'),
('P04', 'Phòng 104'),
('P05', 'Phòng 105'),

4.2.12. MONHOC_PHONG
INSERT INTO MonHoc_Phong (MaP, MaMH) VALUES
('P01', 'MH01'),
('P02', 'MH02'),
('P03', 'MH03'),
('P04', 'MH04'),
('P05', 'MH05'),
4.2.13. LICHTHI
INSERT INTO LichThi (MaMH, MaP, NgayThi) VALUES
('MH01', 'P01', '2023-01-1'),
('MH02', 'P02', '2023-01-2'),
('MH03', 'P01', '2023-01-3'),
('MH04', 'P02', '2023-01-4'),
('MH05', 'P01', '2023-01-5'),
4.2.14. NGANH
INSERT INTO Nganh (MaNganh, TenNganh, MaKhoa)
VALUES
('N01', 'Công Nghệ Thông Tin', 'KH01'),
('N02', 'Kinh Tế', 'KH02');
4.2.15. THOIKHOABIEU
INSERT INTO ThoiKhoaBieu (MaMon, MaPhong, Ngay) VALUES
('MH01', 'P01', 'Thứ 2, Tiết 1-3'),
('MH02', 'P02', 'Thứ 3, Tiết 4-6'),
('MH03', 'P01', 'Thứ 4, Tiết 7-9'),
('MH04', 'P02', 'Thứ 5, Tiết 10-12'),

36
('MH05', 'P01', 'Thứ 6, Tiết 1-3'),
4.2.16. HOCPHI
INSERT INTO HocPhi (NamHoc, Gia) VALUES
('2023-2024', 15000000),
('2024-2025', 16000000),
('2025-2026', 17000000),
('2026-2027', 18000000),
('2027-2028', 19000000)
4.2.17. HOADON
INSERT INTO HoaDon (MaMH, NamHoc, MaSV, TongTien) VALUES
('MH01', '2023-2024', 'SV001', 15000000),
('MH02', '2024-2025', 'SV001', 16000000),
('MH03', '2025-2026', 'SV002', 17000000),
('MH04', '2026-2027', 'SV002', 18000000),
('MH05', '2027-2028', 'SV003', 19000000),

4.3. Cài các store procedure


4.3.1. Xem thông tin cá nhân của Sinh viên
- Sp_XemTTSV: Xem thông tin cá nhân của Sinh viên
CREATE PROC sp_XemTTSV
AS
BEGIN
SELECT * FROM SinhVien
END
4.3.2. Sửa thông tin cá sinh viên
- Sp_ThemSV: Thêm sinh viên
CREATE PROC ThemSinhVien(
@MaSV CHAR(10),
@TenSV NVARCHAR(1000),

37
@GioiTinh CHAR(1),
@NgaySinh DATE,
@QueQuan NVARCHAR(100),
@MaKH CHAR(10),
@MaLop CHAR(10))
AS
BEGIN
INSERT INTO SinhVien (MaSV, TenSV, GioiTinh,
NgaySinh, QueQuan, MaKH, MaLop)
VALUES (@MaSV, @TenSV, @GioiTinh, @NgaySinh,
@QueQuan, @MaKH, @MaLop);
END;
4.3.3. Sửa thông tin cá sinh viên
- Sp_ SuaSinhVien: Sửa thông tin cá sinh viên
CREATE PROC sp_SuaSinhVien(
@MaSV CHAR(10),
@TenSV NVARCHAR(1000),
@GioiTinh CHAR(1),
@NgaySinh DATE,
@QueQuan NVARCHAR(100),
@MaKH CHAR(10),
@MaLop CHAR(10))
AS
BEGIN
UPDATE SinhVien
SET TenSV = TenSV, GioiTinh = GioiTinh, NgaySinh =
NgaySinh, QueQuan = QueQuan, MaKH = MaKH, MaLop = MaLop
WHERE MaSV = MaSV;
END;

38
4.3.4. Xóa thông tin sinh viên
- Sp_XoaSV: Xóa thông tin sinh viên
CREATE PROC sp_XoaSV(
@Masv char(10))
AS
BEGIN
delete from SinhVien
where MaSV=@Masv
END
4.3.5. Xem điểm
- Sp_XemDiemSinhVien: Xem điểm của sinh viên
CREATE PROCEDURE sp_XemDiemSinhVien
@MaSV CHAR(10)
AS
BEGIN
SELECT
SV.MaSV,SV.TenSV,MH.MaMH,MH.TenMH,D.HocKy,D.Diem
FROM SinhVien SV JOIN Diem D ON SV.MaSV = D.MaSV
JOIN MonHoc MH ON D.MaMH = MH.MaMH
WHERE SV.MaSV = @MaSV;

END;
4.3.6. Tính điểm trung bình học kỳ
- Sp_TinhDiemTrungBinhHocKy: Tính điểm trung bình học kỳ
CREATE PROCEDURE sp_TinhDiemTrungBinhHocKy
@MaSV CHAR(10),
@HocKy INT
AS
BEGIN

39
DECLARE @DiemTrungBinh FLOAT;

SELECT @DiemTrungBinh = AVG(Diem)


FROM Diem
WHERE MaSV = @MaSV AND HocKy = @HocKy

SELECT @DiemTrungBinh AS DiemTrungBinhHocKy


END;
4.3.7. Sửa điểm sinh viên sinh viên
- Sp_ CapNhatDiemMonHoc: Sửa điểm sinh viên
CREATE PROCEDURE sp_CapNhatDiemMonHoc
@MaSV CHAR(10),
@MaMH CHAR(10),
@HocKy INT,
@Diem INT
AS
BEGIN
UPDATE Diem
SET Diem = @Diem
WHERE MaSV = @MaSV AND MaMH = @MaMH AND HocKy =
@HocKy
END;
4.3.8. Xóa điểm sinh viên
- Sp_ XoaDiemMonHoc: Xóa điểm sinh viên
CREATE PROCEDURE sp_XoaDiemMonHoc
@MaSV CHAR(10),
@MaMH CHAR(10),
@HocKy INT
AS

40
BEGIN
DELETE FROM Diem
WHERE MaSV = @MaSV AND MaMH = @MaMH AND HocKy =
@HocKy
END;
4.3.9. Xem danh sách giảng viên dạy môn học nào
- sp_ XemMonHocGiangVien: Xem danh sách giảng viên dạy
môn nào
CREATE PROCEDURE sp_XemMonHocGiangVien
@MaGV CHAR(10)
AS
BEGIN
SELECT MHG.MaMH, MH.TenMH
FROM MonHoc_GiangVien MHG
JOIN MonHoc MH ON MHG.MaMH = MH.MaMH
WHERE MHG.MaGV = @MaGV
END;
4.3.10. Xem học phí năm học
- sp_ XemHocPhiNamHoc: Xem học phí năm học
CREATE PROCEDURE sp_XemHocPhiNamHoc
@NamHoc varchar(20)
AS
BEGIN
SELECT *
FROM HocPhi
WHERE NamHoc = @NamHoc
END;

41
4.4. Ràng buộc cơ sở dữ liệu (trigger)
4.4.1. Check thời gian khoá học
--1.Check thoi gian KHOAHOC
GO
CREATE TRIGGER TR_CheckThoigian_KhoaHoc
ON KhoaHoc
AFTER INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT 1
FROM inserted
WHERE TRY_CAST(Thoigian AS DATE) > GETDATE()
)
BEGIN
ROLLBACK;
RAISERROR(N'Error: Thời gian không được lớn hơn ngày hiện
tại.', 16, 1);
END;
END;

4.4.2. Kiểm tra điểm


--3. CHECK DIEM
GO
CREATE TRIGGER TR_CheckDiemValues
ON Diem
INSTEAD OF INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT 1

42
FROM inserted
WHERE Diem > 10 OR Diem < 0
)
BEGIN
RAISERROR(N'Error: Điểm phải lớn hơn 0 và bé hơn 10.',
16, 1);
RETURN;
END;

-- Update the values if they pass the conditions


UPDATE Diem
SET Diem = IIF(inserted.Diem > 10, 10, IIF(inserted.Diem <
0, 0, inserted.Diem)),
FROM Diem
INNER JOIN inserted ON Diem.MaSV = inserted.MaSV AND
Diem.MaMH = inserted.MaMH;
END

4.4.3. Kiểm tra ngày sinh


--4 Check ngày sinh
GO
CREATE TRIGGER TR_SinhVien_checkNgaySinh
ON SinhVien
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT 1
FROM inserted
WHERE NgaySinh > GETDATE()
)
BEGIN
43
ROLLBACK TRANSACTION;
RAISERROR(N'Ngày sinh không được sau ngày hiện tại.',
16, 1);
RETURN;
END
END

4.4.4.Tên sinh viên không được chứa số


--5 Khi thêm/ sửa tên Sinh viên k được có số
GO
CREATE TRIGGER tr_TenSinhVien_KhongChuaSo
ON SinhVien
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT 1
FROM inserted
WHERE ISNUMERIC(TenSV) = 1
)
BEGIN
ROLLBACK TRANSACTION;
RAISERROR(N'Tên sinh viên không được chứa số.', 16, 1);
RETURN;
END
END;

4.4.5.Tên sinh viên phải khác nhau:


--6 Khi thêm/sửa tên sinh viên, tên sinh viên phải khác nhau:
GO
CREATE TRIGGER TR_TENSV

44
on SinhVien
FOR INSERT,UPDATE
AS
BEGIN
declare @tensv nvarchar(255),@c int;
select @tensv=TenSV from inserted
select @c=COUNT(*)
from SinhVien
where TenSV=@tensv
if @c>1
begin
Rollback Transaction
Raiserror(N'Họ tên sinh viên phải khác nhau',16,1)
return
end
end

4.4.6.Tên giảng viên phải khác nhau


--7 Khi thêm/sửa tên giảng viên, tên giảng viên phải khác nhau:
GO
CREATE TRIGGER TR_TENGV
on GIANGVIEN
FOR INSERT,UPDATE
AS
BEGIN
declare @tengv nvarchar(255),@c int;
select @tengv =Ten from inserted
select @c=COUNT(*)
from GIANGVIEN
where Ten=@tengv
if @c>1
begin
45
Rollback Transaction
Raiserror(N'Họ tên giảng viên phải khác nhau',16,1)
return
end
end
4.4.7.Sinh viên nữ luôn phải ít hơn nam:
--8 Sinh viên nữ luôn ít hơn nam
go
CREATE trigger tr_SoLuongSV
on SinhVien
FOR INSERT,UPDATE
AS
BEGIN
declare @gioitinh char(10),@c int,@c1 int;
select @gioitinh=GioiTinh from inserted
select @c=COUNT(*)
from SinhVien
where GioiTinh='Nam'
select @c1=COUNT(*)
from SinhVien
where GioiTinh='Nu'
if @c<@c1
begin
Rollback Transaction
Raiserror(N'Số lượng sinh viên nam phải nhiều hơn số lượng sinh
viên nữ',16,1)
return
end
end
4.4.8.Mã phòng luôn bắt đầu bằng chữ “P”:
--11 Mã phòng luôn có chữ P đầu
GO
46
CREATE TRIGGER TR_Phong
on PHONG
FOR INSERT,UPDATE
AS
BEGIN
declare @maphong nvarchar(255)
select @maphong=MaP from inserted
if @maphong NOT LIKE 'P%'
begin
Rollback Transaction
Raiserror(N'Mã phòng luôn bắt đầu bằng chữ P đầu',16,1)
end
end
4.4.9.Sinh viên phải trên 18 tuổi:
--12 Sinh viên phải trên 18 tuổi
GO
CREATE TRIGGER TR_KTSV
ON SinhVien
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @ngaySinh DATE
SELECT @ngaySinh = NgaySinh
FROM inserted
IF DATEDIFF(YEAR, @ngaySinh, GETDATE()) < 18
BEGIN
RAISERROR (N'Sinh viên phải trên 18 tuổi', 16, 1)
Rollback transaction
END
END
4.4.10.Học phí luôn > 0:
--15 Học phí luôn > 0
47
GO
CREATE TRIGGER TR_HocPhi
ON HOCPHI
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT 1
FROM inserted
WHERE Gia < 0
)
BEGIN
ROLLBACK TRANSACTION;
RAISERROR(N'Học phí phải dương', 16, 1);
RETURN;
END
END

48
CHƯƠNG 5 KẾT LUẬN
5.1. Kết quả đạt được và chưa đạt được
5.1.1. Kết quả đạt được:
▪ Hoàn tất báo cáo theo phiếu chấm điểm
▪ Thực hiện đủ các phần bảng và các chức năng có thể có khi sử dụng trong
thực tiễn
▪ Thực hiện thiết kế các mô hình cần thiết trong việc xây dựng Cơ sở dữ
liệu
5.1.2. Kết quả chưa đạt được
▪ Các phần bảng chưa thực sự theo sát yêu cầu.
▪ Vẫn còn khá nhiều chức năng cần thiết trong thực tiễn có thể sử dụng đối
với các bảng dữ liệu vẫn chưa có trong báo cáo
▪ Các bản thiết kế mô hình dữ liệu chỉ mang tính chất tương đối, mang tính
tham khảo.
5.2. Hướng phát triển mở rộng ứng dụng trong tương lai.
o Thực hiện xây dựng lại các bản thiết kế cơ sở dữ liệu để phù hợp, sát với
thực tế nhất
o Tạo thêm nhiều bảng dữ liệu cần thiết khác
o Xây dựng thêm các chức năng khác cần thiết đối với các bảng

49
TÀI LIỆU THAM KHẢO
Sử dụng chức năng tạo danh mục tài liệu tham khảo của MS Word và dùng
Style tham chiếu là IEEE.

50
PHỤ LỤC:
Bảng phân công công việc của từng thành viên trong nhóm như Bảng 2.
Bảng 2. Bảng phân công công việc
Trưởng
Stt MSSV Họ và tên Nội dung thực hiện
nhóm
21DH113601 Ngô Anh Hào Mô tả đề tài, Dạng chuẩn, bảo
1 toàn thông tin, LTCSDL, Mô
tả thực thể, tạo Processdure
21DH114309 Phan Hoàng Mô tả đề tài, ràng buộc toàn
Việt vẹn, NOSQL & NEWSQL,
2 Mô hình thực thể kết hợp, X
Nhập dữ liệu mẫu, Kết luận,
Cơ sở lý thuyết.
19DH110421 Mai Trung Mô tả đề tài, Mô hình ERD,
3 Kiên phụ thuộc hàm, Lược đồ cơ sở
dữ liệu quan hệ, tạo CSDL
Ghi chú: mục lục được thực hiện từ “danh mục hình và bảng 7” → “Phụ
lục”.

51

You might also like