教学管理信息系统——教师数据库设计.docx
教学管理信息系统教师数据库设计 目录 1需求设计 (2) 1.1需求描述 (2) 1.2需求分析 (2) 1.2.1目标用户 (2) 1.2.2平台的选择 (2) 1.2.3逻辑要求 (2) 1.2.4定义用例 (3) 2实现设计 (3) 2.1数据库设计 (3) 2.1.1概念设计 (3) 2.1.2逻辑设计 (5) 2.1.3物理实现 (5) 2.1.3.1生成建库脚本 (6) 3代码实现 (10) 4程序截图 (12) 5总结与体会 (15) 教学管理信息系统教师数据库设计 1需求设计 1.1 需求描述 教师信息包括教工号、姓名、出生日期、性别、所属院校、职称等,还包括与课程关联的授课资格和授课经历等。并且,该应用还可以显示出本学院课程信息列表。类似教师信息列表,该列表可按课程名、课程修读次序(每门课可能有先修课程)等字段排序、分组与查找。课程信息包括课程编号、课程名、描述、先修课、学分等,还包括拥有该课程授课资格和授课经历的教师信息。教务人员可以按教师和课程两条主线浏览与查询所有与教师相关的信息,学院、职称、课程名、授课年份、证件信息等字段均存在超链,以供快速检索同类的信息。教务人员还可以对教师、课程、主讲资格、授课经历等信息进行简单的新建、修改及删除操作。 1.2 需求分析 1.2.1目标用户 教务管理人员:快速查询教师信息。 1.2.2平台的选择 选择windows平台,用Microsoft SQL Server 2022进行数据库开发。 1.2.3逻辑要求 假设一个层级为一个窗口,用户对应用提出的业务逻辑(处理过程)要求如下: 教师列表>教师基本信息、教师授课资格和授课经历>相关链接 课程列表>课程基本信息、课程授课资格和授课经历>相关链接 1.2.4定义用例 用例图如图1。 图1 用例图 2实现设计 2.1 数据库设计 2.1.1概念设计 题目要求:“大学有多个学院,每个学院有多名教师(教授,讲师,等)。每一门课的主讲教师都应提前获得该课的主讲资格证,一个教师能具有多门课程的主讲资格证;一门课程的主讲资格证也可能颁发给多名教师。一个教师可能已主讲过多门课,或多次主讲同一门课。” 按照题目要求,结合实际应用,设计应用所涉及的实体及实体间关系的模型,用ER图表示的概念模型如下: 如图所示,所识别出的实体包括教师,课程,授课资质,授课经历等4个实体。以教师实体为例,在本应用域中,一个教师包含教师编号,姓名,出生日期,性别,所属学院,职称等属性;实体课程有课程号、课程名、先修课、学分、描述等5个属性;实体讲课经历与实体教师和实体课程相关联,其有属性教师编号、课程号、授课年份等;实体主讲资格证夜雨实体教师和实体课程相关联,其有属性证件编号、教师编号、课程编号、有效截止日期等。其中一个教师可以教授多门课程,一个课程也可以由多个教师教授,一个教师有零到多个主讲资格证,有零到多个授课经历,而每种授课资质和每种授课经历又与一门课程和一个教师相关联。此外,特别地,一门课程有零到多门前导课程,反过来,一门前导课程有一到多门后继课程。 设计数据库使用ER图这一概念不是必须的;然而使用概念和工具,能使大脑中的构思清晰、无误地展现,并被自动处理。作为达到数据库设计的最终目的设计出高效、高质量的数据库模式所采用的手段,ER图这一概念模型中的实体最后就成为了一张张的表,实体属性成了表属性,对属性的约束成了表属性中的字段类型及非空唯一等约束,实体中的非空唯一标识属性(组)则成了表的主码;实体之间的联系,成为表与表之间的外码参照;一对多还是零对多,对应到物理设计中被参照的字段可否为空;最后,为了提高海量数据的检索效率, 可以在主码和外码上等处建立索引。 2.1.2逻辑设计 根据概念设计阶段对数据库概念模型的设计,构造合适的关系数据路模式。由ER图可知,此次设计共建了4张表:教师表、课程表、讲课经历表、主讲资格证表。 对于教师表,其属性有教师编号,姓名,出生日期,性别,所属学院,职称等;其主要的约束有:教师编号设置为主码,姓名非空,其余的属性值均为基本信息。 对于课程表,其属性有课程号、课程名、先修课、学分、描述等;其主要约束有:课程号设置为主码,课程名、学分设置为非空,先修课可有可无。 对于讲课经历表,其属性有教师编号、课程号、授课年份等;其主要约束有:教师编号为引用教师表主码教师编号的外码,课程号为引用课程表主码课程号的外码,教师编号和课程号一起组成讲课经历表的主码,授课年份非空。 对于主讲资格证表,其主要的属性有属性证件编号、教师编号、课程编号、有效截止日期等,其中证件编号设置为主码,其中教师编号为引用教师表主码教师编号的外码,课程编号为引用课程表主码课程编号的外码,有效截止日期非空。 根据应用情况,查表需求,设计了多表连接的视图,方便更快的查找信息。 2.1.3物理实现 实现后各表间的联系如下图,并给出了部分视图的图表显示。 2.1. 3.1生成建库脚本 在Microsoft SQL Server 2022中构建数据库的的相关信息后,生成的脚本如 下: 1USEtest 2GO 3/* Object: Table dbo.课程 Script Date: 07/03/2022 02:02:30 */ 4SET ANSI_NULLS ON 5GO 6SET QUOTED_IDENTIFIER ON 7GO 8SET ANSI_PADDING ON 9GO 10CREATE TABLEdbo.课程( 11课程号char(4)NOT NULL, 12课程名char(20)NOT NULL, 13先修课char(4)NULL, 14学分smallintNULL, 15描述char(30)NULL, 16PRIMARY KEY CLUSTERED 17( 18课程号ASC 19)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ONPRIMARY 20)ONPRIMARY 21GO 22SET ANSI_PADDING OFF 23GO 24/* Object: Table dbo.教师 Script Date: 07/03/2022 02:02:30 */ 25SET ANSI_NULLS ON 26GO 27SET QUOTED_IDENTIFIER ON 28GO 29SET ANSI_PADDING ON 30GO 31CREATE TABLEdbo.教师( 32编号char(4)NOT NULL, 33姓名char(10)NOT NULL, 34性别char(2)NULL, 35出生日期dateNULL, 36所属学院char(10)NULL, 37职称char(8)NULL, 38PRIMARY KEY CLUSTERED 39( 40编号ASC 41)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ONPRIMARY 42)ONPRIMARY 43GO 44SET ANSI_PADDING OFF 45GO 46/* Object: Table dbo.主讲资格证 Script Date: 07/03/2022 02:02:30 */ 47SET ANSI_NULLS ON 48GO 49SET QUOTED_IDENTIFIER ON 50GO 51SET ANSI_PADDING ON 52GO 53CREATE TABLEdbo.主讲资格证( 54证件编号char(10)NOT NULL, 55教师编号char(4)NULL, 56课程编号char(4)NULL, 57有效截止日期dateNULL, 58PRIMARY KEY CLUSTERED 59( 60证件编号ASC 61)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ONPRIMARY 62)ONPRIMARY 63GO 64SET ANSI_PADDING OFF 65GO 66/* Object: Table dbo.讲课经历 Script Date: 07/03/2022 02:02:30 */ 67SET ANSI_NULLS ON 68GO 69SET QUOTED_IDENTIFIER ON 70GO 71SET ANSI_PADDING ON 72GO 73CREATE TABLEdbo.讲课经历( 74教师编号char(4)NOT NULL, 75课程号char(4)NOT NULL, 76授课年份char(4)NOT NULL, 77PRIMARY KEY CLUSTERED 78( 79教师编号ASC, 80课程号ASC 81)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ONPRIMARY 82)ONPRIMARY 83GO 84SET ANSI_PADDING OFF 85GO 86/* Object: View dbo.C2 Script Date: 07/03/2022 02:02:31 */ 87SET ANSI_NULLS ON 88GO 89SET QUOTED_IDENTIFIER ON 90GO 91create viewdbo.C2 92as 93select编号,姓名,课程.课程号,课程名,授课年份 94from教师,课程,讲课经历 95where教师.编号=讲课经历.教师编号and课程.课程号=讲课经历.课程号; 96GO 97/* Object: View dbo.C1 Script Date: 07/03/2022 02:02:31 */ 98SET ANSI_NULLS ON 99GO 100SET QUOTED_IDENTIFIER ON 101GO 102create viewdbo.C1 103as 104select编号,姓名,性别,出生日期,所属学院,职称,课程编号,课程名,证件编号,有效截止日期 105from教师,课程,主讲资格证 106where教师.编号=主讲资格证.教师编号and课程.课程号=主讲资格证.课程编号107GO 108/* Object: Check CK_讲课经历_授课年份_1CF15040 Script Date: 07/03/2022 02:02:30 */ 109ALTER TABLEdbo.讲课经历WITH CHECK ADD CHECK (授课年份like '0-90-90-90-9') 110GO 111/* Object: Check CK_教师_编号_014935CB Script Date: 07/03/2022 02:02:30 */ 112ALTER TABLEdbo.教师WITH CHECK ADD CHECK (编号like '0-90-90-90-9') 113GO 114/* Object: Check CK_教师_性别_023D5A04 Script Date: 07/03/2022 02:02:30 */ 115ALTER TABLEdbo.教师WITH CHECK ADD CHECK (性别='女'OR性别='男') 116GO 117/* Object: Check CK_教师_职称_03317E3D Script Date: 07/03/2022 02:02:30 */ 118ALTER TABLEdbo.教师WITH CHECK ADD CHECK (职称='讲师'OR职称='教授') 119GO 120/* Object: Check CK_课程_课程号_0BC6C43E Script Date: 07/03/2022 02:02:30 */ 121ALTER TABLEdbo.课程WITH CHECK ADD CHECK (课程号like '0-90-90-90-9') 122GO 123/* Object: ForeignKey FK_讲课经历_教师编号_1B0907CE Script Date: 07/03/2022 02:02:30 */ 124ALTER TABLEdbo.讲课经历WITH CHECK ADD FOREIGN KEY(教师编号) 125REFERENCESdbo.教师(编号) 126GO 127/* Object: ForeignKey FK_讲课经历_课程号_1BFD2C07 Script Date: 07/03/2022 02:02:30 */ 128ALTER TABLEdbo.讲课经历WITH CHECK ADD FOREIGN KEY(课程号) 129REFERENCESdbo.课程(课程号) 130GO 131/* Object: ForeignKey FK_课程_先修课_0CBAE877 Script Date: 07/03/2022 02:02:30 */ 132ALTER TABLEdbo.课程WITH CHECK ADD FOREIGN KEY(先修课) 133REFERENCESdbo.课程(课程号) 134GO 135/* Object: ForeignKey FK_主讲资格证_教师编号_117F9D94 Script Date: 07/03/2022 02:02:30 */ 136ALTER TABLEdbo.主讲资格证WITH CHECK ADD FOREIGN KEY(教师编号) 137REFERENCESdbo.教师(编号) 138GO 139/* Object: ForeignKey FK_主讲资格证_课程编号_1273C1CD Script Date: 07/03/2022 02:02:30 */ 140ALTER TABLEdbo.主讲资格证WITH CHECK ADD FOREIGN KEY(课程编号) 141REFERENCESdbo.课程(课程号) 142GO 3代码实现 本次应用程序是采用C#语言编写,其主要实现代码如下: static string conStr = "Data Source=wys-pc;Initial Catalog=test;User ID=sa;Password=123456" /其中 wys-pc是主机名,test是要连接的数据库名,采用SQL Server身份验证方式登入数据库,sa 为登入账户,password为登入密码。 SqlConnection con = new SqlConnection(conStr); /con 为连接对象 con.Open(); / 打开连接 SqlCommand command = new SqlCommand(sql, con); /command SQL命令的执行对象,其中sql 为SQL语句,con为上面建立的连接。 command.ExecuteNonQuery(); /执行基本插入、删除、更新等SQL语句。 con.Close(); /关闭连接 将查询多表连接的视图的容输出到dataGridView组件中时用到的代码与上面用区别:SqlConnection con = new SqlConnection(conStr); SqlDataAdapter dtp = new SqlDataAdapter(sql, con); /建立数据库的适配器 DataTable ds = new DataTable(); / 建立显示数据表 dtp.Fill(ds); dataGridView1.DataSource = ds; con.Close(); 将单表内容输出到dataGridView组件时代码为: SqlConnection con = new SqlConnection(conStr); con.Open(); SqlDataAdapter dtp = new SqlDataAdapter(sql, con); /sql为select 语句。 DataSet ds = new DataSet(); /建立数据集 dtp.Fill(ds); dataGridView1.DataSource = ds.Tables0.DefaultView; con.Close();