防止多文件 Plantuml ER 图上的重复关系

问题描述 投票:0回答:1

我正在使用 PlantUML 构建 ER 图,我的目的是在多个 DER 文件视图中分离数据库结构,这样我就会有一个“完整视图”和一个“系统表视图”,也许还有一个“发票组表视图” .这样,每当我想构建一个新视图时,我都可以创建一个新文件并将表添加到其中。

为了防止每次写实体属性我想把实体分成文件,所以表

users
会在一个名为
entity.users.swd
的文件中结束,表
user_role
会被命名为
entity.user_role.swd
。每当我想展示实体时,我都会按原样包含文件。但是我想将每个表关系添加到表文件中,这样每当呈现
users
时,与
users
的每个关系也会被打印出来。如果我将关系放在实体文件中并将它们都添加到视图文件中,它将复制图表。

例如:

entity.users.swd

@startuml
entity users {
  int id
  string name
  int business_unit_id
}
@enduml

entity.user_role.swd

@startuml
entity user_role {
  int user_id
  int role_id
}
@enduml

entity.roles.swd

@startuml
entity roles {
  int id
  string name
}
@enduml

entity.business_units.swd

@startuml
entity business_units {
  int id
  string name
}
@enduml

如果我将它们添加到 DER 视图文件中,并将关系添加到该 DER 视图文件中,则关系将按应有的方式呈现

der.full.swd

@startuml
!include ./entity.users.swd
!include ./entity.user_role.swd
!include ./entity.roles.swd
!include ./entity.emails.swd
users ||--o{ user_role
roles ||--o{ user_role
business_units ||--o{ users
@enduml

这会结束

现在让我们将样本发展到手头的问题......

我想在实体文件中放置所有像

users ||--o{ user_role
这样的关系标记,所以每当我将它们放在图表中时,它会自动显示该表具有外部依赖性,而无需详细说明外部表的字段。
users
user_role
文件都具有如下关系
users ||--o{ user_role
,但如果我这样做,它将复制下面最终图像中的关系。

entity.users.swd

@startuml
entity users {
  int id
  string name
  int business_unit_id
}
users ||--o{ user_role
@enduml

entity.user_role.swd

@startuml
entity users {
  int id
  string name
  int business_unit_id
}
users ||--o{ user_role
roles ||--o{ user_role
@enduml

der.user-view.swd

@startuml
!include ./entity.users.swd
!include ./entity.user_role.swd
@enduml

它如何构建图像:

我想要它:

如何防止此多文件 PlantUML ER 图上的重复关系?

database-design entity-relationship erd plantuml der
1个回答
0
投票

使用预处理器设置变量可以避免在使用 include 时再次声明关系。它实际上是一个 include guard(虽然我不确定 PlantUML 有更好的方法——也许它应该)。

这不是完整的解决方案,只是用以下内容替换您对

users ||--o{ user_role
(或任何您不想重复的内容)的定义:

!if ($users!="defined")
users ||--o{ user_role
!$users = "defined"
!endif
© www.soinside.com 2019 - 2024. All rights reserved.