In einer Anwendung, die StackOverflow ähnelt und die ich gerade aufbaue, versuche ich zu entscheiden, welche Beziehung meine Questions
, Answers
y Comments
Tabellen haben sollten.
Ich könnte Questions
y Answers
beide durch eine einzige Tabelle dargestellt werden Posts
.
Dies würde es ermöglichen Comments
mit einem einzigen Fremdschlüssel zu Posts
.
Aber wenn Questions
y Answers
getrennte Tabellen sind, welche Beziehungen sollten Comments
zu jedem dieser Punkte haben?
UPDATE: Obwohl die gewählte Antwort einen Class Table Inheritance-Ansatz empfiehlt und dies aus Sicht der Datenbank der beste Ansatz zu sein scheint, wird diese Option vom Rails ORM nicht unterstützt. In Rails müssen meine Modelle also Single Table Inheritance verwenden und werden wahrscheinlich wie folgt aussehen:
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
);