网站大量收购闲置独家精品文档,联系QQ:2885784924

数据库设计题题解 .pdfVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

解题过程

第01步,创建“学生成绩”数据库,导入excel文件中的数据到“原始数据”表,注意数

据表单的选择,生成表的字段类型的设置。

第02步,创建表的分解,设计如下:

已经存在的关系:

原始数据(学号,姓名,姓别,生源省,课程名,课程名称,总评成绩)

分析,这是一个满足一范式要求的表。说到范式,需要回顾的知识点:

1.函数依赖:完全函数依赖,部分函数依赖,传递函数依赖。

2.范式定义:一范式,二范式,三范式

3.由冗余而引发的数据操作的异常:插入异常,删除异常,更新异常

再次观察原始数据表:

Select*from原始数据orderby学号

Select*from原始数据orderby课程号

可以发现,学号,姓名有大量的重复,课程号,课程名也有大量的重复,有很多学生来源于

同一个省,生源省也大量的重复。这些就是数据冗余,而这些冗余会引发一些异常,

比如

1.删除某些学生的信息,可能导致个别生源省的信息也被删除掉了;

2.更新更个学生的记录,比如修改了生源省,也可能导致某个生源省的信息丢失;而且要

求同时更新多行记录,这样才不至于出现矛盾的数据:某名学生既在这个省,又在那个

省,数据的合理一致性很难维护;

3.批量插入数据时,也存在类似于上两个的问题;

分析原因:最主要的原因是:“原始数据”这张表的范式级别太低了,它只满足了一范式的

要求。

何为一范式:字段只达到了不可再分的原子性要求。没有考虑字段之间的函数依赖关系。

进一步分析:“原始数据”这张表中,起着一定的决定作用的是:学号,课程号。

自然语意应该是这样:

1.学号定了,学生姓名,学生性别,学生所在生源省也就定了;

2.课程号定了,课程名称也就定了;

3.学号并且课程号定了,成绩也就定了;

即,总的来说,学号,课程号将会是主键,起决定作用。

而这样一来,姓名,性别,生源省,课程名称都部分函数依赖于(学号,课程号),只有总

评成绩是完全函数依赖于(学号,课程号),故,这个范式不满足二范式要求。

何为二范式:首先满足一范式要求,且要求字段之间不存在部分函数依赖,即非主属性应该

对主属性是完全的函数依赖。

为了消除因冗余引起的诸多异常,现分解该关系,提升关系的范式级别,使达到二范式要求。

分析关系,提升范式级别的方法:

1.识别决定因子,即起决定作用的字段;

2.取决定因子集合的所有非空子集,并依据这些子集建新表,给出适当的表名;

3.往这些新表中,把完全函数依赖于这些决定因子的原表中的字段,插入到新表中去;

4.删除只由决定因子字段本身构成的表。

第03步

按上面的方法步骤,完成对“原始数据”表的分解:

1.识别决定因子字段:(学号,课程号)

2.列出非空子集:(学号),(课程号),(学号,课程号);建立新表如下:

学生(学号,)

课程(课程号,)

选课(学号,课程号,)

3.字段再分配,把完全函数依赖于这些相应表的决定因子字段的其他字段插入到相应的表

中:

学生(学号,姓名,性别,生源省)

课程(课程号,课程名称)

选课(学号,课程号,总评成绩)

4.没有仅仅只由决定因子列构成的表,这一步省掉了。

到现在,我们得到了三张表。即:

学生(学号,姓名,性别,生源省)

课程(课程号,课程名称)

选课(学号,课程号,总评成绩)

自然而然,我们可以通过分析,得到三张表相应的主键和外键以及较合理情况下的一些约束,

如:

1.学号是学生表的主键,课程号是课程表的主键,学号,课程号共同构成了选课表的主键;

2.肯定是学生选修了某门课程才会在选课表中产生记录,而且,总评成绩会因为选课以后

的考试而产生,故有这样的外键关系:“选课.学号”肯定是参照了“学生.学号”,“选课.

课程号”肯定是参照了“课程.课程号”;

3.根据2的分析,总评成绩肯定是事先为NULL,有成绩以后再录入。即总评成绩这个字

段,肯定是允许为空,且可以设置默认值为空;

4.观察“原始数据”表,并通过对表上字段长度的分析(见“原始数据分析操作.sql”文

件)可以发现,学号字段可以设数据类型和长度:char(10);姓名字段为:char(8),性别

字段:char(2),而且性别只能取“男”和“女”,即约束为check(性别=’男’or性别=’女’),

生源省字段:char(6);课程

文档评论(0)

166****1328 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档