監査の結果を保持する SQL Server 2008 データベース内のテーブル構造を設計しています。監査には現在 65 の質問があり、0 ~ 4 または N/A の回答が可能です。このデータを保持するために作成したテーブル構造 (まだテスト中) を以下に示します。送信すると、質問ごとに AuditDetail テーブルにレコードが作成されます。選択した回答が 0、1、または 2 の場合、ユーザーは、低い理由、修正方法、および責任者を説明する詳細を入力する必要があります (これにより、AuditIssue テーブルにレコードが作成されます)。各質問は、QuestionCategory と ItemCategory という名前の 2 つの異なるカテゴリによって記述されます。
私が懸念している問題は、現在のテーブル設計では、送信される監査ごとに 65 行が AuditDetail テーブルに追加されることです。この監査は、毎月少なくとも 70 回完了する必要があります (多くの部門で使用されています)。したがって、このテーブル構造では、1 か月あたり約 4550 行が AuditDetail テーブルに追加されます。これが将来のパフォーマンスに悪影響を及ぼす可能性があることを心配しており、これを本番環境に移行した後にテーブル構造を再設計する必要がないようにしたいと考えています。
私が思いつく他の唯一の解決策は、AuditDetail テーブルを、各質問の列を持ち、各監査のスコアを 65 列以上の 1 行に格納するテーブルに置き換えることです。
現在のデザインは正規化ルールに従っていると思いますが、質問ごとに列を作成することはそうではないと思います。質問の追加/削除や既存の質問の変更など、質問が将来 (おそらく何度も) 変更されることはほぼ確実です。
この問題に対する答えを探していると、次の 2 つの情報源にたどり着きました。
多くの行または多くの列 列に
回答を格納する
質問が変わるたびに列を追加/削除するのは理想的ではないことを理解しています。 私の質問は、1 か月あたり 4550 行を作成すると、クエリのパフォーマンスにどの程度影響するかということです。私の状況が「回答を列に保存する」で説明されている状況と同じかどうかはわかりません。テーブルに 100 行しかないように見えるからです。 クエリのパフォーマンスが大幅に低下する場合、私が考えていなかったより良いテーブル構造はありますか?
私のクエリは主に、毎月完了した監査の合計、未解決の問題と解決済みの問題と期限切れの問題、問題を引き起こす上位 10 の質問、および月次または日次の監査スコア (回答/質問カテゴリごとの可能な合計ポイントまたは回答/可能な合計ポイント) を示すグラフを作成するために使用されます。 )。これらのチャートはそれぞれ、部門、月、エリアなどでソートできる必要があります。
自白:私は相関サブクエリを使用して、これらのチャートのいくつかを生成する傾向がありますが、クエリのパフォーマンスが低下していることは既にわかっています。私はそれらを回避しようとしますが、私は SQL マスターではないため、それらに行き詰まります。
テストに使用している現在のテーブル構造は次のとおりです。
**AuditMain:**
--AuditId <-- PK
--DeptNumber <-- FK to Dept Table
--AuditorId <-- FK to Auditor Table
--StartDate
--Area_Id <-- FK to Area Table
**AuditDetail**
--DetailId <-- PK
--QuestionId <-- FK to Question Table
--Answer
--NotApplicable (boolean to determine if they chose N/A, needed to calcualte audit score)
--AuditId <-- FK to AuditMain
**AuditIssue**
--IssueId <-- PK
--IssueDescription
--Countermeasure
--PersonResponsible
--Status
--DueDate
--EndDate
--DetailId <--FK to AuditDetail
**AuditQuestion**
--QuestionId <-- PK
--QuestionNumber (corresponds to the question number on the audit input form)
--QuestionDescription
--QuestionCategoryId <-- FK to QuestionCategory
--ItemCategoryId <-- FK to ItemCategory
**QuestionCategory**
--QuestionCategoryId <-- PK
--CategoryDescription
--CategoryName
**ItemCategory**
--ItemCategoryId <--PK
--ItemCategoryDescription
たくさんの説明を読んでくれてありがとう。情報が少なすぎるのではなく、多すぎると誤解したかったのですが、さらに情報が必要な場合はお知らせください. あらゆる提案に感謝します!