Nei database, le tabelle hash vengono utilizzate per accelerare le ricerche e l’immissione o l’eliminazione di set di dati. Prendiamo come esempio la ricerca di un cognome nel database dei dipendenti di una società. Una ricerca di questo tipo può richiedere molto tempo dal momento che la corrispondenza viene ricercata in sequenza in ogni campo del database. Se il termine di ricerca viene convertito in un valore hash e si cerca una corrispondenza nella tabella hash, in genere si ottiene il risultato molto più rapidamente.
Ma come funziona? A ogni set di dati viene assegnato un indirizzo univoco. All’interno del database, questo tipo di indirizzamento è sempre identico (001, 002, 003 o 00A1, 00A2, 00A3, ecc.). Questo indirizzo viene calcolato mediante la funzione hash.
Guardiamo un semplice esempio: un database ha spazio per 11 voci, dalla posizione 0 alla posizione 10. Il nome “Lisa” è composto da quattro caratteri ASCII con i rispettivi codici ASCII: L è 76, i è 105, s è 115 e a è 97. Provatelo voi stessi in Windows con il tastierino numerico: [Alt] + 0076, ad esempio, restituisce “L”. Tutti i valori ASCII vengono sommati e per “Lisa” otteniamo come risultato il valore hash 393. La somma dei valori ASCII corrisponde ora a una funzione hash.
A questo punto viene eseguito un calcolo del valore residuo con numeri interi: 393 % 11 (posizioni di memoria) = 35, con resto di 8 (il segno percentuale “%” corrisponde all’operatore matematico per il calcolo del valore residuo in molti linguaggi di programmazione). Questo valore residuo determina a quale punto del database, in questo caso il numero di indice 8, vengono memorizzate Lisa e tutte le altre informazioni a lei legate. È facile immaginare che in questo tipo di indirizzamento emergano frequentemente valori residui identici. Tuttavia, maggiori sono il numero di posizioni di memoria e la lunghezza del valore hash utilizzato, minore è la probabilità che si verifichi una duplicazione. Consideriamo, ad esempio, il nome “Alis Meyer” che, nonostante utilizzi le “stesse” lettere, restituirebbe un posizionamento completamente diverso, poiché la “A” è diventata maiuscola e la “l” minuscola.