データの基礎応用

銀行が「顧客ID・口座番号・口座種別・残高」を持つ口座テーブルを設計しており、同一顧客が複数口座を保有する場合があります。新しい前提として「顧客は最大3つの普通預金口座しか保有できない」という業務ルールが追加されました。このルールをデータベース制約で直接実装することはできないため、アプリケーションロジックで検証していますが、管理者が直接SQLで新規口座を挿入する際にこのルールを迂回される恐れがあります。データベースレベルでこのルールを自動的に強制する最適な仕組みはどれか?

A.主キー制約にルール記述を追加する
✗ 主キー制約は一意性の保証が目的で、複雑な業務ルール(同一顧客の口座数上限)は実装できません。
B.CHECK制約を用いて列単位で条件を指定する
✗ CHECK制約は単一行内の列値のみ比較可能で、「同一顧客の他行データをカウント」のような複数行にまたがる複雑なロジックは実装できません。
C.トリガー(TRIGGER)を作成し、INSERT時にルール違反をチェックして拒否する← 正解
✓ 正解です。トリガーは複数行にまたがる集計ロジック(COUNT)を実行してルール違反を検出・拒否でき、あらゆるINSERT経路(アプリケーション経由・管理者の直接SQL)を保護します。
D.ビュー(VIEW)を作成して、アプリケーションからの直接テーブルアクセスを禁止する
✗ ビューは表示制御のみで、制約強制機能がなく、直接テーブルアクセスで迂回されます。

この問題のポイント

トリガーは複数行にまたがる集計ロジック(COUNT)を実行してルール違反を検出・拒否でき、あらゆるINSERT経路(アプリケーション経由・管理者の直接SQL)を保護します。

DP-900:Microsoft Azure Data Fundamentals の問題一覧