2016-11-29 8 views
0

のは、私は次の列があるとしましょう:SQL Serverのユニーク制約

Name | Address| Type 

タイプは、SQL Serverのintとして保存され、C#フラグ列挙型に対応しています。特定の名前とアドレスに対して、2つのエントリが同じフラグを持たないように、名前とアドレスと型の列に一意の制約を宣言したいと思います。たとえば、次の2つのエントリは、法的になります:

John | NY | 1 
John | NY | 2 

が、これらの二つは(最初のビットが両方のための1であるため)しません:

Jane | NY | 1 
Jane | NY | 3 

はこれを実装するための簡単な方法はありますか?ありがとう!

+0

SQL Serverで一意制約を作成し、クラスレベルでモデル検証ロジックを作成することができます –

答えて

0

これは間違った方法です。

フラグを整数列に埋め込まないでください!あなたが本当にしたい場合は、bitとして保存することができますが、tinyintは、多くの場合、罰金です:何らかの理由で、あなたが複数の格納にを持っている、場合

create unique index t_name_address_type1 on t(name, address, type1); 
create unique index t_name_address_type2 on t(name, address, type2); 
. . . 

Type1 bit, 
Type2 bit, 
. . . 

が続いてユニークなインデックスを作成します値を整数列に格納する場合は、計算列を使用して別々のフラグ列を作成できます。

alter table t add type1 as (case when intcol & 1 > 0 then 1 else 0 end); 
alter table t add type2 as (case when intcol & 2 > 0 then 1 else 0 end); 
. . . 

計算列にユニークなインデックスを作成することができます。