ER模型

数据库设计是牵一发而动全身的。那有没有什么办法提前看到数据库的全貌呢?比如需要哪些数据表、数据表中应该有哪些字段,数据表与数据表之间有什么关系、通过什么字段进行连接,等等。这样我们才能进行整体的梳理和设计。

其实,ER模型就是一个这样的工具。ER模型也叫作实体关系模型,是用来描述现实生活中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。在开发基于数据库的信息系统的设计阶段,通常使用ER模型来描述信息需求和信息特性,帮助我们理清业务逻辑,从而设计出优秀的数据库

1.ER模型包括哪些要素
ER模型中有三个要素,分别是实体、属性和关系

实体,可以看做是数据对象,往往对应于现实生活中的真实存在的个体。在ER模型中,用矩形来表示。实体分为两类,分别是强实体弱实体。强实体是指不依赖于其他实体的实体;弱实体是指对另一个实体有很强的依赖关系的实体。

属性,则是指实体的特性。比如超市的地址、联系电话、员工数等。在ER模型中用椭圆形来表示。

关系,则是指实体之间的联系。比如超市把商品卖给顾客,就是一种超市与顾客之间的菱形。在ER模型中用菱形来表示。

注意:实体和属性不容易区分。这里提供一个原则:我们要从系统整体的角度出发去看,可以独立存在的是实体,不可再分的是属性。也就是说,属性不能包含其他属性。也就是说,属性不能包含其他属性。

2、关系的类型
在ER模型的3个要素中,关系又可以分为3种类型,分别是一对一、一对多、多对多。

一对一∶指实体之间的关系是一一对应的,比如个人与身份证信息之间的关系就是一对一的关系。一个人只能有一个身份证信息,一个身份证信息也只属于一个人。

一对多∶指一边的实体通过关系,可以对应多个另外一边的实体。相反,另外一边的实体通过这个关系,则只能对应唯一的一边的实体。比如说,我们新建一个班级表,而每个班级都有多个学生,每个学生则对应一个班级,班级对学生就是一对多的关系。

多对多∶指关系两边的实体都可以通过关系对应多个对方的实体。比如在进货模块中,供货商与超市之间的关系就是多对多的关系,一个供货商可以给多个超市供货,一个超市也可以从多个供货商那里采购商品。再比如一个选课表,有许多科目,每个科目有很多学生选,而每个学生又可以选择多个科目,这就是多对多的关系。

3、建模分析
ER模型看起来比较麻烦,但是对我们把控项目整体非常重要。如果你只是开发一个小应用,或许简单设计几个表够用了,一旦要设计有一定规模的应用,在项目的初始阶段,建立完整的ER模型就非常关键了。开发应用项目的实质,其实就是建模

我们设计的案例是电商业务,由于电商业务太过庞大且复杂,所以我们做了业务简化,比如针对SKU(StockKeepingUnit,库存量单位)和SPU(Standard Product Unit,标准化产品单元)的含义上,我们直接使用了SKU,并没有提及SPU的概念。本次电商业务设计总共有8个实体,如下所示:

  • 地址实体
  • 用户实体
  • 购物车实体
  • 评论实体
  • 商品实体
  • 商品分类实体
  • 订单实体
  • 订单详情实体

其中,用户商品分类是强实体,因为它们不需要依赖其他任何实体。而其他属于弱体,因为它们虽然都可以独立存在,但是它们都依赖用户这个实体,因此都是弱实体。知道了这些要素,我们就可以给电商业务创建ER模型了,如图:


4、ER模型细化
有了这个ER模型,我们就可以从整体上理解电商的业务了。刚刚的ER模型展示了电商业务的框架,但是只包括了订单,地址,用户,购物车,评论,商品,商品分类和订单详情这八个实体,以及它们之间的关系,还不能对应到具体的表,以及表与表之间的关联。我们需要把属性加上,用椭圆来表示,这样我们得到的ER模型就更加完整了。

因此,需要进一步去设计一下这个ER模型的各个局部,也就是细化下电商的具体业务流程,然后把它们综合到一起,形成一个完整的ER模型。这样可以帮助我们理清数据库的设计思路。

接下来,再分析一下各个实体都有哪些属性,如下所示:
(1)地址实体包括用户编号、省、市、地区、收件人、联系电话、是否是默认地址。
(2)用户实体包括用户编号、用户名称、昵称、用户密码、手机号、邮箱、头像、用户级别。
(3)购物车实体包括购物车编号、用户编号、商品编号、商品数量、图片文件url。
(4)订单实体包括订单编号、收货人、收件人电话、总金额、用户编号、付款方式、送货地址、下单时间。
(5)订单详情实体包括订单详情编号、订单编号、商品名称、商品编号、商品数量。
(6)商品实体包括商品编号、价格、商品名称、分类编号、是否销售,规格、颜色。
(7)评论实体包括评论id、评论内容、评论时间、用户编号、商品编号
(8)商品分类实体包括类别编号、类别名称、父类别编号

这样细分之后,就可以重新设计电商业务了,ER模型如图:

5、ER模型图转换成数据表
通过描绘ER模型,我们已经理清了业务逻辑,现在,我们就要进行非常重要的一步了:把绘制好的ER模型,转换成具体的数据表,下面介绍下转换的原则:
(1)一个实体通常转换成一个数据表;
(2)一个多对多的关系,通常也转换成一个数据表;
(3)一个1对1,或者1对多的关系,往往通过表的外键来表达,而不是设计一个新的数据表;(4)属性转换成表的字段。

Mysql——ER模型相关推荐

  1. mysql学生选课系统的关系模型_数据库系统原理ER模型与关系模型

    数据库系统是软件的一种,数据库系统自然而然也有他自己的生命周期生存期.它的生存期从规划开始,一直到将它卸载不用了.它的中间过程很复杂,为了实现用户的想法,数据库有关人员将现实生活中的数据进行抽象,然后 ...

  2. 在线制作数据库ER模型

    在线制作数据库ER模型 在以往的数据库设计中,我们通过会用到一些数据库的设计工具,有针对Mysql的Mysql workbench, PowerDesign等等工具,可以通过这些工具创建数据库的ER模 ...

  3. 预定酒店的类图与E-R模型

    本文主要对某年代澳大利亚某线上酒店预订网站进行数据库建模,相关的业务文档: https://download.csdn.net/download/qq_33559972/10366961 上一步的用例 ...

  4. 数据库原理之如何设计一个ER模型

    数据库原理之如何设计一个ER模型 前言 这里是 数据库系统原理 系列文章,主要介绍数据库系统理论以及数据库实用技术. 数据库技术是计算机学科中的一个重要分支,它的应用非常广泛,几乎涉及所有的应用领域. ...

  5. mysql第三章关系模型_一个MySQL关系模型只有三个关系(二维表)组成。_学小易找答案...

    [判断题]DELETE语句功能是对表中所有记录或满足条件的记录进行批量删除. [填空题]The computer's entire ____ was on a single board. [单选题]下 ...

  6. 数据库设计三大范式和ER模型

    1. 数据库设计之三范式的介绍 范式: 对设计数据库提出的一些规范,目前有迹可寻的共有8种范式,一般遵守3范式即可. 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列.(1NF强调字 ...

  7. 数据库系统概念总结:第七章 数据库设计和E-R模型

    周末无事水文章,期末备考的总结资料 第七章 数据库设计和E-R模型 7.1 设计过程概览 7.1.1 设计阶段 需要完整地刻画未来数据库用户的数据需求 选择数据模型,并采用所选数据模型的概念将这些需求 ...

  8. MySQL / 索引模型

    一.索引的作用 提高数据查询效率. 二.常见索引模型 哈希表.有序数组.搜索树. 三.哈希表 思路:把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位 ...

  9. DBMS-数据库设计与E-R模型:E-R模型、约束、E-R图、E-R扩展特性、E-R图转换为关系模式、UML建模...

    设计过程概览 1. 设计阶段 ·最初阶段:刻画未来数据库用户的数据需求,产品为用户需求规格说明: ·概念设计阶段(conceptual-design phase):(关注描述抽象数据及其联系,通常使用 ...

最新文章

  1. 发布一个嘿嘿嘿的技术方案 —— 商用群发p2p网络
  2. stm32通用定时器的PWM输出
  3. linux 命令 —-— vi编辑器
  4. sdn体系的三个平面_软件定义网络基础---SDN控制平面
  5. [COCI 2018#5]Parametriziran
  6. echo中使用逗号和句号的区别
  7. 那些年我们追过的计算机经典书
  8. 因为10万元 乐视云计算又把自己折腾成失信被执行人...
  9. JMETER分布式部署注意事项
  10. 是用int还是用Integer?
  11. Java MD5 加密工具类
  12. photoshop CS6 注册码文件 amtlib.dll
  13. http请求下载文件
  14. RecyclerView刷新布局时Glide加载图片闪现
  15. 13.2.3 VAM服务器的配置步骤及示例(2)
  16. 公式不懂也无妨,业务精通才是真正的算法工程师
  17. 2021年目标,我打算这样去实现
  18. IOS应用的产品设计、交互设计理念断想
  19. 23考研总分420+上岸南京大学软件工程专硕南京大学软件工程842经验贴24考研必看
  20. 用umi脚手架初始化项目提示在此系统禁止运行脚本是为什么?

热门文章

  1. vijos 1028 最长上升序列。
  2. python 编译器spyder 安装_离线安装spyder的Python环境
  3. python 基础面试题
  4. c++ 做的生化危机4内存修改器
  5. 类中一定要有主方法吗?
  6. python数据分析之单因素分析(线性拟合)
  7. 十一国庆 停电惊魂
  8. idea 去绿色波浪线
  9. 浏览器访问数据库中的图片路径
  10. UI自动化与接口自动化框架思维