我正在使用Rails,虽然这适用于任何OO / SQL系统,实际上。
我有一个Note模型和一个Comment模型。备注可以有很多评论。这很简单,但现在我想添加一个新的模型,LearningObjective,它也可以有很多评论。这样做的正确方法是什么?我唯一能想到的是在Comments表中有一个列,其中包含父模型的名称和parent_model_id列。否则,我必须在Comments表中有两个单独的列,一个用于note_id,另一个用于learning_objective_id,其中一个是空的。
这种情况是否有典型的模式?也许是一个中间模型?
答案 0 :(得分:0)
您可以使用交叉表:
+---------------------+ | Comments | +---------------------+ | commentID | comment | +---------------------+ +---------------+ | Notes | +---------------+ | noteID | note | +---------------+ +-------------------------+ | LearningObjective | +-------------------------+ | objectiveID | objective | +-------------------------+
现在为你的十字路口:
+------------------------------------+ | NoteComment | +------------------------------------+ | noteCommentID | commentID | noteID | +------------------------------------+ +------------------------------------------------------+ | LearningObjectiveComment | +------------------------------------------------------+ | learningObjectiveCommentID | commentID | objectiveID | +------------------------------------------------------+
我就是这样做的,确定还有其他解决方案
答案 1 :(得分:0)
您描述的场景通常是通过多态来解决的,这基本上就是您在问题中理论化的内容。 Rails中的多态性为easy;一个例子:
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end
class Note < ActiveRecord::Base
has_many :comments, as: :commentable
end
class LearningObjective < ActiveRecord::Base
has_many :comments, as: :commentable
end
您的comments
表中有两列用于处理此关系:commentable_type
和commentable_id
,它们将分别存储关联的类名和ID。