3

小さなコミュニティネットワーキングサイトを作成する際に、たとえば次のようなストリームとしてプルされるデータを格納するテーブルを設計するための最善の方法について、いくつかのアドバイスを求めていました。

User X has added a friend!
User Y has commented on a post!
User X changed their profile picture!
User X has changed their motto!

現在、これは私の設定ですが、続行する前に、自分が正しい方向に進んでいるかどうかを知りたいと思いました

update_id  int PK
member_id  int FK
friend_id  int FK
update_action text
update_time   datetime
update_hidden  tinyint

現時点では、追加の挿入クエリを実行して、ユーザーがアクティビティを実行するたびにこのテーブルを更新することを計画していましたが、それが最善であるか、私の場合はこれを実行するための良い方法であるかはわかりません。ヒントやアドバイスは、お時間をいただきありがとうございます。

4

1 に答える 1

0

システムが提供する必要のあるさまざまなアクティビティすべてのテーブルを作成できます。

CREATE TABLE activity
(
    id MEDIUMINT UNSIGNED PRIMARY KEY UNIQUE NOT NULL AUTO_INCREMENT,
    description NVARCHAR(126) UNIQUE NOT NULL
);

例:投稿にコメントした、新しい友達がいるなど。

次に、アクティビティのIDに応じて(コード内のどこでどのアクティビティを使用するかを手動で定義できるように)発生するすべてのアクティビティをログに記録し、次のように保存します。

CREATE TABLE activityLog
(
    id MEDIUMINT UNSIGNED PRIMARY KEY UNIQUE NOT NULL AUTO_INCREMENT,
    userId UNSIGNED NOT NULL,
    friendId UNSIGNED DEFAULT NULL,
    acitivityId UNSIGNED NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    hidden TINYINT(1) DEFAULT 0,
    FOREIGN KEY(userId) REFERENCES users(id),
    FOREIGN KEY(friendId) REFERENCES users(id),
    FOREIGN KEY(acitivityId) REFERENCES activity(id)
);

'users'というテーブルにユーザーが格納されていると仮定します。

新しいアクティビティの作成やイベントのリンクなどが簡単であることを確認してください。

于 2013-02-09T03:57:05.957 に答える