1 教学信息数据库设计(部分),毕业设计学生还应画出这些表或库之间的关系图 (一)专业表 列名 专业代码 专业简称 专业名称 层次 专业性质 定义 SmallInt Char(20) Char(40) Char(2) Chr(4) 列名 学制 专业类别 校区 定义 TinyInt Char(6) Char(10) 列名 所属系科 所属系科代码 所属系科性质 开办时间 有效标志 定义 Char(14) SmallInt Char(4) DataTime Char(1) 1.主键:专业代码 2.约束 (1)专业代码 Between 1001 AND 9999 AND 专业代码 % 1000>0 AND 专业代码/1000=所属系科代码/100,其最高位为所属系科的部门代码,专业编号的范围为001~999 (同一校区的不同系科不应有相同的专业,因而本代码中不包括所属系科的部门代码) (2)“专业简称”使用唯一性约束 (3)(层次=‘本’ AND 学制=4) OR (层次=’专’ AND (学制=2 OR 学制=3)) OR (层次=’硕’ AND 学制=3) OR (层次=’博’ AND 学制=2) (4)专业性质 IN (‘普通’, ’高职’,’夜大’,’成人’) (5)专业类别 IN (‘经济学’, ’工学’,’理学’) (6)所属系科性质=‘系科’,仅有系科才能开办专业,才有班和学生 (7)有效标志 IN (‘Y’,’N’) (8)(层次=’本’ and 专业代码<1500) or (层次=’专’ and 专业代码>=1500) 3.关系 (1)主键为“年级”表中“所属专业”的外键 4.触发器 (1)保证“校区”、“所属系科”、“所属系科代码”、“所属系科性质”来自“二级部门”表的唯一性约束列(四列) (2)学制*2>=教学计划.开课学期 (二)年级表 列名 专业 年级 第一学年 第二学年 第三学年 定义 SmallInt SmallInt Decimal(3,1) Decimal(3,1) Decimal(3,1) 列名 第四学年 第五学年 总学分 公共 公共选修 定义 Decimal(3,1) Decimal(3,1) Decimal(4,1) Decimal(4,1) Decimal(4,1) 列名 专业基础 专业基础选修 专业方向 专业方向选修 核心必修 定义 Decimal(4,1) Decimal(4,1) Decimal(4,1) Decimal(4,1) Decimal(4,1) 列名 必修 选修 有效标志 定义 Decimal(4,1) Decimal(4,1) Char(1) 1.主键:专业+年级 2.约束 (1)年级 BETWEEN 1990 AND 9999 2 (2)第一学年+第二学年+第三学年+第四学年+第五学年=总学分 (3)公共+公共选修+专业基础+专业基础选修+专业方向+专业方向选修=总学分 (4)核心必修+必修+选修=总学分 (5)以上学分不允许为空,总学分缺省值为6,其他学分缺省值适当即可 (5)有效标志 IN (‘Y’,’N’) 3.关系 (1)主键(专业+年级)为“班表”表中相应列的外键 (2)主键(专业+年级)为“教学计划”表中相应列的外键 (3)“专业”来自“专业”表的主键“专业代码” (三)班表 列名 所属专业 年级 班序号 班简名 班全名 定义 SmallInt SmallInt TinyInt Char(15) Char(40) 列名 所在地点 有效标志 定义 Char(8) Char(1) 1.主键:所属专业+年级+班序号 2.约束 (1)班序号 BETWEEN 1 AND 20 (2)班简名使用唯一性约束 (3)班全名使用唯一性约束 (4)所在地点 IN (‘本部’,’绵阳校区’,’龙泉校区’,’礼仪职中’,’电子高专’,’成都航院’) (5)有效标志 IN (‘Y’,’N’) 3.关系 (1)主键为“学生名单”表中相应列的外键 (2)主键为“异常学生名单”表中相应列的外键 (3)主键为“授课安排”表中相应列的外键 (4)“所属专业”、“年级”来自“年级”表的主键(二列) (六)学生表 列名 专业 年级 班序号 学号 姓名 定义 SmallInt SmallInt TinyInt Char(10) Char(8) 列名 性别 民族 政治面貌 定义 Char(2) Char(8) Char(8) 列名 培养性质 考生类别 生源地 籍贯 家庭住址 定义 Char(4) Char(4) Char(12) Char(12) VarChar(40) 列名 出生日期 身份证号码 照片 进校时间 离校时间 定义 DateTime Char(18) Image DateTime DateTime 列名 离校方式 毕业证书编号 发证时间 学位种类 学位证书编号 定义 Char(4) Char( 17 ) DateTime Char(6) Char(14) 列名 来源 定义 Char(6) 3 1.主键:学号。 第1~4位为入学年份,第5~7位为专业代码,第8~10位为顺序号;学生的学号禁止改变,无论其升级或降级。对于不同校区的相同专业,连续编号。 2.约束 (1)学号 LIKE ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’ (2)性别 IN (‘男’,’女’) (3)政治面貌 IN (‘中共党员’,’共青团员’,’群众’) (4)培养性质 IN (‘统招’,’并轨’,’定向’,’委培’,’高职’) (5)考生类别 IN (‘城应’,’城往’,’农应’,’农往’) (6)离校方式 IN (‘毕业’,’结业’,’开除’,’转出’,’退学’ ,’休学’ ,’在校’),将为空的统一修改为‘在校’ (3)离校时间的定义:初值为进校时间。以上操作除‘在校’外(此时离校时间无意义),每发生一件事时,均应修改。 (4)进校时间的定义:学生刚进校、转入或从外校专升本时,应作修改,此时的离校时间=进校时间。 (8)(离校方式 IN (‘毕业’,’结业’) AND 毕业证书编号 IS NOT NULL AND 发证时间 IS NOT NULL) OR (NOT(离校方式 IN (‘毕业’,’结业’)) AND 毕业证书编号 IS NULL AND 发证时间 IS NULL) (9)(学位种类 IS NULL AND 学位证书编号 IS NULL) OR (学位种类 IS NOT NULL AND 学位证书编号 IS NOT NULL AND 离校方式=’毕业’) (10)学位种类 IN (‘工’,’理’,’管理’,’文’,’经济’) (11)来源 IN (‘统招’,’转入’,’特招’) (8)约束:姓名 like ‘[^ ]%’, (身份证号码 like ‘[0-9][0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] ‘) or (身份证号码 like ‘[0-9][0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9a-zA-Z]‘) 3.关系 (1)主键为“成绩”表中“学号”的外键 (2)主键为“异常成绩”表中“学号”的外键 (3)主键为“异常学生”表中“学号”的外键 (4)主键为“毕业设计”表中“学号”的外键 (5)“专业”、“年级”、“班序号”来自“班”表的主键(三列) (6)“民族”来自“民族”表的主键 (7)“生源地”来自“行政区划”表的主键 (8)“籍贯”来自“行政区划”表的主键 4.触发器 (1)在“用户..学生”表中插入、修改时,保证其“学号”来自于本表的“学号”,但本表的“学号”修改或删除时,并不更新“用户..学生”表;系统将专门为此提供存储 4 过程,保证本表中的“姓名”与“用户..学生”表同步,即在“用户..学生”表中新增或删除----并不更新。 (2)在“学生工作.奖学金加分分值”表中插入、修改时,保证其“学号”来自于本表的“学号”,但本表的“学号”修改或删除时,并不更新“学生工作.奖学金加分分值”表。 (八)课程表 列名 课程代码 课程名称 课程种类 类型 SmallInt Char(20) Char(6) 1.主键:课程代码 2.约束 (1)课程代码 Between 1001 AND 9999 (2)“课程名称”使用唯一性约束,注意:英语、高等数学、体育等开设多学期的课程,其在每学期的课程名称应该不一样,相应的代码也不一样 (3)课程种类 IN (‘计算机’,’英语’,’数学’,’电子’,’物理’,’气象’,’会计’,’体育’,’文化’,’实践’,’两课’) 3.关系 (1)主键为“教学计划”表中“课程代码”的外键,引入本表是为了规范课程名称 (九)教学计划表 列名 专业 年级 课程代码 学分 教考分离 定义 SmallInt SmallInt SmallInt Decimal(2,1) Char(1) 列名 课程类别 课程性质 教学形式 考试类别 定义 Char(12) Char(4) Char(4) Char(4) 列名 总学时 讲课学时 上机学时 实验学时 其他学时 定义 TinyInt TinyInt TinyInt TinyInt TinyInt 列名 周学时 分值比例 课程系数 作业系数 开课学期 定义 TinyInt TinyInt Decimal(3,2) Decimal(3,2) TinyInt 列名 辅修标志 推荐教材 教学大纲 定义 Char(1) Char(50) Text 1.主键:专业+年级+课程代码 2.约束 (1)学分<=9 AND 学分>0 (2)教考分离 IN (‘Y’,’N’),缺省为’N’ (3)(课程性质 IN (‘核心’,’必修’) and 课程类别 IN (‘公共’,’专业基础’,’专业方向’)) or (课程性质=’选修’ and 课程类别 IN (’公共选修’,’专业基础选修’,’专业方向选修’)) (4)教学形式 IN (‘讲授’,’实习’,’设计’,’自修’,’实验’ ,’上机’) (5)(课程性质=’核心’ and 考试类别=’考试’) or (课程性质=’选修’ and 考试类别=’考查’) or (课程性质=’必修’ and 考试类别 in (‘考试’,’考查’)) (6)(总学时=讲课学时+上机学时+实验学时+其他学时) AND (总学时<=180) (7)周学时 Between 1 AND 9 5 (8)分值比例 IN (20,30,70,80) (9)课程系数 Between 0.5 AND 2 (10)作业系数 <0.5 (11)开课学期 Between 1 AND 10 (12)辅修标志 IN (‘Y’,’N’) (13)“专业”、“年级”、“课程代码”、“开课学期”使用唯一约束 3.关系 (1)主键为“授课安排”表中“相应列的外键 (2)唯一约束(专业、年级、课程代码、开课学期)为“授课安排”表中相应列的外键 (3)“专业”、“年级”来自“年级”表的主键(二列) (4)“课程代码”来自“课程”表的主键 (十)授课安排表 列名 专业 年级 课程代码 班序号 重修计数 类型 SmallInt SmallInt SmallInt TinyInt TinyInt 列名 主讲教师 教学形式 上报成绩 实践地点 学时数 类型 Char(8) Char(4) Char(1) Int TinyInt 列名 周学时 开始周次 结束周次 计划开课学期 开课时间 类型 TinyInt TinyInt TinyInt TinyInt SmallInt 列名 本班选修人数 合班专业 合班年级 合班班序号 重复系数 类型 SmallInt SmallInt SmallInt TinyInt Decimal(3,2) 列名 其他系数 单独计酬 工作量 结构工资 备注 类型 Decimal(7,2) Char(1) Decimal(9,2) Decimal(9,2) Char(10) 列名 识别码 类型 Char(12) 1.主键:专业+年级+课程代码+班序号+重修计数 某学期某班同一门课程可能有多条记录,例如下表所示: 专业年级班 课 程 重修计数 主讲教师 教学形式 上报成绩 通本19981 微机原理及接口 0 王大可 讲授 Y 通本19981 微机原理及接口 1 王大可 实验 N 通本19981 微机原理及接口 2 张海防 讲授 N 通本19981 微机原理及接口 3 冯一阵 上机 N 通本19981 微机原理及接口 4 马可波 实验 N 通本19981 微机原理及接口 5 李明天 实验 N 正常授课时,重修计数<20,此时其中上报成绩的重修计数为0,该班该课程的其他教学形式的重修计数则大于0小于20。 学生重修分两种情况,单独开课重修和跟班重修。跟班重修不需要特殊处理,因为对该班而言是正常修课,只是多了若干名学生而已。单独开课重修时,必须依附于某专业、年级的某班,具体由教务处决定,此时其中上报成绩的重修计数为20K(K=1,..12),其他教学形式的重修计数则大于20K、小于20K+20。