SOに非常によく似たプロジェクトに取り組み始めました。Questions ans Answersを含む多くのテーブルを持つアプリ用のデータベース ( Code First EF-5 Sql server 2012) を作成しました。これらの両方のテーブルの間には 1 対多の関係があります ( 1つの質問に複数の回答を含めることができます)。SOと同様に、質問リストビューに各質問の回答数も表示したいと思います。
明らかなアプローチは ( Answers と Questions が 1 対多の関係を持っている場合、各 question エンティティには Answers オブジェクトの List がある場合)、簡単なステートメントを書くことができます:
question.Answers.Count;
しかし、このクエリにはパフォーマンス上の疑問があります。最初に、これを行うことにした方法を説明します(データベースの経験があまりないので、間違ったパスにいる場合は修正してください)
AnswerCount
質問の回答がユーザーによって挿入または削除されるたびに更新される質問テーブル名に追加の列を作成しました。このために、回答テーブルの挿入または削除イベントで実行されるSQLトリガーを作成しました。トリガーは次のとおりです。
Create TRIGGER [dbo].[trg_Answer_INSERT_Delete]
ON [dbo].[Answer]
AFTER INSERT, DELETE
AS BEGIN
DECLARE @id as int = 0,
@count as int = 0;
SELECT TOP 1 @id = QuestionId FROM inserted;
IF @id = 0
BEGIN
SELECT TOP 1 @id = QuestionId FROM deleted;
END
SELECT @count = count(*) FROM Answer where QuestionId = @id;
UPDATE Question
SET AnswerCount = @count
WHERE Id = @id;
END
表示するたびにナビゲーション プロパティ(回答)で Count 関数を呼び出すのではなく、列にカウントを保存し、カウントを表示するたびに列の値にアクセスするのは効率的ではないため、このすべてのオーバーヘッドを実行しています。質問の答えは??
誰でもこのシナリオに詳細な光を当てることができますか?