Duda para crear tabla de Teléfonos

Publicado en 'Programación' por edinson_al, 30 Abr 2016.





  1. edinson_al

    edinson_al Miembro nuevo

    Registro:
    24 Mar 2015
    Mensajes:
    35
    Likes:
    2




    Buenas,

    Actualmente se tiene las siguientes tablas:
    - Persona
    - Empresa
    - Proveedor

    Y cada una tiene un campo teléfono con lo cual sólo se puede almacenar un número telefónico por registro. Se pide que cada registro de cada tabla pueda almacenar múltiples números telefónicos, para ello, estoy en duda si crear una tabla detalle para cada una, esto es:
    - Persona_Telefono
    - Empresa_Teléfono
    - Proveedor_Teléfono

    O crear una sola tabla con un flag para determinar el origen de la tabla maestra a la que pertenece y mi duda es sobre lo más recomendable en cuanto a optimización y/o performance.

    Por favor, necesito sus puntos de vista.

    Muchas gracias, saludos.
     


  2. n00b

    n00b Miembro frecuente

    Registro:
    12 Dic 2015
    Mensajes:
    134
    Likes:
    48
    Yo lo haría así:
    TipoTelefono (1)------------(*) NroTelefono

    TipoTelefono
    ----------------
    Id (PK)
    Descripcion /*por ej.: Persona, o Empresa, etc */

    NroTelefono
    -------------------------
    Id (PK)
    TipoTelefonoId (FK)
    OwnerId
    Numero

    OwnerId es el id o pk del dueño de los nro de teléfono, es decir cualquier id de cualquiera de las tablas,empresa, persona o la que sea (asumiendo que el pk de todas esas tablas son del mismo tipo).

    De modo que para consultar los telefonos de la persona cuyo id es 234:
    Select * from NroTelefono where TipoTelefonoId = 1 and OwnerId = 234
    /*1 es el valor del id del tipo de telefono que correspondería a las personas*/

    Bueno es lo que se me ocurre para no tener que hacer la referencia a cada una de las tablas y a las nuevas si es que hay más adelante, aunque depende, de repente es necesario por cuestiones de eficiencia, depende de qué tipo de aplicación es, si va a tener muchos datos. Generalmente el principio básico es que "es preferible crear aplicaciones escalables antes que eficientes", en el ámbito de apps empresariales, a ello se le puede sumar el otro principio básico en desarrollo de software, el principio kiss (keep it simple stupid).
    ...
    pero, como dije, depende, aunque sospecho que mi solución te sirve, salvo mejor opinión.
     
  3. edinson_al

    edinson_al Miembro nuevo

    Registro:
    24 Mar 2015
    Mensajes:
    35
    Likes:
    2
    Gracias @n00b por responder.
    Entonces tu sugerencia serían 2 Tablas:
    - La tabla de Teléfono
    - Tipo Teléfono

    El Flag que yo pensaba incluir en hardcode en la Tabla de Teléfonos sugieres tratarlo como PK en una tabla independiente (TipoTeléfono) y referencialo como FK desde la Tabla de Teléfonos
    Me parece una buena idea y creo que será la que implementaré.

    La solución que planteas me parece simple y viable, respecto al tema de eficiencia te comento que se utilizará para una aplicación Web de Gestión, la data a almacenarse no sobrepasará los 10 millones de registros y además habrán 2 o 3 servidores de BD balanceados.

    Espero haya alguna otra sugerencia. Muchas gracias.
     
  4. n00b

    n00b Miembro frecuente

    Registro:
    12 Dic 2015
    Mensajes:
    134
    Likes:
    48
    Claro, en los tipos me parecen mejor en una tabla ya que sería más cómodo y mantenible sobre todo si tienes que mostrarlos en la UI.