数据库设计题题解

数据库设计题题解

ID:6337517

大小:92.00 KB

页数:5页

时间:2018-01-10

数据库设计题题解_第1页
数据库设计题题解_第2页
数据库设计题题解_第3页
数据库设计题题解_第4页
数据库设计题题解_第5页
资源描述:

《数据库设计题题解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、解题过程第01步,创建“学生成绩”数据库,导入excel文件中的数据到“原始数据”表,注意数据表单的选择,生成表的字段类型的设置。第02步,创建表的分解,设计如下:已经存在的关系:原始数据(学号,姓名,姓别,生源省,课程名,课程名称,总评成绩)分析,这是一个满足一范式要求的表。说到范式,需要回顾的知识点:1.函数依赖:完全函数依赖,部分函数依赖,传递函数依赖。2.范式定义:一范式,二范式,三范式3.由冗余而引发的数据操作的异常:插入异常,删除异常,更新异常再次观察原始数据表:Select*from原始数据orderby学号Select*from原始数据orderby课程号可以发现,学

2、号,姓名有大量的重复,课程号,课程名也有大量的重复,有很多学生来源于同一个省,生源省也大量的重复。这些就是数据冗余,而这些冗余会引发一些异常,比如1.删除某些学生的信息,可能导致个别生源省的信息也被删除掉了;2.更新更个学生的记录,比如修改了生源省,也可能导致某个生源省的信息丢失;而且要求同时更新多行记录,这样才不至于出现矛盾的数据:某名学生既在这个省,又在那个省,数据的合理一致性很难维护;3.批量插入数据时,也存在类似于上两个的问题;分析原因:最主要的原因是:“原始数据”这张表的范式级别太低了,它只满足了一范式的要求。何为一范式:字段只达到了不可再分的原子性要求。没有考虑字段之间的

3、函数依赖关系。进一步分析:“原始数据”这张表中,起着一定的决定作用的是:学号,课程号。自然语意应该是这样:1.学号定了,学生姓名,学生性别,学生所在生源省也就定了;2.课程号定了,课程名称也就定了;3.学号并且课程号定了,成绩也就定了;即,总的来说,学号,课程号将会是主键,起决定作用。而这样一来,姓名,性别,生源省,课程名称都部分函数依赖于(学号,课程号),只有总评成绩是完全函数依赖于(学号,课程号),故,这个范式不满足二范式要求。何为二范式:首先满足一范式要求,且要求字段之间不存在部分函数依赖,即非主属性应该对主属性是完全的函数依赖。为了消除因冗余引起的诸多异常,现分解该关系,提升

4、关系的范式级别,使达到二范式要求。分析关系,提升范式级别的方法:1.识别决定因子,即起决定作用的字段;2.取决定因子集合的所有非空子集,并依据这些子集建新表,给出适当的表名;3.往这些新表中,把完全函数依赖于这些决定因子的原表中的字段,插入到新表中去;4.删除只由决定因子字段本身构成的表。第03步按上面的方法步骤,完成对“原始数据”表的分解:1.识别决定因子字段:(学号,课程号)2.列出非空子集:(学号),(课程号),(学号,课程号);建立新表如下:学生(学号,)课程(课程号,)选课(学号,课程号,)3.字段再分配,把完全函数依赖于这些相应表的决定因子字段的其他字段插入到相应的表中:

5、学生(学号,姓名,性别,生源省)课程(课程号,课程名称)选课(学号,课程号,总评成绩)4.没有仅仅只由决定因子列构成的表,这一步省掉了。到现在,我们得到了三张表。即:学生(学号,姓名,性别,生源省)课程(课程号,课程名称)选课(学号,课程号,总评成绩)自然而然,我们可以通过分析,得到三张表相应的主键和外键以及较合理情况下的一些约束,如:1.学号是学生表的主键,课程号是课程表的主键,学号,课程号共同构成了选课表的主键;2.肯定是学生选修了某门课程才会在选课表中产生记录,而且,总评成绩会因为选课以后的考试而产生,故有这样的外键关系:“选课.学号”肯定是参照了“学生.学号”,“选课.课程号

6、”肯定是参照了“课程.课程号”;1.根据2的分析,总评成绩肯定是事先为NULL,有成绩以后再录入。即总评成绩这个字段,肯定是允许为空,且可以设置默认值为空;2.观察“原始数据”表,并通过对表上字段长度的分析(见“原始数据分析操作.sql”文件)可以发现,学号字段可以设数据类型和长度:char(10);姓名字段为:char(8),性别字段:char(2),而且性别只能取“男”和“女”,即约束为check(性别=’男’or性别=’女’),生源省字段:char(6);课程号:int,如果考虑周全,它应该有这样的约束:check(课程号>1000and课程号<9999and(课程号%1000

7、)>0),这一点,可以参照studentdb库的专业表中的专业代码的设置情况来看;课程名称,取可以跟最长兼容的情况,不妨认为是最长为18个汉字:char(40);而成绩,肯定是取整型:int,如果考虑周全,它应该有这样的约束:check(成绩>0and成绩<100)有了这些业务上的分析和认识以后,下面我们根据题设情况,完成的思路就比较清晰了。创建这些表,然后往这些表中插入数据(见“创建表并填充数据等操作.sql”)。第04步在导入数据完成以后,剩下来的就是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。