Stiamo lavorando su un'applicazione Web, non ancora accessibile agli utenti. Il mio capo ha notato che i record appena creati ottengono un ID di oltre 10.000, anche se nella tabella sono presenti solo meno di 100 record. Supponeva che l'interfaccia web per qualche motivo crea oltre 100 volte più record temporanei di quelli effettivi (e li elimina) e che ciò può portarci a esaurire il range entro pochi mesi dal rilascio.
Non penso che abbia ragione sulla causa dell'inflazione della carta d'identità (la collega che può rispondere è in vacanza, quindi non lo sappiamo per certo), ma supponiamo che lo sia. Ha detto che odierebbe usare una colonna bigint e che vorrebbe che smettessimo di aumentare automaticamente la colonna ID e scrivere un codice sul lato server che sceglie il primo intero "non utilizzato" e lo usa come ID.
Sono uno studente di informatica con poca esperienza pratica, ricoprendo un ruolo di sviluppatore junior. Ha anni di esperienza nella gestione di tutti i database della nostra organizzazione e nella progettazione della maggior parte di essi. io credo che lei è errato in questo caso, che un ID bigint è nulla da temere, e che imitando la funzionalità DBMS odori di un antipattern. Ma non mi fido ancora del mio giudizio.
Quali sono gli argomenti a favore e contro ogni posizione? Quali cose brutte possono accadere se usiamo un bigint e quali sono i pericoli di reinventare la ruota funzionalità di autoincremento ? Esiste una terza soluzione migliore di una? Quali potrebbero essere le sue ragioni per voler evitare un'inflazione dei valori facciali ID? Sono interessato anche a conoscere ragioni pragmatiche - forse gli ID bigint funzionano in teoria, ma in pratica causano mal di testa?
Non è previsto che l'applicazione gestisca grandi quantità di dati. Dubito che raggiungerà i 10.000 record effettivi entro i prossimi anni.
Se fa la differenza, stiamo usando Microsoft SQL Server. L'applicazione è scritta in C # e utilizza Linq a SQL.
Aggiornare
Grazie, ho trovato interessanti le risposte e i commenti esistenti. Ma temo che tu abbia frainteso la mia domanda, quindi contengono ciò che volevo sapere.
Non sono davvero preoccupato per il vero motivo degli ID alti. Se non riusciamo a trovarlo da soli, potrei fare una domanda diversa. Quello che mi interessa è capire il processo decisionale in questo caso. Per questo, supponiamo che l'applicazione scriva 1000 record al giorno, quindi ne elimina 9999 . Sono quasi sicuro che non sia così, ma è quello in cui il mio capo ha creduto quando ha fatto la sua richiesta. Quindi, in queste ipotetiche circostanze, quali sarebbero i pro e i contro dell'utilizzo di bigint o della scrittura del nostro codice che assegnerà gli ID (in un modo che riutilizza gli ID dei record già eliminati, per garantire che non ci siano lacune)?
Per quanto riguarda il vero motivo, sospetto fortemente che ciò sia dovuto al fatto che una volta abbiamo scritto codice per importare dati da un altro database, come prova del concetto che una migrazione successiva può essere effettuata in una certa misura. Penso che il mio collega abbia effettivamente creato diverse migliaia di dischi durante l'importazione e successivamente li abbia cancellati. Devo confermare se questo fosse effettivamente il caso, ma se lo è, non è nemmeno necessario agire.