我正在建立一个教科书数据库。 Book
看起来像这样:
图书
虽然一本书(显然)只有一个标题或ISBN - 我希望作者,科目,大学和教授成为一种“标签”。一本书可以由多位作者撰写,可用于由多位教授教授的多个课程中的多个科目。所以我想为每个人建立一个多对多的关系。例如Author
可能看起来像:
作者
对于我来说,书籍属于作者并不一定有意义,反之亦然(虽然我可能是错的。)但我也不知道创建book_author_associations
表,{{{ 1}}模型,book_jubjects_associations
模型等
最好的方法是创建多个像这样的manys?
答案 0 :(得分:3)
没有测试,但理论上应该有效:
Book
has_many :book_associations
has_many :associations, through: :book_associations
BookAssociation
belongs_to :book
belongs_to :association, polymorphic: true
validates :book_id, presence: true
validates :association_id, presence: true
validates :association_type, presence: true
Author
has_many :book_associations, as: :association
has_many :books, through: :book_associations
Subject
has_many :book_associations, as: :association
has_many :books, through: :book_associations
答案 1 :(得分:1)
在这种情况下,连接表是不可避免的。
您应该继续为类,主题,作者等创建单独的表,因为它们具有非常不同的属性。您应该通过连接表将它们与书籍相关联,这些连接表大部分都有自己的属性。
例如,一本书的撰稿人可以是作者,或者他们可以是编辑,或摄影师,翻译,或任何其他角色,并且该角色将是书籍之间关联的属性和作者(最好称他们为贡献者)。
有关此类事物的更多信息,您可以查看EDItEUR的Onix代码列表,了解有关书籍元数据结构的想法。 http://www.editeur.org/14/Code-Lists/