none
Duda Modelo Datos 3 o 4 Tablas RRS feed

  • Pregunta

  • Estimados.

    Tengo una discusión con el área de desarrollo y quisera su opinion al respecto.

    Mi propuesta

    Pais : IDPais (PK), Descripcion

    Ciudad: IDCiudad (PK),Descripcion, IDPais (FK)

    Comuna: IDComuna (PK),Descripcion,IDCiudad (FK)

    El Área de Desarrollo me indica un modelo diferente:

    Pais : IDPais (PK), Descripcion

    Ciudad: IDCiudad (PK),Descripcion

    Comuna: IDComuna (PK),Descripcion

    TablaNAV : IDPais,IDCiudad,IDComuna (PK Compuesta)

    Me indican que con esta tabla NAV pueden de manera rápida saber las relaciones de Pais,Ciudad y Comuna, por otro lado, yo les indico que para tener las descripciones evidentemente tendrán que hacer el JOIN por las demas tablas, pero no se que otro fundamento indicarles.

    Según mi experiencia no tiene sentido esta ultima propuesta que me indican, cuales serian los pro y contras ?

    Saludos Cordiales.

    Cristian


    DBA SQL Server Santiago/Chile

    jueves, 14 de septiembre de 2017 16:32

Respuestas

  • SELECT t.Description, t1.Description, t2.Description
    FROM
        dbo.TableName t
        INNER JOIN dbo.TableName t1 ON t.ParentRef = t1.Id
        INNER JOIN dbo.TableName t2 ON t1.ParentRef = t2.Id
    WHERE t.LevelDepth = 3;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 14 de septiembre de 2017 19:04

Todas las respuestas

  • TablaNAV : IDPais,IDCiudad,IDComuna (PK Compuesta)

    Pais : IDPais , Descripcion

    Ciudad: IDCiudad (PK),Descripcion

    Comuna: IDComuna (PK),Descripcion

    sera mas facil por que si te das cuenta un ejemplo: 

    MI PAIS:PERU, CIUDAD: LIMA : COMUNA:LIMA 

    tendria que hacer 3 where para obtener la comuna lima a hacer un where simple por el id Compuesto donde concatenas los 3 selecciones de los cbo me supongo



    Pasa los puntos prro v:


    jueves, 14 de septiembre de 2017 17:01
  • AUTIS.

    No entendí del todo, SIN NAV hago esto:

      

    SELECT 
           CM.Comuna,CU.Ciudad,P.Pais
    From 
           Comuna CM 
           INNER JOIN Ciudad CU ON CM.IdCiudad = CU.IdCiudad
           INNER JOIN Pais P ON P.IdPais = CU.IdPais

    Where P.Descripcion = 'PERU' and CU.Descipcion = 'LIMA' and CM.Descripcion = 'LIMA'

    Con NAV ademas tendria que incluir en el JOIN la tabla NAV, por eso que no veo donde esta la "mejoria"


    DBA SQL Server Santiago/Chile

    jueves, 14 de septiembre de 2017 17:06
  • Para que haces ese select ? haces combos aninados o en cascada?  O solo llegas tus registros con un select global y de ahi vas filtrando en el cliente?


    Pasa los puntos prro v:


    jueves, 14 de septiembre de 2017 17:12
  • Si el sustento es mostrar las tres referencias en una sola fila entonces creo que no hay necesidad de escribir en disco las relaciones, puedes ofrecer a los desarrolladores la misma información -incluso adjuntando las descripciones- en una vista (VIEW), con ello mantienes tus tablas propuestas, evitas una cuarta tabla (y las formas para insertar las referencias), y evitas la pérdida de relación entre las tres tablas (relación natural en cascada) y con ello las reglas de IR (tendría mayor relevancia en caso las tablas fuesen transaccionales). Pienso que no se puede sacrificar el diseño de las tablas y sus relaciones para facilitar el acceso a los datos, para ello existen mecanismos de abstracción como las vistas o funciones.

    Por si te interesa, otra forma de modelar las tres tablas en mención es mediante una tabla recursiva, agregando una columna de referencia del padre y una columna con el nivel de profundidad. Algo mas, existen estándares para codificar ubicaciones geográficas tanto para países, ciudades y localidades, sería conveniente -en caso ya no lo hayas hecho- revisar esa información, por ejemplo: ISO 3166-1



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 14 de septiembre de 2017 17:18
  • Estimado William.

    Me podrías dar un ejemplo de la tabla recursiva por favor ?

    AUTIS, el select lo necesito de dicha manera para la relacion entre los datos pues necesito su descripcion


    DBA SQL Server Santiago/Chile

    jueves, 14 de septiembre de 2017 17:30
  • Estimado William.

    Me podrías dar un ejemplo de la tabla recursiva por favor ?

    AUTIS, el select lo necesito de dicha manera para la relacion entre los datos pues necesito su descripcion


    DBA SQL Server Santiago/Chile

    Para no andar en tantos rodeos si tus tablas PAIS,CIUDAD Y COMUNIDAD solo tienen 2 campos 1 id y el otro descripcion ...  si es asi mejor te aconsejaria usar 

     010101  / PERU / LIMA / LIMA 

    010102/PERU/LIMA/ATE

    020101/CHILE/Santiago/Santiago

    Por eso te preguntaba el modo en que usas PAIS,CIUDAD Y COMUNIDAD si hacias en cascada o aninados u otro metodo


    Pasa los puntos prro v:

    jueves, 14 de septiembre de 2017 17:42
  • Estimado William.

    El Select como se construye si quiero mostrar, la ciudad y pais de las comunas ?

    PROVIDENCIA,SANTIAGO,CHILE

    INDEPENDENCIA,SANTIAGO,CHILE

    Saludos.


    DBA SQL Server Santiago/Chile

    jueves, 14 de septiembre de 2017 18:05
  • SELECT t.Description, t1.Description, t2.Description
    FROM
        dbo.TableName t
        INNER JOIN dbo.TableName t1 ON t.ParentRef = t1.Id
        INNER JOIN dbo.TableName t2 ON t1.ParentRef = t2.Id
    WHERE t.LevelDepth = 3;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 14 de septiembre de 2017 19:04