数据库ER图相关概念及其画法

news2025/1/19 11:14:17

ER图基本概念

  • ER图(Entity-Relationship Diagram)是一种用于描述现实世界概念模型的图形化表示方法,通过使用图形符号和元素来表示实体、属性和它们之间的关系。在ER图中,实体、属性和关系分别使用不同的图形元素来表示,这些图形元素具有特定的含义和用途。

  • 首先,实体通常表示为矩形,代表了现实世界中的事物或概念。在ER图中,每个实体都有唯一的标识符,用于区分不同的实体。属性和实体之间的关系可以通过无向边表示,无向边旁通常还会标注上联系的类型,例如1:1、1:n或m:n等。

  • 其次,属性通常表示为椭圆形,描述了实体的特性和特征。每个属性都有唯一的名称和数据类型,用于描述实体的具体特征。属性与实体之间的关系通过无向边表示,无向边连接属性和相应的实体。

  • 最后,关系通常表示为菱形,描述了不同实体之间的连接或关联。关系具有方向性,表示了实体之间的连接顺序和方向。在ER图中,关系还可以具有基数(Cardinality),描述了不同实体之间数量的对应关系,例如1:n表示一个实体对应多个另一个实体的关系。

  • 通过ER图,我们可以将现实世界中的各种关系和数据结构以图形化的方式展示出来。它有助于分析和理解复杂的概念模型,以及规划和管理数据库设计、系统架构和业务流程等。此外,ER图还是一种可视化的工具,通过使用图形元素和符号来表示现实世界中的各种关系和数据结构,帮助人们更好地理解和组织复杂的数据结构。

ER图在数据库方面的应用

  • 数据建模与抽象:ER图通过实体、属性和关系三个基本元素,对现实世界中的事物进行抽象,将复杂的现实情况转化为易于理解和表达的图形化结构。数据库设计师可以使用ER图来捕捉数据模型的本质,从而准确地定义数据结构。
  • 数据可视化:ER图提供了一种可视化的方式,展示数据实体、属性和关系之间的联系。这使得数据库设计更加直观和易于沟通,设计师和利益相关者可以通过ER图更容易地理解数据库的结构和组织,从而减少沟通误差。
  • 数据规范化:ER图帮助设计师进行数据规范化,即将数据库设计转化为满足数据库范式要求的合理结构。数据规范化是数据库设计的重要原则,有助于减少数据冗余和提高数据的一致性。
  • 数据库系统设计指导:ER图是数据库系统设计的蓝图,为开发人员提供了关于数据库结构和关系的指导。通过ER图,开发人员可以更好地实现数据库系统,更清晰地理解数据库的结构和关系。
  • 需求分析和系统设计:在需求分析和系统设计阶段,ER图可以帮助分析人员更好地理解用户需求,通过实体之间的关系来分析系统的功能和业务流程。这有助于确定系统的范围和边界,以及系统的功能需求和非功能需求。
  • 系统架构设计:在系统架构设计阶段,ER图可以用于描述系统的各个组件之间的关系,以及组件之间的数据流。这有助于确定系统的关键组件和它们之间的关系,从而设计出更加高效和稳定的系统架构。

具体表现

在数据库设计中,ER图是一种重要的概念模型表示方法,用于描述现实世界中的实体、属性和它们之间的关系。以下是关于数据库ER图的几个关键概念:

  • 实体(Entity):实体是现实世界中的一个独立存在的对象,可以是一个人、地点、事物等。在ER图中,实体通常用矩形表示。
  • 属性(Attribute):属性描述了实体的特征或描述,例如人的姓名、年龄等。在ER图中,属性通常用椭圆形表示。
  • 关系(Relationship):关系描述了实体之间的连接或关联,例如一个人和另一个人的朋友关系。在ER图中,关系通常用菱形表示。
  • 主键(Primary Key):主键是实体的唯一标识符,用于在数据库中唯一标识一个实体。在ER图中,主键通常用下划线标示。
  • 外键(Foreign Key):外键是一个实体中引用另一个实体的主键。外键用于建立实体之间的关系。在ER图中,外键用虚线连接。
  • 基数性质(Cardinality):基数性质描述实体间的关系中一个实体可以参与的次数。常见的基数性质有一对一、一对多和多对多。
  • 弱实体(Weak Entity):弱实体是一个没有自己的唯一标识符的实体,它依赖于其他实体的存在来确保其唯一性。在ER图中,弱实体用双矩形表示。
  • 联合实体(Association Entity):联合实体是由多个实体间的关系衍生出来的实体。在ER图中,联合实体用矩形表示。

ER图的画法

基于数据库设计绘制ER图时,以下是一些详细的步骤:

1.确定实体:

  • 每个实体通常对应于数据库中的一个表。
  • 使用矩形表示实体,并在矩形中填写实体的名称。

2.确定属性:

  • 每个属性对应于表中的一个列。
  • 使用椭圆形表示属性,并填写属性的名称。
  • 对于主键属性,可以使用特殊的标记或颜色突出显示。

3.确定关系:

  • 一对一 (1:1) 关系:表示当一个实体的实例与另一个实体的一个实例关联时。在ER图中,这可以通过在两个实体之间画一条线来表示,并在连接线上标注“1:1”。
  • 一对多 (1:N) 关系:表示当一个实体的一个实例可以与另一个实体的多个实例关联时。在ER图中,这可以通过在“一”侧的实体上画一条线,并在该线的末端添加一个指向“多”侧实体的箭头来表示。在连接线上标注“1:N”。
  • 多对多 (M:N) 关系:表示当两个实体的多个实例可以相互关联时。在ER图中,这可以通过在两个实体之间画一个菱形来表示,并在菱形中填写关系的名称。从菱形出发的线分别连接到两个实体的矩形,并在连接线上标注“M:N”。

4.其他标记和注解:

  • 可以使用不同的颜色或线条样式来表示不同类型的实体和关系。
  • 可以添加注解来解释特定的实体或关系的含义或约束。

5.确定关系属性:

  • 如果关系本身有属性(例如,当两个实体之间有一个日期或描述它们之间关系的文本时),可以在菱形框中添加这些属性,或使用特殊的标记来表示这些属性。

6.优化和细化:

  • 根据需要,可以添加更多的细节和标记来优化ER图的可读性和清晰度。

7.评审和审查:

  • 在完成ER图后,与其他团队成员或利益相关者一起评审和审查设计,确保它满足业务需求和逻辑。

8.工具使用:

  • 使用专业的数据库设计工具(如 Microsoft Visio、Lucidchart、Draw.io 等)可以更容易地创建和维护ER图,因为这些工具提供了丰富的模板和功能来帮助用户创建专业的图表。

9.文档化:

  • 记录下ER图的设计决策和逻辑,以便团队成员和其他利益相关者能够理解和遵循设计

10.持续更新和维护: 

  • 随着业务需求的变化和数据库设计的演进,定期更新和维护ER图是很重要的。确保团队成员了解最新的设计并遵循最佳实践

ER图示例

题目

一个车间有多个工人,每个工人有职工号、姓名、年龄、性别,工种;
一个年间生产多种产品,产品有产品号、价格;
一个车间生产多种零件,一种零件也可能为多个车间制造,零件有零件号、重量、价格;
一种产品有多种零件组成,一种零件也可装配到多种产品中,产品与零件均存入仓库中;
厂内有多个仓库,仓库有仓库号、主任姓名、电话;

关系模型

//主码用下划线标出,外码用删除线标出。


工人(职工号、姓名、年龄、性别,工种,车间号)

车间(车间号、车间名)
产品(产品号、价格、仓库号、车间号)
零件(零件号、重量、价格、仓库号)
制造(车间号、零件号)
装配(产品号、零件号)
仓库(仓库号、主任姓名、电话)

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

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

相关文章

【前端web入门第二天】01 html语法实现列表与表格_合并单元格

html语法实现列表与表格 文章目录: 1.列表 1.1 无序列表1.2 有序列表1.3 定义列表 2.表格 2.1 表格基本结构2.2 表格结构标签2.3 合并单元格 写在最前,第二天学习目标: 列表 表格 表单 元素为嵌套关系 1.列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表…

Redis中BigKey的分析与优化

Redis中BigKey的分析与优化 Redis以其出色的性能和易用性,在互联网技术栈中占据了重要的地位。 但是,高效的工具使用不当也会成为性能瓶颈。在Redis中,BigKey是常见的性能杀手之一,它们会消耗过多的内存,导致网络拥塞…

专有钉钉开发记录,及问题总结

先放几个专有钉钉开发文档 专有钉钉官网的开发指南 服务端(后端)api文档 前端api文档 前端开发工具下载地址 小程序配置文件下载地址 后端SDK包下载地址 专有钉钉域名是openplatform.dg-work.cn 开发记录 开发专有钉钉时有时会遇到要使用钉钉的api;通过 my 的方…

【leetcode题解C++】101.对称二叉树 and 111.二叉树的最小深度 and 222.完全二叉树的节点个数 and 110.平衡二叉树

101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 思路&#xff1a…

Pandas.Series.mode() 众数 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门&…

Blender教程(基础)-物体添加-03

1、打开的界面如下图会存在3个物体、英文状态下按键盘字母A全选、然后按键盘delete删除。 删除后一片空白 2、新增物体 方式1:在英文状态下按键盘shiftA组合键弹出如下添加物体弹窗 方式2:在菜单下找到添加点击弹出添加选项 3、举例新增物体 采用上述…

MongoDB本地部署并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 4. 结语 前言 MongoDB是一个基于分布式文件…

Gin 应用多实例部署session问题、session参数与刷新

文章目录 一、Gin Session 存储的实现方案二、memstore:基于内存的实现2.1 基本使用2.2 关键参数 三、使用redis:多实例部署3.1 使用redis优势3.2 基本使用 四、信息安全的三个核心概念五、Gin Session 参数5.1 参数介绍 六、Session 自动刷新 一、Gin S…

idea中yml文件没有提示解决办法

两步解决yml文件不显示提示,yaml文件显示提示问题 1、在插件中心,先下载下图两个插件 2、在Editor》File Types新增文件类型,文件名匹配规则需要将yaml和yml的都加上,加好之后,重启idea,即刻生效。

《汇编语言:基于linux环境》eatsyscall汇编程序

当阅读此书,作者编写了一个这样的程序,我也想试一下。照着书中的代码写了下,可以使用nasm正常编译,ld也可以正常链接,但是无法正常执行。总是报错。 ; nasm -f elf64 -g -F stabs eatsyscall.asm ; ld -o eatsysca…

CTF CRYPTO 密码学-6

题目名称:敲击 题目描述: 方方格格,不断敲击 “wdvtdz qsxdr werdzxc esxcfr uygbn” 解题过程: step1:根据题目描述敲击,wdvtdz对应的字符为x step2:依此类推r,z,o&…

张维迎《博弈与社会》笔记(4)导论:社会最优与帕累托标准

本节我们将从社会的角度来评判人类行为:一个社会应该采取什么样的标准来判断个人行为?具体地讲,我们需要知道,从社会的角度来评判,什么样的行为是正当的,什么样的行为是不正当的;什么样的行为应…

安装 java 的 JDK

前几天重装系统以后想起来要重装 java 的JDK 安装地址 Windows 下的 JDK 数据包有三种可选的下载:Windows x64 Compressed Archive、Windows x64 Installer 和 Windows x64 MSI Installer。其中,前者为 JDK 的免安装版本,后两者均为 JDK 的离…

05-Nacos-配置中心接入

1、pom依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 2、配置文件 spring:application:name: nacos-config## 当前环境&#xff0c;这个和…

【JS基础】事件对象event、环境对象this、事件的高级操作

文章目录 一、事件对象1.1 事件对象是什么&#xff1f;1.2 使用方法 二、环境对象this以及回调函数2.1 它是什么&#xff1f;2.2 演示示例 三、事件的高级操作3.1 事件流3.2 事件捕获3.3 事件冒泡以及阻止冒泡3.4 事件解绑3.5 mouseover和mouseenter事件的区别3.6 事件委托它是…

架构篇21:高性能负载均衡-算法

文章目录 轮询加权轮询负载最低优先性能最优类Hash 类源地址 HashID Hash小结负载均衡算法数量较多,而且可以根据一些业务特性进行定制开发,抛开细节上的差异,根据算法期望达到的目的,大体上可以分为下面几类。 任务平分类:负载均衡系统将收到的任务平均分配给服务器进行处…

MongoDB:从容器使用到 Mongosh、Python/Node.js 数据操作

文章目录 1. 容器与应用之间的关系介绍2. 使用 Docker 容器安装 MongoDB3. Mongosh 操作3.1 Mongosh 连接到 MongoDB3.2 基础操作与 CRUD 4. Python 操作 MongoDB5. Nodejs 操作 MongoDB参考文献 1. 容器与应用之间的关系介绍 MongoDB 的安装有时候并不是那么容易的&#xff0…

C++:模板特化 非类型模板参数

目录 1.非类型模板参数 2.模板特化 2.1 为什么需要模板特化 2.2 函数模板特化 2.3 类模板特化 1.全特化 2.偏特化 1.部分特化 2.参数更进一步的限制 1.非类型模板参数 模板参数分类类型形参与非类型形参 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在 cl…

java正则校验,手机号,邮箱,日期格式,时间格式,数字金额两位小数

java正则校验&#xff0c;手机号&#xff0c;邮箱&#xff0c;日期格式&#xff0c;时间格式&#xff0c;数字金额两位小数 3.58是否为金额&#xff1a;true 3.582是否为金额&#xff1a;false 1284789qq.com是否为email&#xff1a;true 1284789qq.com是否为email&#xff1…

01_Anaconda环境搭建

概述 Anaconda包含了许多常用的科学计算和数据分析的库和工具。通过Anaconda&#xff0c;用户可以更方便地安装、管理和更新这些库和工具&#xff0c;从而提高工作效率。 Anaconda还提供了一个名为conda的包管理器&#xff0c;可以帮助用户方便地安装、管理和更新这些库和工具…