Мне определили таблицу как:
OrderID bigint NOT NULL,
IDA varchar(50) NULL,
IDB bigint NULL,
[ ... 50 other non relevant columns ...]
Естественный первичный ключ для этой таблицы был бы (OrderID, IDA, IDB), но это это не возможный, потому что IDA и IDB могут быть пустыми (они могут оба быть пустыми, но они оба никогда не определяются одновременно). Прямо сейчас у меня есть ограничение на уникальность данных на те 3 столбца.
Теперь, вещь, мне нужен первичный ключ для включения репликации транзакций, и я сталкиваюсь с двумя вариантами:
Второй альтернативный инструмент для очистки швов как мой PK был бы значим, и выполним (см., что MSDN связывается), но так как я никогда не видел сделанный нигде, я задавался вопросом, были ли они некоторыми недостатками к этому подходу.
Колонки, которые могут быть нулевыми, не могут быть частью pk, потому что pk также должен быть уникальным.
Также PK никогда не должен быть значимым, потому что значение может измениться.
Есть ли связь между таблицами A и B? Посмотрите на реляционную модель данных. Возможно, в дизайне допущена ошибка.
OrderID должен быть уникальным и поэтому достаточен для PK.