Отрицательные первичные ключи
Есть ли какие-либо последствия с использованием отрицательных первичных ключей для таблиц (индекс идентичности -1, семестр идентичности -1 в SQL Server 2005)?
Причиной этого является создание новой базы данных для замены существующей. Между двумя базами данных есть похожие таблицы, и мы хотим, чтобы "источник" информации был прозрачным для наших приложений. Подход заключается в создании представлений, которые объединяют таблицы из обеих баз данных. Отрицательные PK обеспечивают идентичность не перекрываются.
Ответы
Ответ 1
Как и другие, база данных в порядке с этим.
Но это было бы проблемой для приложения .NET, которое использует DataSet + DataAdapter, поскольку они используют отрицательные ключи как временные для новых записей.
Другие уровни доступа к данным могут использовать аналогичные трюки.
Ответ 2
Это отлично с точки зрения SQL Server. Реальный вопрос будет вашим приложением.
Ответ 3
Вы хотите просмотреть устаревший код и посмотреть, где разработчики отсортировали по первичному ключу как ленивый /sloppy способ сортировки по дате (поскольку идентификатор pk обычно сильно или отлично коррелирует со временем).
Ответ 4
Только проблема заключается в том, что вы не сможете добавить третий источник данных таким образом!
Ответ 5
Не проблема.
Это немного не ортодоксально, но кроме этого, отлично.
По умолчанию, предлагаемое SQL Server, это - по умолчанию и может быть изменено в соответствии с потребностями. Похоже, вы получили хороший компромисс.
Ответ 6
Если отрицательные числа оказываются сломаны, используйте четные числа для одного и нечетного числа для другого.
Ответ 7
Это не проблема. Просто убедитесь, что столбец Identity имеет тип, который позволяет отрицательные числа.
Ответ 8
Другой вариант - префикс устаревших ключей с строкой типа "OLD_". Обойная проблема - ваше ключевое поле будет нечисловым.
Если вы должны иметь числовые клавиши, вы можете ввести столбец индикатора "устаревший", а первичный ключ будет представлять собой комбинацию числового идентификатора и устаревшего индикатора (надеюсь, эта комбинация должна быть уникальной).
Ответ 9
Я думаю, что наличие двух источников не является подходящей причиной для этого подхода, хотя технически разрешено. Он не масштабируется (+1 к Ларри Лустигу отвечает за это).
Я бы просто создал представление или хранимую процедуру, которая объединяет оба данных, путем преобразования идентификаторов по мере необходимости и будет иметь приложение для использования вместо прямых табличных чтений и объединений. Это можно было бы масштабировать, изменив представление /SP позже, чтобы добавить еще один источник.