Esta respuesta es para el estándar SQL ISO/IEC/ANSI, e incluye el mejor freeware pretend-SQL.
El primer problema es que ha identificado dos categorías, ninguna, por lo que no se pueden comparar razonablemente.
A. Categoría Uno
(1) (4) y (5) contienen varios valores posibles y son de una categoría. Todo se puede usar fácil y efectivamente en la cláusula WHERE. Tienen el mismo almacenamiento, por lo que ni el almacenamiento ni el rendimiento de lectura son un problema. Por lo tanto, la elección restante se basa simplemente en el tipo de datos real para el propósito de la columna.
ENUM no es estándar; el método mejor o estándar es usar una tabla de búsqueda; entonces los valores son visibles en una tabla, no ocultos, y pueden ser enumerados por cualquier herramienta de informe. El rendimiento de lectura de ENUM sufrirá un pequeño golpe debido al procesamiento interno.
B. Categoría Dos
(2) y (3) son dos valores-elementos: Verdadero/Falso; Macho femenino; Muerto vivo. Esa categoría es diferente a la Categoría Uno. Su tratamiento tanto en su modelo de datos como en cada plataforma es diferente. BOOLEAN es solo un sinónimo de BIT, son lo mismo. Legalmente (SQL-wise), todas las plataformas compatibles con SQL manejan de la misma manera, y no hay ningún problema al utilizarla en la cláusula WHERE.
La diferencia de rendimiento depende de la plataforma. Sybase y DB2 empaquetan hasta 8 BIT en un byte (no es que el almacenamiento sea importante aquí), y asignan el poder de los dos sobre la marcha, por lo que el rendimiento es realmente bueno.Oracle hace cosas diferentes en cada versión, y he visto que los modeladores usan CHAR (1) en lugar de BIT, para superar los problemas de rendimiento. MS estuvo bien hasta 2005, pero lo han roto con 2008, ya que los resultados son impredecibles; entonces la respuesta corta puede ser implementarlo como CHAR (1).
Por supuesto, la suposición es que no hace cosas tontas, como empacar 8 columnas separadas en un TININT. No solo es un grave error de normalización, es una pesadilla para los codificadores. Mantenga cada columna discreta y del tipo de datos correcto.
C. Indicadores Múltiples & columnas anulables
Esto no tiene nada que ver con, y es independiente de, (A) y (B). Lo que las columnas corrigen es el tipo de datos, es diferente a la cantidad que tiene y si es Nullable. Nullable significa (generalmente) la columna es opcional. Esencialmente no has completado el ejercicio de modelado o normalización. Las Dependencias Funcionales son ambiguas. si completa el ejercicio de Normalización, no habrá columnas Nullable, no columnas opcionales; o bien existen claramente para una relación particular, o no existen. Eso significa usar la estructura relacional ordinaria de Supertype-Subtypes.
Claro, eso significa más tablas, pero no nulos. Enterpise DBMS no tiene problemas con más tablas o más uniones, para eso están optimizadas. Las bases de datos normalizadas funcionan mucho mejor que las no desnaturalizadas o denormalizadas, y pueden ampliarse sin "refactorizar". Puede facilitar el uso suministrando una vista para cada subtipo.
Si desea obtener más información sobre este tema, mire en este question/answer. Si necesita ayuda con el modelado, por favor, hacer una nueva pregunta. en el nivel de cuestionamiento, yo le aconsejaría que se quede con 5NF.
D. rendimiento de valores nulos
por otra parte, si el rendimiento es importante para usted, luego excluya los valores nulos. Cada columna anulable se almacena como longitud variable, lo que requiere un procesamiento adicional para cada fila/columna. s use un manejo "diferido" para tales filas, para permitir el registro, etc. para mover las colas de pensamiento sin obstaculizar las filas fijas. En particular, nunca utilice columnas de longitud variable (que incluye columnas con anulabilidad) en un índice: eso requiere desempaquetar en cada acceso.
E. Encuesta
Por último, no veo el punto en esta pregunta es una encuesta. Es justo que obtenga respuestas técnicas e incluso opiniones, pero las encuestas son para concursos de popularidad, y la capacidad técnica de los que responden en SO cubre un rango muy amplio, por lo que las respuestas más populares y las más técnicamente correctas están en dos diferentes extremos del espectro.
Podría incluir un enlace o más información sobre cómo "MS estuvo bien hasta 2005 pero lo han roto con 2008, ya que los resultados son impredecibles" y si está roto en 2K8R2 –
@RC. No tengo enlaces, tengo experiencia. Wiki aún no ha escuchado sobre esto. Los resultados del contexto específico anterior, y algunos otros, no todos los contextos, son impredecibles; si tuviste un código que tuvo un buen desempeño en 2005. He publicado muchos otros datos específicos: eliminación de páginas de desbordamiento y daño a todo el rendimiento en índices agrupados, etc. No dudes en leerlos. No se corrigió en Rev 2. No hay posibilidad de que estos elementos se arreglen hasta Rev 4 al menos. Tomó MS más de 3 años para arreglar 2005. – PerformanceDBA