2017-12-28 5 views
0

Ich habe eine Tabelle mit PreiscodesSQL eindeutigen Index ermöglicht doppelte nulls

codes 
code, user_id, prize_id 

Ich habe einen eindeutigen Index für user_id, prize_id

Alle Codes bereits in der Tabelle sind und wenn ein Benutzer einlöst einen Code Ein zufälliger Code mit user_id = NULL wird zugewiesen.

Leider funktioniert das nicht, da der eindeutige Index es mir nicht erlaubt, die gleiche prize_id mehrmals hinzuzufügen, ohne eine user_id zusammen damit zuzuweisen.

Gibt es eine Möglichkeit, dem eindeutigen Index mitzuteilen, dass NULL nicht als Duplikat betrachtet werden sollte?

Ausgangszustand:

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

nach 1 Benutzer einlöst den Code für Preis 2:

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

NULL ist kein Wert, es ist die Abwesenheit von einem. Vielleicht eine ID namens "Kein Preis" als Standard. –

+0

@JacobH Dann habe ich immer noch das Problem, dass dies zu Konflikten mit dem eindeutigen Index – Chris

+0

Dies hilft? https://stackoverflow.com/questions/767657/how-do-i-create-a-unique-constraint-that-also-allows-nulls –

Antwort

1

nur einen gefilterten Index verwenden:

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