在 postgresql 中实现 UML 类:创建类型与创建 table

Implementing UML classes in postgresql: create type vs create table

我正在学习 PostgreSQL,目前正在学习类型以及如何创建它们。但是,我不明白什么时候创建一个 table 并与另一个 table 建立关系比仅仅创建一个类型更好。

例如,在此 class 图表中,“团队”获得了“设备”类型的“设备”。我什至不知道这张图是否正确,但如果是这样,为什么将“设备”设为类型而不是 table 更好?

模特

这张图不正确。它说 TeamEquipments 组成,如果 Team 被删除,它将被删除。去掉黑钻就没事了

顺便说一下,箭头并没有错,但是如果你的 UML class 图是为关系模型设计的,则没有必要:与 RDBMS 的关联的实现将始终使其双向。

数据库

用户定义的数据类型是一种 SQL 功能,允许创建由多个元素组成的复合类型。目标是您可以使用新创建的类型,例如 build-in 类型。

如果您在 postgresql 中为您的模型创建了两个用户定义的类型,那么无论如何您都必须创建两个表,每个表都有一个给定类型的列(更多解释 here)。因此,选择 SQL 类型来实现 UML classes 没有决定性的优势。

如果您正在使用值对象,则在 SQL 中建议创建类型。值对象没有身份,仅由它们携带的值定义。它们一般作为几个属性的类型相同或不同classes/tables.

顺便说一句,在 UML 模型中,原则上您应该用 «datatype» class 符表示值类型。但是有些人用正常的 classes 来建模这样的值类型,这是一个讨论的话题。

业务应用程序中值对象的典型示例是 CurrencyAmount,它由货币值和货币代码组成。