たとえば、投稿、投稿に対する回答、回答に対するコメントがあります。
エンティティ (投稿、回答、コメント) ごとに各テーブルを用意するか、'post_type' と 'parent_id' パラメータを持つ 1 つのテーブルを用意するのがよいでしょうか?
UPD:回答とコメントはプロパティと似ています。
たとえば、投稿、投稿に対する回答、回答に対するコメントがあります。
エンティティ (投稿、回答、コメント) ごとに各テーブルを用意するか、'post_type' と 'parent_id' パラメータを持つ 1 つのテーブルを用意するのがよいでしょうか?
UPD:回答とコメントはプロパティと似ています。
最適なルートは 3 つのテーブルです。
投稿は最終的な親であり、回答はそれにリンクされ、コメントは回答にリンクされます。
投稿とコメントに別々のテーブルを使用するかどうかは、一方を他方の代わりに使用できるかどうか、およびそれぞれの処理がどの程度似ているかによって異なります。別の言い方をすれば、それぞれに固有の情報はどれくらいですか? それぞれに固有のものがないか、ほとんどない場合は、1 つのテーブルが機能する可能性が非常に高くなります。
特定の状況では、微分列を持つ単一のテーブルを使用するのが理にかなっています(オプション2)。ただし、1つのタイプのみに属する列はすべて独自のテーブルに入れる必要があり、そのテーブルにはメインテーブルにマッピングされる外部キーがあります。これにより、テーブル継承階層が形成されます。
これらのテーブルが表すオブジェクトがかなりの数の列を共有している場合、これは理にかなっています。また、それらの共通性により、特定のサブタイプを知らなくても、いくつかの処理をさまざまなタイプに一般化することができます。
クエリの大部分が差別化要因の列でフィルタリングする必要がある場合、それらを同じ場所に保存することで実際にどのような利点が得られますか?
つまり、KISSが適用されます。シングルテーブルアプローチを使用することでプログラミング上の利点がある場合は、それを使用します。それ以外の場合は、シンプルに保ち、3を使用します(直感に反しますが、常に自己参加するために追加された認知的負荷は、あなたを納得させるはずです)。