学习目标:
1、了解数据库设计的思维
2、了解什么是E-R图
3、能根据业务需要设计E-R图
学习过程:
今天我们简单介绍有关数据库建模的理论知识,同时通过一些简单的例子讲解我们数据库的表是怎么设计出来的。今天的主要学习目标是:
- 了解设计数据库的步骤。
- 理解数据库的规范化-三大范式。
- 掌握使用PD设计数据库。
这节课我们先讲讲数据库设计重要的一个步骤——E-R图的设计。
一、为什么需要数据库建模
软件项目的开发和建造一间房子一样,都是一个工程项目,前期第一个步骤必须要把房子的设计好,而不是一开始就盖房子。软件项目也是一样,必须做好设计,设计的好坏直接影响了以后软件项目的质量。所以数据库的建模是必须的,而且非常重要的。
因为良好的数据库设计可以帮助我们:
- 节省数据的存储空间。
- 能够保证数据的完整性。
- 方便进行数据库应用系统的开发
相反不好的数据库设计:
- 数据冗余、存储空间浪费
- 内存空间浪费
- 数据更新和插入的异常
所以数据库的设计是整个软件开发的重中之重。
二、软件开发的流程
一般我们进行软件开发都是经过以下几个过程。
- 可行性分析:主要包括经济可行性,社会可行性等等。
- 需求分析阶段:分析客户的业务和数据处理需求。
- 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整。
- 详细设计阶段:将E-R图转换为多张表,进行逻辑设计,并应用数据库设计的三大范式进行审核。
- 代码编写阶段:选择具体数据库进行物理实现,并编写代码实现前端应用。
- 软件测试阶段:编写测试文档,进行软件测试工作。
- 软件维护阶段:安装部署,维护升级等。
软件的开发过程是一个复杂的过程可能需要返回迭代才能完成,这里列出一般的流程。
三、数据库设计步骤
一般数据库的建模都会使用E-R图进行设计。那什么是E-R图呢?
E-R图就是是“实体-联系”图(Entity-Relationship)的简称。它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名。用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来。用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型。如下图:
有上面可知,在完成需求分析之后,充分了解的用户的需求后我们就可以开始设计数据库了。下面我们就以一个简单的论坛的数据库设计作为例子,当然一般的数据库设计都是比较复杂的,这里只是为了帮助大家更好的理解数据库的设计步骤,把复杂度简化了而已。
1、信息采集
我们还是需要与该系统有关人员进行交流、坐谈,搜集台帐文档、业务工单、调查问卷等,充分理解数据库需要完成的任务,然后以文字的形式汇报成为文档。需求总结如下:
BBS论坛的基本功能:
用户注册和登录,后台数据库需要存放用户的注册信息和在线状态信息;
论坛版块管理:后台数据库需要存放各个版块信息,如版主、版块名称、贴子数等,每个板块可以有多个用户维护。每个用户也可以维护多个板块。
用户发贴,后台数据库需要存放贴子相关信息,如贴子内容、标题等。
用户可以进行回帖操作。
2、抽象出实体,使用正方形描述。有上面的需求可知。
3、 确定实体间的关系
实体间的关系一般只有四种:一对一、一对多、多对一、多对多。如下图所示
我们也可以简单分析一下上面的需求,比如用户可以发多张主贴,但是每一张主贴只会属于一个用户,所以用户和主贴直接是一对多的关系,用户和回帖也是一对多的关系,主贴和回帖也是一对多的关系,版块和主贴之间也是一对多的关系。而每个板块可以有多个用户维护,每个用户也可以维护多个板块。所以用户和版本之间的关系是多对多的关系,继续修改上面的E-R图,描述上他们的关系。
4、 抽象出实体的属性。
然后我们可以考虑每一个实体和关系所应用具有的属性了。
用户:呢称、密码、电子邮件、生日、性别、用户的等级、备注信息、注册日期、状态、积分。
主贴:发贴人 l发贴表情 l回复数量、标题、正文、发贴时间、点击数、状态、最后回复时间。
回贴:贴子编号、回贴人、回贴表情 l标题 l正文 l回贴时间 l点击数。
版块:版块名称、版主、本版格言、点击率、发贴数。
这个示例中关系并没有需要保存的属性了。