在我正在构建的类似于 StackOverflow 的应用程序中,我试图确定我的Questions
,Answers
和Comments
表应该有什么关系。
我可以有Questions
并且Answers
两者都由一个表表示Posts
。
这将允许Comments
有一个外键Posts
。
但是,如果Questions
和Answers
是单独的表,那么Comments
每个表应该有什么关系呢?
更新:虽然选择的答案推荐了类表继承方法,这似乎是数据库方面的最佳方法,但 Rails ORM 不支持此选项。因此,在 Rails 中,我的模型必须使用单表继承,并且可能看起来像这样:
class Post < ActiveRecord::Base
end
class Question < Post
has_many :answers, :foreign_key => :parent_id
has_many :comments, :foreign_key => :parent_id
end
class Answer < Post
belongs_to :question, :foreign_key => :parent_id
has_many :comments, :foreign_key => :parent_id
end
class Comment < Post
belongs_to :question, :foreign_key => :parent_id
belongs_to :answer, :foreign_key => :parent_id
end
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.string :type
t.string :author
t.text :content
t.integer :parent_id
t.timestamps
end
end
def self.down
drop_table :posts
end
end
CREATE TABLE "posts" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"type" varchar(255),
"author" varchar(255),
"content" text,
"parent_id" integer,
"created_at" datetime,
"updated_at" datetime
);