「isDefault」フラグを持つレコードが 1 つだけであることを保証する
データベース テーブルでは、1 つのテーブルにつき 1 つのレコードのみが含まれるようにデータを制限したい場合があります。定義されたグループは、特定の「isDefault」フラグを 1 に設定できます。これは、制約がテーブル全体ではなくサブセットに適用されるため、課題が生じます。
ソリューション: 一意のフィルターされたインデックスの利用
最新の SQL Server バージョン (2008 以降) は、一意のフィルターされたインデックスを使用するソリューションを提供します。このようなインデックスを作成すると、指定した行セットに対して "isDefault" フィールドに制約を適用できます。
インデックス作成構文
次のように定義されたテーブルの場合以下:
CREATE TABLE TableName( FormID INT NOT NULL, isDefault BIT NOT NULL )
次を使用して、一意のフィルタリングされたインデックスを作成できます。構文:
CREATE UNIQUE INDEX IX_TableName_FormID_isDefault ON TableName(FormID) WHERE isDefault = 1
このインデックスは、同じ FormID と "isDefault" が 1 に設定された複数のレコードを挿入しようとするときに、重複キー違反を防ぎます。 例:
INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) -- Will result in a unique key violation error
このインデックスを使用すると、各 FormID セット内の 1 つのレコードだけが 1 に設定された「isDefault」フラグを所有できるようになり、目的のデータが維持されることが効果的に保証されます。誠実さ。
以上がSQL Server で 1 つのレコードのみに 'isDefault' フラグが 1 に設定されていることを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。