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.
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
En la mayoría de los idiomas, sería difícil escribir una carta gramaticalmente correcta a alguien sin conocer su género. – dan04
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