制約の下ではなく、インデックスの下に一意の制約が表示されるのはなぜですか?
-
06-07-2019 - |
質問
次のようにtsqlテーブルに制約を作成しました:
alter table disabledqualities
add constraint uc_uIdQualCode
unique (userId, qualitycode)
MSSMStudioでは、制約の下ではなくインデックスの下に制約が表示されます。
なぜ?
-編集-
私はそれが制約を強制するためのインデックスを作成することを理解していますが、なぜ「quotesconstraints」というノードがあるのですか?
解決
SQL Serverはバックグラウンドでインデックスを作成して、制約を適用します
これは、非クラスター化SQLサーバーに非クラスター化インデックスを使用するように追加することで、クラスター化されたPK(デフォルト)または別のクラスター化インデックスが既にない場合にクラスター化を作成する別の記述方法です
alter table disabledqualities
add constraint uc_uIdQualCode
unique nonclustered (userId, qualitycode)
[編集] そのノードはチェック制約を追加し、一意の制約はインデックスの下に追加されます
どちらの方法でもウィザードに近づかない
他のヒント
チェック制約とデフォルトの制約は制約ノードの下に表示されます。
SQLはインデックスを使用して一意の制約を強制します。
制約を強制するためのインデックスを作成することは理解していますが、なぜ" constraints"というノードがあるのですか?
このノードは、 CHECK
制約を表示します。
本当の答えは"です。Microsoftがそう言ったからです。答えが必要な場合は、質問する必要があります"。
一意の制約はsysindexesシステムビューにあるため
select * from sysindexes where name = 'uc_uIdQualCode'
それは単純に論理的です Studioから新しい一意の制約を追加するには、[インデックスとキーの管理]ボタンをクリックする必要があります。そのため、インデックスから追加する場合は、インデックスで確認する必要があります:)
チェック制約とは何なのかわからないため、制約に何が表示されるのか理解できないと思います。チェック制約は、挿入または更新時にデータをチェックして、何らかのビジネスルールを満たしているかどうかを確認します。データの整合性を確保するために使用されます。たとえば、1,4または5の値のみを含む整数フィールドがある場合、チェック制約を設定して、フィールドに9が追加されないようにします。日付フィールドのチェック制約は、PlannedCompletionDateであるフィールドの現在の日時より後でなければならないこと、またはCompletionDateがStartDateより後でなければならないことを指定する場合があります。これらは制約の下に現れる種類です。