Come progettare il sistema di codice ID per il database delle persone?

2

Stiamo ristrutturando il nostro intero sistema di database / filesystem / identità utente. Come primo passo, abbiamo stabilito che dobbiamo assegnare ciascun utente / dipendente in un ID univoco dell'organizzazione. Sorprendentemente, non sembrano esserci risorse teoriche per questo problema.

Mi chiedo se ci siano alcune raccomandazioni per progettare un sistema del genere. Ho studiato alcuni schemi di identificazione, ma nessuno di questi sembra essere pratico in questo caso. In particolare, UID o sistemi come ISBN non sono pratici perché i codici sono molto lunghi per le persone da ricordare o comunicare. Ho esaminato il sistema storia del CODEN per l'assegnazione degli ID del diario ed è molto stimolante, ma preferirei evitare i problemi hanno attraversato storicamente (cambiando sistema due volte lungo la strada).

Proprietà desiderate del sistema

Nel mio caso, ho circa 10.000 persone. Il sistema dovrebbe (probabilmente) avere queste proprietà:

  • Unicità di IDS
  • Gli ID dovrebbero essere facilmente comunicati e ricordati (vale a dire non troppo a lungo ecc.)
  • Facoltativamente il sistema dovrebbe rilevare errori comuni nell'ID se non lo corregge.

Ho preso in considerazione

Ho preso in considerazione l'inclusione di una sorta di iniziali dai nomi e una breve analisi mostra quanto segue:

  • Usando le iniziali (1 carattere dal nome specificato, 1 dal cognome) Ho diviso le persone in gruppi con il più grande con 165 membri (J.K.)
  • Prendendo 1,2 primi caratteri (1 dal nome dato, 2 dal cognome) ottengo il gruppo più grande di 49 membri.
  • Se prendo 1,3 primo carattere ottengo il gruppo più grande di 18, che è meglio che prendere 2,2 primi caratteri dai nomi in cui ottengo 39 persone nel gruppo più grande.

Considero anche di aggiungere un carattere di checksum come in CODEN che preferibilmente non solo evita errori, ma rende anche possibile la correzione automatica nella maggior parte dei casi.

Ho anche dato un'occhiata ai Codici più che hanno una grande idea di NON usare alcuni caratteri (come 0, I , ecc.) che possono essere facilmente scambiati per altri. Ma questo si scontrerebbe con l'intenzione di includere le iniziali di qualche tipo.

Riguardo agli "errori di cattura" ho trovato un articolo su Verifica cifra che suggerisce anche l'algoritmo Damm che tuttavia riguarda solo il caso se vengono utilizzati i codici numerici. Potrei essere in grado di costruire un sistema simile per il pensiero delle lettere.

PS: ho cercato i siti SE e inizialmente ho chiesto questo domanda su SuperUser, ma è stata rifiutata come off-topic. Sto cercando di trovare il posto giusto per chiederlo, ma non sembra ovvio.

    
posta gorn 25.09.2018 - 11:03
fonte

2 risposte

1

È solo codice, non deve significare nulla, cioè nessuna informazione dovrebbe essere codificata nel codice. Dal momento che non ci sono limiti di lunghezza, perché non usare le parole? Questa non è la mia idea originale, btw, l'ho presa da what3words

Soddisfa le proprietà desiderate:

  • Unicità, what3words può mappare la terra in uno spazio di 3x3 metri quadri. Anche se questo è il massimo, hai un sacco di ID disponibili.
  • Facilmente comunicato e ricordato, three.words.easy.
  • Il sistema può rilevare errori, ha solo bisogno di cercare nel dizionario, completamento automatico, ecc.

So che sembra uno scherzo, ma soddisfa i requisiti e non riesco a trovare alcun motivo per non usarlo.

    
risposta data 25.09.2018 - 13:13
fonte
0

Prima di tutto devo dire, utilizzare un GUID e fare il tuo requisito "facile da comunicare" con un codice a barre 2d o una banda mag o campi vicini di comunicazione o completamento automatico o qualcosa del genere.

In secondo luogo, hai un numero così piccolo di persone, perché non usare solo il loro nome o una stringa di 5 caratteri int o una casuale?

Ciascuno ha lati negativi ma nessuno è irrisolvibile. Vado per 5 caratteri casuali da un sottoinsieme di lettere e numeri, omettendo o, 1, l ecc. Generi gruppi in anticipo e ho un controllo umano ciascuno per oscenità.

    
risposta data 25.09.2018 - 11:41
fonte

Leggi altre domande sui tag