0

我正在使用 Rails,尽管这确实适用于任何 OO/SQL 系统。

我有一个 Note 模型和一个 Comment 模型。笔记可以有很多评论。这很简单,但现在我想添加一个新模型 LearningObjective,它也可以有很多 Comments。这样做的正确方法是什么?我唯一能想到的是在 Comments 表中有一个列,其中包含父模型的名称和 parent_model_id 列。否则,我必须在 Comments 表中有两个单独的列,一列用于 note_id,一列用于 learning_objective_id,其中一列为空。

是否有用于这种情况的典型模式?也许是一个中间模型?

4

2 回答 2

0

您描述的场景最常使用多态性来解决,这基本上正是您在问题中提出的理论。Rails 中的多态性很容易;一个例子:

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_typecommentable_id,它将分别存储关联的类名和 id。

于 2013-07-21T12:21:50.203 回答
0

您可以为此使用交集表:

    +----------+
    | 评论 |
    +----------+
    | 评论ID | 评论 |
    +----------+

    +---------------+
    | 笔记 |
    +---------------+
    | noteID | 注意 |
    +---------------+

    +--------------+
    | 学习目标 |
    +--------------+
    | 目标ID | 目标 |
    +--------------+

现在为您的十字路口:

    +------------------------------------------------+
    | 注意评论 |
    +------------------------------------------------+
    | note 备注 ID | 评论ID | noteID |
    +------------------------------------------------+

    +-------------------------------------------------- -----+
    | 学习目标评论 |
    +-------------------------------------------------- -----+
    | learningObjectiveCommentID | 评论ID | 目标ID |
    +-------------------------------------------------- -----+

我就是这样做的,当然还有其他解决方案

于 2013-07-21T12:18:36.427 回答