none
Modelamiento de Datos RRS feed

  • Pregunta

  • Tengo una duda al modelar unas tablas:

    Tabla 1

    DNI INT
    Descripcion VARCHAR
    Direccion VARCHAR

    Tabla 2

    DNI INT
    Descripcion VARCHAR
    Direccion VARCHAR

    Los datos de ambas tablas si bien tienen los mismos datos son cosas muy distintas en su contenido, una responde a Negocios/Casas Comerciales y la otra responde a Sedes de la Policía, se debe unificar en 1 sola tabla o deben ser 2 tablas ?

    Otro ejemplo seria si quiero diagramar tablas de bomberos y policias deben ser 2 tablas o 1 sola ? suponiendo que los campos son los mismo claro esta.

    Saludos


    DBA SQL Server Santiago/Chile


    • Editado CMAPM domingo, 2 de septiembre de 2018 1:33
    domingo, 2 de septiembre de 2018 1:31

Respuestas

  • Hola CMAPM:

    No parece que tengas en esos modelos de datos una alta concurrencia, que haga pensar que para evitar los datos duplicados, tenga sentido utilizar la misma tabla con una propiedad específica para cada uno de ellos, por tanto, mi opinión es una tabla padre que contiene todas las propiedades comunes de cada uno de sus hijos, y luego cada una de las tablas hijas con sus propios atributos.

    CREATE TABLE padres
    (id          INT IDENTITY(1, 1) PRIMARY KEY,
     dni         INT,
     descripcion VARCHAR(100),
     direccion   VARCHAR(100)
    );
    GO
    CREATE TABLE hijotipo1
    (id        INT,
     otrovalor VARCHAR(100)
    );
    GO
    CREATE TABLE hijotipo2
    (id          INT,
     otracolumna INT
    );
    GO
    INSERT INTO padres
    (dni,
     descripcion,
     direccion
    )
    VALUES
    (10,
     'a',
     'b'
    ),
    (40,
     'a',
     'b'
    ),
    (20,
     'a',
     'b'
    ),
    (30,
     'a',
     'b'
    );
    INSERT INTO hijotipo1
    (id,
     otrovalor
    )
    VALUES
    (1,
     'negocio'
    );
    INSERT INTO hijotipo2
    (id,
     otracolumna
    )
    VALUES
    (2,
     1
    ),
    (3,
     1
    ),
    (4,
     1
    );
    SELECT *
    FROM padres p
         INNER JOIN hijotipo1 h ON p.id = h.id;
    SELECT *
    FROM padres p
         INNER JOIN hijotipo2 h ON p.id = h.id;
    
    
    Un saludo

    domingo, 2 de septiembre de 2018 7:52
  • Hola CMAPM:

    Una tabla no. Esto funciona muy bien cuando hay una elevada casuística de entidades de diferentes tipos. Por ejemplo en una empresa, clientes, y proveedores, que pueden ser la misma entidad.

    Yo haría 2 tablas. Sin lugar a dudas.

    En todo caso, si cambiase, las dos, optaría no por una, sino por 3, La tabla de la que heredasen las otras dos.

    En mi opinión.

    Un saludo

    • Marcado como respuesta CMAPM martes, 4 de septiembre de 2018 0:51
    lunes, 3 de septiembre de 2018 21:01

Todas las respuestas

  • Hola CMAPM:

    No parece que tengas en esos modelos de datos una alta concurrencia, que haga pensar que para evitar los datos duplicados, tenga sentido utilizar la misma tabla con una propiedad específica para cada uno de ellos, por tanto, mi opinión es una tabla padre que contiene todas las propiedades comunes de cada uno de sus hijos, y luego cada una de las tablas hijas con sus propios atributos.

    CREATE TABLE padres
    (id          INT IDENTITY(1, 1) PRIMARY KEY,
     dni         INT,
     descripcion VARCHAR(100),
     direccion   VARCHAR(100)
    );
    GO
    CREATE TABLE hijotipo1
    (id        INT,
     otrovalor VARCHAR(100)
    );
    GO
    CREATE TABLE hijotipo2
    (id          INT,
     otracolumna INT
    );
    GO
    INSERT INTO padres
    (dni,
     descripcion,
     direccion
    )
    VALUES
    (10,
     'a',
     'b'
    ),
    (40,
     'a',
     'b'
    ),
    (20,
     'a',
     'b'
    ),
    (30,
     'a',
     'b'
    );
    INSERT INTO hijotipo1
    (id,
     otrovalor
    )
    VALUES
    (1,
     'negocio'
    );
    INSERT INTO hijotipo2
    (id,
     otracolumna
    )
    VALUES
    (2,
     1
    ),
    (3,
     1
    ),
    (4,
     1
    );
    SELECT *
    FROM padres p
         INNER JOIN hijotipo1 h ON p.id = h.id;
    SELECT *
    FROM padres p
         INNER JOIN hijotipo2 h ON p.id = h.id;
    
    
    Un saludo

    domingo, 2 de septiembre de 2018 7:52
  • Hola Javi.

    Entiendo que si tuvieran alta concurrencia serian 2 tablas ?

    El Modelamiento "correcto" cual se recomienda ?


    DBA SQL Server Santiago/Chile

    lunes, 3 de septiembre de 2018 19:03
  • Hola CMAPM:

    Una tabla no. Esto funciona muy bien cuando hay una elevada casuística de entidades de diferentes tipos. Por ejemplo en una empresa, clientes, y proveedores, que pueden ser la misma entidad.

    Yo haría 2 tablas. Sin lugar a dudas.

    En todo caso, si cambiase, las dos, optaría no por una, sino por 3, La tabla de la que heredasen las otras dos.

    En mi opinión.

    Un saludo

    • Marcado como respuesta CMAPM martes, 4 de septiembre de 2018 0:51
    lunes, 3 de septiembre de 2018 21:01
  • Gracias Javi.

    Yo también hago 2, y busco literatura donde indique dicha recomendación de manera clara.


    DBA SQL Server Santiago/Chile

    martes, 4 de septiembre de 2018 0:52