4

ユーザーがグループに参加してグループを作成できるシステムを作成しています。これらのグループ内で、メンバーはトピックを作成したり、既に作成されているトピックに返信したりできるので、次の方法のどれが最適かについて意見をお聞かせください: groups_posts と group_topics の 2 つのテーブルを作成します。

--group_topics
id PK
group_id int FK
user_id int FK
title varchar(50)
content varchar(500)
status int

--group_posts
id PK
topic_id int FK
user_id int FK
content varchar(500)
status int

または一意のテーブル group_tposts を作成します。

--group_tposts
id PK
group_id int FK
user_id int FK
is_topic boolean
title varchar(50)
content varchar(500)
status int
4

3 に答える 3

10

あなたの説明に基づいて、もう少し必要なようです。多分何かのようなもの:

  • 1 つのグループに多くのユーザーを含めることができます。
  • 1 人のユーザーが複数のグループに所属できます。
  • グループ内で、ユーザーはトピックを作成します (トピック = 件名、テーマ、関心のあるカテゴリまたは一般的な領域)。
  • トピック内で、ユーザーは新しい投稿を作成したり、以前の投稿に返信したりします。

ここに画像の説明を入力

注: content フィールドを に追加しますPost

于 2011-05-30T21:26:00.323 に答える
1

それは本当に依存します:

結合されたテーブルのケース
ブール値が 1 バイトしかとらないという事実を考えると、結合されたテーブルは悪い考えではありません。ただし、カーディナリティが低いため
、フィールドにインデックスを作成してもis_topic 機能しないことに注意してください。

MySQL (またはその他のデータベース) は、そのフィールドでのインデックスの使用を拒否しますが、代わりにテーブル スキャンを実行します。

別のテーブルの
場合 トピックとは別の投稿を頻繁に使用する予定がある場合は、別のテーブルをお勧めします。
それらの選択は高速になるため、MySQL はトピックから投稿を分離するために完全なテーブル スキャンを実行する必要はありません。

于 2011-05-30T19:51:51.880 に答える
1

2テーブルの方が良いと思います...

ウィキペディアでデータベースシステムを正規化する方法を見ることができます http://en.wikipedia.org/wiki/Database_normalization

于 2011-05-30T19:51:58.743 に答える