Tengo una tabla definida como:¿Es una buena idea usar una columna calculada como parte de una clave principal?
OrderID bigint NOT NULL,
IDA varchar(50) NULL,
IDB bigint NULL,
[ ... 50 other non relevant columns ...]
La clave principal natural para esta tabla sería (IdPedido, AIF, BID), pero esto no es posible debido a la AIF y el BID pueden ser nulos (que pueden ambos son nulos, pero nunca son ambos definidos al mismo tiempo). En este momento tengo una restricción única en esas 3 columnas.
Ahora, la cosa es que necesito una clave principal para permitir la replicación transaccional, y yo estoy frente a dos opciones:
- Crear una columna de identidad y lo utilizan como una clave primaria
- Crear una columna C no calculada nula que contiene IDA o IDB o '' si ambas columnas son nulas, y uso (OrderID, C) como mi clave principal.
Las segundas costuras alternativa más limpia como mi PK sería significativo, y es factible (ver msdn link), pero ya que nunca he visto este hecho en cualquier lugar, me preguntaba si había algunas desventajas de este enfoque.