一意性制約を使用すると、データの整合性を容易に保持できます。これにより、指定したカラムで、テーブルの 2 つのローが NULL 以外の同じ値を持つことがなくなります。一意性制約は、テーブルのインデックスとして作成されます。
SQL 標準の unique 制約の定義は、カラム定義が null 値を使用しないことを指定します。デフォルトでは、カラム定義で null または not null キーワードを省略したときに、Adaptive Server のカラムは null 値の入力を許可しないように定義されます (sp_dboption を使用してこれを変更していない場合)。
一意性制約とプライマリ・キーの整合性制約を、sp_primarykey、sp_foreignkey、および sp_commonkey で定義される情報と混同しないようにしてください。一意性制約とプライマリ・キー制約は、実際にインデックスを作成して、テーブル・カラムのユニーク属性やプライマリ・キー属性を定義します。sp_primarykey、sp_foreignkey、および sp_commonkey は、(syskeys テーブルにある) テーブル・カラムのキーの論理関係を定義します。これは、ユーザがインデックスおよびトリガを作成することによって実行します。
一意性制約では、ユニーク・ノンクラスタード・インデックスがデフォルトで作成されます。プライマリ・キー制約では、ユニーク・クラスタード・インデックスがデフォルトで作成されます。どちらの制約ででも、クラスタード・インデックスとノンクラスタード・インデックスのどちらでも宣言できます。
たとえば、次に示す create table 文は、テーブルレベルの一意性制約を使用して、stor_id カラムと ord_num カラムの値が複数のロー間で一致しないようにします。
create table my_sales (stor_id char(4), ord_num varchar(20), date datetime, unique clustered (stor_id, ord_num))
1 つのテーブルに存在が可能なクラスタード・インデックスは 1 つだけであるため、指定できるのは unique clustered 制約か primary key clustered 制約のいずれか 1 つだけです。
一意性制約およびプライマリ・キー制約を使用して、データ整合性を実行するときにユニーク・インデックス (fillfactor、max_rows_per_page、および segment_name オプションの使用を含む) を作成します。ただし、インデックスには補足の機能があります。
一意性制約を作成するには
テーブルで [一意性制約] フォルダを選択します。
[ファイル] − [新規作成] − [一意性制約] を選択します。テーブル一意性制約作成ウィザードが開きます。
テーブル一意性制約の作成ウィザードでは、以下の情報が要求されます。
入力項目 |
説明 |
|---|---|
名前 |
新しい制約の名前。 |
カラム |
制約の対象にするカラムを選択する。 |
セグメント |
制約を配置するセグメントを指定する。 |
フィル・ファクタ |
フィル・ファクタと値の調整を指定する (任意選択)。[ページあたりの最大ロー数] と相互排他的。 |
ページあたりのロー |
ページあたりの最大ロー数を指定する (任意選択)。[フィル・ファクタ] と相互排他的。 |
クラスタード・インデックス |
このテーブルにクラスタード・インデックスがない場合は、この制約のクラスタ化を指定できる。 |
ページ・ギャップ |
埋められたページと、制約によって作成されたインデックスのエクステント I/O 割り付け操作の間に残される空ページとの比率。 |
[一意性制約] フォルダを選択します。右ウィンドウ枠で、[一意性制約の追加] アイコンをダブルクリックします。