第一篇:数据库需求与ER建模

转载来源:http://www.cnblogs.com/muchen/p/5258197.html

第一篇:数据库需求与ER建模

前言

        在数据库建设过程中,哪一步最重要?绝大多数资料会告诉你,是需求分析阶段。这一步的好坏甚至直接决定数据库项目的成败。

        需求分析阶段,也被称为ER建模(entity-relationship modeling)阶段,也常被称为需求可视化,概念建模等。这一阶段数据库系统开发人员将协同需求方以ER图的方式对业务需求进行可视化展现。

        本文将详细介绍(陈氏)ER符号体系,并在其中穿插一些具体实例讲解。

基本概念

        1. 实体(entity)

        实体表示客观世界中的众多概念,比如:人,地点,事件等。

        每个实体本身包含多个实体成员,比如实体人可能包含张三,李四王五等。

        在ER图中,实体通常用矩形表示,如下所示:

        2. 属性(attribute)

        每个实体都有属性,用椭圆表示并用来描述实体各个特征。 比如顾客的特征可能有顾客标识符,顾客姓名,顾客性别,顾客年龄等,如下图所示:

        此外,每个实体至少要有一个唯一属性,用下划线标记,如上图中的id字段。

        3. 联系(relation)

        实体与实体之间通常具有某种关联,在ER图中用菱形表示。比如某职员向某主管汇报,如下图所示:

        细心的读者相必发现了,实体间连线的两端,写有一些符号。这些符号被称为基数约束(cardinality constraint),用来表示实体可以有多少实例与另一实体的实例存在联系。

        基数约束共有四种形态:

        此为形态一,即强制多个对应,表示一个实体A对应多个实体B。

        此为形态二,即可选多个对应,表示一个实体A对应0个或多个实体B。

        此为形态三,即强制单个对应,表示一个实体A对应一个实体B。

        此为形态四,即可选单个对应,表示一个实体A对应0个或1个实体B。

        我们知道联系是双向的,所以实际ER建模中常见的版本长这样:

        理解这个联系的方法是从两个方向进行解读,“实体A对应0个或1个实体B,实体B对应一个或多个实体A”。

扩展概念

        使用前面介绍的这些概念,已经能完成基础ER建模了。然而,为了更为细致的刻画出用户需求,又有了下面这些建模规则。

        1. 复合属性(composite attribute)

        部分属性具有复合的特点,比如地址属性。地址可能包含了省份,城市,街道等子属性。

        ER图上这类属性的属性名应当标记圆括号,然后扩展为多个子属性。可参考下面这个商店实体定义:

        2. 多值属性(multivalued attribute)

        部分属性具有多值的特点,比如一个职工可能有多个电话号码。

        ER图上这类属性用双层椭圆标识,可参考下面这个职工实体定义:

        3. 派生属性(derives attribute)

        部分属性可从其他属性或者其他数据(如当前日期)派生出来,这类属性在ER图上用虚线椭圆标识。

        可参考下面这个士多店实体定义:

        上图中士多店的YearsInBusiness属性表示店铺开张了多少年,这个属性可以结合当前日期与OpeningDate属性算到,因此用虚线椭圆标识。

        4. 可选属性(optional attribute)

        部分属性可能有也可能没有取值,比如说职工奖金。

        ER图上这类属性通过在属性名后面添加(0)标识,可参考下面这个职工实体定义:

        5. 联系的进一步描述

        a. 可以在联系中表明联系中的最大最小基数,如下图所示:

        在上面这个例子中,每个学生具体对应到了2-6间教室;同时每间教室对应到了5-40名学生。

        b. 也可以在联系中说明联系中的角色。这在一元联系中尤为常见,如下图所示:

        每个人只能送给其他人一份礼物,但可以收到0或多份礼物。

        6. 关联实体(associated entity)

        关联实体示用于描述M:N联系的一个替代方式,用一个内部有菱形的矩形表示,它没有唯一属性也没有部分唯一属性,且通常来说没有任何属性。

        如下两个图可以说是等价的:

        关联实体基本都是在多元联系的场景下用到,后面的高级话题部分会讲。

        7. 弱实体(week entity)

        通常来说,实体至少要有一个唯一属性。因为这样才能精确定位到需要处理的记录。但在ER建模这一层,也并非总是如此。

        举例来说,假如现在需要为某个连锁酒店管理系统进行ER建模。该公司在全国各地都开有酒店。现在需要记录下各地酒店的房间使用情况。

        可以将房间使用相关信息作为酒店的建模一个多值复合属性,如下图所示:

        这样做算是对的,但是并没有体现出部分码地位,也就是说各RoomID在各Building的唯一性。同时,很多时候需要将房间实体化与其他实体相联系。比如每个房间对应的清洁工。

        引入弱实体机制后,便可顺利解决这两个问题。如下图所示:

        两个地方要注意一下,一是弱实体的“主码”称为部分码,码名下方用虚线标记;

        再一个就是弱实体必须至少有一个属主实体,它们之间的联系需用双框菱形标识。弱实体部分码同其属主实体候选码的组合可以唯一定位到任何一个弱实体记录。

高级话题

        1. 相同实体之间具有多个M:N关系

        某人为一个学生选课系统进行ER建模,得到如下结果:

        假如需求中有说明:一个同学一门课只能选一次,那这样的设计没问题。可是如果需求中说明,一个同学可以选一门课几次(可能是挂了好几次),这样的设计就有问题了。

        对此,正确的做法之一是使用有两个属主实体的弱实体:

        或者为每次预定生成一个唯一的id,如下图所示:

        2. 三元(或更多)关系

        在ER图中,联系一般是将两个实体关联起来,又或者自己关联自己。但是也有些时候,需求方需要同时将多个实体联系起来。这怎么办呢?要知道表示联系的菱形有且只有两个接口。

        答曰:使用关联实体。下面这个ER图中,使用了关联实体描述了某工厂的供货商,生产产品,零件三方联系:

        但如果现在需求又变更了,需要给关联增加某些属性,比如说供货商每次提供的货物量,这个ER图就不能用了。

        因为这样就没办法区分同一家供应商为同一产品提供等数量的同一零件的不同实例了。解决的办法是把关联实体改成一般的实体,并增设一个唯一标识符:

其他说明

        1. 本文实体名全大写,属性和关系名则用首字母大写的驼峰法,同时尽量保证所有命名都全局唯一;

        2. 用户的更多个性需求应当以注释,标签等方式一并标记在ER图中;

        3. 建模工具可使用PowerDesigner,Workbench等。不过笔者在这里推荐一款轻量级的在线数据库建模工具,网址是https://erdplus.com/#;

小结

        需求分析,ER建模是贯穿整个数据库生命周期的工作。这部分工作要求开发人员和业务方,数据库的使用者,公司领导等方面协同好需求,并将需求以ER图的模式可视化展现出来。

        只有绘制好ER图之后,才能顺利进入到接下来的关系表设计阶段。这也是下篇要讲解的内容。


  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
数据库设计 数据库数据库应用程序的重要组成部分。一个设计结构合理的数据库对于应用程序的开发效率和程序的性能都是非常重要的。成功的数据库设计意味着数据库能够存储所有必需的数据,而且其存储方式保证能够快速的保存、提取、编辑、删除数据。许多因素影响数据库设计是否成功,而数据库是否规范化是一个关键的因素。一个规范化的数据库应满足第三范式的要求,即应该竭力避免部分依赖和传递依赖,这样可以减少数据冗余造成的由于数据异常引起的不必要错误[20]。数据库的设计过程大致如下。 (1)数据库需求分析。根据用户需求,确定数据库中要保存的数据信息。对用户需求进行分析时数据库设计的第一个阶段。不断的调查与研究用户需求,了解企业运作流程等系统需求,是设计概念模型的基础。 (2)设计数据库的概念模型。概念模型是按用户的观点来对数据建模,是用于进行信息世界建模的工具。它对整个数据库的设计具有深刻的影响。 (3)逻辑结构设计。逻辑结构是把概念结构转化为与所采用的数据库管理系统所支持的数据模型相符合的过程。 (4)数据库的实施和维护。在设计好前台与后台的功能模块后,就开始进行数据库的设计了。根据网站系统的分析,数据库是整个网站的核心。从前台显示的信息到后台操作的对象,都是围绕数据库展开的。 本系统是按照需求分析、概念模型设计、逻辑结构设计、数据库的实施和维护的流程完成数据库设计,力求满足该设计原则。 数据库表设计 数据库的设计通常是以一个已经存在的数据库管理系统为基础的,常用的数据库管理系统有MySQL、SQL Server、Oracle等。根据用户的需求和系统分析,本系统采用MySQL数据库管理系统。在MySQL数据库管理系统中建立名称为db_eatery的数据库。这个数据库需要提供各种信息的保存、更新和查询,这就要求数据库结构充分满足各种信息的输出和输入。搜集基本数据、数据结构和数据处理的流程,组成一个详尽的数据字典,为后面的具体设计打下基础。 根据系统功能需求,网上订餐系统数据库中将建立以下10个数据表: 管理员信息表(admin) 会员信息表(member) 会员级别表(memberlevel) 餐饮类型表(foodType) 餐饮信息表(foodInfo) 订单信息表(orders) 美食数据库的设计全文共6页,当前为第1页。 购餐车信息表(cart) 美食数据库的设计全文共6页,当前为第1页。 餐饮订购细则表(foodDetail) 留言评价表(messages) 公告信息表(notice) 数据库概念模型设计(E-R图) 数据模型是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架。描述了数据结构、数据操作及数据约束。 E-R模型的基本概念: ER图概念化地构建实体间关系的模型,这使得它们区别于数据库模型图。ER图的理念是:项目所有参与者能理解ER图ER图由不同实体类型、关系、特性和类型构成。实体是诸如用户的实际对象,有时更抽象,但必须有业务意义。特性用于描述实体,关系用于实体之间[20]。实体是现实世界中的事物;属性是事物的特性;联系是现实世界中事物间的关系。实体集的关系有一对一、一对多、多对多的联系。 根据数据库需求分析,设计规划出本系统的实体有:管理员和会员实体,餐饮信息实体,订单实体,公告实体和留言评价实体。下面以会员实体对象和餐饮信息实体对象为例来说明。 会员实体对象拥有会员的基本属性,包括会员编号,会员级别,用户名,密码,地址,注册时间等属性。会员编号是识别不同会员的唯一标识,数据类型为int型,并且是数据库自增的。其他属性是会员通用的特性。会员信息的实体对象如图4-2所示。 图4-2 会员实体对象 美食数据库的设计全文共6页,当前为第2页。餐饮信息实体对象包括餐饮编号,餐饮名称,类别编号,有无特价,市场价,会员价等属性。餐饮编号是辨别餐饮实体的唯一标识,数据类型为int型,是数据库自增的。其余的属性是餐饮的通用属性。餐饮信息的实体对象如图4-3所示。 美食数据库的设计全文共6页,当前为第2页。 图4-3 餐饮实体图 订餐系统中各个实体对象之间存在着关系,将实体间的关系表示为订餐系统的系统E-R图。如图4-4所示。 图4-4 系统E-R图 数据库逻辑结构设计 根据对网上订餐系统的分析设计如下数据表。每个表格对应数据库中每一张表的具体设计情况。 (1)管理员信息信息表 管理员信息表主要存储管理员的基本信息,包括管理员ID,管理员级别,登录名,密码等信息。其表结构如表4-1所示。 表4-1 admin管理员信息表 列名 数据类型 长度 是否空 默认值 描述 Id int 4 否 自动增长1 管理员ID号,主键 AdminType Int 4 否 管理员级别编号 Admi
理解数据库类型、模型、设计,以及设计的术语;发现良好的数据库设计能为你带来什么好处,以及为什么不好的数据库设计会给你带来痛苦;为你的数据库设定目标,并将其付诸实际的设计;分析一个现有的数据库,以便于你掌握改进它的方法;创建表结构和表关系,设定主键,设置字段说明,并设定视图;确保每一个应用有恰当水平的数据完整性;明确和建立业务规则。 《自己动手设计数据库》主要讲述数据库的设计,讨论了如何建立表结构、确定主键、设置字段说明、建立表关系、确立业务规则、建立视图和各层次的数据完整性,以及如何避免不好的设计等问题。《自己动手设计数据库》提供的是数据库设计的一种概念性思路,因此与市面上众多的同类书籍相比,《自己动手设计数据库》有两个比较鲜明的特点。第一,作者采用简单易懂的语言,尽量清晰、全面地描述关系数据库设计的整个过程,没有过多专业的术语和复杂的数据库设计方法学,因此《自己动手设计数据库》既适合专业人士参考之用,也适合给初学者、数据库设计爱好者充当从入门到进阶的重要读物。第二,作者高度重视数据库的逻辑设计,严格区分逻辑设计和实现阶段,以确保高效、成功地设计良好的数据库。 《自己动手设计数据库》适合数据库初学者、有经验的数据库开发人员,以及所有对数据库设计感兴趣的读者阅读参考。
图书馆图书管理系统需求分析报告 引言 编写目的:明确本系统详细需求,供试用方确认系统的功能。 项目背景:开发软件名称:图书馆理系统 项目开发者:信息管理和信息系统专业 任务概述 该系统是具有一个馆长和多个管理员的图书管理系统。图书馆藏书多,每天借阅量大,在 手工操作方式下,图书的编目和借阅等的工作量大,准确性低且不易修改维护,读者到图 书馆手工查询书目不能满足借阅的需要,所以建立一套具有读者管理系统,图书编目,读 者借阅以及查询等功能的系统很必要。该图书管理系统服务对象为:借阅者和管理人员 ,一次限借10本,为期30天,续借限一次,7天。超时罚款0。1元/天,图书丢失5倍赔偿 。 人员结构与分工 图书馆由图书馆长全面负责,下设财务室,采购室,借阅室. 财务室:对各个赔偿,采购,罚款的处理。 采购室:主要负责图书的采购,入库编目,编目后上架等。 借阅室:提供读者的书目按作者和书名进行查询和续借。 馆长:管理图书的统计信息,读者信息的统计,在宏观上管理图书馆运行状态,馆长对图 书的管理按月/年,分别对财务,图书馆库存,外借书进行大体管理。 管理员:为借书者注册并发放借阅证。图书馆管理人员编图书采购计划,采购员负责采 购。采购入库后,交编目室编目,贴上标签,图书上架以及后续的管理工作.读者分为注 册读者和非注册读者,只有注册读者能进行图书的借阅,借书时需要出视借阅证,管理 员核对后,登记借阅,并修改图书的库存.非注册用户只能阅读,不能借阅。 ER图 流程图: ----------------------- 图书管理系统--数据库建模全文共2页,当前为第1页。 图书管理系统--数据库建模全文共2页,当前为第2页。
CMS之数据库设计 在园子里也混了三年多,随笔200多,一开始只是想把自己的经验写一下,后来呢弄出来了一个"自然框架",主要精力就放在了介绍自然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,但是只支持一级分组,不支持n级的。博客里也没有"栏目"这一类的设置。所以对于随笔的管理有有点力不从心了。有些兄弟看到我的博客,看到我说自然框架,然后就会很迷茫,自然框架到底是什么?能做什么?如果想看看的话,从什么地方开始看,按照什么顺序来看?   博客的这种形式就不大好解决这种需求了,当然也许是我对博客还不了解,没有用好吧。所以我想做一个网站,这个网站专门介绍自然框架。一开始只想做一个静态的,内容也不多嘛,做几个页面,介绍一下,把博客里的随笔整理一下做个目录便于阅读。但是试了一下才发现,静态页面好麻烦呀,也许是我太懒了吧,总是想简单一些。于是就想做一个简单的CMS,然后用这个CMS来做自然框架的介绍网站。   您可能会说了,海洋又在重复制造轮子了,网上有一大堆现成的,有很多成熟的不去用,自己写什么呀?   首先呢,我是程序员(嘿嘿),我先想到的是我自己能不能做出来?别人能做我为什么不行?我不是顾客,我也不是有钱人,到处去弄现成的。其次呢,做一个CMS也是一个练手的机会,同时也是自然框架的一个Demo,比较大的、完整的Demo。借此来说明自然框架的使用方式,和在网页里的作用。最后就是想借此说一下我的设计数据库的思路。我觉得我的设计数据库的思路还是有点特色的。   好了,开始进入正题。   首先是了解需求。一个网站会有什么?首页、新闻(图文形式的信息)、产品介绍、文件下载、图片浏览、在线视频等。这些都算是"内容"的几种形式吧,当然还可以有其他的形式。 CMS之数据库设计全文共5页,当前为第1页。  这个需求比较简单,也比较简陋,暂时就以这个需求来进行设计吧。如果是按照面向对象的方式要如何设计呢?这个我不太清楚,也许是要画一个UML吧,也许要建模。尝试一下,画了一个UML不知道对不对,拿出来请大家批批。 CMS之数据库设计全文共5页,当前为第1页。 【CMS的类图】   图很简单也没什么具体的属性,因为需求是变化的,现在也没有太具体的需求,所以属性就先设置几个主要的。另外俺英文不好,怕查出来的英文单词不正确产生歧义,所以直接用汉字了。可能您看着很别扭,但是至少不会产生什么歧义,理解起来也会比较容易吧,呵呵。   "内容"作为父类,其他的作为子类。内容是一种"抽象",把各种形式的内容的共同部分提炼出来,比如标题、内容、添加人、添加日期、点击量等。子类负责各自特有的属性。   我觉得这种提炼的方式比较好,在设计数据库表结构的时候可以借鉴一下。于是就有了这样的数据库设计。 CMS之数据库设计全文共5页,当前为第2页。【CMS ER图】 CMS之数据库设计全文共5页,当前为第2页。   "内容"作为主体和中心,其他的都是为了这个中心(内容)来服务的。左面是对内容的限制,栏目相当于大分类,分类就是小分类(可以是n级的),类型就是内容的形式,比如图文、下载、视频、图片等。右面是扩展。扩展和类型是一一对应的。   这就形成了一个"骨架",骨架是以"内容"为中心,ArticleID作为关联字段,可以增加扩展表,但是都要以ArticleID作为关联字段。至于有多少扩展表,那就可以根据实际需求来变化,表里的字段也是可以根据需求来增减。   设置这种"骨架"的好处:虽然扩展表、字段会有变化,但是"骨架"结构是不变的。这样一是可以让结构清晰,抓住中心、重点;二是当需求变化的时候,对结构的影响降到最低;三是,如果对于这种"骨架"习惯、掌握了之后,在看到其他项目的设计就会很容易进入和读懂。关于第三点,以后大家就会理解的。 CMS之数据库设计全文共5页,当前为第3页。  基本思路就是这样,抛砖引玉了。 CMS之数据库设计全文共5页,当前为第3页。 CMS之数据库设计全文共5页,当前为第4页。ps:CMS的字段说明 CMS之数据库设计全文共5页,当前为第4页。 表编号 字段编号 字段名 中文名 类型 大小 默认值 允许空 说明 5000 0 CMS_Channel 网站栏目           5000 10 ChannelID 主键 int 4 1 0 主键,自增 5000 20 channelName 栏目名称 nvarchar 30 _ 0 栏目名称 5000 30 Sort 排序 int 4 10 0 小号在前 5000 40 URL 栏目的网址 nvarchar 50 _ 0 新闻内容     5005 0 CMS_ArticleClass 内容的n级分组           5005 10 ClassID 主键 int 4 1 0 主键,自增
数据库设计是指在规划和设计关系型数据库时,需要考虑数据库的结构、数据类型和数据关系,以满足用户需求、提高数据访问效率和保证数据完整性。以下是一个数据库设计的步骤: 1. 需求分析:收集用户的需求,确定数据库的功能、数据存储方式和数据访问方式。 2. 数据建模:使用数据建模工具,设计数据库的实体、属性和关系,生成ER图。 3. 数据库规范化:将ER图转换为关系模型,消除冗余数据,提高数据存储效率。 4. 数据库设计:根据关系模型设计数据库表结构、数据类型、约束和索引。 5. 数据库实现:使用SQL语言创建数据库、表、视图、索引、存储过程和触发器等对象,并插入数据。 6. 数据库测试:对数据库进行功能测试、性能测试和安全测试,验证数据访问的正确性和有效性。 7. 数据库维护:定期备份和恢复数据库,优化数据库性能,修复数据库错误和漏洞,保证数据安全和可靠性。 在数据库设计过程中,需要考虑以下几个方面: 1. 数据库范式:数据库范式是一种规范化的设计方法,用于消除冗余数据和提高数据存储效率。常用的数据库范式有第一范式、第二范式、第三范式等。 2. 数据库性能:数据库性能是指数据库的响应速度、并发处理能力和数据访问效率等。优化数据库性能可以通过合理设计表结构、建立索引、使用存储过程和触发器等方式实现。 3. 数据库安全:数据库安全是指保护数据库免受非法访问、恶意攻击和数据泄露等威胁。应该采取有效的授权、认证、加密和审计等措施,保证数据库的安全性和可靠性。 4. 数据库扩展性:数据库扩展性是指数据库支持的容量、并发用户数和应用场景的可扩展性。应该采用可扩展的数据库架构、分布式数据库和云数据库等技术,保证数据库的扩展性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值