2017-12-28 11 views
0

私はSQL一意のインデックス可能重複ヌル

すべてのコードがテーブルに既に存在し、ユーザーがコードを償還するときprize_id

codes 
code, user_id, prize_id 

私は、user_idの上で一意のインデックスを持つ賞金コードを持つテーブルを持っていますuser_id = NULLのランダムコードが割り当てられます。

残念ながら、ユニークインデックスでは、user_idを割り当てずに同じprize_idを何度も追加できないため、これはうまくいきません。

NULLが重複と見なされるべきではないことを一意索引に伝える方法はありますか?

初期状態:

code, user_id, prize_id 
A, NULL, 1 
B, NULL, 1 
C, NULL, 1 
D, NULL, 2 
E, NULL, 2 

ユーザー1は、賞金2のコードを償還した後:

code, user_id, prize_id 
A, NULL, 1 
B, NULL, 1 
C, NULL, 1 
D, 1, 2 
E, NULL, 2 
+0

NULLは、それはだ、値ではありません1つの不在。おそらく "No Prize"と呼ばれるIDをデフォルトにします。 –

+0

@JacobHそれから私はまだユニークなインデックスと矛盾するという問題があります – Chris

+0

これは役に立ちますか? https://stackoverflow.com/questions/767657/how-do-i-create-a-unique-constraint-that-also-allows-nulls –

答えて

1

だけでフィルターのインデックスを使用します。

create unique index unq_codes_user_prize on codes(user_id, prize_id) 
    where user_id is not null;