Gegen die Verwendung von AutoNumber ist an sich nichts einzuwenden, aber es gibt ein paar Gründe, die dagegen sprechen. Dennoch ist es nicht die beste Idee, eine eigene Lösung zu entwickeln, wie dacracot erwähnte. Lassen Sie mich das erklären.
Der erste Grund, AutoNumber nicht für jede Tabelle zu verwenden, ist, dass Sie am Ende Datensätze aus mehreren Tabellen zusammenführen können. Angenommen, Sie haben eine Auftragstabelle und eine andere Art von Auftragstabelle, und Sie beschließen, einige gemeinsame Daten herauszuziehen und die Vererbung mehrerer Tabellen zu verwenden. Es ist gut, Primärschlüssel zu haben, die global eindeutig sind. Das ist ähnlich wie das, was bobwienholt über das Zusammenführen von Datenbanken gesagt hat, aber es kann auch innerhalb einer Datenbank geschehen.
Zweitens verwenden andere Datenbanken dieses Paradigma nicht, und andere Paradigmen wie die Sequenzen von Oracle sind weitaus besser. Glücklicherweise ist es möglich, Oracle-Sequenzen mit SQL Server zu imitieren. Eine Möglichkeit besteht darin, eine einzige AutoNumber-Tabelle für Ihre gesamte Datenbank zu erstellen, die MainSequence oder so heißt. Keine andere Tabelle in der Datenbank wird AutoNumber verwenden, aber jede Tabelle, die einen automatisch generierten Primärschlüssel benötigt, wird MainSequence verwenden, um diesen zu erhalten. Auf diese Weise erhalten Sie alle integrierten Leistungsmerkmale, Sperren, Thread-Sicherheit usw., von denen dacracot gesprochen hat, ohne dass Sie sie selbst erstellen müssen.
Eine andere Möglichkeit ist die Verwendung von GUIDs für Primärschlüssel, aber das empfehle ich nicht, denn selbst wenn Sie sicher sind, dass ein Mensch (sogar ein Entwickler) sie niemals lesen wird, wird es wahrscheinlich jemand tun, und das ist schwierig. Und was noch wichtiger ist, Dinge lassen sich in T-SQL sehr leicht implizit in Ints umwandeln, aber es kann sehr schwierig sein, sie implizit in eine GUID umzuwandeln. Im Grunde sind sie unbequem.
Beim Aufbau eines neuen Systems würde ich empfehlen, eine eigene Tabelle für die Erzeugung von Primärschlüsseln zu verwenden (genau wie bei Oracle-Sequenzen). Bei einer bestehenden Datenbank würde ich mir nicht die Mühe machen, sie zu ändern.