Durante una delle ultime lezioni all'università (sono uno studente), il docente ci ha chiesto di sviluppare un database (MySQL Server se è importante) e una piccola app client che consumerebbe il database come fonte di dati.
Uno dei requisiti era che la colonna identità (che è la PK in ogni tabella) deve essere sequenziale, perché è una buona pratica (come da parole del docente). Cioè, quando la riga della tabella viene eliminata, è necessario riutilizzare PK nei successivi inserimenti. Ho una conoscenza media di RDBMS, PK e colonne di identità. Da quello che ho capito, quella colonna di identità è solo un modo per consentire a DB di generare automaticamente PK quando si inseriscono righe e nient'altro. E il valore della colonna identità non deve essere in alcun modo correlato agli attributi di riga (purché non sia una chiave naturale).
Questo requisito (colonna di identità strettamente sequenziale) era sospetto per me. Ho cercato di chiedere al docente cosa c'è di sbagliato se l'identità non è sequenziale (con lacune causate da eliminazioni), ma ho ottenuto una risposta molto astratta come "è conveniente per gli utenti e utile per gli amministratori di database che gestiscono il database". Nessun esempio specifico. L'argomento "conveniente per gli utenti" sembra sciocco, perché non ha alcun significato nel dominio aziendale.
Quindi sono curioso di sapere se questi motivi sono reali? Posso pensare solo a un caso in cui è richiesto il ridimensionamento della colonna identità - quando lo spazio identità è esaurito. Ma questo è un altro problema di progettazione quando il tipo di colonna di identità è stato scelto in modo errato, diciamo semplice int
anziché bigint
o uniqueidentifier
quando la tabella contiene miliardi di righe. Supponiamo che una colonna di identità sia un indice cluster: le lacune nella colonna di identità possono influire sulle prestazioni dell'indice? Forse ci sono altri motivi reali per il re-seed automatico della colonna di identità dopo ogni eliminazione di cui non sono a conoscenza?
Grazie in anticipo!