Ho una tabella definita come:È una buona idea usare una colonna calcolata come parte di una chiave primaria?
OrderID bigint NOT NULL,
IDA varchar(50) NULL,
IDB bigint NULL,
[ ... 50 other non relevant columns ...]
La chiave primaria naturale per questo tavolo sarebbe (OrderID, IDA, IDB), ma questo non è possibile perché IDA e IDB possono essere null (che possono entrambi sono nulli, ma non sono mai entrambi definiti allo stesso tempo). In questo momento ho un vincolo univoco su quelle 3 colonne.
Ora, la cosa è ho bisogno di una chiave primaria per abilitare la replica transazionale, e sono di fronte a due scelte:
- Creare una colonna di identità e usarlo come una chiave primaria
- Creare un colonna calcolata non nullo C contenente IDA o IDB o "" se entrambe le colonne erano nulle e utilizzare (OrderID, C) come chiave primaria.
Il secondo cuciture un'alternativa più pulita come il mio PK sarebbe significativo, ed è fattibile (vedi msdn link), ma dal momento che non ho mai visto questo fatto ovunque, mi chiedevo se fossero alcuni svantaggi di questo approccio.