学生成绩管理系统UML面向对象设计 下载本文

图8.3 总体E-R图

8.1.3 各E-R图实体的属性:

学生信息(学号,姓名,性别,出生时间,家庭地址,专业,总学分,备注) 课程信息(课程号,课程名称,开课学期,学时,学分)

8.2逻辑结构设计

概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。从理论上将,设计逻辑结构应该选择最适于相应概念结构的数据模型,然后对支持这种数据模型的各种DBMS进行比较,从中选出最合适的DBMS。但实际情况往往是已给定了某种DBMS,设计人员没有选择的余地。目前DBMS产品一般支持关系、网状、层次三种模型中的某一种,对某一种数据模型,各个机器系统又有许多不同的限制,提供不同的环境与工具。所以逻辑结构设计一般要分3步进行:

(1) 将概念结构转换为一般的关系、网状、层次模型;

(2) 将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换; (3) 对数据模型进行优化。 8.2.1 逻辑结构设计的任务与目标

- 45 -

根据上面的数据库E-R图,现在需要将上面的数据库概念结构转化为SQL

Server2008数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。在上面的实体及尸体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。具体内容包括数据组织(将E-R图转换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据处理(画出系统功能模块图)两大任务。

8.2.2 数据组织

8.2.2.1 将E-R图转换为关系模式 实体型转换为关系模式,实体的属性就是关系的属性,实体的码就是关系的码。对于实体间的联系则有下不同情况:

一个m:n联系转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。

一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并,如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。

一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。

3个或3个以上实体间的一个多元联系可以转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。

具有相同码的关系模式可以合并。

学生(学号,姓名,性别,出生时间,家庭地址,专业,总学分,备注) 课程信息(课程号,课程名称,开课学期,学时,学分) 选课(学号,课程号,成绩) 8.2.2.2 模型优化

关系模式tb_studentid,tb_courseid,tb_score不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF。

8.3物理结构设计

8.3.1 物理设计的任务与目标

数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最合适应用要求的物理结构的过程,就是数据库的物理设计。

数据库的物理设计通常分为两步:

(1) 确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。 (2) 对物理结构进行评价,评价的重点是时间和空间效率。

- 46 -

8.3.2 数据存储方面

为数据库中各基本表简历的索引如下:

对tb_student学生信息表中的“studentid学号”字段创建聚集索引,因为“studentid学号”字段在整个列表中是唯一的;对学生信息表中的“name学生姓名”字段创建非聚集索引,因为“name学生姓名”字段可能会出现重复值;对tb_course课程信息表中的“coursename课程名称”字段创建唯一索引。

8.3.3 数据表的设计 表示SQL Server中最基本的数据库对象,包含了数据库中所有数据,其他数据库对象的操作都依赖于表来进行。对表的各项操作,特别是对表中数据操作是使用频率最高的,它直接影响数据库的效率。表设计的好坏直接决定着一个数据库的优劣,在创建表之前一定要进行详细的设计。

在表的设计过程当中,主要需要完成以下任务:

(1)确定表中的字段,并为其选择合适的数据类型和数据长度。 (2)确定字段的值是否允许为空。

(3)是否要为某些字段设置默认值或约束等。 (4)选择合适的字段作为表的主键。 8.3.3.1 表中基本概念

(1)记录:表中包含了若干行数据,表中的一行称为一个记录。

(2)字段:每个记录由若干个数据项构成,将构成记录的每个数据项称为字段。 (3)关键字:若表中的某一字段或字段组合能唯一标识记录,则称该字段或阻断组合为候选关键字。若一个表有多个候选关键字,则选定其中一个为主关键字,也称为主键,当一个表仅有唯一的一个候选关键字时,该候选关键字就是主关键字。

(4)空置:通常也称NULL值,表示未知、不可用或将在以后添加的数据。若一个列允许为空置,则向表中输入记录值时可不为该列给出具体值;若不允许为空值,则在输入时必须给出具体值。需要注意的是,空值不能与数值数据0或字符类型的空字符串混为一谈。任意两个空值都不相等。表中的关键字不允许为空值。

(5)默认值:是指向表中添加新纪录时自动添加到字段的值。设置默认值主要是为了简化输入操作。

(6)标识属性:对任何表都可创建一个由系统自动生成序号的标识列,通常称为自动增长列,该序号值能唯一标识表中的一行,通常作为主键。定义标识属性时,可指定其种子(即起始)值、增量值。需要注意的是,每个表只能为一个列设置标识属性,该列只能是decimal、int、numeric、smallint、bigint或tinyint数据类型。

8.3.3.2 确定表及表中字段

本项目是针对“学生成绩管理系统”,该系统主要需要建立三张表:tb_student(学生表),tb_course(课程表),tb_score(成绩表)。表中的主要字段如下:

tb_student:student(学号),name(姓名),sex(性别),birthday(出生时间),address(家庭地址),specialty(专业),sumcredit(总学分),nate(备注)。

tb_course:courseid(课程号),coursename(课程名称),term(开课学期),

- 47 -

classhour(学时),credit(学分)。

tb_score:studentid(学号),courseid(课程号),score(成绩)。

8.3.3.3 为字段选择合适的数据类型,并设置相关属性

通常根据实际应用情况选择一个合适该字段使用的数据类型;如学号是一个长度固定的字符串,可以选择char作为其数据类型;如出生时间是一个日期,可以选择smalldatatime作为其数据类型;如家庭地址是一个长度不固定的字符串,可以选择varchar作为其数据类型;由于字段较多,就不一一赘述。

选择合适的数据类型之后,还需要为某些字段设置相关属性。如姓名不允许为空置,性别只能是男或女,将学号设为学生表的主键,等等。

在为字段选择数据类型及长度时,并不唯一,主要是根据实际需要,把握正确够用的原则。表与表之间常常存在着联系,在确定每张表的结构之后,通常还需要建立表跟表之间的关系,一般通过外键约束来实现。本项目中也是通过外键约束来实现表中的联系,参照表为tb_score,被参照表为tb_student和tb_course。

9. 部署图

系统部署图如下图所示:

图9.1 系统部署图

- 48 -