Mysql_3 ER 和 EER 模型

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL DuckDB 分析主实例,集群系列 8核16GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 学习于:b站 骆昊 jackfrued 老师的网课+黑马网课

本文思路主要来源于骆昊jackfrued 老师的网课
仅供本人学习参考,未做其他用途!

在此也建议读者通过老师的课程学习。

介绍

为什么要有 ER 图和 EER 图的存在?

真正做项目、设计数据库时,实际并没有这么简单,比如还有很多用户看不到、但为了方便 DBA 使用而创建的字段。如 id,一般还会有两条 Date 字段(一表示这条记录被创建的时间,二表示这条记录最后更新的时间),以及预留一个 VARCHAR / json 字段;还有一些其他注意事项(比如 auto-increment 约束其实开发中不常用,更多使用算法比如分布式 ID 生成算法(如 SnowFlake……)当然对课程来说这并不重要)是不可能一上来就写 SQL 语句的,需要先设计表的结构和表之间的关系。

ER 模型

ER 图(Entity Relationship, 实体关系)因此出现。下图是一个 ER 图的示例,其中矩形框代表:表(也就是实体),椭圆框代表:表中的字段(实体的属性),菱形框代表:关系,在连接线上表明了关系的重数。

百度百科图片

相较于大段的 SQL 建表语句,只要能看懂 ER 图,表的结构、关系一目了然。

EER 模型

相较 ER 模型多了泛化层次、汇集层次、弱实体等概念。

泛化层次

包括 generalization 和 specialization (泛化和特化)、父类(superclass)和子类(subclass)的概念。

子类父类就是类似 Java 的继承,如动物是父类,猫、狗是其子类。子类父类是一对一的关系!

泛化又叫归纳,就是将几个类的共同属性提取出来作为父类;

特化又叫演绎,就是在父类的基础上添加各自特殊的属性作为子类。

其中,子类和超类又有两个关系属性:mandatory 和 optional、disjoint 和 overlapping。

mandatory / optional:父类中的所有属性都必须包含在每一个子类中 / 不用全部继承,选择部分继承即可(完全性限制)

disjoint / overlapping:继承同一个父类的几个子类之间是否可以有相交的属性(相交性限制)

img

图中 运输工具是父类,飞机、火车、汽车是子类。圆圈中写 D / O,表示 disjoint / overlapping。父类和圆圈之间是双实线,表示是 mandatory 完全性继承。

汇集层次

Aggregation, 汇集层次不再有父类子类的区别,而是由……组成的区别。

img

如图,房间、门窗、电脑、投影仪等是教室的组成部分,不是继承关系。

弱实体

一种实体只有另一种实体存在的时候才有意义。如父母和子女,少了一方另一方就没有意义了。

img

Workbench 等工具支持画 ER 图,甚至画好后可以自动生成 SQL 语句建表。 Workbench 中的图是 EER 图(扩展的ER 图)

EER 图示例

在 EER 图下,点击 DATABASE - FORWARD ENGINEER 正向工程,可以选择要生成的表、字段,生成 SQL 语句建立表。

自动生成的 SQL 语句中,外键下方有两句话ON DELETE NO ACTION ON UPDATE NO ACTION,意为:当外键参考的主键修改/删除时,外键所在的表会受到什么样的影响?——不采取任何行动。建议去掉这两句话。如果去掉,就不能随便修改/删除外键在使用的主键。

同样地,在 SQL 语句页面,点击DATABASE - REVERSE ENGINEER 反向工程,可以根据表的结构生成 EER 图。

Power Designer 建模工具,也支持正 / 反向工程,可以生成 SQL 方言。完整版付费。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
1113 0
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
10月前
|
存储 关系型数据库 MySQL
MySQL进阶突击系列(09)数据磁盘存储模型 | 一行数据怎么存?
文中详细介绍了MySQL数据库中一行数据在磁盘上的存储机制,包括表空间、段、区、页和行的具体结构,以及如何设计和优化行数据存储以提高性能。
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。
|
存储 关系型数据库 MySQL
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
580 1
|
存储 关系型数据库 MySQL
深入探索MySQL:成本模型解析与查询性能优化
深入探索MySQL:成本模型解析与查询性能优化
|
关系型数据库 MySQL 调度
深入理解MySQL InnoDB线程模型
深入理解MySQL InnoDB线程模型
|
SQL 关系型数据库 MySQL
MySQL数据库数据模型概念入门及基础的SQL语句2024
MySQL数据库数据模型概念入门及基础的SQL语句2024
162 0
|
SQL 关系型数据库 MySQL
【MySQL-1】理解关系型数据库&数据的数据模型
【MySQL-1】理解关系型数据库&数据的数据模型
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
145 3

推荐镜像

更多