ER模型介绍

2024-09-02 07:44
文章标签 介绍 模型 er

本文主要是介绍ER模型介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7.1.概述:

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

7.2.ER 模型包括那些要素?

ER模型中有三个要素:分别是实体、属性和关系

  • 1.实体:
    • 可以看做是数据对象,往往对应于现实生活中的真实存在的个体
    • 在 ER 模型中,用矩形来表示。实体分为两类,分别是强实体弱实体
    • 强实体是指不依赖于其他实体的实体;弱实体是指对另一个实体有很强的依赖关系的实体。
  • 2.属性
    • 则是指实体的特性。比如超市的地址、联系电话、员工数等。
    • 在 ER 模型中用椭圆形来表示
  • 3.关系
    • 则是指实体之间的联系
    • 比如超市把商品卖给顾客,就是一种超市与顾客之间的联系
    • 在 ER 模型中用菱形来表示

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


7.3.关系的类型:

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

  • 1.一对一:指实体之间的关系是一一对应的
  • 2.一对多:指一边的实体通过关系,可以对应多个另外一边的实体。相反,另外一边的实体通过这个关系,则只能对应唯一的一边的实体
  • 3.多对多:指关系两边的实体都可以通过关系对应多个对方的实体

7.4.建模分析与建表:

a.概述:

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

b.找出业务中的实体:

  • 2.这里设计的案例是尚品汇电商业务 ,由于电商业务太过庞大且复杂,所以我们做了业务简化,比如针对SKU(StockKeepingUnit,库存量位)和SPU(Standard Product Unit,标准化产品单元)的含义上,我们直接使用了SKU,并没有提及SPU的概念。本次电商业务设计总共有8个实体,如下所示。
    • 地址实体
    • 用户实体
    • 购物车实体
    • 评论实体
    • 商品实体
    • 商品分类实体
    • 订单实体
    • 订单详情实体
  • 3.其中, 用户商品分类是强实体,因为它们不需要依赖其他任何实体。而其他属于弱实体,因为它们虽然都可以独立存在,但是它们都依赖用户这个实体,因此都是弱实体。

c.根据实体关系建模:

  • 1.在分析出各个实体、强实体和弱实体这些要素后,我们就可以给电商业务创建 ER 模型了,如图:
    在这里插入图片描述
  • 2.在这个图中,我分析出了各个实体的关系,如地址和用户之间的添加关系,是一对多的关系,而商品和商品详情示一对1的关系,商品和订单是多对多的关系。 这个 ER 模型,包括了 8个实体之间的 8种关系
    • 用户可以在电商平台添加多个地址;
    • 用户只能拥有一个购物车;
    • 用户可以生成多个订单;
    • 用户可以发表多条评论;
    • 一件商品可以有多条评论;
    • 每一个商品分类包含多种商品;
    • 一个订单可以包含多个商品,一个商品可以在多个订单里。
    • 订单中又包含多个订单详情,因为一个订单中可能包含不同种类的商品

d.ER模型的细化

  • 1.有了这个 ER 模型,我们就可以从整体上 理解 电商的业务了。刚刚的 ER 模型展示了电商业务的框架,但是只包括了订单,地址,用户,购物车,评论,商品,商品分类和订单详情这八个实体,以及它们之间的关系,还不能对应到具体的表,以及表与表之间的关联。我们需要把 属性加上 ,用 椭圆 来表示,这样我们得到的 ER 模型就更加完整了。
  • 2.现在我进一步去设计一下这个 ER 模型的各个局部,也就是细化下电商的具体业务流程,然后把它们综合到一起,形成一个完整的 ER 模型。这样可以帮助我们理清数据库的设计思路。
  • 3.下面我再分析一下各个实体都有哪些属性,如下所示。
    • 地址实体 包括用户编号、省、市、地区、收件人、联系电话、是否是默认地址。
    • 用户实体 包括用户编号、用户名称、昵称、用户密码、手机号、邮箱、头像、用户级别。
    • 购物车实体 包括购物车编号、用户编号、商品编号、商品数量、图片文件url。
    • 订单实体 包括订单编号、收货人、收件人电话、总金额、用户编号、付款方式、送货地址、下单时间。
    • 订单详情实体 包括订单详情编号、订单编号、商品名称、商品编号、商品数量。
    • 商品实体 包括商品编号、价格、商品名称、分类编号、是否销售,规格、颜色。
    • 评论实体 包括评论id、评论内容、评论时间、用户编号、商品编号
    • 商品分类实体 包括类别编号、类别名称、父类别编号
  • 4.这样细分之后,我们就可以重新设计电商业务了,ER 模型如图:
    在这里插入图片描述

e.把ER模型图转换成数据表:

  • 1.通过绘制 ER 模型,我们已经理清了业务逻辑,现在我把绘制好的 ER模型,转换成具体的数据表,下面介绍下转换的原则
    • 一个 实体 通常转换成一个 数据表 ;
    • 一个 多对多的关系 ,通常也转换成一个 数据表
    • 一个 1 对 1 ,或者 1 对多 的关系,往往通过表的 外键 来表达,而不是设计一个新的数据表;
    • 属性转换成表的字段 。
  • 2.下面结合前面的ER模型,具体讲解一下怎么运用这些转换的原则,把 ER 模型转换成具体的数据表,从而把抽象出来的数据模型,落实到具体的数据库设计当中

强实体:用户表:

在这里插入图片描述

商品分类表:

  • 1.商品分类表可规划为2张表
    在这里插入图片描述
  • 2.商品分类表规划为一张表的问题:
    在这里插入图片描述

弱实体转为表:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.一个多对多的关系转换成一个数据库表:

在这里插入图片描述
在这里插入图片描述

3.通过外键来表达1对多的关系:

在这里插入图片描述

7.5.总结:

  • 1.其实,任何一个基于数据库的应用项目,都可以通过这种 先建立 ER 模型 ,再 转换成数据表 的方式,完成数据库的设计工作。
  • 2.创建 ER 目的是把业务逻辑梳理清楚,设计出优秀的数据库。我建议你不是为了建模而建模,要利用创建 ER 模的过程来整理思路,这样创建 ER 模型才有意义
    在这里插入图片描述

这篇关于ER模型介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129393

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo