- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库应用基础系列- 第1章 数据库基础--.doc
数据库应用基础系列: 第1章 数据库基础
1.1 一个肤浅的定义 什么是数据库?这是一个很难回答的问题,经典的教科书往往都是从信息、数据说起,直到数据库。这里我想直接给出一个不准确的,肤浅的定义(这也是最早的FoxBASE时代,绝大多数人对数据库的认识):
【定义】:(1)一个库便是一张二维表格,表由表头(字段)与表的内容(记录)组成。(2)建立在该表上的操作主要包括:检索、插入、删除、更新。
这个定义与现有数据库存在很大差异,但并不影响作为这部分内容的开端。从上面的定义中我们可以看到,数据库中记录信息的表与建立在表上的操作是密不可分的。另外,常见的库操作有四种:检索、插入、删除、更新。
1.2 遭遇异常 在这个原始的概念驱使下,很多人就开始了数据库的设计历程,让我们来看这样一个例子:
【要求】:构建一用来描述在校学生的数据库,要求记录的学生如下属性:学号、姓名、年龄、系别。
很多人会觉得这太简单了,在上面的数据库概念的指引下,我们可以很容易的给出如下设计:
表 1-1 初始的数据库设计
学号姓名年龄系别1张三20经管系2李四22机械系3王五21经管系4赵六23自动化 该设计很好的将学号、姓名、年龄、系别属性记录了下来,并且支持检索、插入、删除、更新操作。然而这是不是一个完美的设计呢?在讨论之前让我们先回答几个问题(尽管很多人对以下几个问题嗤之以鼻)。
问题1:学校有几个系?(答:3个)
问题2:经管系有几个学生?(答:2个)
每次讲到这里,总有很多学生对此不屑一顾,当我问到你们是怎么知道的?时候,很多人只是说看出来的呗。其实这两个问题不是用看出来就可以解释清楚的。最好的回答应当是数出来的(晕!)。问题1的答案是通过去掉系别列中的重复行后,数一数剩余的行数得到的。问题2的答案是通过数一数系别为经管系的行数得到的。那好,我们先把这两种解题方法放在这里以备后面查阅。
让我们再来看看建立在该表上的几种操作,检索已经说过了,这里不再提,我们看看插入、删除以及更新操作,这里有如下几个要求:
1、国家刚刚审批通过允许学校开设一个新的系艺术系,然而艺术系的学生要等到两个月后才能招进来。
2、李四毕业了,不再是在校学生了,将其删除。
3、经管系现要更名成经济管理学院。
呵呵,我们已经开始遭遇插入异常、删除异常、更新异常了。如何插入一个没有学生的系呢?这是一个两难的问题。由于学校有艺术系,为了能够在检索学校有几个系时检索到4,我们不得不插入一行,该行的系别字段记录上艺术系,而艺术系没有学生,所以我们还得让学号、姓名、年龄字段空着(如表 1 2所示)。
表 1-2 插入艺术系
学号姓名年龄系别1张三20经管系2李四22机械系3王五21经管系4赵六23自动化(空)(空)(空)艺术系 此时如果我再问艺术系有几个学生时,恐怕有些人的脸色就不那么好看了吧。这回通过数一数系别为艺术系的行数就无法得到准确的艺术系人数答案了。因此解题逻辑不得不也发生变化:如果人数为1,判断学号、姓名、年龄是否为空,如果为空则为0人,否则为1人。你觉得这回的检索还那么简单吗?
再来看删除操作也不是想删就删了。如果你把李四一行删除,你会惊奇的发现机械系没有了!所以也不得不修改删除逻辑,如果某系只剩下最后一条记录,就不能删除了,而起清空学号、姓名、年龄字段的内容,这么做好吗?
更新操作似乎也存在一些问题。在上面的设计种,经管系更名需要修改两行数据,假设刚刚修改完第一行,正要修改下一行,停电了,死机了,反正机器无法正常运转。当你下次开机后数一数有几个系呢?
1.3 解决异常 上面的问题有没有解决的办法呢?有!数据库规范化理论给出了我们解决的办法(关于第一范式、第二范式、第三范式等内容可以参考《数据库原理》),那就是拆分。我们可以通过将上表拆分成如下两表的形式解除异常:
表 1-3 学生库
学号姓名年龄系别代号1张三2012李四2223王五2114赵六233 表 1-4 系别库
系别代号系别1经管系2机械系3自动化 这两张表通过系别代号关联起来,保留了原有信息,但该设计消除了上面提到的异常。读者可以自行尝试在当前设计下重新执行上面的检索、插入、删除与更新操作,看看还有没有异常发生?
1.4 数据表述与认知矛盾 从上面的例子我们可以看到,为了消除在数据库操作过程中出现的插入异常、删除异常以及更新异常,我们必须利用数据库规范化理论对数据库的设计加以规范处理。但如果校长希望你提供一份学生名单时,你提供给校长的该是什么呢?毫无疑问,校长最希望见到的是表 1-1,而绝非表 1-3与表 1-4。因此这就引出了新的问题:数据库的使用者与数据库的
文档评论(0)