Нет ничего плохого в использовании AutoNumber, но есть несколько причин не делать этого. Тем не менее, как говорил Дакракот, использование собственного решения - не лучшая идея. Позвольте мне объяснить.
Первая причина не использовать AutoNumber для каждой таблицы в том, что вы можете объединить записи из нескольких таблиц. Допустим, у вас есть таблица заказа на продажу и таблица заказов другого типа, и вы решили извлечь некоторые общие данные и использовать наследование нескольких таблиц. Приятно иметь первичные ключи, которые глобально уникальны. Это похоже на то, что сказал Бобвинхольт о слиянии баз данных, но это может произойти в базе данных.
Во-вторых, другие базы данных не используют эту парадигму, и другие парадигмы, такие как последовательности Oracle, намного лучше. К счастью, можно имитировать последовательности Oracle, используя SQL Server. Один из способов сделать это - создать единую таблицу AutoNumber для всей вашей базы данных с именем MainSequence или чем-то еще. Никакая другая таблица в базе данных не будет использовать autonumber, но любой, кому нужен первичный ключ, сгенерированный автоматически, будет использовать MainSequence для его получения. Таким образом, вы получаете все встроенную производительность, блокировку, потокобезопасность и т. Д., О которых говорил dacracot, без необходимости создавать его самостоятельно.
Другим вариантом является использование GUID для первичных ключей, но я не рекомендую этого, потому что даже если вы уверены, что человек (даже разработчик) никогда не будет читать их, кто-то, вероятно, сделает это, и это сложно. И что более важно, вещи неявно преобразуются в int в T-SQL, но могут возникнуть большие проблемы, неявно приводящие к GUID. В основном они неудобны.
При создании новой системы я бы рекомендовал использовать выделенную таблицу для генерации первичного ключа (как последовательности Oracle). Для существующей базы данных я бы не стал ее менять.