У меня есть таблица, определенная как:
OrderID bigint NOT NULL,
IDA varchar(50) NULL,
IDB bigint NULL,
[ ... 50 other non relevant columns ...]
Естественным первичным ключом для этой таблицы будет (OrderID, IDA, IDB), но это невозможно, поскольку IDA и IDB могут иметь значение NULL (оба могут быть NULL, но они никогда не определяются одновременно) , Сейчас у меня есть уникальное ограничение на эти 3 столбца.
Теперь мне нужен первичный ключ, чтобы включить репликацию транзакций, и я столкнулся с двумя вариантами:
- Создайте столбец идентификации и используйте его в качестве первичного ключа
- Создайте ненулевой вычисляемый столбец C, содержащий либо IDA, либо IDB, либо '', если оба столбца были нулевыми, и используйте (OrderID, C) в качестве моего первичного ключа.
Второй альтернативный очиститель швов, так как мой PK был бы значимым и выполнимым (см. msdn link ), но, поскольку я никогда не видел, чтобы это было сделано где-либо, мне было интересно, если бы они были некоторые минусы этот подход.