0

こんにちは、私は Web 開発の初心者です。ソーシャルネットワーキングサイトを開発しようとしています。データベース設計レベルでは、いくつか問題があるように感じます。ここに私の問題があります。

属性が次のステータステーブルがあります。

  • status_id (auto_increment)
  • ユーザーID
  • 状態

私の計画は、ホームページの読み込み時に関係テーブル (私は関係テーブルを持っています) から友達を探し、関係テーブルの user_id を使用して、ステータス テーブルからステータス (最新順) をロードすることです。これは良い計画ですか?このテーブルには何百万もの行が含まれる可能性があるため (運が良ければ、最も効率的な方法が必要ですが)、1 人のユーザーが 200 人または 300 人の友人のクエリを実行している場合、遅くなりますか? テーブルに非常に古いステータスを保持する必要がありますか? アドバイスをお願いします。このテーブルには頻繁に挿入が行われるため、インデックスを作成することはお勧めできません。どう思いますか? 属性が次のようなコメント テーブルもあります。

  • ユーザーID
  • friend_id(誰のステータスについてのコメント)
  • status_id(ステータスに関するコメント)
  • コメント

ここでは主キーはありません。このテーブルの質問は同じです。MySQL データベースと MyISAM をデータベース エンジンとして使用しています。InnoDB はどうですか? ソーシャルネットワーキングに最適なエンジンは? あらかじめご了承ください。

4

1 に答える 1

0

過去のステータスを保存する必要がありますか? そうでない場合はNVARCHAR、テーブルのフィールドにしUsersます。2011 年 7 月 3 日のビルの状況を知りたい場合は、日付が必要です。私はMicrosoft SQLに精通しています。これは次のようなものです。

CREATE TABLE Statuses
(
UserID  INT NOT NULL REFERENCES Users (UserID) ON DELETE CASCADE,
EffectiveDate   DATETIME NOT NULL DEFAULT NOW(),
PRIMARY KEY (UserID, EffectiveDate DESC),
Status  NVARCHAR(100) NOT NULL
)

いつかパフォーマンスが不十分になる場合はCurrentStatusUsersテーブルに保存するか、各ユーザーの最新のステータスのみを含むマテリアライズド ビューを使用することもできます。

于 2012-07-13T18:32:23.940 に答える