ログに記録されたイベントのデータベースを管理する Web アプリケーション (ASP.NET を使用してプログラム) を計画しています。データベースは SQL Server 2008 で管理されます。各イベントは、一連の「ユニット」から発生する場合があります。ユーザーは、ASP.NET インターフェイスを介してこれらの「ユニット」を追加および削除できます。
各「ユニット」は、最大で 100 万、あるいはそれ以上のエントリをログに記録できる可能性があります。(カットオフは日付によって管理されます。例:
DELETE FROM [tbl] WHERE [date] < '01-01-2011'
私が持っている質問は、そのようなデータベースを構築するための最良の方法は何ですか:
次のように、すべての「ユニット」のすべてのエントリを 1 つのテーブルに配置します。
CREATE TABLE tblLogCommon (id INT PRIMARY INDEX, idUnit INT, dtIn DATETIME2, dtOut DATETIME2, etc INT)
または、「ユニット」ごとにテーブルを分けることにより、次のようになります。
CREATE TABLE tblLogUnit_1 (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT) CREATE TABLE tblLogUnit_2 (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT) CREATE TABLE tblLogUnit_3 (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT) --and so on CREATE TABLE tblLogUnit_N (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT)
エントリを参照するという観点からすると、アプローチ 1 の方が簡単に思えます。アプローチ 2 では、変数 N 個のテーブルを処理する必要があるからです (ユーザーは「ユニットの追加と削除が許可される」と述べたように)。
ただし、アプローチ 1 では、後でこれらのログ エントリへのアクセスが非常に非効率になる可能性があります。ASP.NET インターフェイスを介して、これらのログからレポートを生成する必要があります。
コーディングを始める前に、あなたの意見を聞きたいですか?
編集:テーブル内の列の数が違いを生むことに気づきませんでした。悪い!テーブルの実際の列数は 16 です。