【问题标题】:Why does GORM use a join table for one-to-many?为什么 GORM 使用连接表进行一对多?
【发布时间】:2014-03-14 19:28:20
【问题描述】:

Grails documentation 开始,默认情况下,一对多关系使用连接表表示。

我不明白为什么这是可取的。在开始使用 Hibernate 和/或 Grails 的 GORM 之前,我几乎没有 SQL 经验。似乎在“多”侧表中使用指向“一”侧表上一行的外键是实现一对多关系的方式......

谁能解释这种设计决策?

【问题讨论】:

    标签: sql grails grails-orm


    【解决方案1】:

    将连接表用于单向一对多关系的原因是关系的多方可能有许多关系并且不知道这些关系。也许这里最好举个例子:

    class Book {
      String title
    }
    
    class BookStore {
      String name
      static hasMany = [books: Book]
    }
    
    class Library {
      String name
      static hasMany = [books: Book]
    }
    

    在上述域中,Book 不需要在其表上同时具有 BookStoreLibrary ID。 Book 没有任何一个都是完全有效的。通过使用连接表,可以避免外键污染 book 表。

    请记住,因为这是对单向而不是双向关系的建模。

    【讨论】:

    • 连接表方法对双向一对多关系没有用吗?或者你是说对于双向的外键方法被多方面使用?感谢您的帮助。
    • 我的意思是,在双向一对多关系的情况下,多方(在这种情况下为 Book)知道关系的另一方,这很有意义保持多方表上的关系。我似乎记得这就是 Grails 处理双向关系的方式。 (99% 确定,无需检查)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2022-01-20
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2022-06-15
    • 2012-11-21
    相关资源
    最近更新 更多