最佳实践:应该避免双向关系吗? [关闭]
Posted
技术标签:
【中文标题】最佳实践:应该避免双向关系吗? [关闭]【英文标题】:Best Practice: Should one avoid bi-directional relationships? [closed] 【发布时间】:2012-01-25 06:16:44 【问题描述】:我想知道处理这样的数据模型的最佳做法是什么:
我们有 3 个实体:
角色 用户 权限请注意,实体表示为 java 类,并将通过 hibernate 映射到数据库,无论如何我认为在不了解这些技术的情况下可以回答这个问题。
Role
和User
之间以及Role
和Permission
之间存在多对多关系。
在这里建立双向关系可以吗? 所以,你可以让Role
给你他所有的成员,并让User
给你他所有的角色。
您可以询问两个实体非常方便,但是一个缺点是,每当您删除关系时,您都必须管理两个实体。
例如如果您从User
中删除Role
,您还必须从Role
中删除User
。如果有很多这样的关系,这可能会很烦人。因此,我想知道最佳做法是什么。
【问题讨论】:
不明白为什么它被选为主题。数据建模不仅仅是关于 SQL 数据库,它是程序员所做的事情。 【参考方案1】:我尽量避免双向关系。而是用 DAO/Repository 中的显式查询替换一个方向。使模型更简单,如果通过接口正确完成,应用程序将清除循环依赖
【讨论】:
单向关系更容易管理。如果显式查询/查找导致性能问题,您可能必须转到双向关系。【参考方案2】:这里可以建立双向关系吗?所以,你可以让 Role 给你他所有的成员,并让 User 给你他的所有角色。
是的。如果您确实需要两种方式的导航,那么没有理由阻止自己以最简单的方式获得它。
一个缺点是,每当您删除一个关系时,您都必须管理这两个实体。
这取决于实现,可以以一种同步两个“端”的方式实现数据模型。
【讨论】:
以上是关于最佳实践:应该避免双向关系吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章