2011-02-14 15 views
3

[SQL Server 2008]ダイアログボックスで制約を手動で定義するにはどうすればよいですか。私は、すでにレコードが追加されていない場合に新しいレコードを追加する際に制約を追加したいと考えています。制約ダイアログを使用してSQL Server 2008に制約を追加する方法は?

AdvCatJoinIDがあればCatIDAliasIDがすでに存在していることを私の主キー、CatIDCategoryテーブルからキーで、AliasIDは、エイリアステーブルの主キーである、私は制約があることにしたいとなるように、私のテーブルが構成されていますペアでテーブルに新しいレコードを追加しないでください(既に存在するように)、どのように?

おかげ

答えて

2

ステップ1:SQL Serverのオブジェクトエクスプローラで

、あなたは上の制約を入れて、Indexesサブノードに移動し、右クリックして、New Indexを選びたいデータベースとテーブルを見つける:

enter image description here

ステップ2:T中

ポップアップし、彼ダイアログボックス、独自のインデックスを定義します。

  • はそれをあなたが
  • を選ぶの名前を与える[ X ] Uniqueチェックボックスが二回にあなたの2つの列を追加する[ Add ]ボタンを
  • クリックしてチェックされていることを確認してくださいインデックス

enter image description here

あなたがそれらの2つのステップをやったとき、あなたは今を持っています(CatID, AliasID)の組み合わせで一意のインデックスがあり、これらの2つの値のペアは、テーブルに複数回存在することはできません。

2

はあなたが本当にAdvCatJoinID列が必要ですか?通常、これらの関連テーブルでは、2つの外部キー列に複合主キーがあります。それはユニークな側面を強制します。

それ以外の場合は、「インデックス/キー」ダイアログ(制約なし)を実行し、両方の列を選択して新しい一意索引を構成する必要があります。このダイアログには、テーブルを右クリックして[デザイン]を選択し、次にテーブルデザイナのグリッドを右クリックした後にアクセスします。

一意インデックスではなく一意制約を作成するには、「一意キー」オプションを選択しますが、この2つの間には実用的な違いはありません。

+0

"...実際的な違いはありません" - 一意性制約を参照するための外部キー制約はありますが、一意のインデックスは参照できません。 –

+0

@Damien - このような違いはありません。これはうまく動作します。create table t(c int)tはユニークなインデックスを作成します(c)create table t2(c int references t(c)) '。インデックスにインクルードされた列を追加できないなど、実際には一意の制約をバックアップするなど、いくつかの違いがあります。 –

+0

私はこれまでのこの行動の違いを発見したと確信していますが、2008年と2000年に再テストしただけです。私は何を考えていたのだろうか? –

関連する問題