2009-04-23 30 views
14

Normalmente si normalizza un database per evitare la ridondanza dei dati. È facile vedere in una tabella piena di nomi che c'è abbondanza di ridondanza. Se il tuo obiettivo è quello di creare un catalogo dei nomi di ogni persona sul pianeta (buona fortuna), posso vedere come normalizzare i nomi potrebbe essere utile. Ma nel contesto del database aziendale medio è eccessivo?La normalizzazione del nome di una persona sta andando troppo lontano?

(Certo che so si potrebbe prendere qualche cosa ad un estremo ... diciamo se normalizzata verso il basso per sillabe ... o anche coppie di caratteri adiacenti. Non riesco a vedere un beneficio ad andare così lontano)

Aggiornamento:

Una possibile giustificazione per questo è un generatore di nomi casuali. Questo è tutto ciò che potrei venire fuori di testa.

+0

Non sono sicuro di cosa intendi, stai parlando di creare una tabella separata come "FirstNames" e quindi collegando gli utenti ad esso con "FirstNameID" o qualcosa del genere? –

+0

Che tipo di tabella hai pieno di nomi? Se ci sono più riferimenti alla stessa persona e non solo lo stesso nome, allora sì, probabilmente dovresti avere una tabella di persone. –

+9

Erm. I nomi non sono già praticamente nomalizzati fino ai personaggi? Sicuramente questo è l'intero punto di un alfabeto? –

risposta

35

La normalizzazione del database di solito si riferisce alla normalizzazione del campo, non al suo contenuto. In altre parole, si normalizzerebbe che ci sia solo un campo di nome nel database. Vale generalmente la pena. Tuttavia, il contenuto dei dati non dovrebbe essere normalizzato, poiché è individuale per quella persona - non si sta selezionando da una lista, e non si sta cambiando una lista in un posto per influenzare tutti - sarebbe un bug, non una funzionalità.

+0

+1 Risposta perfetta. – IamIC

1

Direi di sì, sta andando troppo lontano nel 95% + dei casi.

+3

Ok, morderò; quali sono gli altri 5% dei casi? :-) –

+0

Anche io mi sto mordendo, non intendi il 5% - ;-) –

+2

La metà dei coreani sono Kim, Lee o Park, e ci sono solo circa 250 cognomi diversi (probabilmente potrebbero anche contenere solo un byte !) – Quassnoi

2

Sì, sicuramente eccessivo. Cosa sono alcune decine di byte per gli amici?

+1

Nessuno dovrebbe mai aver bisogno di più di 640K –

1

In generale si. Normalizzare a quel livello sarebbe andare lontano. A seconda delle query (come le rubriche telefoniche in cui le ricerche per cognome sono comuni) potrebbe essere utile. Mi aspetto che sia raro.

+2

E anche nello scenario della rubrica telefonica un buon indice sarebbe tutto ciò che è necessario, ma ci sono ancora usi molto stretti in cui la normalizzazione del nome ha senso. –

1

Sì. Non riesco a pensare a un'istanza in cui i benefici superano i problemi e complicano le query.

53

Sì, è eccessivo.

Le persone non cambiano nome da Bill a Joe tutto in una volta.

+22

Questo illustra davvero il punto. Il motivo per la normalizzazione è che, se devi cambiare qualcosa che è lo stesso in tutto il database, non devi modificare un intero gruppo di record. Ma non dovresti mai cambiare il nome di tutti i nomi, Bill e Joe. – Kibbee

+0

Bel lavoro, ottimo punto di vista! – curtisk

+0

Non sto contestando l'affermazione che è eccessivo nella maggior parte dei casi, ma penso che il tuo ragionamento contro di esso sia difettoso. Sto solo facendo l'avvocato del diavolo qui ... Supponi di avere una tabella FirstName e una tabella FullName. se una persona cambiava il proprio nome da Bill a Joe, non aggiorna la chiave esterna nella tabella FullName e non il record nella tabella FirstName? –

0

Generalmente non ho visto la necessità di normalizzare il nome, principalmente perché questo aggiunge un colpo di prestazioni sul join che verrà sempre chiamato e non offre alcun vantaggio.

Se si hanno così tanti nomi simili e si verifica un problema di archiviazione, potrebbe valerne la pena, ma sarà necessario prendere in considerazione un problema di prestazioni.

0

Direi che è assolutamente eccessivo. Nella maggior parte delle applicazioni, i nomi di persone vengono visualizzati così spesso, ogni query implicata in questo aspetto apparirà molto più complessa e difficile da leggere.

0

Sì, lo è. È comunemente riconosciuto che solo l'applicazione di tutte le regole di normalizzazione può farti andare troppo lontano e finire con un database sovraordinato. Ad esempio, sarebbe possibile normalizzare ogni istanza di ogni carattere a un riferimento a una tabella di enumerazione dei caratteri. È facile vedere che è ridicolo.

La normalizzazione deve essere eseguita a un livello appropriato per il dominio del problema. La sovranormalizzazione è tanto un problema quanto la sottotormalizzazione (sebbene, naturalmente, per ragioni diverse).

1

No, ma è possibile che si desideri normalizzare un record canonico per un cliente (quindi non si ottengono 5 voci diverse per "Bloggs & Co." nel database.Questo è un problema di pulizia dei dati che spesso morde sui progetti MIS.

2

Forse se lavori nell'ufficio del censimento potrebbe avere senso. Altrimenti, vedi ogni altra risposta :)

5

Come si normalizza un nome? Non tutti i nomi hanno la stessa struttura. Non tutti i paesi o le culture usano le stesse regole per i nomi. Un nome non è necessariamente solo un nome. Le persone hanno un numero variabile di nomi. Alcuni paesi non hanno la semplice coppia di nome/cognome. E se il mio nome dovesse essere il tuo cognome, dovrebbe essere considerato lo stesso nel tuo database? In caso contrario, si arriva al problema che il cognome potrebbe significare cose diverse in paesi diversi. Nella maggior parte dei paesi che conosco, è un nome di famiglia. Il tuo cognome è lo stesso di almeno uno dei cognomi dei tuoi genitori. In Islanda, è il nome di tuo padre, seguito da "figlio" o "figlia". Quindi lo stesso cognome significherà cose completamente diverse a seconda che lo incontriate in Islanda e negli Stati Uniti.

In alcune culture è comune sposarsi, perché la donna prenda il cognome del marito. In altre culture, è completamente opzionale, o potrebbe anche funzionare in modo opposto.

Come si può normalizzare? Quali informazioni ti otterrebbe? Se trovi qualcuno nel tuo database che ha "Smith" come ultima parola che compone il loro nome, cosa ti dice? Potrebbe non essere il loro nome di famiglia. Potrebbe essere solo parte del cognome. Potrebbe essere un onore in qualche lingua, ma che secondo la loro cultura dovrebbe essere considerato parte del nome.

È possibile normalizzare i dati solo se segue una struttura comune.

0

Potrebbe esserci un caso in cui sarebbe utile poter collegare i nomi di sposi/nubili.
Recentemente ho avuto un caso in cui ho dovuto rinominare migliaia di messaggi di posta elettronica in cambio perché qualcuno ha divorziato e non volevo che qualsiasi e-mail la sua messa in vendita come [email protected]

1

Spesso non andare sulla forma quarta normalizzazione un database. Pertanto la normalizzazione della settima forma è un po 'esagerata. Il solo posto questa potrebbe anche essere un'idea remota plausibile è in una sorta di enorme data warehouse.

0

Non c'è bisogno di normalizzare fino a quel livello a meno che i nomi non costituiscano una chiave primaria composta e si disponga di dati che dipendono da uno dei nomi (ad esempio, chiunque abbia il cognome Plummer non sa nulla dei database). In tal caso, non normalizzando, violerebbe lo second normal form.

0

Sono d'accordo con la risposta generale, non lo faresti.

Tuttavia, una cosa viene in mente, la compressione. Se tu avessi un miliardo di persone e hai scoperto che il 60% dei primi nomi sono stati estratti da 5 nomi molto comuni, potresti usare alcune manipolazioni complicate per ridurre le dimensioni in modo significativo. Richiederebbe anche un software di database molto personalizzato.

Ma questo non è a scopo di normalizzazione, solo compressione.

+1

O semplicemente un motore di archiviazione personalizzato. – maxwellb

+0

>> O semplicemente un motore di memorizzazione personalizzato << che fa parte dei più moderni DBMS più moderni oggi. – TheBlastOne

0

È necessario normalizzarlo se è necessario evitare l'anomalia dell'eliminazione fornita senza interruzione. Cioè, se hai mai bisogno di rispondere alla domanda, il mio database ha mai avuto una persona chiamata "Joejimbobjake" al suo interno, è necessario evitare l'anomalia. Le eliminazioni graduali sono probabilmente un modo molto migliore di avere una tabella completa del nome (ad esempio), ma ottieni il mio punto.

0

Oltre a tutti i punti che tutti hanno fatto, considera che se stavi implementando un'operazione di inserimento dati (per esempio) e dovessi inserire un nuovo contatto, dovresti cercare le tue tabelle nome e cognome per individuare gli ID corretti e quindi utilizzare tali valori. Ma questo è ulteriormente complicato dall'occasione in cui il nome non è nelle tabelle FN e/o LN, quindi devi inserire il nuovo nome/cognome e usare i nuovi ID.

E se pensi di avere un elenco completo di nomi, ripensaci. Lavoro con un elenco di oltre 200.000 nomi unici e suppongo rappresentino il 99,9% della popolazione statunitense. Ma quello .1% = un sacco di gente. E non dimenticare i nomi stranieri e gli errori ortografici ...

1

Se avevi bisogno di eseguire query basate su nomi minuscoli, potevo vedere la necessità di normalizzare i nomi. per esempio. una ricerca per "Betty" potrebbe dover restituire risultati per "Betty", "Beth" e "Elizabeth"

Problemi correlati