3

私は現在、 1000〜1500chat program人のユーザーを対象に作成しようとしています。各ユーザーの友達、メッセージのテーブルのように、それぞれに個別のテーブルを作成する必要があるのか​​、それともすべてのテーブルを含めてそこにすべてを保存するだけのテーブルを作成するのか、どちらの解決策がより良いのか疑問に思いました。ユーザーごとに個人情報のテーブルを用意しておくと、実行するほとんどのクエリが少量のデータを含むテーブルで実行されるようになると思います。userefficientmultiplemore efficient

私が間違っているかどうか誰かに教えてもらえますか?

4

2 に答える 2

1

あなたは非常に間違っています。理想的な方法は、ユーザー用に1つのテーブルを用意することです。何百万ものユーザーがいるebayのような会社でさえ。これらのユーザーの分散方法は、単一のテーブルでAで始まるすべてのユーザーのようです... @ Mattが述べたように、xが制限された数でないテーブルを作成することはできません。

そのテーブルに加えて、ユーザーテーブルを指す外部キーとなるUserName列を持つMessagesテーブルを持つことができます。

可能な限りクリーンなソリューションは、友達リストを維持するために少し注意が必要な場合があります。回避策の解決策は、ユーザーテーブルに列を作成することです。この列には、コンマで区切られたフレンドのIDが含まれます(これも同じテーブルのユーザーです)。友達リストに制限が必要ない場合:2つの列userid、friendIdを持つ別のテーブルFriendsを作成できます。これらの列は両方とも、ユーザーテーブルの外部キーになります。これで、クエリは簡単になりますselect * form Friends where userid=<user>。このテーブルは巨大かもしれません。しかし、それがインデックスの出番です。ユーザーID列にインデックスを作成すると、レコードが多い場合でもクエリ結果が非常に高速になります。

于 2013-01-28T05:09:41.630 に答える
1

ユーザーごとにテーブルを設定するのは悪いアプローチです。ユーザーごとにテキストファイルを正確に保存できます。そのためのデータベースは必要ありません。ddatabaseを使用するというアイデアは、エンティティ間の関係を構築することです。そのため、プライマリがあります。 /外部キー。通常、エンティティごとにテーブルが必要です。カーディナリティによっては、2つのエンティティに3つのテーブルが必要になる場合があります。たとえば、userテーブル、messagesテーブル、messageUserテーブル、freindsまたはcontactsテーブルなどがあり、freindsにはfreindsとして接続されているUserIdが格納され、メッセージにはmessageId<->UserIdタプルが格納されます。メッセージをユーザーに一致させます。

于 2013-01-28T05:11:59.497 に答える