Отрицательные первичные ключи - PullRequest
18 голосов
/ 18 марта 2010

Существуют ли какие-либо последствия использования отрицательных первичных ключей для таблиц (Увеличение идентификатора -1, Семя идентификации -1 в SQL Server 2005)?

Причина этого в том, что мы создаем новую базу данных для замены существующей. Между двумя базами данных есть похожие таблицы, и мы бы хотели, чтобы «источник» информации был прозрачным для наших приложений. Подход заключается в создании представлений, объединяющих таблицы из обеих баз данных. Отрицательные PK гарантируют, что идентичности не пересекаются.

Ответы [ 9 ]

15 голосов
/ 18 марта 2010

Как уже говорили другие, с базой данных все в порядке.

Но это будет проблемой для приложения .NET, которое использует DataSet + DataAdapter, поскольку они используют отрицательные ключи в качестве временных значений для новых записей.

Другие слои доступа к данным могут использовать аналогичные приемы.

7 голосов
/ 18 марта 2010

Это прекрасно с точки зрения SQL Server. Настоящим вопросом будет ваше заявление.

5 голосов
/ 18 марта 2010

Вы захотите просмотреть унаследованный код и посмотреть, где разработчики отсортировали по первичному ключу как ленивый / небрежный способ сортировки по дате (поскольку идентификаторы pk обычно строго или идеально коррелируют со временем).

4 голосов
/ 18 марта 2010

Единственная проблема в том, что вы не сможете добавить третий источник данных таким образом!

2 голосов
/ 18 марта 2010

Не проблема.

Это немного неортодоксально, но кроме этого, хорошо.

По умолчанию SQL Server предлагает по умолчанию и может быть изменен в соответствии с потребностями. Похоже, у тебя хороший компромисс.

1 голос
/ 18 марта 2010

Если отрицательные числа оказываются сломанными, используйте четные числа для одного и нечетные для другого.

0 голосов
/ 28 декабря 2015

Я думаю, что наличие двух источников не является правильной причиной для такого подхода, хотя технически это допустимо.Это не масштабируемо (+1 к ответу Ларри Люстига за это).

Я бы просто создал представление или хранимую процедуру, которая объединяет обе данные, конвертируя идентификаторы по мере необходимости, и будет иметь приложение, чтобы использовать его вместопрямые таблицы читает и союзы.Это было бы масштабируемым путем изменения представления / SP позже, чтобы добавить еще один источник.

0 голосов
/ 19 марта 2010

Другим вариантом является добавление префикса к устаревшим ключам строкой типа «OLD_». Проблема только в том, что ваше ключевое поле будет не числовым.

Если вам нужны цифровые клавиши, вы можете ввести столбец индикатора «прежних версий», а первичный ключ будет представлять собой комбинацию числового идентификатора и индикатора предыдущих версий (надеюсь, эта комбинация должна быть уникальной).

0 голосов
/ 18 марта 2010

Это не проблема. Просто убедитесь, что ваш столбец идентичности имеет тип, который допускает отрицательные числа.

...