sql – 为什么GORM使用连接表进行一对多?


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

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

任何人都可以解释这种设计决定吗?

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

class Book {
  String title
}

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

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

在上面的域中,Book不需要在其表上同时具有BookStore和Library ID.没有任何一本书,完全有效.通过使用连接表,可以防止使用外键污染书籍表.

请记住,因为这是建模单向而非双向关系.

点赞