【问题标题】:Abstract Class from UML to ER diagram. Possible ? How?从 UML 到 ER 图的抽象类。可能的 ?如何?
【发布时间】:2020-01-09 17:50:57
【问题描述】:

我有下面的带有抽象类的 UML 类图,以及从它扩展的子类。我想用这个类图制作一个 ER 图。

我的问题是如何在 ER 图中表示抽象类?作为一个表?还是我应该忽略它?

谢谢。

【问题讨论】:

  • 老实说,它看起来与 out 相同。在这里查看示例,您也可以在线创建 erd online.visual-paradigm.com/drive/… 也可以在这里查看 stackoverflow.com/questions/48191228/…
  • 这里可能还有设计缺陷。如果老师也是管理员怎么办?在您的设计中这是不可能的。我认为您应该将用户与其所扮演的角色分开。
  • @GeertBellekens 不,这里不是这样。我已经知道一个用户可以是管理员、教师或学生

标签: mysql uml entity-relationship


【解决方案1】:

将泛化转换为数据库模型基本上有三种选择

1。每个具体类一张表

创建表AdminTeacherStudent。这些表中的每一个都包含User 的所有属性和关系的列

  • 专业版
    • 具体子类的所有字段都在同一个表中,因此无需连接即可获取所有学生数据
    • 简单的数据验证约束(例如Student 的必填字段)
  • 骗局
    • User 的所有字段在每个子类表中都有重复
    • User 的外键必须拆分为三个 FK 字段。一种用于Admin,一种用于Teacher,一种用于Student

2。整个泛化集的表

在这种情况下,您只有一个表调用 User,其中包含 User 的所有字段 + User 的所有子类的所有字段

  • 专业版
    • 所有字段都在同一个表中,因此无需连接即可获取所有User 数据
    • 没有将 FK 拆分为 User
  • 骗局
    • 有很多字段从未使用过。 StudentTeacher 的所有特定字段永远不会为 Admins 填写,反之亦然
    • 数据验证(例如 Student 等具体类的必填字段)变得相当复杂,因为它不再是简单的 Not Null 约束。

3。每个具体类一张表,超类一张表

在这种情况下,您为每个具体子类创建表,并为类User 创建一个表。每个具体的子类表都有一个强制 FK 到 User

  • 专业版
    • 最规范化的架构:用户属性没有重复字段,也没有未使用的字段。
    • 没有将 FK 拆分为 User
    • 简单的数据验证约束(例如Student 的必填字段)
  • 骗局
    • 如果你想要Student的所有数据,你必须查询两个表
    • 复杂的验证规则,以确保每个User 记录恰好有一个AdminTeacherStudent 记录。

您选择哪一个选项取决于很多事情,例如子类的数量、子类或超类中的属性数量、超类的 FK 数量,可能还有其他一些我没想到。

【讨论】:

  • 我接受了您的回答,因为它启发了我对此进行更多搜索,并且正如您所说,这些是执行泛化的仅有的 3 种方法。结果,我选择了第三种方法,因为它非常适合我的要求(并不是说它是最好的方法)。,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多