90
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HCM (HUTECH) BÁO CÁO CUỐI KÌ ORACLE Đề tài: QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN Giảng viên hướng dẫn : ThS. Võ Hoàng Khang Sinh viên thực hiện : Nhóm 12

Nhom 12 - QL Danh Gia Diem Ren Luyen SV

Embed Size (px)

DESCRIPTION

oracle

Citation preview

Page 1: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HCM (HUTECH)

BÁO CÁO CUỐI KÌ

ORACLE

Đề tài:

QUẢN LÝ ĐÁNH GIÁ

ĐIỂM RÈN LUYỆN SINH VIÊN

Giảng viên hướng dẫn : ThS. Võ Hoàng Khang

Sinh viên thực hiện : Nhóm 12

Lê Thị Phượng MSSV: 1051020186

Nguyễn Nhật Khánh MSSV: 0951020115

TP. Hồ Chí Minh, 2015

Page 2: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

2QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

MỤC LỤC

CHƯƠNG 1 - TỔNG QUAN..........................................................................................5

1.1. Giới thiệu...........................................................................................................5

1.2. Lý do chọn đề tài...............................................................................................5

CHƯƠNG 2 - PHÂN TÍCH HỆ THỐNG.......................................................................6

2.1. Xác định các loại thực thể..................................................................................6

2.2. Mô hình thực thể kết hợp (ERD).....................................................................10

2.3. Mô hình ERD biểu diễn bằng Case Studio......................................................11

2.4. Mô hình quan hệ..............................................................................................11

2.5. Xác định các ràng buộc toàn vẹn.....................................................................12

2.5.1. Ràng buộc toàn vẹn trên bối cảnh một quan hệ............................................12

2.5.2. Ràng buộc toàn vẹn trên bối cảnh nhiều quan hệ.........................................18

CHƯƠNG 3 - THIẾT KẾ.............................................................................................24

3.1. Tạo CSDL........................................................................................................24

3.2. Tạo các bảng và các ràng buộc toàn vẹn (RBTV)...........................................29

3.2.1. Tạo bảng và khóa chính................................................................................29

3.2.2. Tạo khóa ngoại.............................................................................................37

3.2.3. Các ràng buộc toàn vẹn................................................................................39

3.3. Thực thi các chức năng cơ bản........................................................................43

3.3.1. Tạo các View................................................................................................43

3.3.2. Tạo các Procedure........................................................................................46

3.3.3. Tạo các Function..........................................................................................62

3.3.4. Tạo các Trigger.............................................................................................69

CHƯƠNG 4 - ỨNG DỤNG..........................................................................................75

GVHD: VÕ HOÀNG KHANG

Page 3: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

3QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

Lời cảm ơn

Để hoàn thành báo cáo cuối kì môn học này, nhóm em xin tỏ lòng biết ơn sâu sắc

đến thầy Võ Hoàng Khang đã tận tình hướng dẫn và giúp đỡ trong suốt quá trình học

tập và làm đề tài “Quản lý đánh giá điểm rèn luyện sinh viên”. Cứ mỗi tuần lý thuyết

và thực hành, thầy hướng dẫn sửa chữa những sai sót và bổ sung thêm những kiến thức

cần thiết để chúng em có nhiều kinh nghiệm hơn trong quá trình xây dựng đề tài.

Chính nhờ điều đó đã góp phần rất lớn để chúng em hoàn thành báo cáo có thể kịp tiến

độ nhanh hơn và kĩ hơn, phân tích đề tài rõ ràng cụ thể hơn rất nhiều nên giờ nhóm em

mới hoàn thành được báo cáo cuối kì môn ORACLE này.

Nhóm em cũng xin chân thành cám ơn quý Thầy, Cô trong khoa Công Nghệ

Thông Tin đã tận tình truyền đạt kiến thức cho em. Với kiến thức đã làm nền tảng rất

lớn để chúng em có thể tìm hiểu và phát triển bản thân nhiều hơn trong việc học tập

cũng như làm nên đề tài này.

Cuối cùng, nhóm em xin chúc thầy Võ Hoàng Khang và quý Thầy, Cô dồi dào sức

khỏe và thành công trong sự nghiệp cao quý.

Nhóm em xin chân thành cảm ơn!

Tp.HCM, ngày 22 tháng 06 năm 2014

Nhóm Sinh viên thực hiện

Nhóm 12

GVHD: VÕ HOÀNG KHANG

Page 4: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

4QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CHƯƠNG 1 - TỔNG QUAN

1.1. Giới thiệu

Nhằm giúp giữa sinh viên và khoa, trường thuận tiện trong việc đánh giá và tự

đánh giá rèn luyện cho sinh viên, giảm bớt qui trình và thời gian cho việc đánh giá

rèn luyện trên các biểu mẫu in trên giấy như trước giờ, thay thế vào đó phần mềm

“Quản lý đánh giá điểm rèn luyện sinh viên” giúp sinh viên có thể tự đánh giá rèn

luyện cho bản thân trực tiếp trên website ở bất cứ đâu có kết nối mạng internet

bằng tài khoản được nhà trường cấp cho mỗi sinh viên. Sau khi sinh viên tự đánh

giá xong, thì lần lượt những cấp bậc cao hơn sẽ đánh giá lại và chốt kết quả cho

sinh viên đó. Cuối cùng, lớp trưởng, khoa, trường xét duyệt và thống kê xếp loại

cho tất cả sinh viên.

Dữ liệu về quá trình đánh giá rèn luyện sinh viên được đưa vào bảng điểm cá nhân

của sinh viên chính xác. Đồng thởi đảm bảo công tác lưu trữ luôn thống nhất, ổn

định và đầy đủ, thể hiện tính khách quan và công bằng cho người học

1.2. Lý do chọn đề tài

Trong quá trình thực hiện công cuộc công nghiệp hóa, hiện đại hóa hiện nay

của đất nước thì việc áp dụng công nghệ thông tin vào các hoạt động đang được

đẩy mạnh qua đó qua đó giúp rút ngắn thời gian làm việc và tránh sai sót. Một

trong những ngành đi đầu trong việc áp dụng công nghệ thông tin vào các hoạt

động là ngành giáo dục. Do đó việc áp dụng công nghệ thông tin vào các trường

Cao đẳng và Đại học cũng không phải ngoại lệ. Một trong những công việc đòi hỏi

sự chính xác vì ảnh hưởng đến lợi ích của sinh viên là việc đánh giá điểm rèn

luyện, trong khi đó nếu thực hiện đánh giá rèn luyện của sinh viên bằng phương

pháp thủ công sẽ tốn rất nhiều thời gian và dễ gây sai sót vì thế giải pháp đưa ra là

tạo 1 phần mềm có thể để sinh viên tự đánh giá điểm rèn luyện trên website để tiết

kiệm thời gian cho cả sinh viên, ban cán sự lớp và cả nhà trường.

Từ đó nhóm em đã tìm hiểu và thực hiện đề tài “Phần mềm hỗ trợ đánh giá rèn

luyện sinh viên”

GVHD: VÕ HOÀNG KHANG

Page 5: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

5QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CHƯƠNG 2 - PHÂN TÍCH HỆ THỐNG

2.1. Xác định các loại thực thể

Loại thực thể cơ bản

o HỌC KÌ

o TIÊU CHÍ

o LOẠI TIÊU CHÍ

o LOẠI SINH VIÊN

Loại thực thể đối tượng ngoài

o TÀI KHOẢN

o KHOA

o LỚP

o TỔ

o SINH VIÊN

o KHÓA HỌC

Loại thực thể nghiệp vụ

o PHIẾU ĐÁNH GIÁ

o THOI HAN DANH GIA

TAIKHOAN (ID, Password, MaQuyen, TenQuyen)

Mô tả: Bao gồm thông tin cơ bản cho tài khoản của sinh viên, lớp, khoa,

trường

- ID: Mã tài khoản

- Password: Mật khẩu

- MaQuyen: Mã quyền

- TenQuyen: Tên quyền (Sinh viên, tổ trưởng, lớp trưởng, Khoa

CNTT, …)

KHOAHOC (MaKH, TenKH, NamBD)

Mô tả: Bao gồm thông tin cơ bản về các khóa học

GVHD: VÕ HOÀNG KHANG

Page 6: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

6QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

- MaKH: Mã khóa học (1013, 1014, 1114, 1115, …)

- HeDaoTao: Hệ đào tạo (Đại học chính quy, Cao đẳng chính quy)

- NamBD: Năm bắt đầu

KHOA (MaKhoa, TenKhoa)

Mô tả: Bao gồm thông tin cơ bản về các khoa trong trường

- MaKhoa: Mã khoa

- TenKhoa: Tên khoa

LOP (MaLop, TenLop, SiSo, NamKT)

Mô tả: Bao gồm các lớp trong cùng một khóa. Lớp sẽ tổng hợp lại phần

đánh giá của các tổ trong lớp mình. Sau đó đánh giá riêng

- MaLop: Mã lớp

- TenLop: Tên lớp

- SiSo: Sĩ số

- NamKT: Năm kết thúc

TO (MaTo, TenTo, SoLuong)

Mô tả: Bao gồm các tổ trong cùng một lớp. Trong một lớp sẽ chia thành

nhiều tổ. Mỗi tổ sẽ có nhiệm vụ đánh giá đạo đức các thành viên trong tổ

mình

- MaTo: Mã tổ

- TenTo: Tên tổ

- SoLuong: Số lượng

LOAISV (MaLSV, TenLSV)

Mô tả: Đề phân biệt những sinh viên là Đoàn viên, Hội viên hay Đảng

viên, ta có 1 bảng loại sinh viên

- MaLSV: Mã loại sinh viên

- TenLSV: Tên loại sinh viên (Đảng viên, Đoàn viên, Hội viên)

SINHVIEN (MaSV, HoTen, GioiTinh, NgaySinh, NoiSinh, ChucVu)

GVHD: VÕ HOÀNG KHANG

Page 7: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

7QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

Mô tả: Bao gồm các thông tin cơ bản của một sinh viên. Cuối mỗi học

kì, sinh viên sẽ tự đánh giá điểm rèn luyện cho mình

- MaSV: Mã sinh viên

- HoTen: Họ tên

- GioiTinh: Giới tính

- NgaySinh: Ngày sinh

- NoiSinh: Nơi sinh

- ChucVu: Chức vụ học tập

HOCKI (MaHK, TenHK, NamHoc, NgayBD_DG, NgayKT_DG, TinhTrang)

Mô tả: Đề phân biệt giữa các học kì với nhau, và cho biết học kì đó đang

chấm điểm rèn luyện

- MaHK: Mã học kì (HK1, HK2)

- TenHK: Tên học kì (Học kì 1, Học kì 2)

- NamHoc: Năm học (2010 – 2011, 2011 – 2012, …)

- NgayBD_DG: Ngày bắt đầu đánh giá

- NgayKT_DG: Ngày kết thúc đánh giá

- TinhTrang: Tình trạng (Đang chấm)

THOIHANDG (MaTH, TuNgay, DenNgay, Quyen)

- MaTH: Mã thời hạn

- TuNgay: Từ ngày

- DenNgay: Đến ngày

- Quyen: Quyền (0: Sinh viên, 1: Tổ trưởng, 2: Lớp trưởng, 3:

Khoa, 4: Phòng CTSV)

LOAITIEUCHI (MaLTC, TenLTC, DiemToiDa)

Mô tả: Việc đánh giá sinh viên sẽ dựa trên những loại tiêu chí, những

tiêu chí này sẽ được chia thành các loại khác nhau

- MaLTC: Mã loại tiêu chí

- TenLTC: Tên loại tiêu chí

- DiemToiDa: Điểm tối đa

GVHD: VÕ HOÀNG KHANG

Page 8: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

8QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

TIEUCHI (MaTC, NoiDungTC, DiemToiDa)

Mô tả: Bao gồm các tiêu chí để đánh giá đạo đức của sinh viên. Trong

mỗi loại tiêu chí sẽ có them những tiêu chí đánh giá cụ thể

- MaTC: Mã tiêu chí

- NoiDungTC: Nội dung tiêu chí

- DiemToiDa: Điểm tối đa

PHIEUDANHGIA (MaPDG, NgayLap, TongDiem_SV, TongDiem_To,

TongDiem_Lop, XepLoai)

Mô tả: Sau khi đánh giá rèn luyện cho mỗi sinh viên, sẽ tạo ra 1 phiếu

đánh giá có đầy đủ thông tin đã đánh giá cho sinh viên đó

- MaPDG: Mã phiếu đánh giá

- NgayLap: Ngày lập phiếu đánh giá

- TongDiem_SV: Tổng điểm do cá nhân sinh viên tự chấm

- TongDiem_To: Tổng điểm do tổ chấm

- TongDiem_Lop: Tổng điểm cho lớp chấm

- XepLoai: Xếp loại

GVHD: VÕ HOÀNG KHANG

Page 9: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

9QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

2.2. Mô hình thực thể kết hợp (ERD)

GVHD: VÕ HOÀNG KHANG

THOIHANDG

TO

HOCKI

Của

Thuộc

Thuộc

Thuộc

KHOA

KHOAHOC TAIKHOAN

LOP Thuộc

PHIEUDANHGIASINHVIEN

CT_LOAISV

LOAISV

LOAITIEUCHI TIEUCHI

(1,n)

(1,1)

(1,1)

(1,n)

(1,n)

(1,1)(1,n)

(1,n)

(1,1)(1,1)

(1,n)

(1,n)

(1,n)

(1,n) (1,1)

(1,1)

(1,1)

(1,n)

(1,n)

(1,1)

CTDG

Page 10: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

10QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

2.3. Mô hình ERD biểu diễn bằng Case Studio

2.4. Mô hình quan hệ

o TAIKHOAN (ID, Password, MaQuyen, TenQuyen)

o KHOAHOC (MaKH, HeDaoTao, NamBD)

o KHOA (MaKhoa, TenKhoa)

o LOP (MaLop, MaKhoa, MaKH, TenLop, SiSo, NamKT)

GVHD: VÕ HOÀNG KHANG

Page 11: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

11QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o TO (MaTo, TenTo, MaLop, SoLuong)

o LOAISV (MaLSV, TenLSV)

o SINHVIEN (MaSV, HoTen, GioiTinh, NgaySinh, NoiSinh, ChucVu,

MaTo)

o HOCKI (MaHK, TenHK, NamHoc, NgayBD_DG, NgayKT_DG,

TinhTrang)

o THOIHANDG (MaTH, MaHK, NamHoc, TuNgay, DenNgay, Quyen)

o LOAITIEUCHI (MaLTC, TenLTC, DiemToiDa)

o TIEUCHI (MaTC, MaLTC, NoiDungTC, DiemToiDa)

o PHIEUDANHGIA (MaPDG, MaSV, MaHK, NamHoc, NgayLap,

TongDiem_SV, TongDiem_To, TongDiem_Lop, XepLoai)

o CT_LOAISV (MaSV, MaLSV)

o CTDG (MaPDG, MaTC, Diem_SV, NhanXet_SV, Diem_To,

NhanXet_To, Diem_Lop, NhanXet_Lop)

2.5. Xác định các ràng buộc toàn vẹn

2.5.1. Ràng buộc toàn vẹn trên bối cảnh một quan hệ

2.5.1.1 Ràng buộc toàn vẹn miền giá trị

R1: Giới tính của sinh viên chỉ là Nam hoặc là Nữ.

o Nội dung: SV SINHVIEN: SV.GioiTinh {‘Nam’, ‘Nữ’}

o Bối cảnh: SINHVIEN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

SINHVIEN + - +(GioiTinh)

R2: Điểm tối đa của loại tiêu chí phải lớn hơn 0 và nhỏ hơn 100

o Nội dung: LTC LOAITIEUCHI: 0<LTC.DiemToiDa

<100

o Bối cảnh:LOAITIEUCHI

GVHD: VÕ HOÀNG KHANG

Page 12: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

12QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOAITIEUCHI + - +(DiemToiDa)

R3: Điểm tối đa của tiêu chí phải lớn hơn 0 và nhỏ hơn 100

o Nội dung: TC TIEUCHI: 0 <TC.DiemToiDa < 100

o Bối cảnh: TIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

TIEUCHI + - +(DiemToiDa)

R4: Xếp loại của Phiếu đánh giá chỉ là Xuất sắc, Tốt, Khá, TBKhá, Yếu,

Kém

o Nội dung: PDG PHIEUDANHGIA: PDG.XepLoai

{‘Xuất sắc’, ‘Tốt’,’Khá’, ‘Trung Bình Khá’,

’TB’,’Yếu’,’Kém’}

o Bối cảnh: PHIEUDANHGIA

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

PHIEUDANHGIA + - +(XepLoai)

R5: Tình trạng của Học kì chỉ là Đang chấm hoặc ko có giá trị

o Nội dung: HK HOCKI : HK.TinhTrang {‘Đang chấm’,

NULL }

o Bối cảnh: HOCKI

GVHD: VÕ HOÀNG KHANG

Page 13: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

13QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

HOCKI + - +(TinhTrang)

R6: Sĩ số sinh viên trong một lớp phải lớn hơn không

o Nội dung: L LOP: L.SiSo > 0

o Bối cảnh: LOP

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOP + - +(SiSo)

R7: Tên loại sinh viên của Loại sinh viên chỉ là Đảng viên, Đoàn Viên,

Hội Viên

o Nội dung: LSV LOAISV: LSV.TenLSV {‘Đảng viên’,

‘Đoàn Viên’,’Hoi Vien’}

o Bối cảnh: LOAISV

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOAISV + - +(TenLSV)

R8: Tên học kì của Học kì chỉ là Học kì 1, Học kì 2

o Nội dung: HK HOCKI: HK.TenHK {‘Học kì 1’, ‘Học

Kì 2’}

o Bối cảnh: HOCKI

GVHD: VÕ HOÀNG KHANG

Page 14: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

14QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

HOCKI + - +(TenHK)

R9: Mã học kì của Học kì chỉ là HK1, HK2

o Nội dung: HK HOCKI: HK.MaHK {‘HK1’, ‘HK2’}

o Bối cảnh: HOCKI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

HOCKI + - +(MaHK)

R10: Mã sinh viên của Sinh viên có ít nhất là 10 ký tự và nhiều nhất 12

ký tự

o Nội dung: SV SINHVIEN: Len(SV.MASV) [10..12]

o Bối cảnh: SINHVIEN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

SINHVIEN + - +(MaSV)

2.5.1.2 Ràng buộc toàn vẹn liên bộ

R11: Mỗi lớp có một mã số để phân biệt với nhau.

o Nội dung: LOP1, LOP2 LOP:

Nếu LOP1 ≠ LOP2 thì LOP1.MaLop ≠ LOP2.MaLop

o Bối cảnh: LOP

o Bảng tầm ảnh hưởng:

GVHD: VÕ HOÀNG KHANG

Page 15: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

15QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

Thêm Xóa Sửa

LOP + - -(*)

R12: Mỗi khoa có một mã số để phân biệt với nhau.

o Nội dung: KHOA1, KHOA2 KHOA:

Nếu KHOA1 ≠ KHOA2 thì KHOA1.MaKhoa ≠

KHOA2.MaKhoa

o Bối cảnh: KHOA

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

KHOA + - -(*)

R13: Mỗi khóa học có một mã số để phân biệt với nhau.

o Nội dung: KHOC1, KHOC2 KHOAHOC:

Nếu KHOC1 ≠ KHOC2 thì KHOC1.MaKH ≠

KHOC2.MaKH

o Bối cảnh: KHOAHOC

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

KHOAHOC + - -(*)

R14: Mỗi Sinh viên có một mã số để phân biệt với nhau.

o Nội dung: SV1, SV2 SINHVIEN:

Nếu SV1 ≠ SV2 thì SV1.MaSV ≠ SV2.MaSV

GVHD: VÕ HOÀNG KHANG

Page 16: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

16QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bối cảnh: SINHVIEN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

SINHVIEN + - -(*)

R15: Mỗi Thời hạn đánh giá có một mã số để phân biệt với nhau.

o Nội dung: TH1, TH2 THOIHANDG:

Nếu TH1 ≠ TH2 thì TH1.MaTH ≠ TH2.MaTH

o Bối cảnh: THOIHANDG

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

THOIHANDG + - -(*)

R16: Mỗi Phiếu đánh giá có một mã số để phân biệt với nhau.

o Nội dung: PDG1, PDG2 PHIEUDANHGIA:

Nếu PDG1 ≠ PDG2 thì PDG1.MaPDG ≠ PDG2.MaPDG

o Bối cảnh: PHIEUDANHGIA

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

PHIEUDANHGIA + - -(*)

R17: Mỗi Loại tiêu chí có một mã số để phân biệt với nhau.

o Nội dung: LTC1, LTC2 LAOITIEUCHI:

Nếu LTC1 ≠ LTC2 thì LTC1.MaLTC ≠ LTC2.MaLTC

GVHD: VÕ HOÀNG KHANG

Page 17: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

17QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bối cảnh: LOAITIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOAITIEUCHI + - -(*)

R18: Mỗi Tiêu chí có một mã số để phân biệt với nhau.

o Nội dung: TC1, TC2 TIEUCHI:

Nếu TC1 ≠ TC2 thì TC1.MaTC ≠ TC2.MaTC

o Bối cảnh: TIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

TIEUCHI + - -(*)

R19: Mỗi Tổ có một mã để phân biệt với nhau.

o Nội dung: TO1, TO2 TO:

Nếu TO1 ≠ TO2 thì TO1.MaTo ≠ TO2.MaTo

o Bối cảnh: TO

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

TO + - -(*)

2.5.1.3 Ràng buộc toàn vẹn liên thuộc tính

R20: Ngày bắt đầu đánh giá (TuNgay) phải nhỏ hơn ngày kết thúc đánh

giá (DenNgay)

o Nội dung: DG THOIHANDG : DG.TuNgay <

DG.DenNgay

GVHD: VÕ HOÀNG KHANG

Page 18: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

18QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bối cảnh: THOIHANDG

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

THOIHANDG + - +(TuNgay,DenNgay)

2.5.2. Ràng buộc toàn vẹn trên bối cảnh nhiều quan hệ

2.5.2.1 Ràng buộc toàn vẹn tham chiếu

R21: RBTV về khóa ngoại giữa Lớp và Khoa

o Nội dung: LOP[MaKhoa] KHOA[MaKhoa]

o Bối cảnh: LOP, KHOA

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOP + - -(*)

KHOA - + -(*)

R22: RBTV về khóa ngoại giữa Tiêu chí và Loại tiêu chí

o Nội dung: TIEUCHI[MaLTC] LOAITIEUCHI[MaLTC]

o Bối cảnh: TIEUCHI, LOAITIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

TIEUCHI + - -(*)

LOAITIEUCHI - + -(*)

R23: RBTV về khóa ngoại giữa Sinh viên và Phiếu đánh giá

o Nội dung: PHIEUDANHGIA[MaSV] SINHVIEN[MaSV]

GVHD: VÕ HOÀNG KHANG

Page 19: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

19QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

o Bối cảnh: PHIEUDANHGIA, SINHVIEN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

PHIEUDANHGIA + - -(*)

SINHVIEN - + -(*)

R24: RBTV về khóa ngoại giữa Lớp và Khóa học

o Nội dung: LOP[MaKH] KHOAHOC[MaKH]

o Bối cảnh: LOP, KHOAHOC

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOP + - -(*)

KHOAHOC - + -(*)

R25: RBTV về khóa ngoại giữa Sinh viên và Tổ

o Nội dung: SINHVIEN[MaTo] TO[MaTo]

o Bối cảnh: SINHVIEN, TO

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

SINHVIEN + - -(*)

TO - + -(*)

GVHD: VÕ HOÀNG KHANG

Page 20: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

20QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

R26: RBTV về khóa ngoại giữa chi tiết đánh giá sinh viên, phiếu đánh

giá và tiêu chí

o Nội dung: CTDG_SV[MaPDG]

PHIEUDANHGIA[MaPDG]

Và CTDG_SV[MaTC] TIEUCHI[MaTC]

o Bối cảnh: CTDG_SV, PHIEUDANHGIA, TIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

CTDG_SV + - -(*)

PHIEUDANHGIA - + -(*)

TIEUCHI - + -(*)

R27: RBTV về khóa ngoại giữa chi tiết đánh giá tổ, phiếu đánh giá và

tiêu chí

o Nội dung: CTDG_TO[MaPDG]

PHIEUDANHGIA[MaPDG]

Và CTDG_TO[MaTC] TIEUCHI[MaTC]

o Bối cảnh: CTDG_TO, PHIEUDANHGIA, TIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

CTDG_TO + - -(*)

PHIEUDANHGIA - + -(*)

GVHD: VÕ HOÀNG KHANG

Page 21: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

21QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

TIEUCHI - + -(*)

R28: RBTV về khóa ngoại giữa chi tiết đánh giá lớp, phiếu đánh giá và

tiêu chí

o Nội dung: CTDG_LOP[MaPDG]

PHIEUDANHGIA[MaPDG]

Và CTDG_LOP[MaTC] TIEUCHI[MaTC]

o Bối cảnh: CTDG_LOP, PHIEUDANHGIA, TIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

CTDG_LOP + - -(*)

PHIEUDANHGIA - + -(*)

TIEUCHI - + -(*)

R29: RBTV về khóa ngoại giữa chi tiết loại sinh viên , loại sinh viên và

sinh viên

o Nội dung: CT_LOAISV[MaSV] SINHVIEN[MaSV]

Và CT_LOAISV[MaLSV] LOAISV[MaLSV]

o Bối cảnh: CT_LOAISV, LOAISV, SINHVIEN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

CT_LOAISV + - -(*)

GVHD: VÕ HOÀNG KHANG

Page 22: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

22QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

LOAISV - + -(*)

SINHVIEN - + -(*)

2.5.2.2 Ràng buộc toàn vẹn liên thuộc tính

R30: Điểm tối đa của tiêu chí phải nhỏ hơn điểm tối đa của loại tiêu chí

o Nội dung: TC TIEUCHI

Nếu LTC LOAITIEUCHI: LTC.MALTC =

TC.MALTC

thì LTC.DiemToiDa > TC.DiemToiDa

o Bối cảnh: TIEUCHI,LOAITIEUCHI

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

TIEUCHI - + +( DiemToiDa)

LOAITIEUCHI + - +( DiemToiDa)

R31: Năm KT khóa học của 1 lớp phỉa lớn hơn năm BD khóa học tương

ứng

o Nội dung: L LOP

Nếu KH KHOAHOC: KH.MaKH = L.MaKH

thì KH.NamBD < L.NamKT

o Bối cảnh: LOP,KHOAHOC

o Bảng tầm ảnh hưởng:

GVHD: VÕ HOÀNG KHANG

Page 23: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

23QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

Thêm Xóa Sửa

LOP - + +( NamKT)

KHOAHOC + - +( NamBD)

R32: Sô lượng sinh viên của mọt tổ thuộc một lớp không được lớn hơn sĩ

số của lớp tương ứng

o Nội dung: T TO

Nếu L LOP: T.MaLop = L.MaLop

thì T.SoLuong < L.SiSo

o Bối cảnh: LOP,KHOAHOC

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

TO - + +( SoLuong)

LOP + - +( SiSo)

2.5.2.3 Ràng buộc toàn vẹn do thuộc tính tổng hợp

R33: Sĩ số của một lớp là số lượng sinh viên thuộc lớp đó

o Nội dung: L LOP : L.SiSo=COUNT(SV SINHVIEN:

SV.MaLop=L.MaLop)

o Bối cảnh: LOP,SINHVIEN

o Bảng tầm ảnh hưởng:

Thêm Xóa Sửa

LOP + - +( SiSo)

SINHVIEN + + +( MaLop)

GVHD: VÕ HOÀNG KHANG

Page 24: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

24QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CHƯƠNG 3 - THIẾT KẾ

3.1. Tạo CSDL

o TAIKHOAN

TAIKHOAN

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 ID Varchar2(12) PK

2 Password Varchar2(50)

3 MaQuyen Varchar2(10)

4 TenQuyen NVarchar2(100)

o KHOAHOC

KHOAHOC

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaKH Varchar2(20) PK

2 TenKH NVarchar2(50) NotNull

3 NamBD Number NotNull

o KHOA

KHOA

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaKhoa Varchar2(10) PK

2 TenKhoa NVarchar2(50) NotNull

o LOP

LOP

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaLop Varchar2(10) PK

2 MaKhoa Varchar2(10) FK

GVHD: VÕ HOÀNG KHANG

Page 25: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

25QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

3 MaKH Varchar2(10) FK

4 TenLop NVarchar2(100) NotNull

5 SiSo Number NotNull

6 NamKT Number NotNull

o TO

TO

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaTo Varchar2(10) PK

2 TenTo NVarchar2(50) NotNull

o LOAISV

LOAISV

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaLSV Varchar2(10) PK

2 TenLSV NVarchar2(50) NotNull

o SINHVIEN

SINHVIEN

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaSV Varchar2(12) PK

2 HoTen NVarchar2(100) NotNull

3 GioiTinh NVarchar2(10) NotNull

GVHD: VÕ HOÀNG KHANG

Page 26: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

26QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

4 NgaySinh Date NotNull

5 NoiSinh NVarchar2(200) NotNull

6 ChucVu NVarchar2(30)

7 MaTo Varchar2(10) FK

o HOCKI

HOCKI

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaHK Varchar2(10) PK

2 TenHK NVarchar2(30) NotNull

3 NamHoc Varchar2(30) PK

4 NgayBD_DG Date NotNull

5 NgayKT_DG Date NotNull

6 TinhTrang NVarchar2(50)

o THOIHANDG

THOIHANDK

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaTH Varchar2(10) PK

2 MaHK NVarchar2(30) NotNull

3 NamHoc Varchar2(30) PK

4 TuNgay Date NotNull

5 DenNgay Date NotNull

6 Quyen Number NotNull

o LOAITIEUCHI

LOAITIEUCHI

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaLTC Varchar2(10) PK

2 TenLTC NVarchar2(2000) NotNull

GVHD: VÕ HOÀNG KHANG

Page 27: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

27QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

3 DiemToiDa Number

o TIEUCHI

TIEUCHI

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaTC Varchar2(20) PK

2 NoiDungTC NVarchar2(2000) NotNull

3 DiemToiDa Number

4 MaLTC Varchar2(10) FK

o PHIEUDANHGIA

PHIEUDANHGIA

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaPDG Varchar2(10) PK

2 MaSV Varchar2(12) FK

3 MaHK Varchar2(10) FK

4 NamHoc Varchar2(30) FK

5 NgayLap Date

6 TongDiem_SV Number

7 TongDiem_To Number

8 TongDiem_Lop Number

9 XepLoai NVarchar2(50)

o CT_LOAISV

CT_LOAISV

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaSV Varchar2(12) PFK

2 MaLSV Varchar2(10) PFK

o CTDG

GVHD: VÕ HOÀNG KHANG

Page 28: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

28QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CTDG_SV

STT Thuộc tính Kiểu dữ liệu Ràng buộc

1 MaPDG Varchar2(10) PFK

2 MaTC Varchar2(10) PFK

3 Diem_SV Number

4 NhanXet_SV NhanXet_Lop

5 Diem_To Number

6 NhanXet_To NhanXet_Lop

7 Diem_Lop Number

8 NhanXet_Lop NhanXet_Lop

3.2. Tạo các bảng và các ràng buộc toàn vẹn (RBTV)

3.2.1. Tạo bảng và khóa chính

-- Table LOP

CREATE TABLE "LOP"(

"MaLop" Varchar2(10 ) NOT NULL,

"MaKhoa" Varchar2(10 ),

"MaKH" Varchar2(20 ),

"TenLop" NVarchar2(100) NOT NULL,

"SiSo" Number,

"NamKT" Number NOT NULL

)

/

-- Add keys for table LOP

ALTER TABLE "LOP" ADD CONSTRAINT "PK_MALOP" PRIMARY KEY

("MaLop")

/

GVHD: VÕ HOÀNG KHANG

Page 29: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

29QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

-- Table HOCKI

CREATE TABLE "HOCKI"(

"MaHK" Varchar2(10 ) NOT NULL,

"TenHK" NVarchar2(30) NOT NULL,

"NamHoc" Varchar2(30 ) NOT NULL,

"NgayBD_DG" Date NOT NULL,

"NgayKT_DG" Date NOT NULL,

"TinhTrang" NVarchar2(50)

)

/

-- Add keys for table HOCKI

ALTER TABLE "HOCKI" ADD CONSTRAINT "PK_MAHK_NAMHOC"

PRIMARY KEY ("MaHK","NamHoc")

/

-- Table KHOA

CREATE TABLE "KHOA"(

"MaKhoa" Varchar2(10 ) NOT NULL,

"TenKhoa" NVarchar2(50) NOT NULL

)

/

-- Add keys for table KHOA

ALTER TABLE "KHOA" ADD CONSTRAINT "PK_MAKHOA" PRIMARY

KEY ("MaKhoa")

/

-- Table SINHVIEN

GVHD: VÕ HOÀNG KHANG

Page 30: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

30QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CREATE TABLE "SINHVIEN"(

"MaSV" Varchar2(12 ) NOT NULL,

"HoTen" NVarchar2(100) NOT NULL,

"GioiTinh" NVarchar2(10) NOT NULL,

"NgaySinh" Date NOT NULL,

"NoiSinh" NVarchar2(200) NOT NULL,

"ChucVu" NVarchar2(30),

"MaTo" Varchar2(10 )

)

/

-- Add keys for table SINHVIEN

ALTER TABLE "SINHVIEN" ADD CONSTRAINT "PK_MASV" PRIMARY

KEY ("MaSV")

/

-- Table LOAISV

CREATE TABLE "LOAISV"(

"MaLSV" Varchar2(10 ) NOT NULL,

"TenLSV" NVarchar2(50) NOT NULL

)

/

-- Add keys for table LOAISV

ALTER TABLE "LOAISV" ADD CONSTRAINT "PK_MALSV" PRIMARY

KEY ("MaLSV")

/

-- Table TIEUCHI

GVHD: VÕ HOÀNG KHANG

Page 31: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

31QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CREATE TABLE "TIEUCHI"(

"MaTC" Varchar2(10 ) NOT NULL,

"MaLTC" Varchar2(10 ),

"NoiDungTC" NVarchar2(2000) NOT NULL,

"DiemToiDa" Number

)

/

-- Add keys for table TIEUCHI

ALTER TABLE "TIEUCHI" ADD CONSTRAINT "PK_MATC" PRIMARY

KEY ("MaTC")

/

-- Table LOAITIEUCHI

CREATE TABLE "LOAITIEUCHI"(

"MaLTC" Varchar2(10 ) NOT NULL,

"TenLTC" NVarchar2(2000) NOT NULL,

"DiemToiDa" Number

)

/

-- Add keys for table LOAITIEUCHI

ALTER TABLE "LOAITIEUCHI" ADD CONSTRAINT "PK_MALTC"

PRIMARY KEY ("MaLTC")

/

-- Table TO

GVHD: VÕ HOÀNG KHANG

Page 32: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

32QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CREATE TABLE "TO"(

"MaTo" Varchar2(10 ) NOT NULL,

"TenTo" NVarchar2(30) NOT NULL,

"MaLop" Varchar2(10 ),

"SoLuong" Number

)

/

-- Add keys for table TO

ALTER TABLE "TO" ADD CONSTRAINT "PK_MATO" PRIMARY KEY

("MaTo")

/

-- Table PHIEUDANHGIA

CREATE TABLE "PHIEUDANHGIA"(

"MaPDG" Varchar2(10 ) NOT NULL,

"MaSV" Varchar2(12 ),

"MaHK" Varchar2(10 ),

"NamHoc" Varchar2(30 ),

"NgayLap" Date,

"TongDiem_SV" Number,

"TongDiem_To" Number,

"TongDiem_Lop" Number,

"XepLoai" NVarchar2(50)

)

GVHD: VÕ HOÀNG KHANG

Page 33: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

33QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

/

-- Add keys for table PHIEUDANHGIA

ALTER TABLE "PHIEUDANHGIA" ADD CONSTRAINT "PK_MAPDG"

PRIMARY KEY ("MaPDG")

/

-- Table TAIKHOAN

CREATE TABLE "TAIKHOAN"(

"ID" Varchar2(12 ) NOT NULL,

"Password" Varchar2(50 ),

"MaQuyen" Number,

"TenQuyen" NVarchar2(100)

)

/

-- Add keys for table TAIKHOAN

ALTER TABLE "TAIKHOAN" ADD CONSTRAINT "PK_ID" PRIMARY

KEY ("ID")

/

-- Table CT_LOAISV

CREATE TABLE "CT_LOAISV"(

"MaSV" Varchar2(12 ) NOT NULL,

"MaLSV" Varchar2(10 ) NOT NULL

GVHD: VÕ HOÀNG KHANG

Page 34: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

34QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

)

/

-- Add keys for table CT_LOAISV

ALTER TABLE "CT_LOAISV" ADD CONSTRAINT "PK_MASV_MALSV"

PRIMARY KEY ("MaSV","MaLSV")

/

-- Table KHOAHOC

CREATE TABLE "KHOAHOC"(

"MaKH" Varchar2(20 ) NOT NULL,

"HeDaoTao" NVarchar2(50) NOT NULL,

"NamBD" Number NOT NULL

)

/

-- Add keys for table KHOAHOC

ALTER TABLE "KHOAHOC" ADD CONSTRAINT "PK_MAKH"

PRIMARY KEY ("MaKH")

/

-- Table THOIHANDG

CREATE TABLE "THOIHANDG"(

"MaTH" Varchar2(10 ) NOT NULL,

"MaHK" Varchar2(10 ) NOT NULL,

"NamHoc" Varchar2(30 ) NOT NULL,

"TuNgay" Date NOT NULL,

GVHD: VÕ HOÀNG KHANG

Page 35: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

35QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

"DenNgay" Date NOT NULL,

"Quyen" Number NOT NULL

)

/

-- Add keys for table THOIHANDG

ALTER TABLE "THOIHANDG" ADD CONSTRAINT "PK_THOIHANDG"

PRIMARY KEY ("MaTH","MaHK","NamHoc","Quyen")

/

3.2.2. Tạo khóa ngoại

ALTER TABLE "LOP" ADD CONSTRAINT "FK_LOP_KHOA" FOREIGN

KEY ("MaKhoa") REFERENCES "KHOA" ("MaKhoa")

/

ALTER TABLE "CT_LOAISV" ADD CONSTRAINT "FK_CTLSV_SV"

FOREIGN KEY ("MaSV") REFERENCES "SINHVIEN" ("MaSV")

/

ALTER TABLE "CT_LOAISV" ADD CONSTRAINT "FK_CTLSV_LSV"

FOREIGN KEY ("MaLSV") REFERENCES "LOAISV" ("MaLSV")

/

ALTER TABLE "PHIEUDANHGIA" ADD CONSTRAINT "FK_PDG_SV"

FOREIGN KEY ("MaSV") REFERENCES "SINHVIEN" ("MaSV")

/

ALTER TABLE "PHIEUDANHGIA" ADD CONSTRAINT "FK_PDG_HK"

FOREIGN KEY ("MaHK", "NamHoc") REFERENCES "HOCKI" ("MaHK",

"NamHoc")

/

GVHD: VÕ HOÀNG KHANG

Page 36: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

36QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

ALTER TABLE "CTDG" ADD CONSTRAINT "FK_CTDG_PDG"

FOREIGN KEY ("MaPDG") REFERENCES "PHIEUDANHGIA" ("MaPDG")

/

ALTER TABLE "CTDG" ADD CONSTRAINT "FK_CTDG_TC" FOREIGN

KEY ("MaTC") REFERENCES "TIEUCHI" ("MaTC")

/

ALTER TABLE "TIEUCHI" ADD CONSTRAINT "FK_TC_LTC" FOREIGN

KEY ("MaLTC") REFERENCES "LOAITIEUCHI" ("MaLTC")

/

ALTER TABLE "LOP" ADD CONSTRAINT "FK_LOP_KHOAHOC"

FOREIGN KEY ("MaKH") REFERENCES "KHOAHOC" ("MaKH")

/

ALTER TABLE "TO" ADD CONSTRAINT "FK_TO_LOP" FOREIGN KEY

("MaLop") REFERENCES "LOP" ("MaLop")

/

ALTER TABLE "SINHVIEN" ADD CONSTRAINT "FK_SV_TO" FOREIGN

KEY ("MaTo") REFERENCES "TO" ("MaTo")

/

ALTER TABLE "THOIHANDG" ADD CONSTRAINT

"FK_THOIHANDG_HK" FOREIGN KEY ("MaHK", "NamHoc")

REFERENCES "HOCKI" ("MaHK", "NamHoc")

/

3.2.3. Các ràng buộc toàn vẹn

o Sĩ số của lớp và số lượng sinh viên của tổ phải lớn hơn 0

--Sĩ số lớp >0

ALTER TABLE LOP ADD CONSTRAINT CK_SISO CHECK ("SiSo">0)

ENABLE;

GVHD: VÕ HOÀNG KHANG

Page 37: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

37QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

--Số lượng sinh viên của tổ >0

ALTER TABLE "TO" ADD CONSTRAINT CK_SOLUONG CHECK ("SoLuong">0)

ENABLE;

o Giới tính là “Nam” hoặc “Nữ”

ALTER TABLE SINHVIEN ADD CONSTRAINT CK_GIOITINH CHECK

(REGEXP_LIKE("GioiTinh",'Nam') OR REGEXP_LIKE("GioiTinh",'Nữ'))

ENABLE;

o Ngày sinh phải nhỏ hơn ngày hiện tại

CREATE OR REPLACE TRIGGER CK_NGAYSINH

AFTER INSERT OR UPDATE OF "NgaySinh" ON SINHVIEN

FOR EACH ROW

WHEN (NEW."NgaySinh" > SYSDATE)

BEGIN

RAISE_APPLICATION_ERROR (-20001, 'LOI! NHAP LAI, NGAY PHAI NHO HON

< ' || SYSDATE);

ROLLBACK;

END;

o Điểm tối đa của tiêu chí và loại tiêu chí phải lớn hơn 0

--Điểm tối đa của loại tiêu chí >0

ALTER TABLE LOAITIEUCHI ADD CONSTRAINT CK_DIEMTD CHECK

("DiemToiDa">0) ENABLE;

--Điểm tối đa của loại tiêu chí >0

ALTER TABLE TIEUCHI ADD CONSTRAINT CK_DIEMTD_TC CHECK

("DiemToiDa">0) ENABLE;

o Học kì nào đang chấm điểm rèn luyện thì tình trạng của học kì đó là “Đang

chấm”

ALTER TABLE HOCKI

ADD CONSTRAINT CK_TINHTRANG CHECK

( REGEXP_LIKE("TinhTrang",'Đang chấm') OR REGEXP_LIKE("TinhTrang",'NULL'))

ENABLE;

GVHD: VÕ HOÀNG KHANG

Page 38: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

38QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

SELECT 'PDG' || lpad(SEQ_TuTangMaPDG.nextval,5, '0') INTO :NEW."MaPDG"

FROM DUAL;

END;

end if;

end loop;

close TG_TG;

end;

DECLARE l_exists Number;

BEGIN

SELECT COUNT(*) INTO l_exists

FROM "TO" T,SinhVien SV

WHERE T."MaTo"=SV."MaTo" AND "ChucVu"='Lớp trưởng'

3.3. Thực thi các chức năng cơ bản

3.3.1. Tạo các View

1. Hiển thị danh sách lớp trưởng của toàn trường gồm các thông tin:

mã sinh viên, họ tên, lớp, khoa và sắp xếp tên lớp theo chữ cái tăng

dần

CREATE VIEW V_DS_LopTruong

AS

SELECT "MaSV","HoTen",L."MaLop","TenKhoa"

FROM Sinhvien SV,"TO" T,Lop L,Khoa K

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

AND T."MaTo"=SV."MaTo" AND "ChucVu"='Lớp trưởng'

ORDER BY L."MaLop" ASC

2. Hiển thị thông tin những sinh viên chưa thực hiện đánh giá rèn

luyện trong học kì 2 năm học “2013 – 2014”

CREATE VIEW V_SV_ChuaDGRL

AS

SELECT "MaSV","HoTen","GioiTinh","MaLop"

GVHD: VÕ HOÀNG KHANG

Page 39: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

39QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

FROM "TO" T,Sinhvien SV

WHERE T."MaTo"=SV."MaTo" AND "MaSV" NOT IN

(

SELECT "MaSV" FROM Phieudanhgia

WHERE "MaHK"='HK2' AND "NamHoc"='2013 - 2014'

)

3. Hiển thị thông tin những sinh viên là “Đảng viên”

CREATE VIEW V_DS_DangVien

AS

SELECT SV."MaSV","HoTen","GioiTinh","MaLop"

FROM "TO" T,Sinhvien SV,Ct_loaisv CTL,LoaiSV LSV

WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=CTL."MaSV"

AND CTL."MaLSV"=LSV."MaLSV" AND "TenLSV"='Đảng viên'

4. Cho biết số lượng sinh viên của tất cả các khoa

CREATE VIEW V_SLSV_Khoa

AS

SELECT "TenKhoa",COUNT("MaSV") "Số lượng SV"

FROM Khoa K,Lop L,"TO" T,Sinhvien SV

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

AND T."MaTo"=SV."MaTo"

GROUP BY K."MaKhoa","TenKhoa"

5. Hiển thị kết quả đánh giá rèn luyện của khoa Công nghệ thông tin

trong học kì 2 năm học “2013 – 2014” gồm các thông tin: mã sinh

viên, họ tên, giới tính, chức vụ, lớp, tổng điểm, xếp loại và sắp xếp

theo tên lớp tăng dần

CREATE VIEW V_KQRL_CNTT

AS

SELECT SV."MaSV","HoTen","GioiTinh","ChucVu",L."MaLop","TongDiem_Lop" "Tổng

điểm","XepLoai"

FROM Khoa K,Lop L,"TO" T,Sinhvien SV, Phieudanhgia P

GVHD: VÕ HOÀNG KHANG

Page 40: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

40QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

AND T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"

AND K."TenKhoa"='Công Nghệ Thông Tin'

AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014'

ORDER BY L."MaLop" ASC

6. Lấy ra danh sách sinh viên toàn trường xếp loại rèn luyện “Xuất

sắc” sắp xếp điểm giảm dần trong học kì 2 năm học 2013 – 2014 gồm

những thông tin: mã sinh viên, họ tên, giới tính, chức vụ, lớp, tổng

điểm

CREATE VIEW V_DS_XuatSac

AS

SELECT SV."MaSV","HoTen","GioiTinh","ChucVu","MaLop","TongDiem_Lop" "Tổng

điểm"

FROM "TO" T,Sinhvien SV, Phieudanhgia P

WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"

AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014' AND "XepLoai"='Xuất sắc'

ORDER BY "TongDiem_Lop" DESC

7. Cho biết thời hạn đánh giá rèn luyện của sinh viên, tổ, lớp, khoa,

trường trong học kì 2 năm học “2013 – 2014”

CREATE VIEW V_ThoiHanDG

AS

SELECT (CASE WHEN "Quyen"=0 THEN 'Sinh viên'

WHEN "Quyen"=1 THEN 'Tổ trưởng' WHEN "Quyen"=2

THEN 'Lớp trưởng' WHEN "Quyen"=3 THEN 'Khoa'

ELSE 'Trường' END) AS "Cấp bậc",

"TuNgay" "Ngày bắt đầu","DenNgay" "Ngày hết hạn"

FROM Thoihandg

WHERE "MaHK"='HK2' AND "NamHoc"='2013 - 2014'

8. Cho biết điểm rèn luyện tất các học kì của sinh viên có mã số

“1051020186”

GVHD: VÕ HOÀNG KHANG

Page 41: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

41QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CREATE VIEW V_KQRL_TatCaHK

AS

SELECT "MaHK"||'/ '||"NamHoc" "Học kì","TongDiem_Lop" "Tổng điểm","XepLoai"

FROM Phieudanhgia

WHERE "MaSV"='1051020186'

ORDER BY "Học kì" ASC

9. Hiển thị thông tin kết quả đánh giá của học kì 2 năm học “2013 –

2014” của sinh viên có mã sinh viên “1051020186” tất cả các cột

điểm do cá nhân, tổ, lớp chấm và xếp loại

CREATE VIEW V_KQDG_SV

AS

SELECT SV."MaSV" "Mã SV","HoTen" "Họ tên",

"TongDiem_SV" "Điểm tự chấm","TongDiem_To" "Điểm tổ chấm",

"TongDiem_Lop" "Điểm lớp chấm","XepLoai" "Xếp loại"

FROM Phieudanhgia P,Sinhvien SV

WHERE P."MaSV"=SV."MaSV" AND "MaHK"='HK2'

AND "NamHoc"='2013 - 2014' AND SV."MaSV"='1051020186'

10. Hiển thị danh sách những sinh viên xếp loại “Yếu”, ”Kém” trong

học kì 2 năm học “2013 – 2014”

CREATE VIEW V_SV_Yeu_Kem

AS

SELECT SV."MaSV","HoTen","GioiTinh","MaLop"

FROM Sinhvien SV,Phieudanhgia P,"TO" T

WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"

AND ("XepLoai"='Yếu' OR "XepLoai"='Kém')

AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014'

3.3.2. Tạo các Procedure

1. Lấy ra danh sách những sinh viên vừa là Đoàn viên, vừa là Hội viên

GVHD: VÕ HOÀNG KHANG

Page 42: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

42QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CREATE OR REPLACE PROCEDURE P_DAV_HOV

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu"

FROM Sinhvien SV,CT_Loaisv CT,Loaisv L

WHERE SV."MaSV"=CT."MaSV" AND CT."MaLSV"=L."MaLSV"

AND (L."TenLSV"='Đoàn viên' OR L."TenLSV"='Hội viên')

GROUP BY SV."MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu"

HAVING COUNT(CT."MaLSV")=2

ORDER BY SV."MaSV" DESC;

begin

for s in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(s."MaSV" ||', '||s."HoTen" ||', '||s."GioiTinh" ||', '||

s."NgaySinh" ||', '||s."NoiSinh" ||', '||s."ChucVu");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_DAV_HOV

2. Lấy ra danh sách những sinh viên thuộc hệ “Đại học chính quy”

thuộc khóa X (X là tham số)

CREATE OR REPLACE PROCEDURE P_SV_DH(X NVarchar2)

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu"

FROM Sinhvien SV,"TO" T,Lop L,Khoa K,Khoahoc KH

WHERE SV."MaTo"=T."MaTo" AND T."MaLop"=L."MaLop"

AND L."MaKhoa"=K."MaKhoa" AND L."MaKH"=KH."MaKH"

AND "HeDaoTao"='Đại học chính quy' AND K."MaKhoa"=X;

begin

for s in cur_danhsach

GVHD: VÕ HOÀNG KHANG

Page 43: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

43QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

loop

DBMS_OUTPUT.PUT_LINE(s."MaSV" ||', '||s."HoTen" ||', '||s."GioiTinh" ||', '||

s."NgaySinh" ||', '||s."NoiSinh" ||', '||s."ChucVu");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_SV_DH('CNTT');

3. Lấy ra kết quả rèn luyện tất cả các học kì của sinh viên có mã số X,

với X là tham số truyền vào

CREATE OR REPLACE PROCEDURE P_KQ_SV(X Varchar2)

AS

CURSOR cur_danhsach is

SELECT "MaHK","NamHoc","TongDiem_Lop","XepLoai"

FROM PHIEUDANHGIA

WHERE "MaSV"=X;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaHK" ||', '||sv."NamHoc" ||', '||

sv."TongDiem_Lop" ||', '||sv."XepLoai");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_KQ_SV('1051020186');

4. Lấy ra danh sách sinh viên xếp loại X của khoa Y trong học kì 1,

năm học 2013 - 2014 (X, Y là tham số)

CREATE OR REPLACE PROCEDURE P_DSXL_SV(X NVarchar2,Y Varchar2)

AS

CURSOR cur_danhsach is

GVHD: VÕ HOÀNG KHANG

Page 44: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

44QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh",

"ChucVu","TongDiem_Lop"

FROM Khoa K,Lop L,"TO" T,Sinhvien SV,Phieudanhgia P

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

AND T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"

AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014'

AND "XepLoai"=X AND K."MaKhoa"=Y;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||

sv."NgaySinh" ||', '||sv."ChucVu" ||', '||sv."TongDiem_Lop");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_DSXL_SV('Tốt','QTKD');

5. Thống kê xếp loại sinh viên của khoa X trong học kì Y, năm học Z

(X, Y, Z là tham số)

CREATE OR REPLACE PROCEDURE P_ThongKe_XL(X Varchar2,Y Varchar2,Z

Varchar2)

AS

CURSOR cur_danhsach is

SELECT XS."MaLop" "Mã lớp",XS."SL","SLXS" "Xuất sắc","TLXS",

"SLT" "Tốt","TLT","SLK" "Khá","TLK","SLTBK" "TB - Khá","TLTBK",

"SLTB" "T. Bình","TLTB","SLY" "Yếu","TLY","SLKEM" "Kém","TLKEM" FROM

------Xuất sắc

(

select "SLXS","l"."MaLop","SL",ROUND(("SLXS"/"SL")*100,2)||'%' "TLXS" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

GVHD: VÕ HOÀNG KHANG

Page 45: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

45QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

group by L."MaLop") "l" left join

(SELECT count(*) as "SLXS","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Xuất sắc'

group by "k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "XS",

---------Tốt

(

select "SLT","l"."MaLop","SL",ROUND(("SLT"/"SL")*100,2)||'%' "TLT" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

group by L."MaLop") "l" left join

(SELECT count(*) as "SLT","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Tốt' group by

"k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "TOT",

---------Khá

(

select "SLK","l"."MaLop","SL",ROUND(("SLK"/"SL")*100,2)||'%' "TLK" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

group by L."MaLop") "l" left join

(SELECT count(*) as "SLK","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

GVHD: VÕ HOÀNG KHANG

Page 46: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

46QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Khá' group by

"k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "KHA",

--------Trung bình khá

(

select "SLTBK","l"."MaLop","SL",ROUND(("SLTBK"/"SL")*100,2)||'%' "TLTBK" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

group by L."MaLop") "l" left join

(SELECT count(*) as "SLTBK","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Trung bình

khá' group by "k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "TBKHA",

---------Trung bình

(

select "SLTB","l"."MaLop","SL",ROUND(("SLTB"/"SL")*100,2)||'%' "TLTB" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

group by L."MaLop") "l" left join

(SELECT count(*) as "SLTB","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Trung bình'

group by "k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "TB",

--------Yếu

GVHD: VÕ HOÀNG KHANG

Page 47: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

47QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

(

select "SLY","l"."MaLop","SL",ROUND(("SLY"/"SL")*100,2)||'%' "TLY" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

group by L."MaLop") "l" left join

(SELECT count(*) as "SLY","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Yếu' group by

"k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "YEU",

-------Kém

(

select "SLKEM","l"."MaLop","SL",ROUND(("SLKEM"/"SL")*100,2)||'%' "TLKEM" from

(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X

group by L."MaLop") "l" left join

(SELECT count(*) as "SLKEM","MaLop"

FROM

(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"

from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"

where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"

WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Kém' group by

"k"."MaLop") "m"

on "l"."MaLop"="m"."MaLop") "KEM"

---------

WHERE "XS"."MaLop"="TOT"."MaLop" and "TOT"."MaLop"="KHA"."MaLop" and

"KHA"."MaLop"="TBKHA"."MaLop"

and "TBKHA"."MaLop"="TB"."MaLop" and "TB"."MaLop"= "YEU"."MaLop" and

"YEU"."MaLop"="KEM"."MaLop";

begin

for tk in cur_danhsach

GVHD: VÕ HOÀNG KHANG

Page 48: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

48QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

loop

DBMS_OUTPUT.PUT_LINE(tk."Mã lớp" ||', '||tk."SL" ||', '||tk."Xuất sắc" ||', '||

tk."TLXS" ||', '||tk."Tốt" ||', '||tk."TLT" ||', '||tk."Khá" ||', '||tk."TLK" ||', '||tk."TB - Khá" ||', '||

tk."TLTBK" ||', '||

tk."T. Bình" ||', '||tk."TLTB" ||', '||tk."Yếu" ||', '||tk."TLY" ||', '||tk."Kém" ||', '||tk."TLKEM");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_ThongKe_XL('CNTT','HK2','2013 - 2014');

6. Lấy ra danh sách sinh viên chưa đánh giá rèn luyện của khoa X

trong học kì Y, năm học Z (X, Y, Z là tham số)

CREATE OR REPLACE PROCEDURE P_SV_ChuaDG(X Varchar2,Y Varchar2,Z

Varchar2)

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","ChucVu"

FROM Khoa K,Lop L,"TO" T,Sinhvien SV

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

AND T."MaTo"=SV."MaTo" AND SV."MaSV" NOT IN

(SELECT "MaSV" FROM Phieudanhgia P,HocKi HK

WHERE P."MaHK"=HK."MaHK" AND P."NamHoc"=HK."NamHoc"

AND HK."MaHK"=Y AND HK."NamHoc"=Z)

AND K."MaKhoa"=X;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||

sv."NgaySinh" ||', '||sv."ChucVu");

end loop;

end;

--Thực thi:

GVHD: VÕ HOÀNG KHANG

Page 49: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

49QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

set serveroutput on;

execute P_SV_ChuaDG('CNTT','HK1','2013 - 2014')

7. Lấy ra danh sách sinh viên có loại sinh viên là X

CREATE OR REPLACE PROCEDURE P_Loai_SV(X NVarchar2)

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","ChucVu"

FROM Sinhvien SV,Ct_loaisv CT,Loaisv L

WHERE L."MaLSV"=CT."MaLSV" AND CT."MaSV"=SV."MaSV"

AND L."TenLSV"=X;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||

sv."NgaySinh" ||', '||sv."ChucVu");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_Loai_SV('Đoàn viên')

8. Lấy ra danh sách lớp trưởng của khoa X

CREATE OR REPLACE PROCEDURE P_DS_LopTruong(X Varchar2)

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen",L."MaLop"

FROM Khoa K,Lop L,"TO" T,Sinhvien SV

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

GVHD: VÕ HOÀNG KHANG

Page 50: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

50QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

AND T."MaTo"=SV."MaTo"

AND SV."ChucVu"='Lớp trưởng' AND K."MaKhoa"=X;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."MaLop");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_DS_LopTruong('QTKD')

9. Lấy ra danh sách 10 sinh viên có điểm rèn luyện cao nhất của khoa

X trong học kì Y năm học Z

CREATE OR REPLACE PROCEDURE P_DS_10SV_DiemMax(X Varchar2,Y Varchar2,Z

Varchar2)

AS

CURSOR cur_danhsach is

SELECT * FROM

(

SELECT SV."MaSV","HoTen","GioiTinh",L."MaLop","TongDiem_Lop"

FROM Khoa K,Lop L,"TO" T,Sinhvien SV,Phieudanhgia P

WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"

AND T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"

AND K."MaKhoa"=X AND "MaHK"=Y AND "NamHoc"=Z

ORDER BY "TongDiem_Lop" DESC

)

WHERE ROWNUM<=10;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||

sv."MaLop" ||', '||sv."TongDiem_Lop");

GVHD: VÕ HOÀNG KHANG

Page 51: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

51QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_DS_10SV_DiemMax('CNTT','HK2','2013 - 2014')

10. Tạo thủ tục cập nhật tổng điểm do sinh viên tự chấm

CREATE OR REPLACE PROCEDURE P_CapNhat_TongDiemSV(PDG Varchar2,TC

Varchar2,DIEM Number,NX Nvarchar2)

AS

begin

insert into

Ctdg_sv("MaPDG","MaTC","Diem_SV","NhanXet_SV")VALUES(PDG,TC,DIEM,NX);

update Phieudanhgia set "TongDiem_SV"=(select sum("Diem_SV") from Ctdg_sv

where "MaPDG"=PDG) WHERE "MaPDG"=PDG;

end P_CapNhat_TongDiemSV;

--Thực thi:

set serveroutput on;

execute P_CapNhat_TongDiemSV('PDG00016','TC1a','10','');

execute P_CapNhat_TongDiemSV('PDG00016','TC3c','15','');

execute P_CapNhat_TongDiemSV('PDG00016','TC4d','20','');

11. Tạo thủ tục cập nhật tổng điểm do tổ chấm

CREATE OR REPLACE PROCEDURE P_CapNhat_TongDiemTo(PDG Varchar2,TC

Varchar2,DIEM Number,NX Nvarchar2)

AS

begin

insert into

Ctdg_to("MaPDG","MaTC","Diem_To","NhanXet_To")VALUES(PDG,TC,DIEM,NX);

update Phieudanhgia set "TongDiem_To"=(select sum("Diem_To") from Ctdg_to where

"MaPDG"=PDG) WHERE "MaPDG"=PDG;

GVHD: VÕ HOÀNG KHANG

Page 52: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

52QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

end P_CapNhat_TongDiemTo;

--Thực thi:

set serveroutput on;

execute P_CapNhat_TongDiemTo('PDG00016','TC1d','20','');

execute P_CapNhat_TongDiemTo('PDG00016','TC2c','18','');

execute P_CapNhat_TongDiemTo('PDG00016','TC3a','15','');

execute P_CapNhat_TongDiemTo('PDG00016','TC4a','10','');

12. Tạo thủ tục cập nhật tổng điểm lớp chấm và xếp loại cho sinh viên

được qui định: Nếu tổng điểm lớp chấm

o >=9 và <10 thì xếp loại “Xuất sắc”

o >=8 và <9 thì xếp loại “Tốt”

o >=7 và <8 thì xếp loại “Khá”

o >=6 và <7 thì xếp loại “Trung bình khá”

o >=5 và <6 thì xếp loại “Trung bình”

o >=3 và <5 thì xếp loại “Yếu”

o <3 thì xếp loại “Kém”

CREATE OR REPLACE PROCEDURE P_CapNhat_TongDiemXLLop

(PDG Varchar2,TC Varchar2,NX Nvarchar2,DIEM Number)

AS

begin

insert into

Ctdg_lop("MaPDG","MaTC","Diem_Lop","NhanXet_Lop")VALUES(PDG,TC,DIEM,NX);

update Phieudanhgia set "TongDiem_Lop"=(select sum("Diem_Lop") from Ctdg_lop

where "MaPDG"=PDG) WHERE "MaPDG"=PDG;

update Phieudanhgia set "XepLoai"='Xuất sắc' where "TongDiem_Lop">=90 and

"TongDiem_Lop"<=100 and "MaPDG"=PDG;

update Phieudanhgia set "XepLoai"='Tốt' where "TongDiem_Lop">=80 and

"TongDiem_Lop"<=89 and "MaPDG"=PDG;

update Phieudanhgia set "XepLoai"='Khá' where "TongDiem_Lop">=70 and

"TongDiem_Lop"<=79 and "MaPDG"=PDG;

GVHD: VÕ HOÀNG KHANG

Page 53: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

53QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

update Phieudanhgia set "XepLoai"='Trung bình khá' where "TongDiem_Lop">=60 and

"TongDiem_Lop"<=69 and "MaPDG"=PDG;

update Phieudanhgia set "XepLoai"='Trung bình' where "TongDiem_Lop">=50 and

"TongDiem_Lop"<=59 and "MaPDG"=PDG;

update Phieudanhgia set "XepLoai"='Yếu' where "TongDiem_Lop">=30 and

"TongDiem_Lop"<=49 and "MaPDG"=PDG;

update Phieudanhgia set "XepLoai"='Kém' where "TongDiem_Lop">=0 and

"TongDiem_Lop"<=29 or "TongDiem_Lop" is NULL and "MaPDG"=PDG;

end P_CapNhat_TongDiemXLLop;

--Thực thi:

set serveroutput on;

execute P_CapNhat_TongDiemXLLop('PDG00016','TC1a','','5');

execute P_CapNhat_TongDiemXLLop('PDG00016','TC4d','','20');

13. Tạo thủ tục thêm một sinh viên mới với tất cả các giá trị là tham số

truyền vào. Đồng thời sẽ tạo ra 1 tài khoản cho sinh viên khi thêm

sinh viên đó, lấy mật khẩu là ngày sinh theo định dạng dd/mm/yy

CREATE OR REPLACE PROCEDURE P_Them_SV(MaSV Varchar2,HoTen Nvarchar2,

GioiTinh Nvarchar2,NgaySinh Date,NoiSinh Nvarchar2,ChucVu Nvarchar2,MaTo Varchar2)

AS

BEGIN

INSERT INTO

Sinhvien("MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu","MaTo")

VALUES (MaSV,HoTen,GioiTinh,NgaySinh,NoiSinh,ChucVu,MaTo);

INSERT INTO Taikhoan("ID","Password","MaQuyen","TenQuyen")

VALUES(MaSV,TO_CHAR(NgaySinh,'DD')||TO_CHAR(NgaySinh,'MM')||

TO_CHAR(NgaySinh,'YY'),

(SELECT (CASE WHEN "ChucVu" IS NULL THEN 0 WHEN "ChucVu"='Tổ trưởng'

THEN 1 ELSE 2 END)"CV"

FROM Sinhvien WHERE "MaSV"=MaSV),ChucVu);

END P_Them_SV;

--Thực thi:

set serveroutput on;

GVHD: VÕ HOÀNG KHANG

Page 54: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

54QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

execute P_Them_SV('1451020192','Nguyễn T Thanh Bình','Nữ','15/6/1995','Cà Mau','Tổ

trưởng','T410DTHC');

14. Tạo thủ tục sửa thông tin sinh viên với tất cả các giá trị là tham số

truyền vào

CREATE OR REPLACE PROCEDURE P_CapNhat_SV(MaSV Varchar2,HoTen Nvarchar2,

GioiTinh Nvarchar2,NgaySinh Date,NoiSinh Nvarchar2,ChucVu Nvarchar2,MaTo Varchar2)

AS

BEGIN

UPDATE Sinhvien

SET "HoTen"=HoTen,"GioiTinh"=GioiTinh,"NgaySinh"=NgaySinh,

"NoiSinh"=NoiSinh,"ChucVu"=ChucVu,"MaTo"=MaTo

WHERE

"MaSV"=MaSV;

END P_CapNhat_SV;

--Thực thi:

set serveroutput on;

execute P_CapNhat_SV('1451020186','Lê Nhật Tấn','Nam','15/6/1994','An Giang','Tổ

trưởng','T210DTHH');

15. Tạo thủ tục xóa một sinh viên với mã sinh viên là tham số truyền vào

CREATE OR REPLACE PROCEDURE P_Xoa_SV(MaSV VARCHAR2)

AS

BEGIN

DELETE FROM Sinhvien WHERE "MaSV" = MaSV;

END P_Xoa_SV;

--Thực thi:

GVHD: VÕ HOÀNG KHANG

Page 55: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

55QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

set serveroutput on;

execute P_Xoa_SV('1451020186');

16. Liệt những sinh viên có từ X phiếu đánh giá trở lên

CREATE OR REPLACE PROCEDURE P_DS_TuXPDG(X Number)

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen","GioiTinh",T."MaLop"

FROM Sinhvien SV,"TO" T,Phieudanhgia P

WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"

GROUP BY SV."MaSV","HoTen","GioiTinh",T."MaLop"

HAVING COUNT("MaPDG")>=X;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||

sv."MaLop");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_DS_TuXPDG(2);

17. Tạo thủ tục liệt kê chi tiết điểm đánh giá của sinh viên theo loại tiêu

chí với mã sinh viên, học kì và năm học là tham số

CREATE OR REPLACE PROCEDURE P_CT_DiemDG(X Varchar2,Y Varchar2,Z

Varchar2)

AS

CURSOR cur_danhsach is

SELECT "TenLTC" "Loại tiêu chí",SUM("Diem_Lop") "Điểm"

FROM Phieudanhgia P,Ctdg_lop CT,Tieuchi TC,Loaitieuchi LTC

WHERE P."MaPDG"=CT."MaPDG" AND CT."MaTC"=TC."MaTC"

AND TC."MaLTC"=LTC."MaLTC" AND "MaSV"=X

GVHD: VÕ HOÀNG KHANG

Page 56: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

56QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

AND "MaHK"=Y AND "NamHoc"=Z

GROUP BY LTC."MaLTC","TenLTC";

begin

for ltc in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(ltc."Loại tiêu chí" ||', '||ltc."Điểm");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_CT_DiemDG('1051020186','HK2','2013 - 2014');

18. Lấy ra danh sách những sinh viên có hơn X phiếu đánh giá có điểm

rèn luyện không đạt

CREATE OR REPLACE PROCEDURE P_DS_KhongDat(X Number)

AS

CURSOR cur_danhsach is

SELECT SV."MaSV","HoTen","GioiTinh","MaLop","TongDiem_Lop" "Tổng điểm"

FROM "TO" T,Sinhvien SV,Phieudanhgia P

WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV" AND

"TongDiem_Lop"<50

GROUP BY SV."MaSV","HoTen","GioiTinh","MaLop","TongDiem_Lop"

HAVING COUNT("MaPDG")>=X;

begin

for sv in cur_danhsach

loop

DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||

sv."MaLop" ||', '||sv."Tổng điểm");

end loop;

end;

--Thực thi:

set serveroutput on;

execute P_DS_KhongDat(1);

GVHD: VÕ HOÀNG KHANG

Page 57: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

57QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

3.3.3. Tạo các Function

1. Viết hàm tính điểm trung bình tất cả các học kì của sinh viên, với mã

sinh viên là tham số truyền vào

CREATE OR REPLACE FUNCTION AVG_RL(

ma SINHVIEN."MaSV"%TYPE)

RETURN NUMBER

AS

diemtb NUMBER;

BEGIN

SELECT AVG(PHIEUDANHGIA."TongDiem_Lop")

INTO diemtb

FROM PHIEUDANHGIA

WHERE PHIEUDANHGIA."MaSV"=ma;

RETURN diemtb;

EXCEPTION

WHEN no_data_found THEN

RETURN('du lieu khong tim thay');

WHEN OTHERS THEN

RETURN('LOI HAM');

END;

----THỰC THI

set serveroutput on

set verify off

GVHD: VÕ HOÀNG KHANG

Page 58: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

58QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

declare DIEMTB number;

begin

DIEMTB:=AVG_RL('0951020012');

dbms_output.put_line(DIEMTB);

end;

2. Viết hàm cho biết kết quả rèn luyện của sinh viên, với mã sinh viên,

mã học kì, năm học là tham số truyền vào

create or replace FUNCTION KQ_RL

(ma_sv PHIEUDANHGIA."MaSV"%type, ma_hk PHIEUDANHGIA."MaHK"%type,

nam_hoc PHIEUDANHGIA."NamHoc"%type)

return nvarchar2

as

xep_loai nvarchar2 (50);

BEGIN

select PHIEUDANHGIA."XepLoai" into xep_loai FROM PHIEUDANHGIA WHERE

PHIEUDANHGIA."MaSV"= ma_sv and PHIEUDANHGIA."MaHK"=ma_hk and

PHIEUDANHGIA."NamHoc"=nam_hoc;

return xep_loai;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--Thực thi:

set serveroutput on

set verify off

begin

dbms_output.put_line(KQ_RL('0951020012','HK1','2013 - 2014'));

end;

GVHD: VÕ HOÀNG KHANG

Page 59: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

59QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

3. Viết hàm cho biết điểm tối đa của 1 loại tiêu chí với mã loại tiêu chí

là tham số nhập vào

create or replace FUNCTION DIEM_LTC(ma_ltc LOAITIEUCHI."MaLTC"%type)

return number

as

diem number;

BEGIN

select LOAITIEUCHI."DiemToiDa" into diem FROM LOAITIEUCHI WHERE

LOAITIEUCHI."MaLTC"= ma_ltc ;

return diem;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--THỰC THI:

set serveroutput on

set verify off

begin

dbms_output.put_line(DIEM_LTC('LTC01'));

end;

4. Viết hàm tính số phiếu đánh giá của sinh viên, với mã sinh viên là

tham số (Nếu sinh viên này không tồn tại trong phiếu đánh giá thì trả

về 0)

create or replace FUNCTION TINH_PDG

(ma_sv PHIEUDANHGIA."MaSV"%type)

return number

as

soluong number;

BEGIN

select count ("MaPDG") into soluong FROM PHIEUDANHGIA WHERE

PHIEUDANHGIA."MaSV"= ma_sv ;

return soluong;

GVHD: VÕ HOÀNG KHANG

Page 60: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

60QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

-- THỰC THI:

set serveroutput on

set verify off

begin

dbms_output.put_line(TINH_PDG('0951020012'));

end;

5. Viết hàm cho biết thời hạn đánh giá của cấp bậc X (quyền) trong học

kì Y năm học Z

create or replace FUNCTION THOIHAN_DG

(maquyen THOIHANDG."Quyen"%TYPE, ma_hk THOIHANDG."MaHK"%type,

nam_hoc THOIHANDG."NamHoc"%type)

return

nvarchar2

as

thoihan nvarchar2 (50);

thoihan1 nvarchar2 (50);

thoihan2 nvarchar2 (50);

begin

SELECT THOIHANDG."TuNgay" , THOIHANDG."DenNgay" into thoihan1,thoihan2

from THOIHANDG WHERE THOIHANDG."MaHK"= ma_hk and

THOIHANDG."Quyen"=maquyen and THOIHANDG."NamHoc"=nam_hoc;

thoihan:=(thoihan1||'-->'||thoihan2);

return thoihan;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--THỰC THI:

GVHD: VÕ HOÀNG KHANG

Page 61: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

61QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

set serveroutput on

set verify off

begin

dbms_output.put_line(THOIHAN_DG('1','HK2','2013 - 2014'));

end;

6. Viết hàm đếm số lượng kết quả rèn luyện không đạt của khoa X,

trong học kì Y, năm học Z

create or replace FUNCTION TINH_khongdat

(ma_khoa KHOA."MaKhoa"%type, ma_hk PHIEUDANHGIA."MaHK"%type,

nam_hoc PHIEUDANHGIA."NamHoc"%type)

return number

as

soluong number;

BEGIN

select count (PHIEUDANHGIA."MaPDG")into soluong FROM

PHIEUDANHGIA,SINHVIEN,"TO",LOP,KHOA WHERE

PHIEUDANHGIA."MaHK"=ma_hk and PHIEUDANHGIA."NamHoc"=nam_hoc and

KHOA."MaKhoa"=ma_khoa and

KHOA."MaKhoa"=LOP."MaKhoa" and LOP."MaLop"="TO"."MaLop" and

"TO"."MaTo"=SINHVIEN."MaTo" and

SINHVIEN."MaSV"=PHIEUDANHGIA."MaSV" and

PHIEUDANHGIA."TongDiem_Lop"<=50;

return soluong;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--THỰC THI:

GVHD: VÕ HOÀNG KHANG

Page 62: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

62QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

set serveroutput on

set verify off

begin

dbms_output.put_line(TINH_KHONGDAT('CNTT','HK1','2013 - 2014'));

end;

7. Viết hàm cho biết lớp X còn bao nhiêu sinh viên chưa đánh giá rèn

luyện trong học kì Y năm học Z

create or replace FUNCTION TINH_CHUADG

(ma_lop LOP."MaLop"%type, ma_hk PHIEUDANHGIA."MaHK"%type,

nam_hoc PHIEUDANHGIA."NamHoc"%type)

return number

as

soluong number;

BEGIN

select count (SINHVIEN."MaSV")into soluong FROM SINHVIEN,"TO",LOP WHERE

"TO"."MaTo" = SINHVIEN."MaTo"AND "TO"."MaLop" = LOP."MaLop"AND

LOP."MaLop"=ma_lop

AND SINHVIEN."MaSV" NOT IN (SELECT SINHVIEN."MaSV" FROM SINHVIEN,

PHIEUDANHGIA WHERE

SINHVIEN."MaSV"=PHIEUDANHGIA."MaSV" AND PHIEUDANHGIA."MaHK"=ma_hk

and PHIEUDANHGIA."NamHoc"=nam_hoc);

return soluong;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--THỰC THI

set serveroutput on

set verify off

GVHD: VÕ HOÀNG KHANG

Page 63: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

63QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

begin

dbms_output.put_line(TINH_CHUADG('10DTHH','HK1','2013 - 2014'));

end;

8. Tạo hàm cho biết ngày lập của phiếu đánh giá X

create or replace FUNCTION TIM_NL

(MA PHIEUDANHGIA."MaPDG"%TYPE)

return nvarchar2

as

ngay_lap nvarchar2 (50);

BEGIN

SELECT "NgayLap" into ngay_lap FROM PHIEUDANHGIA WHERE

PHIEUDANHGIA."MaPDG"=MA;

return ngay_lap;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--THỰC THI:

set serveroutput on

set verify off

begin

dbms_output.put_line(TIM_NL('PH01’));

end;

9. Cho biết số phiếu đánh giá được lập ra trong ngày X (nếu không có

thì trả về giá trị “0”)

create or replace FUNCTION TINHSOPHIEU_NL

GVHD: VÕ HOÀNG KHANG

Page 64: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

64QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

(NGAY PHIEUDANHGIA."NgayLap"%TYPE)

return number

as

soluong number;

BEGIN

SELECT count("MaPDG") into soluong FROM PHIEUDANHGIA WHERE

TRUNC(PHIEUDANHGIA."NgayLap")=NGAY;

return soluong;

EXCEPTION

WHEN no_data_found then return('du lieu khong tim thay');

WHEN OTHERS THEN RETURN('LOI HAM');

END;

--THỰC THI:

set serveroutput on

set verify off

begin

dbms_output.put_line(TINHSOPHIEU_NL('21/06/2014’);

end;

3.3.4. Tạo các Trigger

1. Năm bắt đầu khóa học nhỏ hơn năm kết thúc khóa học

create or replace TRIGGER TR_namkt

BEFORE INSERT OR UPDATE ON LOP

FOR EACH ROW

DECLARE

ngay LOP."NamKT"%TYPE;

ngay1 KHOAHOC."NamBD"%TYPE;

BEGIN

if

:NEW."NamKT" IS NOT NULL THEN

ngay:=:NEW."NamKT";

GVHD: VÕ HOÀNG KHANG

Page 65: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

65QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

SELECT KHOAHOC."NamBD" INTO ngay1 FROM KHOAHOC WHERE

KHOAHOC."MaKH"=:NEW."MaKH";

if(ngay1>ngay)then

raise_application_error(-20020,'nam bat dau khong duoc lon hon nam kt');

ROLLBACK;

end if;

end if;

end;

2. Số lượng sinh viên của tổ không được lớn hơn sĩ số lớp

create or replace TRIGGER TR_TO

BEFORE INSERT OR UPDATE ON "TO"

FOR EACH ROW

DECLARE

sl "TO"."SoLuong"%TYPE;

ss LOP."SiSo"%TYPE;

BEGIN

if

:NEW."SoLuong" IS NOT NULL THEN

sl:=:NEW."SoLuong";

SELECT lOP."SiSo" INTO ss FROM LOP WHERE LOP."MaLop"=:NEW."MaLop";

if(sl>=ss)then

raise_application_error(-20020,'Số lượng sinh viên tổ không được lớn hơn hoặc bằng sĩ số

của lớp');

ROLLBACK;

end if;

end if;

end;

3. Sĩ số của lớp lớn hơn 0

create or replace TRIGGER TR_SISOKHACKHONG

AFTER INSERT OR UPDATE OF "SiSo" ON LOP

GVHD: VÕ HOÀNG KHANG

Page 66: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

66QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

FOR EACH ROW

WHEN(NEW."SiSo"<=0)

begin

raise_application_error(-20020,'si so khong hop le,si so phai lon hon 0');

ROLLBACK;

end;

4. Số lượng sinh viên của tổ phải lớn hơn 0

create or replace TRIGGER TR_SoluongKHAC0

AFTER INSERT OR UPDATE OF "SoLuong" ON "TO"

FOR EACH ROW

WHEN(NEW."SoLuong"<=0)

begin

raise_application_error(-20020,'so luong khong hop le,so luong phai lon hon 0');

ROLLBACK;

end;

5. Giới tính là “Nam” hoặc “Nữ”

create or replace TRIGGER TR_Gioi

BEFORE INSERT OR UPDATE OF "GioiTinh" ON SINHVIEN

FOR EACH ROw

BEGIN

if :NEW."GioiTinh"!= 'Nam' and :NEW."GioiTinh"!='Nữ'

then raise_application_error(-20020,'Giới Tính chỉ được nhập 2 giá trị là Nam hoặc Nữ');

end if;

end;

6. Ngày sinh phải nhỏ hơn ngày hiện tại

create or replace TRIGGER TR_ngaysinh

AFTER INSERT OR UPDATE OF "NgaySinh" ON SINHVIEN

GVHD: VÕ HOÀNG KHANG

Page 67: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

67QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

FOR EACH ROW

WHEN(NEW."NgaySinh">sysdate )

begin

raise_application_error(-20020,'Ngay sinh phai nho hon ngay hien tai'||sysdate);

ROLLBACK;

end;

7. Điểm tối đa của tiêu chí không lớn hơn điểm tối đa của loại tiêu chí

create or replace TRIGGER TR_tieuchi

BEFORE INSERT OR UPDATE ON TIEUCHI

FOR EACH ROW

DECLARE

tc TIEUCHI."DiemToiDa"%TYPE;

ltc LOAITIEUCHI."DiemToiDa"%TYPE;

BEGIN

if

:NEW."DiemToiDa" IS NOT NULL THEN

tc:=:NEW."DiemToiDa";

SELECT LOAITIEUCHI."DiemToiDa" INTO ltc FROM LOAITIEUCHI WHERE

LOAITIEUCHI."MaLTC"=:NEW."MaLTC";

if(tc>ltc)then

raise_application_error(-20020,'Điểm tối đa của tiêu chí không được lớn hơn điểm tối đa của

loại tiêu chí tương ứng');

ROLLBACK;

end if;

end if;

end;

8. Điểm tối đa của tiêu chí phải lớn hơn 0

create or replace TRIGGER TR_DiemTCkhac0

GVHD: VÕ HOÀNG KHANG

Page 68: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

68QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

AFTER INSERT OR UPDATE OF "DiemToiDa" ON TIEUCHI

FOR EACH ROW

WHEN(NEW."DiemToiDa"<=0)

begin

raise_application_error(-20020,'Điểm tiêu chí không hợp lê, điểm phải lớn hơn 0');

ROLLBACK;

end;

9. Điểm tối đa của loại tiêu chí phải lớn hơn 0

create or replace TRIGGER TR_DiemLTCkhac0

AFTER INSERT OR UPDATE OF "DiemToiDa" ON LOAITIEUCHI

FOR EACH ROW

WHEN(NEW."DiemToiDa"<=0)

begin

raise_application_error(-20020,'Điểm loại tiêu chí không hợp lê, điểm phải lớn hơn 0');

ROLLBACK;

end;

10. Ngày lập phiếu đánh giá là ngày hiện tại

create or replace TRIGGER TR_NGAYLAP

BEFORE INSERT or UPDATE ON PHIEUDANHGIA

FOR EACH ROW

BEGIN

:NEW."NgayLap":= sysdate;

end;

11. Mỗi sinh viên chỉ có 1 phiếu đánh giá trong 1 học kì

create or replace TRIGGER TR_PDGO1

BEFORE INSERT on PHIEUDANHGIA

FOR EACH ROW

DECLARE

GVHD: VÕ HOÀNG KHANG

Page 69: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

69QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

CURSOR TG_TG IS

SELECT PHIEUDANHGIA."MaSV",

PHIEUDANHGIA."MaHK",PHIEUDANHGIA."NamHoc" FROM PHIEUDANHGIA;

ma_sv PHIEUDANHGIA."MaSV"%type;

ma_hk PHIEUDANHGIA."MaHK"%type;

nam_hoc PHIEUDANHGIA."NamHoc"%type;

begin

OPEN TG_TG;

LOOP

FETCH TG_TG into ma_sv, ma_hk, nam_hoc;

EXIT when TG_TG%NOTFOUND;

if :NEW."MaSV"=ma_sv and :NEW."MaHK"=ma_hk and :NEW."NamHoc"=nam_hoc

then

raise_application_error(-20020,'khong hop le');

ROLLBACK;

end if;

end loop;

close TG_TG;

end;

12. Mỗi tổ chỉ có 1 tổ trưởng, mỗi lớp chỉ có 1 lớp trưởng

--Mỗi tổ chỉ có 1 tổ trưởng

CREATE OR REPLACE TRIGGER TR_ToTruong

AFTER INSERT OR UPDATE ON Sinhvien

FOR EACH ROW

DECLARE l_exists Number;

BEGIN

SELECT COUNT(*) INTO l_exists

FROM SinhVien

WHERE "ChucVu"='Tổ trưởng'

GROUP BY "MaTo"

HAVING COUNT(*)=1;

GVHD: VÕ HOÀNG KHANG

Page 70: Nhom 12 - QL Danh Gia Diem Ren Luyen SV

70QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN

IF l_exists<>1 THEN

BEGIN

raise_application_error(-20020,'Mỗi tổ chỉ có 1 tổ trưởng');

ROLLBACK;

END;

END IF;

END;

--Mỗi lớp chỉ có 1 lớp trưởng

CREATE OR REPLACE TRIGGER TR_LopTruong

AFTER INSERT OR UPDATE ON Sinhvien

FOR EACH ROW

DECLARE l_exists Number;

BEGIN

SELECT COUNT(*) INTO l_exists

FROM "TO" T,SinhVien SV

WHERE T."MaTo"=SV."MaTo" AND "ChucVu"='Lớp trưởng'

GROUP BY "MaLop"

HAVING COUNT(*)=1;

IF l_exists<>1 THEN

BEGIN

raise_application_error(-20020,'Mỗi lớp chỉ có 1 lớp trưởng');

ROLLBACK;

END;

END IF;

END;

CHƯƠNG 4 - ỨNG DỤNG

GVHD: VÕ HOÀNG KHANG