【如此简单!数据库入门系列】之ER模型快速入门

news2024/10/6 22:32:42

文章目录

  • 模式设计
  • 基本概念
    • 实体(Entity)
    • 属性(Attributes)
    • 实体集和键(key)
    • 关系(Relationship)
  • ER图
    • 实体和属性
    • 关系
  • 泛化与特化
  • 总结
  • 更多例子


模式设计

大家还记得什么是物理模式、概念模式和外部模式吗?

如何设计好的概念模式?这就要用到E-R模型。

E-R(Entity-Relationship)模型:

  • 定义了数据库的概念模式
  • 反映了现实世界中实体和它们之间的关联(数据库中表的结构和关系)
  • 有助于确保数据库能够有效地存储和管理数据

基本概念

实体(Entity)

实体:

  • 是现实世界的对象,很容易识别,可以是有生命,也可以是无生命
  • 是对象的抽象,而实体集是该对象实例的集合
  • 都有一些赋予它们身份的属性

例如,在学校数据库中,可以将学生、教师、班级和提供的课程视为实体。学生集合可以包含一个学校的所有学生。

属性(Attributes)

属性:

  • 表示一个实体。例如,学生实体可以将姓名、班级和年龄作为属性。
  • 有合理的类型和值。例如,学生的姓名不能是数字,学生的年龄不能是负数等等。

属性的类型包括:

  • 能不能分割:
    • 简单属性:原子值,不能再分。例如,学生的电话号码是10位数字的原子值。
    • 复合属性:由多个简单属性组成。例如,学生的完整姓名可能包含姓和名。
  • 是不是原生:
    • 原生属性:数据库中存在的属性。例如,学生的生日。
    • 派生属性:数据库中不存在的属性,从存在的其它属性派生出来的属性。例如,年龄可以从生日派生出来。再比如,一个班级的平均年龄不应该直接保存在数据库中,而是应该计算出来的。
  • 是不是唯一:
    • 单值属性:单值属性包含单个值。例如,学生的学号。
    • 多值属性:多值属性可以包含多个值。例如,一个人可以有多个电话号码。

当然,这些类型可以组合在一起使用:

  • 简单 - 单值属性
  • 简单 - 多值属性
  • 复合 - 单值属性
  • 复合 - 多值属性

实体集和键(key)

键是在实体集中,用于唯一标识一个实例的属性或属性集合。

例如,学生的学号可以唯一标识一名学生。

  • 超键:一个或多个属性的集合,用于标识实体集中的一个实例。
  • 候选键:最小规模的超键称为候选键。一个实体集可以有多个候选键。
  • 主键:从候选键里挑选,用于唯一标识实体集。

例如,假设有一个学生实体:{学号,姓名,地址,电话号码,特长},其中:

  • 超键,{学号}和{姓名,地址,电话号码}都是
  • 候选键,{学号}和{姓名,地址}都是
  • 主键,{学号}或者{姓名,地址}挑一个

关系(Relationship)

关系:

  • 表示实体之间的关联。例如,一个员工在一个部门工作,一个学生注册了一门课程,这里的工作和注册都是关系。
  • 也可以有属性,成为描述性属性。

关系的度:

  • 由参与关系的实体的数量决定,可以分为:
    • 2度,两个实体参与 --> 二元关系
    • 3度,三个实体参与 --> 三元关系
    • N度,N个实体参与 --> N元关系

关系基数:

  • 由一个实体集中的实体实例数量,与另一个实体集中的实体实例数量的关联情况决定
  • 可以分为:
    • 一对一:实体集A中的一个实体实例只能与实体集B中的一个实体实例相关联,反之亦然。
    • 一对多:实体集A中的一个实体实例可以与实体集B中的多个实体实例关联,而实体集B中的一个实体实例最多只能与实体集A中的一个实体实例关联。
    • 多对一:实体集A中的多个实体实例只能与实体集B中的一个实体实例相关联,但实体集B中的一个实体实例可以与实体集A中的多个实体实例相关联。
    • 多对多:实体集A中的一个实体实例可以关联到B中的多个实体实例,反之亦然。

在这里插入图片描述


ER图

接下来,讨论一下如何用ER图表示ER模型。实体、实体的属性、关系集和关系集的属性,都可以在ER图中表示。

实体和属性

在这里插入图片描述
实体和属性的表示方法:

  • 实体用矩形表示,例如Student
  • 属性用椭圆表示,每个椭圆代表一个属性,属性直接连接到实体上,例如Name
  • 如果属性是复合的,则将它们进一步划分为树状结构。例如Name由FirstName和LastName组成
  • 多值属性用双椭圆表示,例如PhoneNo.
  • 派生属性用虚线椭圆表示,例如Age

关系

关系的表示方法:

  • 关系由菱形框表示,关系的名称写在菱形框内
  • 所有参与关系的实体都通过一条线连接到它

二元关系(度数为2的关系)和基数的表示方法如下:
在这里插入图片描述
参与约束,根据实体实例参与情况,可以分为:

  • 完全参与 :每个实体实例都参与到关系中,用双线表示。
  • 部分参与 :不是所有实体实例都参与到关系中,用单线表示。
    在这里插入图片描述

泛化与特化

在这里插入图片描述

ER模型可以表达处于不同抽象层次的实体。越往上走,抽象层次越高,称之为泛化。相对的,越往下走,抽象层次越低,称之为特化。

例如,Person是高层次抽象,Student和Teacher是低层次抽象,Student和Teacher都属于Person,这是泛化过程,Persion包含Student和Teacher是特化过程。

继承:

  • 是泛化和特化的一个重要特征
  • 允许低级实体继承高级实体的属性。例如,Person的属性(Name, Age和Gender)可以被Student或Teacher继承

总结

使用ER模型究竟能带来什么好处呢?

  • 数据建模的标准化方法:标准化意味着便于沟通,并与让不同的利益相关者(例如业务分析师、数据库设计人员和软件开发人员)达成共识
  • 易于理解和沟通:ER图非常直观,对于非技术人员也能很好理解,有助于促进业务和 IT 部门之间的协作,确保数据模型满足业务需求
  • 数据库设计的坚实基础:ER 模型可以转换为各种数据库模式,包括关系数据库、NoSQL 数据库和面向对象数据库
  • 支持复杂的数据结构:ER 模型支持各种建模概念,包括复合类型、继承和聚合,便于对复杂的数据结构进行建模

此外,从数据管理的角度来讲,还有以下好处:

  • 减少数据冗余:ER 模型有助于识别和消除冗余数据,提高数据质量并减少存储空间
  • 提高数据完整性:ER 模型中的约束有助于确保数据完整性
  • 支持应用程序开发:ER 模型可以作为应用程序开发的基础,有助于确保应用程序与底层数据库结构保持一致

更多例子

下面的图能看懂了吗?

医院的ER模型

公司ER模型
在这里插入图片描述

如果喜欢这篇文章,请不要忘记关注、点赞和收藏哦!
您的鼓励将是我创作的最大动力!

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

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

相关文章

竞赛课第九周(埃式筛法,矩阵乘法)

1.埃式筛法:求区间[2, n]内所有的素数对 【参考代码】 #include <bits/stdc.h> using namespace std;const int N 1e5; vector<int> prime; bool visit[N];int main() {int n;cin>>n;memset(visit, false, sizeof(visit));for(int i2; i<sqrt(n); i){i…

备考数通HCIE证书4点经验分享!

大家好&#xff0c;我是来自安阳工学院20级网络工程的刁同学&#xff0c;在2023年12月20日成功通过了华为Datacom HCIE认证&#xff0c;并且取得了笔试900多分&#xff0c;实验B的成绩。在此&#xff0c;我想把我的一些考证心得分享给正在备考的小伙伴们。 关于为什么考证 我…

滚珠丝杆有哪些应用场景?

在传动领域中滚珠丝杆是自动化设备和智能制造设备相结合的关键装置&#xff0c;在精密制造工艺、精密装配作业及现代物流系统等多元领域中&#xff0c;发挥着不可或缺的核心作用。其优点在于快速、高效、准确可靠和稳定。它能够在较小的转矩下产生很大的推力&#xff0c;所以被…

VOS3000加装登陆服务器安全防护系统有用吗

VOS3000是一款专业的软交换系统&#xff0c;它主要用于中小规模的VoIP运营业务&#xff0c;包括运营费率设定、套餐管理&#xff0c;账户管理、业终端管理、网关管理、数据查询、卡类管理、号码管理、系统管理等功能1。而关于加装登陆服务器安全防护系统是否有用&#xff0c;这…

用Scrapy编写第一个入门项目(基础四件套:spider,pipeline,setting,items)

简介&#xff1a;scrapy是一个用于爬取网页并提取数据的应用框架&#xff0c;也可用于提取API数据 写在前面&#xff1a;只想看scrapy的童鞋子请跳过5-7直接step8&#xff09; step5&#xff0c;6是xpath和css入门&#xff0c;用于提取数据&#xff1b; step7是文件储存方式&…

软件设计师-重点的创建型设计模式

一、简单工厂&#xff1a; 简单工厂模式属于创建型模式&#xff0c;但不属于23种设计模式之一。 软考中图 二、工厂方法&#xff1a; 意图&#xff1a; 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 结…

c++在visual studio上的默认配置

右键 新建项 右键源文件 属性

解决-Oracle 19c RAC 安装时节点连接性问题

第二天&#xff0c;联系了服务器管理员在下午得到了修复&#xff0c;虚拟网段的IP失效了&#xff0c;需要重新分配&#xff0c;并且虚拟IP没有网关&#xff0c;所以ping 网关ping 不通。 因为在一节点装了集群软件&#xff0c;所以需要继续清理环境。 准备完成&#xff0c;经过…

【开源项目】经典数字孪生案例分享~数字孪生看守所管理平台

数字孪生看守所管理平台&#xff0c;基于数字孪生、物联网IOT、云计算等技术&#xff0c;对监狱道路以及各区域进行网格化管理&#xff0c;实现对网格内“人、地、事、物、情”等要素的全方位动态管控。 将视频监控和应急预警系统相结合&#xff0c;遇到重大突发事件时&#xf…

【C++】哈希思想

目录 哈希介绍&#xff1a; 一&#xff0c;位图 1-1&#xff0c;位图的认识 1-2&#xff0c;位图的简单实现 1-3&#xff0c;位图的应用 二&#xff0c;布隆过滤器 2-1&#xff0c;布隆过滤器的认识 2-2&#xff0c;布隆过滤器的简单实现 2-3&#xff0c;布隆过滤器的…

【产品经理修炼之道】- 需求挖掘之手机话费充值

画原型图从来就不是面试考察的重点&#xff0c;分析、解决问题才是产品经理的核心能力。那么该如何积累产品经验呢&#xff1f;本文以以「手机话费充值」为案例&#xff0c;分享整个设计流程和思路&#xff0c;希望对你有所启发。 不少产品新人有个误区&#xff1a;产品经理的日…

ThingsBoard处理设备上报的属性并转换为可读属性

一、前言 二、案例 1、AI生成JSON数据体 2、将json数据体直接通过遥测topic发送查看效果 3、可查看目前整个数据都在一起 ​编辑 4、配置附规则链路 5、对msg的消息值&#xff0c;进行数据的转换&#xff0c;并从新进行赋值。 6、规则链路关联关系 7、再次通过MQTT发送遥…

顺通鞋厂在线订单系统:优化订单流程,降低运营成本

引入在线订单系统成为企业优化订单流程、降低运营成本的有效途径。在线订单系统能够将订单信息实时共享给企业内部的各个部门以及外部供应商和客户。在线订单系统能够通过自动化处理订单流程&#xff0c;减少人工干预和重复劳动。在线订单系统通过优化订单流程&#xff0c;实现…

1.C++入门(上)

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字&#xff0c;C语言有32个关键字&#xff0c;存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量&#xff0c;函数和类的名称都存在于全…

【C++】C++中的构造函数和析构函数详解

欢迎来到CILMY23的博客 本篇主题为&#xff1a;C中的构造函数和析构函数详解 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 写在前头&#xff1…

【算法一则】【动态规划】求二维数组可组成的最大正方形

题目 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0"],["1","0&…

为何鸿蒙开发成为求职市场的香饽饽 ?

在当今社会&#xff0c;技术的快速发展与更新迭代使得职场竞争愈发激烈。对于求职者来说&#xff0c;掌握一门热门且前景广阔的技术&#xff0c;无疑是获得理想工作的关键。鸿蒙开发&#xff0c;作为华为自主研发的操作系统开发技术&#xff0c;正逐渐成为求职市场的热门选择。…

手搓单链表(无哨兵位)(C语言)

目录 SLT.h SLT.c SLTtest.c 测试示例 单链表优劣分析 SLT.h #pragma once#include <stdio.h> #include <assert.h> #include <stdlib.h>typedef int SLTDataType;typedef struct SListNode {SLTDataType data;struct SListNode* next; }SLTNode;//打印…

触发器的基本概念及分类

目录 触发器的基本概念 作用对象 触发事件 触发条件 触发时间 触发级别或者触发频率 触发器的分类 DML 触发器 INSTEAD OF 触发器 系统触发器 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 触发器的基本概念 …

表格的单元格合并和表头的合并——vxe-table

vxe-table的官网&#xff1a;https://vxetable.cn/#/table/advanced/mergeCell在你的项目中下载安装完成后&#xff0c;先在main.js文件中引入&#xff1a; import VXETable from vxe-table import vxe-table/lib/style.css Vue.use(VXETable)一、单元格合并 效果图&#xff…