Uml 如何在类图中避免循环关系

Uml 如何在类图中避免循环关系,uml,relationship,circular-dependency,class-diagram,Uml,Relationship,Circular Dependency,Class Diagram,您好,我有一个关于我在数据库设计中面临的一些循环关系的问题。我又读了一些类似的问题,但无法解决我的问题,所以这里是我的类图: 逻辑是这样的: 文档属于文档类型(发票、订单等) documentField(日期、地址、名称客户机等)属于documentType(每个documentType都有其相应的字段 FieldValue是将保存在数据库中的documentfield的值,它同时属于document和documentfield,应根据fieldType(日期、字符、长度、双精度…)保存该值

您好,我有一个关于我在数据库设计中面临的一些循环关系的问题。我又读了一些类似的问题,但无法解决我的问题,所以这里是我的类图:

逻辑是这样的:

  • 文档属于文档类型(发票、订单等)
  • documentField(日期、地址、名称客户机等)属于documentType(每个documentType都有其相应的字段
  • FieldValue是将保存在数据库中的documentfield的值,它同时属于document和documentfield,
    应根据fieldType(日期、字符、长度、双精度…)保存该值
但是,从数据库架构师的角度来看,这种循环关系是不正确的,因为它会导致完整性问题:

如果您有任何想法如何处理这个问题,欢迎发表评论


提前感谢您的帮助。

我实际上看不出您建模的目的。在我看来,您将元元素(DocumentType和DocumentField)与元元素的建模元素实例(Document和FieldValue)混合在一起

文档-->DocumentType关系的语义是什么?它是“isA”关系吗?如果是,为什么不使用扩展/泛化(继承)或接口实现(实现)

为什么需要反向关系DocumentType-->文档?如果可以避免,就不会有循环关系

[更新] 为什么不在AbstractDocument中重命名DocumentType并使其成为一个抽象类呢。 然后用扩展(泛化)替换从文档到文档类型的关联 最后创建从AbstractDocument到自身的1..*关联

[更新2]
还考虑到,根据您的解释,从文档到文档类型的关联具有不同的语义,因此不同(另一个关联)。从DocumentType到Document的关联来看,这里的情况比你的另一个类似问题更简单。很明显,下面两个类描述抽象文档结构,而上面两个类描述具体文档

抽象元素永远不应该依赖于具体的元素,所以只需将两个垂直关联单向地指向抽象类即可。这将巧妙地打破循环依赖

此外,我将进一步完善您的模型:

  • 文档和字段值之间的关联应该是一个conposition
  • 一些较低的多重性应该更改为0(而不是1),以使模型实例化更灵活(例如,为什么不允许没有DocumentFields的文档?很明显,您迟早会添加一些字段,但您可能可以先创建一个空文档并保存它)
更新:


文档有一个类型,我们可以处理发票、订单等,我需要一个反向关系,因为文档类型可以有很多文档:例如:类型发票有很多发票作为保存在数据库中的文档。问题只在于文档类型和文档?我想可能是FieldValue是一个问题,我认为我建议的AbstractDocument更优雅,为什么需要FieldValue->Document关系?因为一个文档有它合适的FieldValue,对于每个文档,我们可以在FieldValue表中找到它的值。我不明白从文档到documentType的关系如何具有不同的语义文档有一个类型,文档类型有很多文档。您可以提供一些“完整性问题”的具体示例吗?据我所知,如果您没有对
document
施加
1..*
基数限制,您的生活可能会更轻松。为什么不允许没有实例的文档类型?在这种情况下,我可以用什么基数来替换1..*基数?1..*是一个错误documentType和DocumentCare之间是0..*而不是1..*你是说我应该将FieldValue与DocumentField关联,将documentType与DocumentField关联?单向关联,并保持DocumentField和documentType之间的关联?请请参见更新。我将考虑将类Debug字段重命名为FieldType,它将使情况和定义之间的分离(类型)。我已经有了一个包含字段类型的类FieldType,例如:字段日期有一个FieldType:date,字段地址有一个FieldType字符串等等