none
Duda sobre diseño de BD RRS feed

  • Pregunta

  • Hola. Estoy desarrollando uno de mis primeros trabajos, un pequeño sistema (C#, ADO Conectado y MySql) para la administración de un colegio y me surgió la siguiente duda:

    Al diseñar la Base de Datos me surgió una inquietud sobre el tipo de dato a utilizar en ciertos atributos básicos que tendrán una lista finita de valores posibles (como sexo, tipo de documento, nivel de estudios, etc)

    Por ejemplo en el atributo Sexo de una persona, se me ocurrió usar un varchar para almacenar "Femenino" o "Masculino", pero pensé que tal vez usar un campo varchar no era optimo dado que sólo iba a almacenar dos valores posibles por lo que iban a ocupar mas espacio que el debido, por lo tanto imaginé que podía usar un bool o bit, pero por otro lado creo que tal vez no es semanticamente claro establecer 0 para femenino y 1 para masculino. Otras opciones eran establecer un int o un char ('f' y 'm').

    Otro caso similar es en el de nivel de estudios, donde los valores posibles son : Primario, Secundario, Superior y Universitario.

    Entiendo que lo que pregunto no es algo crítico y que posiblemente todas las opciones mencionadas sean validas y no haya UNA ÚNICA manera correcta de hacerlo. Pero de todas maneras me gustaría pensar y consultarles cual o cuales creen que son las mejores soluciones en cuanto a eficiencia y claridad.

    Gracias.



    • Editado Carlosft89 miércoles, 26 de agosto de 2015 18:45
    miércoles, 26 de agosto de 2015 18:27

Todas las respuestas

  • Hace unos 10 años posiblemente este hubiera sido el enfoque correcto hoy en día no creo que lo sea, primero que nada la data es relevante a la epoca y a la abstraccion del mundo real en cuanto al genero de las personas son normalmente en estos grupos pero hoy en día ya hay gente que se identifica con otros adjetivos o gente que no quiere publicar esto y decide por no dar el valor.

    Mi recomendación que hagas una tabla catalogo y que asignes valores a cada uno por decir y cito como ejemplo.

    1 Prefiero no dice

    2 Femenimo

    3 Masculino

    4 Transgenero (FM)

    5 Transgenero (MF)

    Tu enfoque no es malo pero lamentablemente la sociedad esta tomando estos enfoques para no dejar a los grupos minoritarios fuera y la proteccion de datos personales por lo cual te recomiendo tomar este enfoque.  

    miércoles, 26 de agosto de 2015 18:37
  • Hola Carlosft89,

    Nota que en las tablas por lo general te toparas con la necesidad de usar tipos por ejemplo: tipos de documento, sexo, estado civil, nivel de educación, estado del documento, etc., son valores que por lo general no varían, pero, ¿y que pasa si existe la necesidad de aumentar un valor? 

    Pues bien, una forma de modelar estas tablas "pequeñas" es creando una tabla de tipos (CabTipos y DetTipos) donde contendrán los valores de los tipos y a las tablas les llegará las referencias de estos tipos, por ejemplo:

    Tabla CabTipos
    Codigo      Descripción
    01          Sexo
    02          Estado Civil
    
    Tabla DetTipos
    Codigo     Descripción
    0101       Masculino
    0201       Femenino
    0102       Soltero 
    0202       Casado 
    0302       Viudo
    
    
    
    Tabla Clientes
    id     Nombre     Sexo     EstadoCivil
    1      Juan       0101     0202  

    La idea es tener dos tablas que contengan todos los tipos, ahora, debes de tener el criterio preciso para definir las tablas candidatas a estar contenidas.


    OFF TOPIC:

    Máximas en el desarrollo de software:

    Principio 1: DRY (Don't repeat yourself) No repitas código, encapsula y reutiliza.
    miércoles, 26 de agosto de 2015 19:33
  • Gracias a ambos por responder, voy a tener en cuenta sus consejos.

    Igualmente se agradecen más opiniones.

    Saludos!

    jueves, 27 de agosto de 2015 14:06