4

ユーザー アクティビティをログに記録するための適切なデータベース設計についてアドバイスをお願いしたいと思います。

現在、ユーザーがウェブサイト上の記事を投稿/編集/削除できる単純なウェブサイトにこのようなアプローチを実装しています。

テーブルログブック

- log_id
- log_change[Enum: new/edit/remove]
- log_date
- member_id
- post_id

テーブルポスト

- post_id
- post_title
- etc....

テーブル メンバー

- member_id
- member_username
- member_pwd
- etc..

このテーブルを使用すると、ユーザーが記事の新しい投稿 (または編集/削除) を行うたびに、ログブックに記録されます (発生時刻とともに)。

ただし、ユーザーが記事を投稿できるだけでなく、(システムから) ログイン/ログアウト、購入 (トランザクション) などの他のことを実行できる大規模なシステムを扱っている場合はどうでしょうか。

モジュールごとに異なるテーブルを使用する必要がありますか? たとえば、システムに記事の投稿、電子商取引などのモジュールがある場合、次のログテーブルがあります。

  1. 記事ログ
  2. 電子商取引ログ

各テーブルが対応する各モジュールのアクティビティを記録する場所。

4

1 に答える 1

2

エンティティのサブタイピング設計アプローチを使用できます。このアプローチでは、すべてのタイプの変更について、誰がいつ、単一のテーブルで追跡されるなど、共通のログ属性が追跡されます。追加の属性を持つ変更の場合、タイプごとに 1 つずつ追加のテーブルを作成できます。

各サブタイプ ログ テーブルは、外部キーを使用して共通テーブルを参照します。通常、サブタイプ テーブルから共通テーブルへの外部キーは、サブタイプ テーブルの主キーでもあります。つまり、関係は 1:1 です。

このような設計では、共通テーブルには、共通テーブルの各レコードに適用可能なサブタイプを示す列 (パーティション属性) が含まれることがよくあります。

このアプローチにより、ロギング システムの構築と維持に必要なコードの量が減り、ログ テーブルを正規化した状態に保つことができます。

于 2013-04-17T12:55:18.393 に答える