私のアプリケーションでは、フォームから SQL Server 2005 データベースにデータ (「要求」) を送信し、後で監督者が確認して承認する必要があります。ユーザーは、新しいリクエストを挿入する権限を持っている必要がありますが、既に送信したリクエストを変更することはできません。
テーブルが 1 つの場合、これは簡単です。UPDATE 権限なしで、INSERT 権限のみを付与します。しかし、リクエストは実際には 1 対多の関係で 2 つのテーブルにまたがっています。ユーザーが既存のリクエストに追加の子行を挿入できないようにする必要があります。理想的には、これはデータベース レベルで実施する必要があります。親行と 1 つ以上の子行を同じトランザクションに挿入できるようにしますが、トランザクションがコミットされると、その外部キーを使用して新しい子行が挿入されるのを防ぎます。
これを達成するための最良の方法は何ですか?トリガーなしで「参照整合性」のこの特別なフレーバーを強制する方法はありますか? また、トリガーが唯一の方法である場合、親行が現在のトランザクション内に挿入されたことをどのようにテストできますか?