私は多対1の関係を記述するテーブルを持っています。ピクチャとアルバムの間にあるとしましょう。私はアルバムのカバー画像として1枚のアルバムにつき1枚しか選択できないようにしたいと考えています。今、表には、このようなものです:ブール値の列(一種のラジオボタン)で「一意性」を適用する方法は?
AlbumID int primary key,
PictureID int,
IsCover bool
は、私は、全体のスキーマを変更したくないと仮定すると(溶液が定義する、別のテーブルとの関係「のカバーである」移動する可能性がありワン他のテーブルを追加して既に実装されているクエリを変更しないことが望ましい)、同じアルバムIDを持つすべてのエントリがIsCoverをfalseに設定するよう強制する方法はありますか?
私はサーバー側のソリューションを探しています。私はMicrosoft SQL Server 2012で作業しています。UNIQUE制約はここでは適用できません。そうでなければ、すべてのアルバムに対してカバーと非カバーのみを持つことができます。私はすでに自分のアプリケーションで小切手を実装していますが、私は本当に安全性のレイヤーを追加したいと思っています。
ありがとうございます。
新しいエントリがカバーアイテムであることを想定しているかどうかをチェックして、他のすべてをマークし、挿入後/更新後トリガーを使用してはどう関連エントリはfalse? –
CHECK制約を使用すると、テーブルで好きなルールを適用できます。実際のチェックを行い、制約内で使用する関数を作成します。 –
両方のおかげで!しかし、私は可能な限りシンプルなものを保つために、ユニーク制約に似たものがあるかどうかを調べようとしています。 – Simone