Wir arbeiten an einer Webanwendung, auf die Benutzer noch keinen Zugriff haben. Mein Chef bemerkte, dass neu erstellte Datensätze eine ID von über 10 000 erhalten, obwohl wir nur weniger als 100 Datensätze in der Tabelle haben. Sie ging davon aus, dass das Webinterface aus irgendeinem Grund mehr als 100-mal mehr temporäre Datensätze erstellt (und löscht), was dazu führen kann, dass wir innerhalb weniger Monate nach der Veröffentlichung nicht mehr in Reichweite sind.
Ich glaube nicht, dass sie bezüglich der Ursache der ID-Inflation Recht hat (die Kollegin, die darauf antworten kann, ist im Urlaub, wir wissen es also nicht genau), aber nehmen wir an, dass sie es ist. Sie sagte, sie würde es hassen, eine Bigint-Spalte zu verwenden, und sie möchte, dass wir die automatische Inkrementierung der ID-Spalte beenden und serverseitigen Code schreiben, der die erste "unbenutzte" Ganzzahl auswählt und sie als ID verwendet.
Ich bin ein Student der Informatik mit wenig praktischer Erfahrung und übernehme eine Junior-Entwickler-Rolle. Sie verfügt über jahrelange Erfahrung in der Verwaltung aller Datenbanken unserer Organisation und im Entwurf der meisten Datenbanken. Ich denke, dass sie in diesem Fall falsch ist, dass eine Bigint-ID nichts zu befürchten ist und dass die Nachahmung der DBMS-Funktionalität nach einem Antipattern riecht. Aber ich traue meinem Urteil noch nicht.
Was sind die Argumente für und gegen jede Position? Welche schlechten Dinge können passieren, wenn wir einen Bigint verwenden, und welche Gefahren birgt die Neuerfindung der Funktion zum automatischen Inkrementieren des Rads ? Gibt es eine dritte Lösung, die besser ist als beide? Was könnte ihre Gründe dafür sein, eine Inflation von ID-Nennwerten vermeiden zu wollen? Ich bin auch daran interessiert, über pragmatische Gründe zu hören - vielleicht funktionieren Bigint-IDs theoretisch, verursachen aber in der Praxis Kopfschmerzen?
Es wird nicht erwartet, dass die Anwendung sehr große Datenmengen verarbeitet. Ich bezweifle, dass es in den nächsten Jahren 10 000 tatsächliche Rekorde erreichen wird.
Wenn es einen Unterschied macht, verwenden wir Microsoft SQL Server. Die Anwendung ist in C # geschrieben und verwendet Linq to SQL.
Aktualisieren
Vielen Dank, ich fand die vorhandenen Antworten und Kommentare interessant. Aber ich fürchte, Sie haben meine Frage falsch verstanden, und sie enthalten das, was ich wissen wollte.
Ich bin nicht wirklich besorgt über den wahren Grund für die hohen IDs. Wenn wir es nicht alleine finden können, könnte ich eine andere Frage stellen. Was mich interessiert, ist, den Entscheidungsprozess in diesem Fall zu verstehen. Nehmen Sie dazu bitte an, dass die Anwendung 1000 Datensätze pro Tag schreibt und 9999 davon löscht . Ich bin mir fast sicher, dass dies nicht der Fall ist, aber das hat meine Chefin geglaubt, als sie ihre Anfrage gestellt hat. Was wäre also unter diesen hypothetischen Umständen das Für und Wider, entweder Bigint zu verwenden oder unseren eigenen Code zu schreiben, der IDs zuweist (auf eine Weise, die die IDs bereits gelöschter Datensätze wiederverwendet, um sicherzustellen, dass es keine Lücken gibt)?
Was den eigentlichen Grund betrifft, vermute ich stark, dass dies daran liegt, dass wir einmal Code geschrieben haben, um Daten aus einer anderen Datenbank zu importieren, um zu beweisen, dass eine spätere Migration bis zu einem gewissen Grad durchgeführt werden kann. Ich glaube, mein Kollege hat während des Imports tatsächlich mehrere tausend Datensätze erstellt und später gelöscht. Ich muss bestätigen, ob dies tatsächlich der Fall war, aber wenn ja, besteht nicht einmal Handlungsbedarf.