Действительно ли это - хорошая идея использовать вычисляемый столбец в качестве части первичного ключа?

Мне определили таблицу как:

OrderID bigint NOT NULL,
IDA varchar(50) NULL,
IDB bigint NULL,
[ ... 50 other non relevant columns ...]

Естественный первичный ключ для этой таблицы был бы (OrderID, IDA, IDB), но это это не возможный, потому что IDA и IDB могут быть пустыми (они могут оба быть пустыми, но они оба никогда не определяются одновременно). Прямо сейчас у меня есть ограничение на уникальность данных на те 3 столбца.

Теперь, вещь, мне нужен первичный ключ для включения репликации транзакций, и я сталкиваюсь с двумя вариантами:

  • Создайте столбец идентификационных данных и используйте его в качестве первичного ключа
  • Создайте непустой вычисляемый столбец C, содержащий или IDA или IDB или, '' если оба столбца были пустыми, и используют (OrderID, C) как мой первичный ключ.

Второй альтернативный инструмент для очистки швов как мой PK был бы значим, и выполним (см., что MSDN связывается), но так как я никогда не видел сделанный нигде, я задавался вопросом, были ли они некоторыми недостатками к этому подходу.

7
задан Brann 4 May 2010 в 08:40
поделиться

1 ответ

Колонки, которые могут быть нулевыми, не могут быть частью pk, потому что pk также должен быть уникальным.

Также PK никогда не должен быть значимым, потому что значение может измениться.

Есть ли связь между таблицами A и B? Посмотрите на реляционную модель данных. Возможно, в дизайне допущена ошибка.

OrderID должен быть уникальным и поэтому достаточен для PK.

2
ответ дан 7 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: