Database design 数据库中没有域模型关系的原因?

Database design 数据库中没有域模型关系的原因?,database-design,domain-driven-design,Database Design,Domain Driven Design,是否存在不希望在数据库中持久化域模型之间关系的情况 我最近在一次对话中,设计师为证明他的方法是正确的,他说,从安全角度来看,某些关系应该可以导航给给定的用户,因此他不赞成在db/实体模型中明确定义这些关系 是否有其他标准方法来解决这一问题?是否还有其他众所周知的场景,人们可能不想保持关系?这听起来像是一种解决数据库和/或应用程序建模不当问题的方法。除非应用程序特别允许/显示,否则用户无法直接访问其部门 在IMO中,数据导航和检索数据的查询应该是两件不同的事情,即使在DDD中也是如此。通过删除自然

是否存在不希望在数据库中持久化域模型之间关系的情况

我最近在一次对话中,设计师为证明他的方法是正确的,他说,从安全角度来看,某些关系应该可以导航给给定的用户,因此他不赞成在db/实体模型中明确定义这些关系


是否有其他标准方法来解决这一问题?是否还有其他众所周知的场景,人们可能不想保持关系?

这听起来像是一种解决数据库和/或应用程序建模不当问题的方法。除非应用程序特别允许/显示,否则用户无法直接访问其部门

在IMO中,数据导航和检索数据的查询应该是两件不同的事情,即使在DDD中也是如此。通过删除自然关系进行基于角色的访问似乎是倒退


此外,由于不能在DB级别执行连接,而将它们降级为应用程序代码级别的临时连接,这会导致速度损失,这似乎会使事情变得复杂

数据库用于存储和维护数据的完整性。如果需要关系来实现这一目标,请使用它们。您不能允许您的域管理数据库的结构,就像您不能允许您的数据库支配您的域设计一样。一方对另一方的影响是不可避免的,但由于其目的不同,应将其控制在最低限度。困难就在于如何在域和数据库之间架起一座断开的桥梁,但至少它们各自是健壮的。从表面上看,这是没有意义的:如果一种关系没有持久化,您将如何检索相关数据?@Dave此处的想法不是将关系表示为域模型之间的聚合,例如将Employee和Department视为2个模型Employee.getDepartment不会按预期返回Department模型,并因此表示可进一步在db中保持的关系。建议是通过另一个名为Dependency的类来建模这种关系。Employee.getDepartment只返回可用于查找的departmentId字符串。@redzedi,这近乎于重新创建关系数据库。正如我所建议的,使用数据库,因为它是专为和建立一个丰富的领域。您将在每个方面实现的正确性远远超过集成的成本。