如何用E-R图表示数据库中实体,存在哪些表达方式?
- 内容介绍
- 文章标签
- 相关推荐
从常见痛点来看,为什么你总是搞不清E‑R图里实体该怎么画?
在实际项目中,初学者经常会遇到以下困惑:
- 实体到底用哪种形状表示?矩形、双线矩形还是别的,
- 属性很多时图形会不会变得乱七八糟看不清层次?
- 主键、弱实体、关联属性这些特殊标记应该怎么统一标注?
- 关系方向和基数该放在哪里标注最直观?
下面针对这些痛点,程序梳理 E‑R 图中实体的表达方式方便你找准画法、避免常见误区。
E‑R 图中实体的主要表现形式
1️⃣ 标准矩形
形状:实线矩形
含义:普通实体。矩形内部只写实体名称,如 学生课程。
2️⃣ 双线矩形
形状:外层再套一条实线矩形 含义:依赖于强实体且没有独立主键的弱实体。常配合“部分关键字”或“外键”标识。
3️⃣ 分割框
形状:上半部写实体名。下半部列出主要属性 优点:一次性展示主要属性,适合属性不多的简易模型。缺点:#属性过多时会导致框体过大。阅读性下降#
4️⃣ UML 类图式矩形
形状:Stereotype 标记 + 三段结构 Standard ER 已无法满足复杂业务,需要与面向对象设计保持一致时使用。
E‑R 图中属性的标准标注方式
-
椭圆形:
简单属性,如 姓名、年龄。其实, -
双层椭圆或连线组:
。 -
虚线椭圆:
。老实说, -
双椭圆或带星号标记:
-
下划线或加粗字体:
- 虚线连接到对应强实体。并在连线上加注 “FK”。
E‑R 图中关系的可视化表达
| 关系符号 | 说明及适用场景 |
|---|---|
| Crow's Foot | 最流行的基数标注:① 表示“一”,③ 表示“多”。适用于绝大多数业务模型, |
| M:N 菱形 + 连线标签 | 直接在菱形内部写关系名称,在两侧连线上标注 1:n 或 m:n。话说回来,适合需要显式描述关联表的情况。 |
| -> 带箭头直线 | 用于强调方向性。 但不推荐单独使用来表示基数,以免产生歧义。 |
| Dotted line | 表示弱联系或可选关系,常与基数一起使用。 |
说到实例演示,学生选课程序的 E‑R 图绘制要点
- 定义实体及其主键:
- <学生>: 矩形;主键 学号.
- <课程>: 矩形;主键 课程编号.
- <选课>: 弱实体。用双线矩形包裹,主键为组合键。老实说,
- <学生> → 姓名、年龄、性别.
- <课程> → 课程名称、学分.
- <选课> → 成绩。
⚠️ 当属性数量超过 6 条时可考虑使用「分割框」把主要属性放进矩形内部。只把次要属性保留为椭圆,以免图像过于拥挤。
Sorry - ignore this part.
Actually we just need a clear example with ASCII representation?We'll embed a simple diagram using text within pre block.
Continue:
html
+----------------+ +----------------+ +----------------+
| 学生 | | 选课 | | 课程 |
| | | | | |
|----------------| |----------------| |----------------|
| PK 学号 |<---+--| PK 学号 |--+-->| PK 课程编号 |
| 姓名 | | PK 课程编号 | | 课程名称 |
| 年龄 | +------------------+ +---| 学分 |
+----------------+ +------------+
^ ^
| |
+-------------------------------------+
这张简易图展示了:学生 ↔ 选课。课程 ↔ 选课,还有选课作为弱实体持有组合主键。
关键要点
- *弱实体* 用双线矩形突出显示;如果工具不支持双线,可在旁备注 “Weak”。
- *基数* 用 Crow’s Foot 标记或文字 “1..N”。
- *主键* 用下划线或粗体突出。
- *可选关联* 可在连线上加虚线并标注 “0..*”。
E‑R 图绘制中的常见误区与方法 🎯
| #误区 | #原因 | #方法 |
|---|---|---|
| 把所有属性都画成椭圆,导致页面满屏占位。不过, | 缺乏层次划分意识。对「关键」与「非关键」属性没有区分。 | 采用「分割框」或「双层结构」只显示主键和关键属性,其余放在子图或文档说明中。 |
| 忘记为弱实体添加外部边框,使其看起来像普通实体。 | 工具默认只提供单层矩形,没有手动添加外框的习惯。怎么说呢, | 使用绘图软件自带「双线」样式;若无,则在右侧备注 “Weak Entity”。 | \\\\\\\\\
<\/tbody> <\/table> <\/div>" />
从常见痛点来看,为什么你总是搞不清E‑R图里实体该怎么画?
在实际项目中,初学者经常会遇到以下困惑:
- 实体到底用哪种形状表示?矩形、双线矩形还是别的,
- 属性很多时图形会不会变得乱七八糟看不清层次?
- 主键、弱实体、关联属性这些特殊标记应该怎么统一标注?
- 关系方向和基数该放在哪里标注最直观?
下面针对这些痛点,程序梳理 E‑R 图中实体的表达方式方便你找准画法、避免常见误区。
E‑R 图中实体的主要表现形式
1️⃣ 标准矩形
形状:实线矩形
含义:普通实体。矩形内部只写实体名称,如 学生课程。
2️⃣ 双线矩形
形状:外层再套一条实线矩形 含义:依赖于强实体且没有独立主键的弱实体。常配合“部分关键字”或“外键”标识。
3️⃣ 分割框
形状:上半部写实体名。下半部列出主要属性 优点:一次性展示主要属性,适合属性不多的简易模型。缺点:#属性过多时会导致框体过大。阅读性下降#
4️⃣ UML 类图式矩形
形状:Stereotype 标记 + 三段结构 Standard ER 已无法满足复杂业务,需要与面向对象设计保持一致时使用。
E‑R 图中属性的标准标注方式
-
椭圆形:
简单属性,如 姓名、年龄。其实, -
双层椭圆或连线组:
。 -
虚线椭圆:
。老实说, -
双椭圆或带星号标记:
-
下划线或加粗字体:
- 虚线连接到对应强实体。并在连线上加注 “FK”。
E‑R 图中关系的可视化表达
| 关系符号 | 说明及适用场景 |
|---|---|
| Crow's Foot | 最流行的基数标注:① 表示“一”,③ 表示“多”。适用于绝大多数业务模型, |
| M:N 菱形 + 连线标签 | 直接在菱形内部写关系名称,在两侧连线上标注 1:n 或 m:n。话说回来,适合需要显式描述关联表的情况。 |
| -> 带箭头直线 | 用于强调方向性。 但不推荐单独使用来表示基数,以免产生歧义。 |
| Dotted line | 表示弱联系或可选关系,常与基数一起使用。 |
说到实例演示,学生选课程序的 E‑R 图绘制要点
- 定义实体及其主键:
- <学生>: 矩形;主键 学号.
- <课程>: 矩形;主键 课程编号.
- <选课>: 弱实体。用双线矩形包裹,主键为组合键。老实说,
- <学生> → 姓名、年龄、性别.
- <课程> → 课程名称、学分.
- <选课> → 成绩。
⚠️ 当属性数量超过 6 条时可考虑使用「分割框」把主要属性放进矩形内部。只把次要属性保留为椭圆,以免图像过于拥挤。
Sorry - ignore this part.
Actually we just need a clear example with ASCII representation?We'll embed a simple diagram using text within pre block.
Continue:
html
+----------------+ +----------------+ +----------------+
| 学生 | | 选课 | | 课程 |
| | | | | |
|----------------| |----------------| |----------------|
| PK 学号 |<---+--| PK 学号 |--+-->| PK 课程编号 |
| 姓名 | | PK 课程编号 | | 课程名称 |
| 年龄 | +------------------+ +---| 学分 |
+----------------+ +------------+
^ ^
| |
+-------------------------------------+
这张简易图展示了:学生 ↔ 选课。课程 ↔ 选课,还有选课作为弱实体持有组合主键。
关键要点
- *弱实体* 用双线矩形突出显示;如果工具不支持双线,可在旁备注 “Weak”。
- *基数* 用 Crow’s Foot 标记或文字 “1..N”。
- *主键* 用下划线或粗体突出。
- *可选关联* 可在连线上加虚线并标注 “0..*”。
E‑R 图绘制中的常见误区与方法 🎯
| #误区 | #原因 | #方法 |
|---|---|---|
| 把所有属性都画成椭圆,导致页面满屏占位。不过, | 缺乏层次划分意识。对「关键」与「非关键」属性没有区分。 | 采用「分割框」或「双层结构」只显示主键和关键属性,其余放在子图或文档说明中。 |
| 忘记为弱实体添加外部边框,使其看起来像普通实体。 | 工具默认只提供单层矩形,没有手动添加外框的习惯。怎么说呢, | 使用绘图软件自带「双线」样式;若无,则在右侧备注 “Weak Entity”。 | \\\\\\\\\
<\/tbody> <\/table> <\/div>" />

