8、E-R图的设计

学习目标:

1、了解数据库设计的思维

2、了解什么是E-R图

3、能根据业务需要设计E-R图

学习过程:

今天我们简单介绍有关数据库建模的理论知识,同时通过一些简单的例子讲解我们数据库的表是怎么设计出来的。今天的主要学习目标是:

  • 了解设计数据库的步骤。

  • 理解数据库的规范化-三大范式。

  • 掌握使用PD设计数据库。

这节课我们先讲讲数据库设计重要的一个步骤——E-R图的设计。

一、为什么需要数据库建模

软件项目的开发和建造一间房子一样,都是一个工程项目,前期第一个步骤必须要把房子的设计好,而不是一开始就盖房子。软件项目也是一样,必须做好设计,设计的好坏直接影响了以后软件项目的质量。所以数据库的建模是必须的,而且非常重要的。

因为良好的数据库设计可以帮助我们:

  • 节省数据的存储空间。

  • 能够保证数据的完整性。

  • 方便进行数据库应用系统的开发

相反不好的数据库设计:

  • 数据冗余、存储空间浪费

  • 内存空间浪费

  • 数据更新和插入的异常

所以数据库的设计是整个软件开发的重中之重。

二、软件开发的流程

一般我们进行软件开发都是经过以下几个过程。

  • 可行性分析:主要包括经济可行性,社会可行性等等。

  • 需求分析阶段:分析客户的业务和数据处理需求。

  • 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整。

  • 详细设计阶段:将E-R图转换为多张表,进行逻辑设计,并应用数据库设计的三大范式进行审核。

  • 代码编写阶段:选择具体数据库进行物理实现,并编写代码实现前端应用。

  • 软件测试阶段:编写测试文档,进行软件测试工作。

  • 软件维护阶段:安装部署,维护升级等。

    软件的开发过程是一个复杂的过程可能需要返回迭代才能完成,这里列出一般的流程。

三、数据库设计步骤

一般数据库的建模都会使用E-R图进行设计。那什么是E-R图呢?

E-R图就是是“实体-联系”图(Entity-Relationship)的简称。它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名。用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来。用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型。如下图:

attcontent/01721321-ea45-40fa-9b8b-3543f0c80865.png

有上面可知,在完成需求分析之后,充分了解的用户的需求后我们就可以开始设计数据库了。下面我们就以一个简单的论坛的数据库设计作为例子,当然一般的数据库设计都是比较复杂的,这里只是为了帮助大家更好的理解数据库的设计步骤,把复杂度简化了而已。

1、信息采集

我们还是需要与该系统有关人员进行交流、坐谈,搜集台帐文档、业务工单、调查问卷等,充分理解数据库需要完成的任务,然后以文字的形式汇报成为文档。需求总结如下:

BBS论坛的基本功能:

用户注册和登录,后台数据库需要存放用户的注册信息和在线状态信息;

论坛版块管理:后台数据库需要存放各个版块信息,如版主、版块名称、贴子数等,每个板块可以有多个用户维护。每个用户也可以维护多个板块。

用户发贴,后台数据库需要存放贴子相关信息,如贴子内容、标题等。

用户可以进行回帖操作。

2、抽象出实体,使用正方形描述。有上面的需求可知。

attcontent/b77eb33a-80c0-43f7-8bdf-1d7fac66ef35.png

3、 确定实体间的关系

实体间的关系一般只有四种:一对一、一对多、多对一、多对多。如下图所示

attcontent/eec1fde5-f538-4a93-935b-0a304dd0a1e4.png

我们也可以简单分析一下上面的需求,比如用户可以发多张主贴,但是每一张主贴只会属于一个用户,所以用户和主贴直接是一对多的关系,用户和回帖也是一对多的关系,主贴和回帖也是一对多的关系,版块和主贴之间也是一对多的关系。而每个板块可以有多个用户维护,每个用户也可以维护多个板块。所以用户和版本之间的关系是多对多的关系,继续修改上面的E-R图,描述上他们的关系。

attcontent/5b8cab3e-a3e8-4280-a3ee-c1249c81eea9.png

4、 抽象出实体的属性。

然后我们可以考虑每一个实体和关系所应用具有的属性了。

用户:呢称、密码、电子邮件、生日、性别、用户的等级、备注信息、注册日期、状态、积分。

主贴:发贴人 l发贴表情 l回复数量、标题、正文、发贴时间、点击数、状态、最后回复时间。

回贴:贴子编号、回贴人、回贴表情 l标题 l正文 l回贴时间 l点击数。

版块:版块名称、版主、本版格言、点击率、发贴数。

这个示例中关系并没有需要保存的属性了。

attcontent/89c7dec8-40ed-4e62-9c82-46afdb441301.png

猜你喜欢

转载自blog.csdn.net/liubao616311/article/details/83903477