2010-08-18 13 views
9

No soy un tipo de base de datos, pero estoy tratando de limpiar otra base de datos. ¿Entonces mi pregunta es si la normalización de la tabla de género iría demasiado lejos?¿Está yendo demasiado lejos la tabla de género?

User table: 
userid int pk, 
genderid char(1) fk 
etc... 

gender table: 
genderid char(1) pk, 
gender varchar(20) 

Ahora Al principio parecía tonto para mí, pero entonces considerado porque entonces puedo tener una fuente constante de datos para poblar o se unen a partir de. Usaré WPF. Si fuera otro marco, probablemente lo evitaría, pero ¿qué piensas?

+3

Esto quizás no es lo que estás preguntando, pero crear una tabla de género no tiene nada que ver con la normalización. Al crear esa tabla, aparentemente solo está sustituyendo la dependencia ID de usuario-> géneroid en lugar de ID de usuario-> género. Por lo tanto, la tabla de Usuario no está más normalizada de lo que era sin la tabla de Género. Todo lo que has hecho es cambiar el nombre y el tipo de un atributo. Tan puramente desde el punto de vista de la normalización tal cambio es totalmente innecesario. – sqlvogel

+0

En la mayoría de los idiomas, sería difícil escribir una carta gramaticalmente correcta a alguien sin conocer su género. – dan04

+2

Argh. Mi cerebro está roto por cuasi-memes. Al leer su pregunta, no puedo dejar de pensar en esto - http://qntm.org/gay (que es una lectura increíble) – pinkgothic

Respuesta

11

Sea o no usted elige normalizar la estructura de su tabla para acomodar género va a depender de los requisitos de su aplicación y los requisitos de su negocio.

que normalizaría si:

  • ¿Quieres ser capaz de gestionar la "descripción" de un género en la base de datos, y no en el código.
    • Esto le permite cambiar rápidamente la descripción de Hombre/Mujer a Hombre/Mujer, por ejemplo.
  • Su aplicación actualmente debe manejar, o será posible manejar en el futuro, los requisitos de localización, es decir, ser capaz de especificar el género en diferentes idiomas.
  • Su negocio requiere que todo se normalice.

no me normalizar si:

  • Tiene una aplicación relativamente sencilla en la que se pueden manejar fácilmente la descripción del género en código en lugar de en la base de datos.
  • Tiene un control programático estricto de los datos que entran y salen del campo de género, de modo que puede garantizar la coherencia de los datos en ese campo.
  • Solo le importa el campo de género para la captura de información, es decir, no necesita mucha información programática para actualizar este campo una vez que se configura por primera vez.
+0

Gracias. No consideré el problema de la localización, que me gustaría planear por si acaso. – Adam

+1

Además, otros valores permiten múltiples significados nulos, como "No conocido", "No divulgado" u otras posibilidades. –

+1

@ Adam Me gustaría hacer que el campo sea 'char (1)' y simplemente permitir nulo. – meagar

-2

Sí. Creo que puedes usar enum en el código y enlazar eventualmente a él.

null - unknow; 0 - masculino; 1 - mujer;

o puede utilizar bool tipo para definir esta

nula - desconocido; verdadero - masculino; falso - mujer

+1

Se supone que el diseño de la base de datos facilita las cosas. 'gender == true' es insano, y' gender == 1' no es mucho mejor. También creo que la mitad de la población mundial se sentirá insultada por la idea de que 'female == false' (aunque obviamente no la mitad de la población mundial de programadores) – APC

+0

Nunca me entristece que esto sea bueno, pero posible, todo depende de las necesidades del negocio . –

+2

sexo: verdadero O sexo: sí, por favor –

4

No soy un tipo de base de datos pero lo hago. Me da la posibilidad de asegurarme de que solo se ingresan los géneros, que son válidos (integridad referencial) y que también puedo usarlos para completar el control de selección.

+2

Lo hace personalizable para la localización también. –

1

Bueno, es posible que su empresa requiera que, si es posible, todo se normalice.

También, dependiendo del negocio & de datos, es posible que tenga que incluir transgéneros, así que crearía 3+ géneros (no sé cuántos hay, no han comprobado)

+0

Incluso si hay uno, aún así querrá hacerlo ... Tome los 5 minutos ahora, en lugar de los 60 minutos posteriores ... – NinjaCat

3

Puedo pensar en aplicaciones donde usaría diferentes columnas para sexo y género, tener tres valores para sexo (masculino/femenino/declinar a estado) y seis para género (masculino/femenino/transexual masculino/transexual mujer/asexual/declinar a estado). De acuerdo, vivo en San Francisco, donde hay un nivel de discusión pública sobre temas transgénero que gran parte del resto del mundo está detrás de la curva.

El punto es: sin una razón convincente para pensar lo contrario, supongo que cualquier suposición simplificadora que hice sobre la demografía fue limitada y parroquial. El costo de dividir el sexo en su propia mesa ahora es pequeño y costoso. No evitaría el pequeño costo sobre la base de una suposición.

+1

Al parecer, alguien no sabe o no quiere escuchar sobre temas transgénero. –

+0

+1, Robert. (Y yo vivo en el noreste de los EE. UU.) –

0

Voy a comentar sobre otro aspecto: la clasificación. Normalmente, 'M' ordena después de 'F'; en un proyecto una vez, una tabla de base de datos tenía un campo de género con cualquiera de esos dos valores. Hubo un deseo de poder ordenar los resultados en el género (datos del censo) y una preferencia adicional para que aparezca 'M' antes de 'F'. Mi solución fue agregar una tabla de búsqueda separada, asignando al valor masculino una ID de 0 y una ID de mujer de 1. Por lo tanto, las consultas en la tabla principal podrían clasificarse fácilmente en el nuevo campo de identificación de género.

+4

¿Qué lenguaje de consulta de bases de datos no le permite escribir 'ORDER BY Gender DESC'? – dan04

+0

@ dan04 Tenga en cuenta que esto fue hace varios años, por lo que no estoy seguro de las circunstancias ahora. Pero creo que el otro requisito era poder filtrar en esa columna, así como ordenarla, y los números son más fáciles de filtrar que los caracteres. Creo que el filtro ordenar + llevó a la solución. –

0

Sólo pensé en echar una opinión aquí. @Ben McCormack tiene una gran respuesta con una advertencia menor: en cuanto a la localización, a veces hay mejores formas de manejar esto que tener los valores definidos directamente en su base de datos.

Por ejemplo, mencionas WPF. Con .Net tiene varios recursos de localización que son mucho más adecuados para gestionar las diferencias entre emitir "Hombre" o "Samec" (checo).

Al permitir que las características integradas de localización se encarguen de esto, no tiene que preocuparse por tener múltiples registros de bases de datos que definan exactamente lo mismo ... lo que podría complicar la generación de informes.


Dicho esto, le sugiero que tal vez desee considerar si "gender" es realmente lo que está buscando. El género se define como "un conjunto de características que distinguen entre hombre y mujer".

A primera vista, esto suena como las opciones masculinas/femeninas estándar; pero no lo es. El género es mucho más complicado que eso, ya que necesita contexto para tener significado. Por ejemplo, en el contexto de una relación, un Hombre (por Sexo) podría tener uno de varios "géneros": Masculino, Femenino o incluso Neutral. Esto es independientemente de qué sexo es su pareja.

En el contexto de un individuo, un hombre (por sexo) puede ser masculino, femenino, neutral, transgénero, intersexual o cualquiera de una serie de otras opciones aceptables para la persona que completa el formulario.

Al menos una persona comentó que el género es necesario para determinar el honorífico utilizado en los correos. Sugeriría que no hay relación entre el género y los honoríficos. Por ejemplo, una Mujer (por Sexo) podría querer ser dirigida como Sra./Señorita/Señora/Dr/Señora/Profesora o incluso Señor si están en el proceso de, o han completado, una cirugía para convertirse en "Masculino". Esa lista de ninguna manera es inclusiva y, en cualquier caso, es mucho mejor permitir que esa persona seleccione cómo quiere que se le trate.


Lo que me lleva a mi último artículo: Antes de recopilar cualquier dato, debe tener un motivo definido para tenerlo. Mi empresa se especializa en la recopilación de datos a través de formularios en línea. Una de las cosas que hacemos es mirar lo que nuestros clientes están pidiendo e ir campo por campo para determinar si los datos se utilizan incluso en cualquier lugar.

La mayoría de las veces una entidad (empresa/gubernamental/etc.) solicita mucha más información de la que les importa. Esto puede tener consecuencias adicionales en el caso de que los datos se pierdan, sean robados o simplemente vistos por personas no autorizadas. Además, se impone una carga a la persona que completa los formularios para cada campo que se le pide que complete.

Traigo esto porque "Género" casi nunca es necesario para cualquier sistema normal. En cambio, el sexo es un mejor calificador e incluso entonces tiene poco valor. Eximir sitios de citas y censo gubernamental.

Cuestiones relacionadas