【问题标题】: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 数据库,它是程序员所做的事情。

标签: language-agnostic datamodel


【解决方案1】:

我尽量避免双向关系。而是用 DAO/Repository 中的显式查询替换一个方向。使模型更简单,如果通过接口正确完成,应用程序将清除循环依赖

【讨论】:

  • 单向关系更容易管理。如果显式查询/查找导致性能问题,您可能必须转到双向关系。
【解决方案2】:

这里可以建立双向关系吗?所以,你可以让 Role 给你他所有的成员,并让 User 给你他的所有角色。

是的。如果您确实需要两种方式的导航,那么没有理由阻止自己以最简单的方式获得它。

一个缺点是,每当您删除一个关系时,您都必须管理这两个实体。

这取决于实现,可以以一种同步两个“端”的方式实现数据模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2015-09-25
    • 2011-02-12
    • 2011-04-28
    • 2010-10-15
    相关资源
    最近更新 更多