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ậ
MÔ TẢ ĐỀ TÀI
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
Trường Đại Học Tôn Đức Thắng -–Website: https://tdtu.edu.vn/
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
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
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
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
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
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
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
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
▪ Hiển thị mã sinh viên, tên sinh viên, địa chỉ,giới tính, ngày sinh
▪ 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
▪ Hiển thị khoa mà sinh viên đang theo
▪ 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
• 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:
• 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
- 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 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ợ
Bố cục báo cáo
CƠ SỞ LÝ THUYẾT
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.
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.
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.
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 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ả.
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ị
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
Dùng để thiết lập khóa chính trên bảng, xác định giá trị trên 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
Dùng để thiết lập khóa ngoại trên bảng, tham chiếu đến bảng 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)
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
- 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
- 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ý'}
- 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ử'),
2.7.2 Sự giống và khác nhau giữa NoSQL và NewSQL
Mô hình dữ liệu Cơ sở dữ liệu quan hệ truyền thống
Dữ liệu phi cấu trúc hoặc bán cấu trúc
Sử dụng sql truyền thống Sử dụng ngôn ngữ truy vấn riêng 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 (eventual consistency) Đặc điểm sử dụng
Tính nhất quán cao, mô hình quan hệ truyền thống
Xử lý dữ liệu lớn, lưu trữ phi cấu 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.
PHÂN TÍCH VÀ THIẾT KẾ CƠ SỞ DỮ LIỆU
Mô tả các thực thể
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
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
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
4 SoTC int Số tín chỉ
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
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
2 TenLop nvarchar 100 Foreign key Tên lớp học
3 MaKhoa char 10 Foreign key Mã khoa
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
6 MaKH char 10 Foreign key Mã khoa
8 MaLop char 10 Foreign key Mã lớp
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
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
3 MaLoai char 10 Foreign key Mã loại
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 MAGV char 10 Primary key Mã giáo viên
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ỳ
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
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
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
3 MaP Char 10 Primary key Mã phòng
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
3 MaKhoa char 10 Foreign key Mã khoa
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
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
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
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ệ
• 3NF: Đạt 3 Bảng Lop (Lớp):
5 Bảng LOAIGIANGVIEN (Loại giảng viên):
• 3NF: Đạt 10 Bảng LICHTHI (Lịch thi):
• 3NF: Đạt 11 Bảng NGANH (Ngành):
Bảng KhoaHoc (Khóa học)
Bảng Khoa (Khoa)
Bảng Lop (Lớp)
Bảng SinhVien (Sinh viên)
Bảng LOAIGIANGVIEN (Loại giảng viên)
Bảng GIANGVIEN (Giảng viên)
Bảng MONHOC (Môn học)
Bảng DIEM (Điểm)
Bảng PHONG (Phòng)
Bảng LICHTHI (Lịch thi)
Bảng NGANH (Ngành)
Bảng NGANH_MONHOC (Bảng trung gian)
Bảng THOIKHOABIEU (Thời khóa biểu)
Bảng HOCPHI (Học phí)
Bảng HOADON (Hóa đơn)
Bảng NganhMonHoc (Bảng trung gian)
TRIỂN KHAI CƠ SỞ DỮ LIỆU TRÊN MS SQL SERVER
Tạo cơ sở dữ liệu
( MaKH CHAR(10) PRIMARY KEY, TenKH NVARCHAR(100),
MaKhoa CHAR(10) PRIMARY KEY, TenKhoa NVARCHAR(100)
MaMH CHAR(10) PRIMARY KEY, TenMH NVARCHAR(100),
MaKhoa CHAR(10) REFERENCES Khoa(MaKhoa), MaMH CHAR(10) REFERENCES MonHoc(MaMH), PRIMARY KEY (MaKhoa, MaMH)
TenLop NVARCHAR(100), MaKhoa CHAR(10) REFERENCES Khoa(MaKhoa) );
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) );
MaLoai CHAR(10) PRIMARY KEY, TenLoai NVARCHAR(100)
MaGV CHAR(10) PRIMARY KEY, Ten NVARCHAR(100),
MaLoai CHAR(10) REFERENCES LoaiGiangVien(MaLoai) );
MaMH CHAR(10) REFERENCES MonHoc(MaMH), MaGV CHAR(10) REFERENCES GiangVien(MaGV), PRIMARY KEY (MaMH, MaGV)
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) );
MaP CHAR(10) REFERENCES Phong(MaP),
MaMH CHAR(10) REFERENCES MonHoc(MaMH), PRIMARY KEY (MaP, MaMH)
MaMH CHAR(10) REFERENCES MonHoc(MaMH), MaP CHAR(10) REFERENCES Phong(MaP), NgayThi DATE,
MaNganh CHAR(10) PRIMARY KEY, TenNganh NVARCHAR(100),
MaKhoa CHAR(10) REFERENCES KHOA(MaKhoa) );
MaMon CHAR(10) REFERENCES MonHoc(MaMH), MaPhong CHAR(10) REFERENCES Phong(MaP), Ngay NVARCHAR(100),
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) );
Nhập liệu mẫu
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');
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'),
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),
('MH04', 'Kế Toán Tài Chính', 45, 3), ('MH05', 'Hệ Điều Hành', 45, 3)
INSERT INTO Khoa_MonHoc (MaKhoa, MaMH) VALUES ('KH01', 'MH01'),
('KH02', 'MH02'), ('KH01', 'MH03'), ('KH02', 'MH04'), ('KH01', 'MH05'),
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'),
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')
INSERT INTO LoaiGiangVien (MaLoai, TenLoai) VALUES ('LG01', 'Giảng Viên Chính'),
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'),
INSERT INTO MonHoc_GiangVien (MaMH, MaGV) VALUES ('MH01', 'GV001'),
('MH02', 'GV002'), ('MH03', 'GV003'), ('MH04', 'GV004'), ('MH05', 'GV005'),
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),
INSERT INTO Phong (MaP, TenPhong) VALUES ('P01', 'Phòng 101'),
INSERT INTO MonHoc_Phong (MaP, MaMH) VALUES ('P01', 'MH01'),
INSERT INTO LichThi (MaMH, MaP, NgayThi) VALUES ('MH01', 'P01', '2023-01-1'),
INSERT INTO Nganh (MaNganh, TenNganh, MaKhoa) VALUES
('N01', 'Công Nghệ Thông Tin', 'KH01'), ('N02', 'Kinh Tế', 'KH02');
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'),
INSERT INTO HocPhi (NamHoc, Gia) VALUES ('2023-2024', 15000000),
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
4.3.2 Sửa thông tin cá sinh viên
- Sp_ThemSV: Thêm sinh viên CREATE PROC ThemSinhVien(
@GioiTinh CHAR(1), @NgaySinh DATE, @QueQuan NVARCHAR(100), @MaKH CHAR(10),
BEGIN INSERT INTO SinhVien (MaSV, TenSV, GioiTinh, NgaySinh, QueQuan, MaKH, MaLop)
VALUES (@MaSV, @TenSV, @GioiTinh, @NgaySinh,
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),
BEGIN UPDATE SinhVien SET TenSV = TenSV, GioiTinh = GioiTinh, NgaySinh NgaySinh, QueQuan = QueQuan, MaKH = MaKH, MaLop = MaLop WHERE MaSV = MaSV;
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(
BEGIN delete from SinhVien where MaSV=@Masv END
- 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
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
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;
- Sp_ XoaDiemMonHoc: Xóa điểm sinh viên CREATE PROCEDURE sp_XoaDiemMonHoc @MaSV CHAR(10),
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
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
BEGIN SELECT * FROM HocPhi WHERE NamHoc = @NamHoc END;
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
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE TRY_CAST(Thoigian AS DATE) > GETDATE() )
RAISERROR(N'Error: Thời gian không được lớn hơn ngày hiện tại.', 16, 1);
4.4.2 Kiểm tra điểm 3 CHECK DIEM GO
CREATE TRIGGER TR_CheckDiemValues ON Diem
INSTEAD OF INSERT, UPDATE AS
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);
Update the values if they pass the conditions UPDATE Diem
SET Diem = IIF(inserted.Diem > 10, 10, IIF(inserted.Diem <
INNER JOIN inserted ON Diem.MaSV = inserted.MaSV AND Diem.MaMH = inserted.MaMH;
4.4.3 Kiểm tra ngày sinh 4 Check ngày sinh GO
CREATE TRIGGER TR_SinhVien_checkNgaySinh ON SinhVien
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE NgaySinh > GETDATE() )
RAISERROR(N'Ngày sinh không được sau ngày hiện tại.', 16, 1);
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
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE ISNUMERIC(TenSV) = 1 )
RAISERROR(N'Tên sinh viên không được chứa số.', 16, 1);
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:
GOCREATE TRIGGER TR_TENSV 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
BEGIN declare @tengv nvarchar(255),@c int; select @tengv =Ten from inserted select @c=COUNT(*) from GIANGVIEN where Ten=@tengv if @c>1 begin
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
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 0:
GO CREATE TRIGGER TR_HocPhi ON HOCPHI
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE Gia < 0 )
RAISERROR(N'Học phí phải dương', 16, 1);
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
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE TRY_CAST(Thoigian AS DATE) > GETDATE() )
RAISERROR(N'Error: Thời gian không được lớn hơn ngày hiện tại.', 16, 1);
4.4.2 Kiểm tra điểm 3 CHECK DIEM GO
CREATE TRIGGER TR_CheckDiemValues ON Diem
INSTEAD OF INSERT, UPDATE AS
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);
Update the values if they pass the conditions UPDATE Diem
SET Diem = IIF(inserted.Diem > 10, 10, IIF(inserted.Diem <
INNER JOIN inserted ON Diem.MaSV = inserted.MaSV AND Diem.MaMH = inserted.MaMH;
4.4.3 Kiểm tra ngày sinh 4 Check ngày sinh GO
CREATE TRIGGER TR_SinhVien_checkNgaySinh ON SinhVien
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE NgaySinh > GETDATE() )
RAISERROR(N'Ngày sinh không được sau ngày hiện tại.', 16, 1);
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
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE ISNUMERIC(TenSV) = 1 )
RAISERROR(N'Tên sinh viên không được chứa số.', 16, 1);
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:
GOCREATE TRIGGER TR_TENSV 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
BEGIN declare @tengv nvarchar(255),@c int; select @tengv =Ten from inserted select @c=COUNT(*) from GIANGVIEN where Ten=@tengv if @c>1 begin
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
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 0:
GO CREATE TRIGGER TR_HocPhi ON HOCPHI
BEGIN IF EXISTS ( SELECT 1 FROM inserted WHERE Gia < 0 )
RAISERROR(N'Học phí phải dương', 16, 1);