Sto provando a creare un vincolo UNICO INDICE per due colonne, ma solo quando un'altra colonna contiene il valore 1. Ad esempio, column_1
e column_2
devono essere UNICI solo quando active = 1
. Qualsiasi riga che contiene active = 0
può condividere valori per column_1
e column_2
con un'altra riga, indipendentemente da quale sia il valore dell'altra riga per active
. Ma righe dove active = 1
non possono condividere valori di column_1
o column_2
con un'altra riga che ha active = 1
.Vincolo UNICO, solo quando un campo contiene un valore specifico
Quello che intendo per "condivisione" è due righe con lo stesso valore (s) nella stessa colonna (s). Esempio: row1.a = row2.a AND row1.b = row2.b. I valori sarebbero condivisi solo se entrambe le colonne nella riga 1 corrispondessero alle altre due colonne nella riga2.
Spero di essere stato chiaro. : \
Ho ricevuto un suggerimento simile su IRC; crea una tabella attiva e una tabella inattiva. Ma il modo in cui lo metti ha più senso; avere una tabella storica e una tabella attiva. Tuttavia, questa tabella ha molti campi e sembrerebbe che duplicare quei campi in due tabelle sarebbe la cosa sbagliata da fare. Come suggeriresti di evitare questo tipo di ridondanza? – Sam
Una piccola denormalizzazione può fare molto, quindi non preoccuparti delle definizioni duplicate. Ovviamente, dovrai apportare eventuali modifiche alla tabella originale anche alla tabella storica, quindi è un po 'eccessivo, ma, IMHO, vale la pena di pulire i dati. – SWeko
Hmm, e se dovessi separare solo i dati che necessitano di indicizzazione univoca? Le tabelle: mydata, mydata_active, mydata_inactive. In questo modo mydata contiene la chiave primaria e le colonne di dati.E mydata_active e mydata_inactive conterranno solo le colonne che devono essere indicizzate in modo univoco e una chiave esterna che fa riferimento a mydata. Questo è un altro modo, ma richiede un extra (terzo) tavolo. – Sam