数据库设计.docx
- 文档编号:28253678
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:16
- 大小:171.25KB
数据库设计.docx
《数据库设计.docx》由会员分享,可在线阅读,更多相关《数据库设计.docx(16页珍藏版)》请在冰豆网上搜索。
数据库设计
数据库设计
10.1数据库及其访问方法
10.1.1数据库基本概念
数据库是有组织、有约束和有联系的数据集合,其好处是把某方面应用的数据统一管理。
数据库管理系统是对数据库中的数据进行定义、操纵、控制、维护及保持数据字典的软件。
虽然数据库管理系统可用于某应用领域的数据存取、查询,但人机交互界面差和数据处理功能不够。
编写数据库前端应用程序可以提高人与数据库更有效的交互,加强数据处理的能力。
根据数据库中数据存放的数据逻辑模型,数据库可分为层次模型、网状模型和关系模型数据库。
由于关系模型数据库的理论完善、实现相对简单及适合表达大部分实际应用领域的问题,所以大多数应用采用关系(模型)数据库。
常见的关系数据库有FOXPRO、ACCESS、SQLSERVER、Oracle等等。
10.1.1.1.关系数据库基本概念
关系数据库实际上把数据组织成一个个二维表格,关系就是二维表格。
如表10.1所示。
表10.1学生表
学号
姓名
性别
班号
出生日期
010*******
刘连村
男
01030901
1991.10.17
010*******
王英
女
01030901
1992.04.21
010*******
张四
男
01030901
1990.12.11
010*******
何建雨
男
01030901
1991.12.25
(1)记录或元组:
表格中的一行数据称为一个记录或元组。
如表10.1中除第一行表头外的各行,可用行数标称(学号为010*******的记录的记录号为1,学号为010*******的记录的记录号为2,……)。
(2)属性:
关系中的每列。
如表10.1中的5个列。
各列表头为属性名,实际上各列用属性名标称。
(3)属性值:
行列交叉位置的具体数据。
如表10.1中记录号为2,列为姓名的属性值为“王英”。
(4)属性类型:
表中每列属性有多个属性值,但属性值的数据类型一样。
如表10.1中出生日期属性的数据类型为日期型;性别属性的类型为字符,长度为1。
(5)表结构:
说明了一个表有多少列,每列的属性名称。
如表10.1的第一行。
(6)表格描述:
对表结构的具体描述。
一般表达为:
表名(属性名1,数据类型1,[长度1];属性名2,数据类型2,[长度2];……)
例如表10.1的描述如下:
学生表(学号,char,10;姓名,char,4;性别,char,1;班号,char,8;出生日期,date)
(7)关键字:
一个属性或几个属性的组合。
用关键字属性值可唯一地确定记录。
实际上,确立一个表中的关键字主要看现在和未来不可能有两个记录的关键字值相同。
如表10.1中,每个记录为一个学生,不可能有两个学生的学号相同,故学号属性是关键字。
姓名不是关键字的原因是可能有同姓名的学生。
姓名+出生日期这两个属性的组合可能成为关键字,这个组合的值极不可能出现在两个学生上。
关键字可代替记录号来唯一标称表中的记录。
(8)候选关键字(候选字):
一个表中的关键字。
一个表可能有多个候选关键字。
(9)主关键字(主键):
表中选定的一个候选关键字。
用来代替记录号来标称表中的记录。
在关系数据库中实体表一定要设置一个主关键字。
10.1.1.2.关系数据库设计
在编写某一个应用领域的程序时必须要确定需要管理的数据,如何把这些数据组织成关系表是关系数据库的设计问题。
目前常用的设计方法为E-R模型分析法,E-R模型法(Entity-RelationshipApproach)也称为实体-联系法,该方法的描述结果很容易转为关系数据库的关系模型表达。
有关E-R模型的概念如下:
(1)实体:
应用领域中可区分的事物个体。
如学生王屋、刘天宇;课程“大学计算机基础”、“数据库应用基础”;教室A210、B110等等。
(2)属性:
每一个事物个体都有多个自己的特性值,每个特性值可有一个名称(称属性名),特性称属性,特性值称属性值。
如姓名属性为王屋的学生,还具有属性及属性值:
学号为010*******、性别为男、出生日期为1991.7.11等等。
(3)实体集:
具有相同特性的实体集合。
实体集中的每个实体具有相同的属性,只是每个实体的属性值不同,一个实体的属性值集合是实体集中实体之间可区分的依据,具有相同属性实体的属性值集合之排列即构成一个表,实体集就是一个实体表,表中的每行为一个实体。
在进行一个应用领域关系数据库设计时首先应确定应用领域的实体集,把实体归纳为实体集,而不要尽列实体,即把不同类别的有关事物分析列出,然后分析出实体集应有的属性。
如教学管理系统关系数据库设计中可以直观地列出学生、教师、课程、教室、行政班级、专业、院系、教学单位等等八个实体集。
他们的属性如下:
学生(学号,姓名,性别,班级号,入学年期,出生日期,照片)
教师(职工号,姓名,职称,教学单位号)
课程(课程号,课程名,课程类型,总学时,实验学时,教材名,备注)
教室(教室编号,教室名称,座位数,教室类型)
行政班级(班级号,班级名,专业号,院系号,入学年期,计划人数)
专业(专业号,专业名称,学制)
院系(院系号,系名,院名,负责人,电话)
教学单位(教学单位号,单位名称,院系号)
实体表记录了可以区分的事物实体,一般都有一个属性的关键字来表示实体记录。
实体集的图标为一个矩形包围的实体集名。
属性图标为椭圆包围的属性名,一个实体集图标可以连接属于它的多个属性图标。
例如教师实体集的图标如图10.1所示。
图10.1教师实体
确定基本的实体集后,应分析实体集之间的联系。
实体集之间的联系类型有:
(4)一对一联系(1:
1):
在两个实体集A和B之间,A的一个实体与B中的一个实体存在某种联系,这种联系是一对一的。
如学生集与学生卡集之间,一个学生拥有一个学生卡,反过来,一张学生卡属于一个学生。
联系图标为一个菱形包围联系名,菱形连接两个实体图标,在两个“菱形与矩形连线”上分别标注“1”。
如图10.2所示,它标示一个学生拥有一张学生卡,一张学生卡属于一个学生。
学生集与学生卡集有一个1:
1的联系。
图10.2一对一联系示例
(5)一对多联系(1:
n):
在两个实体集A和B之间,A的一个实体与B中的多个实体存在某种联系,而B中的一个实体与A中的一个实体存在联系。
例如院系与行政班级之间,一个院系管理多个行政班级,而一个行政班级只属于一个院系。
如图10.3所示,在联系连线院系实体集图标端标示“1”。
在联系连线行政班级实体集图标端标示“n”。
一般一对多的实体集称主集(如院系),另一个称从集(如行政班级)。
主集的关键字通常是从集的属性。
院系号在院系主集中是关键字,在从集行政班级中是属性(从集中的属性是另一个实体中的关键字,该属性称外键)。
关系数据库中很容易通过同名的关键字和外键在两个实体集之间建立1:
n的联系。
外键也可看成是对一个实体的引用键。
。
专业与行政班级、院系与专业实体之间也存在1:
n联系。
图10.3一对多联系示例
(6)多对多联系(n:
m):
在两个实体集A和B之间,A的一个实体与B中的多个实体存在某种联系,而B中的某个实体与A中多个实体存在联系对应。
例如专业实体集与课程实体集之间,一个专业实体在“包含”联系下对应多个课程实体,一个课程实体在“包含”的反向联系“属于”下对应多个专业实体。
如图10.4所示,一个专业实体”包含”多门课程实体,在联系连线课程实体集图标端标示“m”。
反之,一个课程实体”属于”多个专业,在联系连线专业实体集图标端标示“n”。
图10.4多对多联系示例
两个实体集之间存在n:
m联系,如果这种联系是实际应用中需要记录的活动话,应生成一个联系表(集)。
如图10.4所示,联系“包含/属于”实际上是教学管理活动中的专业课程计划,它说明某专业在哪个学期应学习的课程,是人为的规定。
为了保存专业实体与课程实体之间这种n:
m联系,必须把每个专业应包含的每个课程都记录下来,因此生成一个联系集。
该联系集是在专业课程计划活动中产生,称为专业课程计划联系集,其属性如下:
专业课程计划(专业号,课程号,实际学时,年度,学期,入学年期)
“专业课程计划”联系集包括专业和课程两个实体集关键字属性“专业号”和“课程号”。
一个专业应学一个课程的计划是针对某年级的学生在第几年度哪个学期中执行多少学时,联系集中加入了时间约定属性(实际学时,年度,学期,入学年期)。
在E-R关系模型中,存在实体集和联系集,其区分在于实体集的实体可以独立实际存在,一般实体集主关键字只一个属性;联系集是两个n:
m实体集在实际过程中建立实体与实体联系的记录集,联系集包含两个实体集的关键字属性外,还包含联系的约束和附加的属性。
在学生、教师、课程、教室、教学单位实体集两两之间想象上存在多个n:
m联系,一个n:
m联系可建立一个联系记录集,一般应根据活动过程的分析来确定联系记录集是否应该存在。
应用领域的活动过程会影响到实体集的关联,从而明确联系记录集。
教学管理中可进行下列活动:
①院系、专业、行政班级、课程、教学单位、教师及教室设置及维护。
②学生注册及维护
③专业课程计划
④行政班级课程计划
⑤课程班计划
⑥课程班人员安排
⑦选课
⑧排课
⑨查询
这些活动可作为功能分析,下面主要讨论活动在实体表间产生需记录的关联。
活动①、②中只是对学生、院系、专业、行政班级、课程、教学单位个别实体集的属性分别设置,不会产生关联记录集。
活动“③专业课程计划”是计划某专业的某年级在某学期应学习的课程。
它是专业实体与课程两个实体之间的联系,“应学/被学”这种联系是n:
m联系。
这种联系必须记录下来。
“专业课程计划”联系集的属性如下:
专业课程计划(专业号,课程号,实际学时,年度,学期,入学年期)
活动“④行政班级课程计划”是制定某行政班级在某学期应学习的课程,为设置课程班打下基础。
它涉及行政班级与课程两个实体的联系,在“选择/被选择”这种联系下这两个实体是n:
m联系。
“行政班级课程计划”联系集的属性如下:
行政班级课程计划(年度,学期,行政班级号,课程,人数,实际学时,课程班号)
“行政班级课程计划”表大部分记录可由“专业课程计划”表自动产生。
活动“⑤课程班计划”是把“行政班级课程计划”表合成为“课程班计划”表,即在某学年期实际上为某课程应开几个课程班。
一个课程班在教学管理中应该是独立并且明显可区分的实体,故在课程班集中增设一个关键字属性课程班号,使课程班集设计为实体集。
课程班集的属性如下:
课程班(课程班号,课程号,年度,学期,教师号)
活动“⑥课程班人员安排”是给每个课程班安排老师,它会在教师实体集与课程班实体集之间产生联系,一个教师可教几个课程班,一个课程班由一个教师主讲,是1:
n的联系。
行政班级课程计划、课程班、教师三个实体集关系如下图10.5所示。
图10.5行政班级课程计划、课程班、教师三个实体集关系图
对于1:
n联系的主实体集与从集,只要把主实体集中的关键字属性放入从实体集作为属性,在实际中会记录好这种联系。
因而教师实体集中关键字属性教师号作为课程班实体集属性,课程班实体集中关键字属性课程班号作为行政班级课程计划联系集的属性。
活动“⑦选课”是学生选择课程班的过程,显然它是学生实体集与课程班实体集“选课”下n:
m联系。
选课集的属性如下:
选课(学生号,课程班号,平时成绩,期考成绩,综合成绩,成绩状况)
活动“⑧排课”是给课程班在适当的时间分配教室。
课程班与教室实体之间在“分配”关系下存在n:
m联系,排课联系集的属性如下:
排课(年度,学期,课程班号,教室编号,开始周,星期,节数,间隔天数,结束周)
活动“⑨查询”只是从数据库各表中检索数据,不需要记录。
行政班级
综上所述,教学管理系统的E-R模型实体集联系图如图10.6。
把该图实体集对应为实体表,n:
m联系对应为联系集,可得出教学管理系统关系数据库中的表格;给每个表格设置应有的属性,在处理1:
n联系时把主表的关键字属性添入到从表,可得各表格的属性集;给各表格各属性确定应有的数据编码、数据类型及长度,可得出教学管理系统关系数据库各表格的结构如下。
注:
粗体字为n:
m联系联系名,虚线框为实体集的重复显示。
图10.6教学管理系统E-R模型实体关系图
实体表:
学生(学号,C,10;姓名,C,10;;性别,C,1;班级号,C,8;入学年期,C,5;出生日期,D;照片,O)
教师(教师号,C,6;姓名,C10;职称C,5;教学单位号,C,6)
课程(课程号,C,8;课程名,C,20;课程类型,C,4;总学时,I;实验学时,I;教材名,C,20;备注)
教室(教室编号,C,6;教室名称,C,20;座位数,I;教室类型,C,3)
行政班级(班级号,C,8;班级名,C,20;专业号,C,5;院系号,C,4;入学年期,C,5;计划人数,I)
专业(专业号,C,5,专业名称,C,20;学制,B;院系号,C,4)
院系(院系号,C,4;系名,C,20;院名,C,15;负责人,C,10;电话,C,11)
教学单位(教学单位号,C,6;单位名称,C,20;院系号,C,4)
课程班(课程班号,C,7;课程号,C,8;年度,C,4;学期,B;教师号,C,6)
联系表:
专业课程计划(专业号,C,4;课程号,C,8;实际学时,I;年度,C,4;学期,B;入学年期,C,5)
行政班级课程计划(年度,C,4;学期,B;班级号,C,8;课程号,c,8;人数,I;实际学时,I;课程班号,C,8)
选课(学号,C,10;课程班号,C,7;平时成绩,F;期考成绩,F;综合成绩,F;成绩状况,C,3)
排课(年度,C,4;学期,B;课程班号,C,7;教室编号,C,6;开始周,B;星期,B;节数,B;间隔天数,B;结束周,B)
所有实体表的第一个属性都是关键字。
说明:
C:
char文本类型B:
Byte字节整数I:
Int整数
D:
Date日期O:
ole对象
在确定数据库的表结构后,应确定数据的约束,这种约束有:
(7)字段约束:
例如院、系名默认值为“”,专业名称<>“”,班级名、班级号、专业号、学号和姓名<>“”。
(8)记录约束:
例如,[院名]+[系名]<>“”。
(9)表内约束:
表内记录之间不能或必有某种关系,例如,建立候选键,保证表内任意记录之间候选键值不能相同。
(10)表间约束:
表和表之间的记录不能或必有某种关系,例如:
学生表每个记录的班级号必须在行政班级表中有该班级号的记录,实际上在学生表与行政班级表之间建立1:
n联系可保证这种约束。
10.1.1.3.建立应用领域关系数据库
一个应用领域的关系数据库设计后,得到一个具体数据库中各表格结构及表格之间的联系,我们可选用某种关系数据库管理系统来建立一个实际的数据库,一个关系数据库管理系统都有完备的建立数据库、表结构及表间联系的功能。
当数据量大时可使用SQL-SERVER或ORACLE,为方便之故,上面设计的“教学管理系统”关系数据库采用ACCESS数据库来实现(如用其它类型的数据库,编程时只要改变数据库访问控件对象的连接即可)。
ACCESS数据库管理系统软件在MICROSOFTOFFICE安装盘中,安装office软件时可一起安装。
运行MICROSOFTACCESS,执行“文件|新建|空数据库”,生成数据库文件名为“教学管理”。
分别执行“使用设计器创建表”,建立上述设计的各表结构。
执行“工具|关系”,把建立的表都加入“关系”布局框中,根据图10.6建立各表之间的一对多联系。
表之间一对多关系设置操作是把主表框中关键字拖到从表框的外键上(本例中关键字与对应外键同名)。
“教学管理”数据库各表的关系布局图如图10.7。
图10.7教学管理系统ACCESS数据库各表关系布局
10.1.1.4.关系数据库的关系操作
关系数据库的数据存放在关系表中,经常需要从各表中有机地抽出有用的数据表,这个过程实际是对关系数据库中的表进行表操作,常见的表操作有:
1.笛卡儿乘积:
是两个表之间的运算,运算结果表是这两个表的组合表。
也就是说笛卡儿乘积的结果表包含两个表的所有字段,其记录是一个表的记录与另一个表记录的一个组合,所有这样的组合记录集组成结果表。
如果第一个表有n个记录,第二个表有m个记录,结果表有n×m个记录。
2.选择:
是对一个表的运算,该运算必有一个条件表达式,运算结果表是原表中使条件表达式为真的记录(也就是满足条件的记录)。
3.投影:
是对一个表的运算,该运算必有一个字段名列表,字段名列表中的字段名是原表中的一个字段名或包含原表字段的表达式。
运算结果表是根据字段名列表保留原表的某些列(字段)和添加的计算列(字段),其表的字段(列)名排列就是字段名列表,记录数是原表的记录数。
如果不考虑计算字段,结果表是去除了原表某些字段(列)的表,保留字段的名称列表为字段名列表。
4.连接:
是两个表之间的运算,实际上是先对两个表进行笛卡儿乘积运算,然后对积集进行条件式的选择运算。
运算结果集是两个表笛卡儿积中满足条件的记录的集合。
Sql语言是关系数据库的操纵语言,其中有一个重要的查询语句是Select语句,它集各种表操作于一身,能从各关系表中查询需要的结果表。
Select的格式如下:
Select[All|Distinct]<字段名列表>From<表列表>
[Where<条件表达式>]
[GroupBy<字段名>[Having<条件表达式>]]
[OrderBy<字段名>[Asc|Desc]]
其中:
<>中表示项类名,[]包括的字句和定语可有可无。
字段名列表形式:
字段名1,字段名2,·····,字段名n;‘*’表示表中的所有字段;笛卡儿积表是多表组合而成,有名称相同的字段,为了区分可在字段名前加表名,表名.字段名或表名.*。
表列表形式:
表项1,表项2,····,表项n
表项可以是关系数据库中的实表名、视图表名(数据库中已定义的查询表)或连接表。
连接表是两个数据库的连接运算的结果表,连接运算符为Join,有全连、左连、右连和内连,常用的内连运算符是InnerJoin。
例如:
专业INNERJOIN行政班级ON专业.专业号=行政班级.专业号
它表示‘专业’表与‘行政班级’表按‘专业号’进行内连。
‘行政班级’表的专业号表示该班所属的专业,是对专业的引用,该表记录不包括专业的全部信息。
‘专业’表和‘行政班级’表笛卡儿积的记录满足专业表的专业号与行政班级的专业号相同,意味该记录包含某行政班级的记录也包含该班级所属的专业的记录;不满足该条件的积记录是无用途的记录组合。
因此,上列的内连结果表是包括班级数据和该班所属专业数据的记录表,可称为行政班级专业表。
Select语句的简单形式是投影操作,例如:
Select院名From院系或Selectall院名From院名
她表示从‘院系’表中抽出院名列,结果表只有一个字段。
由于每个院有多个系,一个院在‘院系’表中有多条记录,结果表会出现多个记录值相同。
使用Distinct定语可去掉重复的记录。
例如:
SelectDistinct院名From院系
结果表是所有院名的列表,无重复的院名。
Select*From专业
它表示从专业表抽出全部列,结果表就是专业表。
SELECT行政班级.班级号,行政班级.班级名,专业.专业名称,院系.系名,院系.院名
FROM院系INNERJOIN(专业INNERJOIN行政班级ON专业.专业号=行政班级.专业号)
ON(院系.院系号=专业.院系号)AND(院系.院系号=行政班级.院系号);
上面select查询语句先进行两次内连,然后投影运算。
虚线画出的是专业与行政班级表的内连,形成一个中间结果表(具有行政班级专业数据),实线画出的是院系表与中间结果表的再次内连,形成的内连结果表称行政班级专业院系表,该表包括三个表的所有字段(从设计结果数据库表可看出这3个表有15个字段),每个记录是某班级所属专业和所属院系的数据集合,最后对内连结果表进行投影,从语句的字段名列表可看出上列的select语句的结果表只包括5个字段,除班级号外全部是名称,称为行政班级专业院系名称表。
此外,from介词后的表列表实际上只有一个内连表项。
如有多个表项,Select语句的运算将进行多表的笛卡儿乘积。
例如:
Select院系.*,专业.*from院系,专业
这个语句的结果表是院系和专业表的笛卡儿积,是一个杂乱无章的表。
Where<条件表达式>子句:
这里定义一个表的笛卡儿乘积就是自己。
带Where子句的Select语句的运算方法为从表列表中的每个表各取出一个纪录组成一个组合记录,组合记录如满足条件,按字段名列表进行投影,从组合记录取出字段名列表中的各字段放入结果表;否则,除去该组合记录。
对表列表中的每个组合进行同样的操作,即可得出结果表。
<条件表达式>:
该表达式是结果为逻辑值的混合表达式。
它可以是比较、逻辑、集合和谓词表达式及其逻辑混合表达式。
字段名作为字段变量成为表达式的操作数。
例如:
Select*from院系Where院名=’信息科学与工程’
结果表为‘信息科学与工程’学院及其系的记录集。
表达式中出现字符串常量,应用英文字符单引号“'”包括。
Select专业.专业名称,院系.系名,院系.院名from院系,专业where院系.院系号=专业.院系号
该查询结果表实际上是进行了一次专业表与院系表按‘院系号’內连后再投影的结果,称为院系专业名称表。
特别介绍一下集合表达式,集合表达式的形式如下:
变量名[Not]In值列表
值列表:
为常量列表或只有一个投影字段的Select子句。
例如常量列表:
(3,6,10,8),(’liu’,’guan’,’zhang’)。
只有一个投影字段的Select子句:
Selectdistinct院名From院系。
集合表达式的运算为:
如果变量值[不]在值列表中,结果是True;否则,是False。
例如:
select班级号from行政班级where院系号in(select院系号from院系where院名=’信息科学与工程’)
该语句的含义是求行政班级院系号在’信息科学与工程’学院的院系号集之中的记录的班级号,它列出了信息科学与工程学院的所有班级号。
select*from学生where班级号in(select班级号from行政班级where院系号
in(select院系号from院系where院名=’信息科学与工程’))
该语句的含义是学生的班级号在信息科学与工程学院的班级号集之中的记录,结果表是信息科学与工程学院的所有学生记录。
GroupBy<字段名>[Having<条件表达式>]:
该子句表示按字段分组,字段值相同的记录分一组,每组在结果表占一个记录。
Having<条件表达式>:
表示满足条件的记录保留下来。
OrderBy<字段名>[Asc|Desc]:
该子句表示结果表按字段排序。
定语Asc表示升序,Desc表示降序。
例如:
Select班级号,Count(*)as人数from学生GroupBy班级号OrderBy班级号Asc
其中,count(*)组函数表示对每组记录计数。
as人数:
表示计数列的字段名取名为人数。
结果表是各行政班级的人数表,记录按班级号字段值升序排列。
组函数形式:
组函数名([Distinct|All]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 设计