異なるコンテンツタイプのコメントを保存する

i have different content types on my website. f.e. - articles, questions, posts i see two ways for storing comments.

1)各コンテンツタイプごとに、articles_comments、post_commentsなどのテーブルを作成します。

2)フィールドparent_fieldとparent_idを持つ1つのテーブルを作成します。 'parent_field'にはarticles_idやposts_idのようにsmthを保存します。それで

explode('_', $parent_field);

私は親テーブルの名前とフィールド名を受け取ることができます

select "... FROM $table WHERE $field = $parent_id"

第2の方法は柔軟であるように見えるが、最初は簡単である。

ですから、問題は、毎日100 + kのホストの場合、どちらの方が良いのでしょうか?

4
パフォーマンス面では、小さなテーブルはおそらく高速になりますが、プライマリキーのみでアクセスするため、ほとんど違いはありません(ケース2はより簡単です)。ケース2では、をプライマリキーとして一緒に使用してください。
追加された 著者 Viruzzo,

1 答え

コメント用に1つのテーブル

id, caption, body, ...

コメントへの親関係を格納する1つの関係テーブル

comment_id (int), 
parent_id (int),
parent_type (enum, set, or int BUT not varchar)
// build index

これは複数の親に簡単にコメントを付けることができます。 コメントを取得するために INNER JOIN を簡単に行うことができます

別のメリット、
あなたがすべての記事、質問、投稿のほとんどのコメントを取得したい場合など、 あなたの方法で、
INNER JOIN + GROUP BYが3つ必要です。 私の提案では、あなたは単一のクエリが必要です

最も重要なのは、
リレーションテーブルは大量のレコードを処理できます
それは整数(より小さいインデックス)だけを格納するので、

1
追加された
それは単一の肥大化されたテーブルよりも優れています。あなたがタイプを持っていない場合の簡単な例 - >あなたはORを使うように変更するでしょう(posts_id =?OR articles_id =?)...インデックスがORをしないので、それはインデックスを使用しません複数の列にまたがって私の提案では、parent_typeがなくてもインデックスの使用が許可されています
追加された 著者 ajreal,
パフォーマンスはどうですか? 2つのテーブルからデータを取得する必要があるためです。場合2私はPHPでクエリを準備し、1つだけのテーブルを使用することができます
追加された 著者 aloneibreak,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com