2009-04-23 13 views
14

Normalmente normaliza una base de datos para evitar la redundancia de datos. Es fácil ver en una tabla llena de nombres que hay mucha redundancia. Si su objetivo es crear un catálogo de los nombres de cada persona en el planeta (buena suerte), puedo ver cómo los nombres normalizadores podrían ser beneficiosos. Pero en el contexto de la base de datos de negocios promedio, ¿es excesivo?¿Está normalizando el nombre de una persona ir demasiado lejos?

(Por supuesto que sabía que se podía tomar nada hasta el extremo ... digamos si se normalizó a las sílabas ... o incluso pares de caracteres adyacentes. No puede ver un beneficio en ir tan lejos)

Actualización:

Una posible justificación para esto es un generador de nombres aleatorios. Eso es todo lo que pude sacar de mi cabeza.

+0

No estoy seguro de lo que quiere decir, ¿está hablando de configurar una tabla separada como "FirstNames" y luego, vincular a los usuarios con "FirstNameID" o algo así? –

+0

¿Qué tipo de mesa tiene lleno de nombres? Si hay varias referencias a la misma persona, y no solo el mismo nombre, entonces sí, probablemente debería tener una tabla de personas. –

+9

Erm. ¿No son los nombres ya básicamente nomalizados para los personajes de todos modos? Seguramente ese es todo el punto de un alfabeto? –

Respuesta

35

La normalización de la base de datos normalmente se refiere a la normalización del campo, no a su contenido. En otras palabras, usted normalizaría que solo haya un campo de primer nombre en la base de datos. Eso generalmente vale la pena. Sin embargo, el contenido de datos no debe ser normalizado, ya que es individual para esa persona (no está eligiendo de una lista, y no está cambiando una lista en un lugar para afectar a todos) eso sería un error, no una característica.

+0

+1 Respuesta perfecta. – IamIC

1

Yo diría que sí, que va demasiado lejos en el 95% de los casos.

+3

Bien, voy a morder; ¿cuál es el otro 5% de los casos? :-) –

+0

También me estoy mordiendo, ¿no te refieres al 5% - ;-) –

+2

La mitad de los coreanos son de Kim, Lee o Park, y solo hay unos 250 apellidos diferentes (probablemente podrían caber solo un byte) !) – Quassnoi

2

Sí, definitivamente excesivo. ¿Qué es una docena de bytes entre amigos?

+1

Nadie debería necesitar más de 640K –

1

Generalmente sí. Normalizar a ese nivel sería ir muy lejos. Dependiendo de las consultas (como las guías telefónicas donde las búsquedas por apellido son comunes) podría valer la pena. Espero que sea raro.

+2

E incluso en el caso de la guía telefónica, un buen índice sería todo lo que se necesita, pero todavía hay usos muy pequeños donde la normalización del nombre tiene sentido. –

1

Sí. No puedo pensar en una instancia donde los beneficios superen los problemas y las complicaciones de consulta.

53

Sí, es una exageración.

La gente no cambia sus nombres de Bill a Joe todos a la vez.

+22

Esto realmente ilustra el punto. La razón para la normalización es que si tiene que cambiar algo que es igual en toda la base de datos, no tiene que cambiar un montón de registros. Pero nunca tendrías que cambiar el nombre de todos los nombres de Bill a Joe. – Kibbee

+0

Buen trabajo, gran punto directo! – curtisk

+0

No estoy disputando el reclamo de que es excesivo para la mayoría de los casos, pero creo que su razonamiento en contra es defectuoso. Solo estoy jugando al abogado del diablo aquí ... Supongamos que tiene una tabla FirstName y una tabla FullName. si una sola persona cambiara su nombre de Bill a Joe, ¿no actualizaría la clave externa en la tabla FullName y no el registro en la tabla FirstName? –

0

En general, no he visto la necesidad de normalizar el nombre, principalmente porque eso agrega un golpe de rendimiento en la unión que siempre se llamará, y no da ningún beneficio.

Si tiene tantos nombres similares y tiene un problema de almacenamiento, puede valer la pena, pero habrá un impacto en el rendimiento que debería tenerse en cuenta.

0

Yo diría que es absolutamente exagerado. En la mayoría de las aplicaciones, muestra los nombres de las personas con tanta frecuencia, que cada consulta relacionada con eso se verá mucho más compleja y difícil de leer.

0

Sí, lo es. Comúnmente se reconoce que el solo hecho de aplicar todas las Reglas de Normalización puede hacer que llegues demasiado lejos y termines con una base de datos sobrenormalizada. Por ejemplo, sería posible normalizar cada instancia de cada carácter a una referencia a una tabla de enumeración de caracteres. Es fácil ver que eso es ridículo.

La normalización debe realizarse en un nivel apropiado para su dominio problemático. La sobrenormalización es un problema tanto como la normalización (aunque, por supuesto, por diferentes razones).

1

No, pero es posible que desee normalizar un registro canónico para un cliente (para que no obtenga 5 entradas diferentes para 'Bloggs & Co.' en su base de datos.Este es un problema de limpieza de datos que a menudo afecta a los proyectos MIS.

2

Tal vez si trabajas en la oficina del Censo, podría tener sentido. De lo contrario, vea cada otra respuesta :)

5

¿Cómo se normaliza un nombre? No todos los nombres tienen la misma estructura. No todos los países o culturas usan las mismas reglas para los nombres. Un primer nombre no es necesariamente solo un nombre. Las personas tienen números variables de nombres. Algunos países no tienen el par simple de nombre/apellido. ¿Qué sucede si mi primer nombre es su apellido, deberían considerarse iguales en su base de datos? Si no, entonces te metes en el problema de que el apellido puede significar cosas diferentes en diferentes países. En la mayoría de los países que conozco, es un apellido. Su apellido es igual que al menos uno de los apellidos de sus padres. En Islandia, es el primer nombre de su padre, seguido de "hijo" o "hija". Entonces, el mismo apellido significará cosas completamente diferentes dependiendo de si lo encuentra en Islandia o en los Estados Unidos.

En algunas culturas, es común cuando se casa, que la mujer tome el apellido de su esposo. En otras culturas, eso es completamente opcional, o incluso podría funcionar de manera opuesta.

¿Cómo se puede normalizar esto? ¿Qué información te ganaría? Si encuentra a alguien en su base de datos que tiene a "Smith" como la última palabra que hace su nombre, ¿qué le dice eso? Puede que no sea su apellido. Puede ser solo parte del apellido. Podría ser un honorífico en algún idioma, pero que de acuerdo con su cultura, debería considerarse parte del nombre.

Solo puede normalizar los datos si sigue una estructura común.

0

Puede haber un caso en el que ser capaz de vincular los nombres de casado/de soltera sea útil.
Recientemente tuvimos un caso en el que tenía que cambiar el nombre de miles de correos electrónicos a cambio porque alguien se divorció y no quería que ningún correo electrónico a su lista como [email protected]

1

A menudo no ir sobre la forma en la cuarta normalización una base de datos Por lo tanto, la normalización de la séptima forma está un poco por la borda. El solo lugar esto podría ser una idea remotamente plausible en algún tipo de almacén de datos masivo.

0

No hay necesidad de normalizar a ese nivel a menos que los nombres compongan una clave primaria compuesta y usted tenga datos que dependen de uno de los nombres (por ejemplo, cualquiera con el apellido Plummer no sabe nada de bases de datos). En ese caso, al no normalizar, violaría second normal form.

0

Estoy de acuerdo con la respuesta general, usted no haría eso.

Sin embargo, una cosa viene a la mente, la compresión. Si tuviste mil millones de personas y descubriste que el 60% de los nombres se tomaron de 5 nombres muy comunes, podrías usar algunas manipulaciones poco precisas para reducir el tamaño de manera significativa. También requeriría un software de base de datos muy personalizado.

Pero esto no tiene la finalidad de la normalización, solo la compresión.

+1

O simplemente un motor de almacenamiento personalizado. – maxwellb

+0

>> O simplemente un motor de almacenamiento personalizado << que es parte de la mayoría de los DBMS modernos más grandes hoy en día. – TheBlastOne

0

Debería normalizarlo si necesita evitar la anomalía de eliminación que viene con no desglosarlo. Es decir, si alguna vez necesita responder la pregunta, si mi base de datos alguna vez tuvo una persona llamada "Joejimbobjake", debe evitar la anomalía. Los borrados suaves son probablemente una forma mucho mejor que tener una tabla de primeros nombres comprensiva (por ejemplo), pero entiendes mi punto.

0

Además de todos los puntos que todos los demás han hecho, considere que si estaba implementando una operación de entrada de datos (por ejemplo) e insertaba un nuevo contacto, tendría que buscar su nombre y tablas de apellidos para ubicar los Id correctos y luego usar esos valores. Pero esto se complica aún más por la ocasión en que el nombre no está en las tablas FN y/o LN, luego debe insertar el nuevo nombre/apellido nuevo y usar las nuevas identificaciones.

Y si crees que tienes una lista completa de nombres, piénsalo de nuevo. Trabajo con una lista de más de 200 mil nombres únicos y supongo que representa el 99.9% de la población de EE. UU. Pero eso .1% = mucha gente. Y no olvide los nombres extranjeros y los errores ortográficos ...

1

Si tuviera la necesidad de realizar consultas basadas en nombres diminutos, podría ver la necesidad de normalizar los nombres. p.ej. una búsqueda de "Betty" puede necesitar devolver resultados para "Betty", "Beth" y "Elizabeth"

Cuestiones relacionadas