ER模型介绍

news2024/9/21 20:44:09

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 模型才有意义
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云平台之Zabbix 监控网站

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

NMPC非线性模型预测控制经验分享与代码实例

NMPC非线性模型预测控制经验分享与代码实例 原本做完本科毕设之后就应该动笔写这一部分,但是做的过程中慢慢意识到自己懂的只是一点点。最近重新接触一些优化相关的问题,希望能够做出我认知之下比较好的解答。本人知识有限,难免写的有问题&am…

ClickHousez中如何定时清理过期数据库?

一、脚本清理 要在ClickHouse中自动删除过期的数据库,你可以使用ClickHouse的SQL命令结合外部脚本(如Shell脚本)和计划任务(如cron)来实现。下面是一个示例,展示如何创建一个Shell脚本来检查数据库的创建时…

1、.Net UI框架:Avalonia UI - .Net宣传系列文章

Avalonia UI是一个开源的跨平台UI框架,它允许开发者使用C#和XAML来创建应用程序,这些应用程序可以在多个平台上运行,包括Windows、macOS、Linux、Android和iOS。Avalonia UI的设计目标是提供一个现代化、可移植的UI框架,它具有类似…

C++之搜索二叉树(上)

目录 搜索二叉树的概念 搜索二叉树的操作 递归版本 二叉树的插入 二叉树的查找 二叉树的删除 非递归版本 二叉树的递归插入 二叉树的递归查找 二叉树的递归删除 在之前我们已经学习过了二叉树这一数据结构,本期我们将学习一种新的数据结构------搜索二…

Ubuntu服务器时间和本地时间不一致怎么解决——Linux的Local Time和RTC time

最近一直在搞大模型的相关工作,所以一直在用Linux服务器,前面的文章里也提到了,我用的是一台Dell PowerEdge R730xd。 但在使用中发现,IDRAC中的日志时间和本地时间存在时差,大概相关8小时。 对于技术人员&#xff0c…

UE5学习笔记19-服务器的更新频率,根骨骼旋转节点

一、服务器向客户端发送数据的频率 在Config中的DefaultEngine.ini文件添加 [/Script/OnlineSubsystemUtils.IpNetDriver] NetServerMaxTickRate60; 二、角色类中,角色蓝图类中在细节面板收缩net可以在界面中找到下面两个变量 NetUpdateFrequency 66.f; //净更…

代码随想录Day 32|leetcode题目:501.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划理论基础一、理论基础1.1 什么是动态规划1.2 动态规划的解题步骤1.3 动态规划应该如何debug 二、题目题目一: 509. 斐波那契数解题思路:动态规划递归解法 题目二&a…

spring boot 项目 prometheus 自定义指标收集区分应用环境集群实例ip,使用 grafana 查询--方法耗时分位数指标

spring boot 项目 prometheus 自定义指标收集 auth author JellyfishMIX - github / blog.jellyfishmix.comLICENSE LICENSE-2.0 说明 网上有很多 promehteus 和 grafana 配置,本文不再重复,只介绍自定义部分。目前只介绍了分位数指标的收集和查询&a…

基于nodejs+vue+uniapp的摄影竞赛小程序

开发语言:Nodejs框架:expressuniapp数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:VS Code 系统展示 管理员登录 管理员主界面 用户管理 书籍分类管理 书籍信息管理 系统管理…

五种常见的人工智能错误以及如何避免它们?

目录 常见错误一:忘乎所以 常见错误二: 未能整合 常见错误三: 过于“以技术为中心”的方法 常见错误四:事后才考虑治理 常见错误五: 没有规模规划 对于肩负着为股东带来收益的重大赌注的高管来说,将人…

使用模块化流简化 RHEL 8 上的 NVIDIA 驱动程序部署

目录 DNF 模块化 使用预编译驱动程序 使用包管理器安装 选择模块化流 切换流 使用模块化配置文件 RHEL 的支持矩阵 概括 相关资源 NVIDIA GPU 已成为加速机器学习、高性能计算 (HPC)、内容创建工作流程和数据中心应用程序等各种工作负载的主流。对于这些企业用例,NV…

【个人笔记】VCS工具与命令

Title:VCS工具学习 一 介绍 是什么? VCS (Verilog Compiler Simulator) 是synopsys的verilog 仿真软件,竞品有Mentor公司的Modelsim、Cadence公司的NC-Verilog、Verilog—XL. VCS能够 分析、编译 HDL的design code,同时内置了 仿…

ubuntu环境下实现ROS 2 与 Arduino 通信

本教程为https://blog.csdn.net/2301_81924597/article/details/141757091?spm1001.2014.3001.5501的进一步拓展 ROS 2 与 Arduino 通信指南 准备工作 确保已安装 ROS 2(本指南基于 ROS 2 Humble)确保已安装 Arduino IDE 并能正常使用安装必要的 ROS…

系统架构师考试学习笔记第三篇——架构设计高级知识(10)系统质量属性与架构评估

本章知识点: 第10课时主要学习软件系统质量属性、系统架构评估以及ATAM方法评估实践等内容。 本课时内容侧重于概念知识,根据以往全国计算机技术与软件专业技术资格(水平)。考试的出题规律,考查的知识点多来源于教材&a…

在Web服务应用中,如何编程使用Redis的缓存功能?包括缓存页面内容、缓存数据库查询结果、用户会话信息等代码分享

目录 一、概述 二、redis介绍 1、简介 2、Redis作为缓存的原理 (1)内存存储 (2)数据结构 (3)工作原理 3、Redis作为缓存的作用 三、redis缓存页面内容 1、作用 2、实现方法 3、示例代码&#x…

python07-单元测试框架unittest1-2

5 fixture 可以看作case的前置条件、后置条件 5.1 fixture的用例执行顺序 fixture分为 方法级别类级别模块级别 5.1.1方法级fixture 每个测试用例之前要调用setUp每个测试用例执行后要调用tearDowntestCase中有多少测试用例,那么setUp和tearDown就被调用多少次 def add(…

【Java】Spring-AOP与拦截器简洁实操 (上手图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 认识依赖4.2 使用AOP与拦截器4.2.1 使用AOP4.2.1.1 设置DemoAop类4.2.2.2 设…

【SpringBoot】电脑商城-11-显示购物车功能

加入购物车 1 购物车-创建数据表 1.使用use命令先选中store数据库。 USE store;2.在store数据库中创建t_cart用户数据表。 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT 购物车数据id,uid INT NOT NULL COMMENT 用户id,pid INT NOT NULL COMMENT 商品id,price BIG…

java fastxml json 科学计数法转换处理

背景: 由于 canal 切换为 tx dbbridge后,发现dbbridge对于canal的兼容性存在较大问题,从而引发 该文档的实践。 就目前发现 dbbrige 的字段 大小写 和 数据类型格式 从binlog 写入kafka 同canal 都会存在差异。 canal之前导出都是小写&…