Ho avuto questo un paio di volte nella mia carriera, e nessuno dei miei colleghi locali sembra essere in grado di rispondere. Supponiamo che abbia una tabella con un campo "Descrizione" che è una chiave candidata, tranne che a volte un utente si fermerà a metà del processo. Quindi per circa il 25% dei record questo valore è nullo, ma per tutto ciò che non è NULL, deve essere univoco.SQL posso avere un vincolo "condizionalmente unico" su una tabella?
Un altro esempio potrebbe essere una tabella che deve mantenere più "versioni" di un record e un valore di bit indica quale è "attivo". Quindi la "chiave candidata" è sempre popolata, ma possono esserci tre versioni identiche (con 0 nel bit attivo) e una sola che è attiva (1 nel bit attivo).
Ho metodi alternativi per risolvere questi problemi (nel primo caso, applicare il codice della regola, sia nella stored procedure o nel livello aziendale, e nel secondo, popolare una tabella di archivio con un trigger e UNION le tabelle quando I bisogno di una storia). Non voglio alternative (a meno che non ci siano soluzioni dimostrabilmente migliori), mi chiedo solo se qualche sapore di SQL può esprimere "unicità condizionale" in questo modo. Sto usando MS SQL, quindi se c'è un modo per farlo, ottimo. Sono per lo più solo accademicamente interessato al problema.
Eventuali duplicati: http://stackoverflow.com/questions/866061/conditional-unique-constraint –
Quale versione di SQL Server? – gbn
Grazie per il puntatore In silico. Si applica sicuramente alla situazione 2. Ho cercato prima di pubblicare, ma in realtà non ho cercato le parole chiave che ho usato nel titolo o l'avrei trovato! Il link che postate non affronta completamente la situazione n. 1, che è stata risolta con il suggerimento di Tom H. nel 2005 e Arthur nel 2008. gbn: Sto usando il 2005, motivo per cui non conoscevo l'indice filtri nel 2008. –