博客地址:http://blog.csdn.net/shuxiao9058
原始作者:季亚
学生(学号、专业号码、姓名、性别、生日、密码)
教师(教师工号、系号码、姓名、性别、生日、密码、职称)
管理员(管理员工号、姓名、性别、生日、密码、权限标志)
专业(专业号码、系号码、专业名、辅导员、联系方式、专业介绍)
院系(系号码、系名称、系主任、联系方式、系介绍)
课程(课程号码、学时、学分、课程介绍)
选课信息( 学号、课程号码、教师工号、成绩)(1)学生信息表
列名 |
说明 |
数据类型 |
约束 |
StudentNum |
学号 |
char(10) |
主码 |
MajorNum |
专业号码 |
char(10) |
not null,引用tb_major的外码 |
StudentName |
姓名 |
varchar(10) |
Not null |
StudentSex |
性别 |
char(2) |
not null,取“男”或“女” |
StudentBirthday |
生日 |
datetime |
not null |
StudentPassword |
密码 |
varchar(20) |
not null, |
(2)教师信息表
列名 |
说明 |
数据类型 |
约束 |
TeacherNum |
教师工号 |
char(10) |
主码 |
DeptNum |
院系号码 |
char(10) |
not null,引用tb_dept的外码 |
TeacherName |
姓名 |
varchar(10) |
not null |
TeacherSex |
性别 |
char(2) |
not null,取“男”或“女” |
TeacherBirthday |
生日 |
datetime |
not null |
TeacherTitle |
职称 |
varchar(20) |
|
(3)管理员信息表
列名 |
说明 |
数据类型 |
约束 |
ManagerNum |
管理员工号 |
char(10) |
主码 |
ManagerName |
姓名 |
varchar(10) |
not null |
ManagerSex |
性别 |
char(2) |
not null,取“男”或“女” |
ManagerBirthday |
生日 |
datetime |
not null |
(4)专业信息表
列名 |
说明 |
数据类型 |
约束 |
MajorNum |
专业号码 |
char(10) |
主码 |
DeptNum |
系号码 |
char(10) |
not null,引用tb_dept的外码 |
MajorName |
专业名 |
varchar(20) |
not nul |
MajorAssistant |
辅导员 |
varchar(10) |
not null |
MajorTel |
联系方式 |
varchar(15) |
not null |
(5)院系信息表
列名 |
说明 |
数据类型 |
约束 |
DeptNum |
系号码 |
char(10) |
主码 |
DeptName |
系名称 |
varchar(20) |
not null |
DeptChairman |
系主任 |
varchar(10) |
not null |
DeptTel |
联系方式 |
varchar(15) |
not null |
DeptDesc |
系介绍 |
text |
not null |
(6)课程信息表
列名 |
说明 |
数据类型 |
约束 |
CourseNum |
课程号码 |
char(10) |
主码 |
CourseName |
课程名 |
varchar(20) |
not null |
CourseCredit |
学分 |
float |
not null |
CourseClass |
学时 |
smallint |
not null |
CourseDesc |
课程介绍 |
text |
not null |
(7)选课信息表
列名 |
说明 |
数据类型 |
约束 |
StuCourseID |
选课编号 |
int |
主码,自动递增 |
StudentNum |
学号 |
char(10) |
not null,引用tb_student的外码 |
CourseNum |
课程号码 |
char(10) |
not null,引用tb_course的外码 |
TeacherNum |
教师工号 |
char(10) |
not null,引用tb_student的外码 |
Grade |
成绩 |
smallint |
|
(8)控制设置表
列名 |
说明 |
数据类型 |
约束 |
IfTakeCourse |
选课控制 |
char(1) |
not null,取“0”或“1” |
IfInputGrade |
成绩录入控制 |
char(1) |
not null,取“0”或“1” |
-
CREATE
TABLE tb_dept(
-
DeptNum
char(
10)
NOT
NULL PRIMARY
KEY,
-
DeptName
varchar(
20)
NOT
NULL,
-
DeptChairman
varchar(
10)
NOT
NULL,
-
DeptTel
varchar(
15)
NOT
NULL,
-
DeptDesc
text
NOT
NULL,
-
)
(2)tb_major专业信息表
-
CREATE
TABLE tb_major(
-
MajorNum
char(
10)
NOT
NULL PRIMARY
KEY,
-
DeptNum
char(
10)
NOT
NULL,
-
MajorName
varchar(
20)
NOT
NULL,
-
MajorAssistant
varchar(
10)
NOT
NULL,
-
MajorTel
varchar(
15)
NOT
NULL,
-
FOREIGN
KEY (DeptNum)
REFERENCES tb_dept(DeptNum)
-
)
(3)tb_student学生信息表
-
CREATE
TABLE tb_student(
-
StudentNum
char(
10)
NOT
NULL PRIMARY
KEY,
-
MajorNum
char(
10)
NOT
NULL,
-
StudentName
varchar(
10)
NULL,
-
StudentSex
char(
2)
NOT
NULL,
-
StudentBirthday datetime
NOT
NULL,
-
StudentPassword
varchar(
20)
NOT
NULL,
-
FOREIGN
KEY (MajorNum)
REFERENCES tb_major(MajorNum)
-
)
(4)tb_teacher教师信息表
-
CREATE
TABLE tb_teacher(
-
TeacherNum
char(
10)
NOT
NULL PRIMARY
KEY,
-
DeptNum
char(
10)
NOT
NULL,
-
TeacherName
varchar(
10)
NOT
NULL,
-
TeacherSex
char(
2)
NOT
NULL,
-
TeacherBirthday datetime
NOT
NULL,
-
TeacherTitle
varchar(
20)
NULL,
-
FOREIGN
KEY (DeptNum)
REFERENCES tb_dept(DeptNum)
-
)
(5)tb_manager管理员信息表
-
CREATE
TABLE tb_manager(
-
ManagerNum
char(
10)
NOT
NULL PRIMARY
KEY,
-
ManagerName
varchar(
10)
NOT
NULL,
-
ManagerSex
char(
2)
NOT
NULL,
-
ManagerBirthdate datetime
NOT
NULL,
-
ManagerRights
int
NOT
NULL
-
)
(6)tb_course课程信息表
-
CREATE
TABLE tb_course(
-
CourseNum
varchar(
10)
NOT
NULL PRIMARY
KEY,
-
CourseName
varchar(
20)
NOT
NULL,
-
CourseCredit
float
NOT
NULL,
-
CourseClass
smallint
NOT
NULL,
-
CourseDesc
text
NOT
NULL,
-
)
(7)tb_stucourse学生选课信息表
-
CREATE
TABLE tb_stucourse(
-
StudentNum
char(
10)
NOT
NULL,
-
CourseNum
char(
10)
NOT
NULL,
-
TeacherNum
char(
10)
NOT
NULL,
-
Grade
smallint
NULL,
-
FOREIGN
KEY (StudentNum)
REFERENCES tb_student(StudentNum),
-
FOREIGN
KEY (CourseNum)
REFERENCES tb_Course(CourseNum),
-
FOREIGN
KEY (TeacherNum)
REFERENCES tb_teacher(TeacherNum),
-
)
(8)tb_control控制设置表
-
CREATE
TABLE tb_control(
-
IfTakeCourse
char(
1)
NOT
NULL
check(IfTakeCourse
in (
'0',
'1')),
-
IfInputGrade
char(
1)
NOT
NULL
check(IfInputGrade
in (
'0',
'1')),
-
)
-
CREATE
VIEW vi_grade
-
AS
-
SELECT tb_stucourse.StudentNum,StudentName,CourseName
-
,CourseCredit,TeacherName,Grade
-
FROM tb_stucourse,tb_student,tb_course,tb_teacher
-
where tb_stucourse.StudentNum=tb_student.StudentNum
and
-
tb_stucourse.TeacherNum=tb_teacher.TeacherNum
and
-
tb_stucourse.CourseNum=tb_course.CourseNum
and
-
Grade
is
not
null
(2)建立专业学生信息视图vi_major,从学生、专业表中选择学生中的专业号码与专业表中专业号码相等的记录,其关键代码如下所示:
-
CREATE
VIEW vi_major
-
AS
-
SELECT tb_major.MajorName,StudentNum,StudentName,StudentSex,StudentBirthday
-
FROM tb_major,tb_student
-
WHERE tb_major.MajorNum=tb_student.MajorNum
-
CREATE
TRIGGER tri_adddept
ON tb_dept
-
FOR
INSERT,
UPDATE
-
AS
-
IF
-
(
SELECT
COUNT(*)
FROM tb_dept,inserted
-
WHERE tb_dept.DeptNum=inserted.DeptNum)>
0
-
BEGIN
-
PRINT
'院系号码产生冲突,请核对后重试!'
-
ROLLBACK
-
END
(2)建立学生添加专业触发器tb_major,当专业信息中的院系号不对或者该表中已存在所对应专业号码的专业时,系统给与错误提示并回滚,其关键代码如下所示:
-
CREATE
TRIGGER tri_addmajor
ON tb_major
-
FOR
INSERT,
UPDATE
-
AS
-
IF(
SELECT
COUNT(*)
FROM tb_dept,inserted
-
WHERE tb_dept.DeptNum=inserted.DeptNum)=
0
-
BEGIN
-
PRINT
'未找到该专业的院系信息,请添加相应院系后重试!'
-
ROLLBACK
-
END
-
ELSE
IF
-
(
SELECT
COUNT(*)
FROM tb_major,inserted
-
WHERE tb_major.MajorNum=inserted.MajorNum)>
0
-
BEGIN
-
PRINT
'院系号码产生冲突,请核对后重试!'
-
ROLLBACK
-
END
(3)建立添加学生触发器tri_addstudent,当学生信息中的专业号不对或者系统中已存在所对应学号的学生时,系统给与错误提示并回滚,其关键代码如下所示:
-
CREATE
TRIGGER tri_addstudent
ON tb_student
-
FOR
INSERT,
UPDATE
-
AS
-
IF(
SELECT
COUNT(*)
FROM tb_major,inserted
-
WHERE tb_major.MajorNum=inserted.MajorNum)=
0
-
BEGIN
-
PRINT
'未找到该学生的专业信息,请添加相应专业后重试!'
-
ROLLBACK
-
END
-
ELSE
IF
-
(
SELECT
COUNT(*)
FROM tb_student,inserted
-
WHERE tb_student.StudentNum=inserted.StudentNum)>
0
-
BEGIN
-
PRINT
'学号产生冲突,请核对后重试!'
-
ROLLBACK
-
END
(4)建立学生选课触发器tri_takecourse,课程选课人数超过40个或者对应学生选课门数超过5门或者当前时间不是选课时间段时,系统给与错误提示并回滚,其关键代码如下所示:
-
CREATE
TRIGGER tri_takecourse
ON tb_stucourse
-
FOR
INSERT,
UPDATE
-
AS
-
IF(
SELECT
COUNT(*)
FROM tb_stucourse,inserted
-
WHERE tb_stucourse.CourseNum=inserted.CourseNum)>
40
-
BEGIN
-
PRINT
'所对应课程选课人数不能超过40个!'
-
ROLLBACK
-
END
-
ELSE
IF
-
(
SELECT
COUNT(*)
FROM tb_student,inserted
-
WHERE tb_student.StudentNum=inserted.StudentNum)>
5
-
BEGIN
-
PRINT
'对应学生的选课不能超过5门!'
-
ROLLBACK
-
END
-
ELSE
IF
-
(
SELECT IfTakeCourse
FROM tb_control)=
'0'
-
BEGIN
-
PRINT
'当前不是选课时间段!'
-
ROLLBACK
-
END
-
CREATE PROC proc_getcourse
-
@StudentNum
char(
10)
OUT,
-
@StudentName
char(
10)
OUT,
-
@CourseName
varchar(
20)
OUT,
-
@CourseCredit
float
OUT,
-
@TeacherName
char(
10)
OUT
-
AS
-
SELECT @StudentNum=tb_student.StudentNum
-
,@StudentName=tb_student.StudentName
-
, @CourseName=tb_course.CourseName
-
,@CourseCredit=tb_course.CourseCredit
-
, @TeacherName=tb_teacher.TeacherName
-
FROM tb_stucourse,tb_course,tb_student,tb_teacher
-
WHERE tb_stucourse.StudentNum=tb_student.StudentNum
AND
-
tb_stucourse.CourseNum=tb_course.CourseNum
AND
-
tb_stucourse.TeacherNum=tb_teacher.TeacherNum
(2)建立查询教师课程存储过程proc_teachercourse,其作用为查询指定教师所有课程的选课记录,其关键代码如下所示:
-
CREATE PROC proc_teachercourse
-
@TeacherNum
char(
10),
-
@StudentNum
char(
10)
OUT,
-
@StudentName
char(
10)
OUT,
-
@CourseName
varchar(
20)
OUT,
-
@CourseCredit
float
OUT,
-
@TeacherName
char(
10)
OUT
-
AS
-
SELECT @StudentNum=tb_student.StudentNum
-
,@StudentName=tb_student.StudentName
-
, @CourseName=tb_course.CourseName
-
,@CourseCredit=tb_course.CourseCredit
-
, @TeacherName=tb_teacher.TeacherName
-
FROM tb_stucourse,tb_course,tb_student,tb_teacher
-
WHERE tb_stucourse.StudentNum=tb_student.StudentNum
AND
-
tb_stucourse.CourseNum=tb_course.CourseNum
AND
-
tb_stucourse.TeacherNum=tb_teacher.TeacherNum
and
-
tb_teacher.TeacherNum=@TeacherNum
(3)建立查询学生课程存储过程proc_studentcourse,其作用为查询指定学生所有课程的选课记录,其关键代码如下所示:
-
CREATE PROC proc_studentcourse
-
@StudentNum
char(
10),
-
@StudentName
char(
10)
OUT,
-
@CourseName
varchar(
20)
OUT,
-
@CourseCredit
float
OUT,
-
@TeacherName
char(
10)
OUT
-
AS
-
SELECT @StudentNum=tb_student.StudentNum
-
,@StudentName=tb_student.StudentName
-
, @CourseName=tb_course.CourseName
-
,@CourseCredit=tb_course.CourseCredit
-
, @TeacherName=tb_teacher.TeacherName
-
FROM tb_stucourse,tb_course,tb_student,tb_teacher
-
WHERE tb_stucourse.StudentNum=tb_student.StudentNum
AND
-
tb_stucourse.CourseNum=tb_course.CourseNum
AND
-
tb_stucourse.TeacherNum=tb_teacher.TeacherNum
and
-
tb_student.StudentNum=@StudentNum
[2] 白尚旺,党伟超.PowerDesign软件工程技术[M].北京:电子工业出版社.2004.8.
备注:以前做的数据库系统大作业,勿喷!!!