`

分析与设计数据库模型的简单过程

 
阅读更多

近期在做一个业务系统的分析和数据模型设计,工作这几年也做过好几个项目的数据库模型的设计,期间也算是积累了一定的经验吧,这次有机会就写写我的数据库模型设计过程与方法。

在数据库设计中,设计的目标就是要建立E-R图(实体-关系图),在PowerDesigner中就是要建立概念模型或者逻辑模型。既然是实体-关系图,所以整个建模的核心就是围绕建立“实体”对象和找到实体之间的“关系”。实体分为两部分:标识(主键)和属性。标识是实体的一个或多个属性的组合,用于唯一的表标识出实体中的每一个数据。在确认一个实体的过程中,首先就是要确认实体的主键,只要找到了实体的主键,那么剩下的就是实体的属性。

1.确认核心实体

在建模过程中,首先需要对业务进行分析,知道我们的模型要表示怎么样的一个事情,从而确定我们模型的核心实体,找到了核心实体和其主键,那么剩下的工作就是以核心实体为中心进行实体关联的扩展和实体属性的抽象。一个数据库模型中一般会有1~2个实体作为整个模型的核心实体,核心实体一般都是一个名词,在整个业务过程中作为主语和宾语。所以总的来说,我们用一个主谓宾的句子来描述我们这个模型,那么基本就可以肯定,这句话中的主语和宾语就是核心实体,而通常谓语也是一个很核心的对象,该对象可能会产生一个实体来表示,也可能只是一个关联(Association)。通常数据库中数据量最大的表就是谓语对应的表。

以上说法可能比较抽象,用一两个简单的例子来说明。假设我们需要设计一个学生选课系统的数据库模型,那么首先就是要分析,我们这个系统是做什么的,记录什么的?“学生选课”!虽然只有4个字,但是已经完整的表达整个系统,从这样一个主谓宾的句子中,我们可以得出,整个模型的核心是“学生”(主语)和“课程安排”(宾语),谓词“选”表名了两个实体之间的核心关系。确定了核心的实体“学生”和“课程安排”,那么接下来就是要确定实体的主键和属性。“学生”实体的主键很容易确定,只要找到能够唯一标识每个学生的一个字段即可,所以我们可以使用“学号”来作为学生实体的主键,一个学校中每个学生的学号肯定是唯一的。“课程安排”这个实体的主键并没有那么明显的属性能够表示,对于无法找到明显的实体属性作为主键的情况下,我们需要创建一个专门的标识列(ID)用来标识实体中的每个实例。在数据库中最常见的ID就是自增列。这里我们可以设计“课程安排ID”作为课程实体的主键,每在数据库中增加一门课程,系统会自动为该课程分配一个自增的唯一整数来标识。

image

再比如一个要设计一个电子商务系统的数据库模型,首先一句话总结该系统就是“用户在网上购买商品”,所以这个系统的核心实体就是“用户”和“商品”。用户实体的主键是什么?用户的登录名是唯一的、邮箱是唯一的,都可以作为该实体的主键。但是在真实的电子商务系统中很少使用登录名或邮箱来作为主键,因为其中一个很重要的原因是登录名和邮箱都太长,而且长度不确定,所以在数据库中一般会设计一个自增的“用户ID”来作为用户的主键。商品实体的主键可以用商品的条形码来作为主键,确实可以这么做,但是同样的原因,条形码太长了,所以一般会用一个Int型的自增列“商品ID”作为商品的主键。

image

2.确认相关实体

在找到了核心实体后,接下来就是以核心实体为中心,找到相关的实体。相关实体一般来说就是和核心实体存在直接联系的实体,当然也有些相关实体是要经过另一个相关实体与核心实体关联。相关实体一般情况下都是名词。

以选课系统为例,与学生相关的实体是什么?班级、专业方向、院系等,与课程安排相关的实体是什么?课程、课程的详细安排、安排的教师等,所以我们可以将这些要关联到的实体都建立。

image

再看看前面说到的电子商务平台,核心实体是用户和商品,围绕用户,我们需要建立用户的“订单”(包括订单的明细)、用户的“代金券”等实体,围绕商品,我们需要建立商品的分类,商品的供应商等相关实体。于是我们的电子商务数据库模型变为:

image

这一步并没有完成,一个实体可以没有属性,但是却不能没有主键,所以需要给所有相关实体添加主键,我们可以以简短的可以唯一标识实体的属性来作为主键,也可以使用自增的ID作为主键,在数据库中出于性能、快捷等方面的考虑,大部分实体都是以ID作为主键。

3.确认关联和关系

关联(Association)也是一种实体间的连接,在Merise模型方法学理论中,Association是一种用于连接分别代表明确定义的对象的不同实体,这种连接仅仅通过另一个实体不能很明确地表达,而通过“事件(Event)”连接来表示。

也就是说,实体和实体之间存在着关系(多对多),但是这种关系还存在其他的属性,这些属性如果如果作为一个明确的实体的实体来表示又不是很合适,所以就使用了Association来表达,这种关系之间一般是一个“事件”虚实体,也就是说是一个动词对应的实体。

以选课系统为例,“选课”这个动词就是需要用关联来表示,一个学生可以选择多个课程安排,一个课程安排会有多个学生来选,所以学生和课程安排之间是多对多的关系,但是学生选课时还需要记录学生的时间、选课是否成功等信息,所以需要使用关联来表示选课这个动作。

前面说到的多对多是实体之间的一种关系,两个实体之间存在4种关系:一对一、一对多、多对一和多对多。根据核心实体和相关实体之间的关系建立实体之间的关系,于是我们的选课系统数据库模型如图所示:

image

对于一个电子商务系统,分析其中的实体之间的关系,也可以得到类似的关系图。要表示用户对商品的收藏,也就用户和商品两个实体直接的直接关系,一个用户可以收藏多件商品,一个商品可以被多个用户收藏,所以用户和商品之间是多对多的关系。另外,商品分类和自身是一个一对多的关系,因为分类存在大分类和小分类,是一种层级关系,一个父级分类下面有多个小分类,一个小分类只会有一个父级分类,所以分类自身一对多。

image

4.确认属性

前面几步工作时最重要最核心的工作,接下来的工作就是要完善模型。首先需要的就是要将实体的属性补齐,实体的属性可以根据日常生活常识、用户提交的表单、用户需求调研等来确定。比如学生表,根据常识我们知道,学生会具有姓名、性别、生日等属性;课程会具有课程名、学分等属性;课程的详细安排会安排具体的时间、上课的地点等属性……在实际的企业应用中,大部分实体的属性时不可能通过常识来得到的,必须进行需求的调研,结合业务上的需求和实际中的表单、数据流等找到实体的属性。比如对于供应商这个实体,我们只知道供应商有编号,有名字,还有其他什么属性就必须得调研了。调研时我们知道企业新增加一个供应商时会填写一个新增供应商表,那么我们就可以拿到该表,更加表单的内容来设计供应商实体的属性。

5.范式化

在前面设计选课系统的数据模型时,对于选课的详细信息实体,会存在上课的时间、上课的地点等属性,但是仔细一考虑,这些属性如果直接放在该实体中,必然会形成数据重复,导致数据维护困难,不符合3范式的设计原则,所以应该将这些属性提出,作为单独的实体,于是,我们的选课系统的数据库模型就变为如图所示:

image

再说下电子商务系统的模型,里面最重要的一个实体“商品”会包含很多属性,比如大小、颜色、重量、卖价……,这其中,大小、颜色本身也可以作为实体抽取出来,以便于进行维护,所以我们的电子商务系统的模型便为:

image

6.细节调整

现在整个模型已经基本上完成了,但是仍然有几个地方需要进一步的确认和调整:属性的数据类型和实体之间的关系。现在数据库模型中,所有的属性的数据类型都是Undefined,需要根据系统要求、业务需求和调研来确定每个属性的数据类型。但一般来说还是具有一定的规则可循:

  • 自增ID用Integer型,如果数据量会特别特别大的话,可以使用长整型。
  • 涉及到金额的用Money类型。
  • 涉及字符串的确定该属性中是否有可能出现中文,如果有中文出现的,用variable multibyte,没有中文出现那就用Characters或者variable Characters。
  • 如果是枚举类型的,用Byte。
  • 日期和时间类型的,确定是要用日期还是用时间,或者两者都需要记录。
  • 具有小数的用float类型。

按照实际情况将模型中的每个属性的数据类型进行修改。另外就是实体之间的关系,在默认情况下,添加的实体关系是一对多的关系,另外也可能存在一对一或者多对多的关系,除了这些关系外,另外还需要确定对应的关系实体是否是必须的。一对多中,一这部分就存在0,1 和1,1两种情况;多的部分存在0,n和1,n两种情况。最常见的情况是1,1:0,n,也就是说多的一端肯定会对应一个一的实体,而一的一端可以对应0到多个实体。

image

再比如电子商务系统,确定该数据库模型中每个实体属性的数据类型,然后修改实体之间的关系,将必须存在值对应的地方修改为1,1或者1,n即可。

image

通过以上几步操作,我们可以建立完整的数据库概念模型,主要应该关注在实体的建立(核心就是要找到实体的主键)和实体关系的建立(核心就是找到实体直接是一对多还是多对多或者一对一),只要把这两点做好,那么整个模型的框架就搭建好了。

分享到:
评论

相关推荐

    自己动手设计数据库.[美]Michael J.Hernandez(带详细书签) PDF 下载 高清 完整版

    第一,作者采用简单易懂的语言,尽量清晰、全面地描述关系数据库设计的整个过程,没有过多专业的术语和复杂的数据库设计方法学,因此《自己动手设计数据库》既适合专业人士参考之用,也适合给初学者、数据库设计爱好...

    动态可扩展的数据库设计.docx

    但是, 如果在数据库设计阶段,建立数据库模型时没有充分考虑到数据库 应用系统以后可能的改变及扩展,将使系统以后的维护工作变得极 其困难,甚至必须重新开发数据库应用系统。本文针对数据库应用 系统开发过程中...

    车站售票管理系统【SQLServer数据库+课程设计文档】

    车站售票管理系统【SQLServer数据库+课程设计文档】 1. 系统需求分析 1.1系统调查 1.2用户需求 2.系统逻辑方案 2.1数据流图(简称为DFD) 2.2数据字典(简称为DD) 2.2.1数据项 3.系统总体结构设计 3.1软件...

    数据库课程设计--图书管理系统.doc

    软件工程与数据库 课程设计 任务书 学院名称: 数学与计算机学院 课程代码:_6014419_ 专 业: 年 级: 一、设计题目 图书管理系统 二、主要内容 一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息...

    数据库设计说明书模板

    本文档是对xxx项目数据库模型的概要设计,是进行CDM模型设计的基础。 系统名称及版本号 系统全称: 系统简称: 电子文档编写工具 【说明】工具名、版本号、操作系统平台。使用多种工具时,应分别说明。 ...

    数据库原理与应用课程设计------多媒体教室申请管理系统

    在需求分析的基础上,应用概念模型的相关设计方法,完成数据库的概念模型设计。所设计的概念模型应为CDM图。 4逻辑结构设计 粘贴根据CDM图转换来的PDM图 5物理结构设计 粘贴由PDM生成数据库过程中的SQL脚本,为节省...

    库存管理系统数据库设计(1).doc

    E-R方法的基本思想 在设计过程中引入一个中间步骤,即先设计一个企业模式(该模式纯粹是现实世界的 反映,与存储结构、存取方式无关),再将企业模式转换为某个DBMS上可以实现的数据 模型。多数是关系数据模型。 3....

    医药销售管理系统数据库课程设计.docx

    结合需求分析与概念结构设计把设计好的E-R图转换为DBMS所支持的数据模型所符合的逻辑结构,此系统只针对医药超市内部管理使用,运用SQL数据库管理系统建表录入数据,进行查询、插入、删除、修改等操作。 关键词: ...

    数据库销售系统课程设计

    需求分析是设计数据库的起点,需求分析的结果准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。进销存管理的思想是:从客户需要和供应情况出发来规划企业的生产经营...

    SQL-server数据库设计-餐饮管理系统.doc

    在sql server2000 上实现设计的数据库模型。 4.对应用程序进行概要设计。 5。用VB实现简单的应用程序编写。 二、要求 设计过程中,要严格遵守课程设计的时间安排,听从指导教师的指导.正确地完成上述 内容,规范完整...

    SQL数据库设计.doc

    SQL Server 数据库设计 一、数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表 与表之间的关系比较复杂,那我们就需要进行规范的数据库设置。如果不经过数据库的 ...

    数据库设计各阶段.docx

    3."概念结构设计 如同软件工程中重视需求分析与规范说明的思想一样,数据库设计中同样十分重视数据分析、抽象与概念结构的设计。概念结构的设计,是整个数据库设计的关键之 一。"概念结构独立于数据库逻辑结构,...

    企业信息化发展下数据库设计.doc

    2 数据库的设计步骤 设计数据库其实也就是设计数据库的三种模式,主要的设计流程有需求分析、概念设计 以及逻辑、物理等方面的设计。以下我们针对企业信息化发展下的数据库设计进行简单 分析。 2.1 企业的需求分析 ...

    SQLServer数据库设计.pdf

    SQLServer数据库设计 数据库设计 ⼀、数据库设计的必要性 在实际的软件项⽬中,如果系统中需要存储的数据量⽐较⼤,需要设计的表⽐较多,表与表之间的关系⽐较复杂,那我们就需要进⾏规 范的数据库设置。如果不经过...

    会议管理系统数据库设计文档.doc

    数据库设计 1 抽象数据对象 1 系统主要业务分析 根据物流系统的业务流程描述,我们大致可以从中抽象出几个数据集合,如: 普通用户、会议申请、会议室管理、设备管理、会议管理 按照业务及系统功能简单总结数据对象...

    数据库设计方法.doc

    数据库设计方法:数据库的设计思路方法、规范标准和窍门技巧 数据库设计方法:数据库的设计思路方法、规范标准和窍门技巧 数据库设计过程 数据库技术是信息资源管理最有效手段数据库设计是指对于个给定 应用环境构造...

    面向对象系统分析与设计课件及复习资料

    第12章 简易教学管理系统的分析与设计 12.1 系统需求 12.2 分析问题领域 12.2.1 确定系统范围和系统边界 12.2.2 定义活动者 12.2.3 定义use case 12.2.4 绘制use case图 12.2.5 绘制主要交互图 ...

    宿舍管理系统数据库课程设计.doc

    目录 宿舍管理系统 - 1 - 一 概述 - 1 - 1.1设计背景 - 1 - 1.2设计目的 - 1 - 1.3涉及范围及相关领域 - 2 - 二 需求分析 - 2 - 2.1功能需求 - 2 - 2.2数据流图 - 3 - 三 概念结构设计 - 4 - 3.1数据库实体E-R图 - 4...

Global site tag (gtag.js) - Google Analytics