「リンク テーブル」を作成することがよくあります。たとえば、次の表は、ユーザー レコードをイベント レコードにマップします。
CREATE TABLE [dbo].[EventLog](
[EventId] [int] NOT NULL,
[UserId] [int] NOT NULL,
[Time] [datetime] NOT NULL,
[Timestamp] [timestamp] NOT NULL
)
この質問では、EventId と UserId の組み合わせが一意であり、問題のデータベースが MS SQL Server 2008 インストールであると仮定してください。
私が抱えている問題は、これらのテーブルにどのようにインデックスを付ける必要があるかについて確信が持てないことです。たとえば、特定のイベントのすべてのユーザーを一覧表示したり、特定のユーザーのすべてのイベントを一覧表示したり、特定の EventId/UserId レコードを取得したりできます。私が検討したインデックス作成オプションは次のとおりです。
- EventId と UserId で複合主キーを作成します (ただし、UserId だけでアクセスする場合、インデックスが役に立たないことは理解しています)。
- EventId と UserId に複合主キーを作成し、UserId に補助インデックスを追加します。
- EventId に主キーを作成し、UserId に補助インデックスを作成します。
アドバイスをいただければ幸いです。