Principales respuestas
Duda Modelo Datos 3 o 4 Tablas

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.- Propuesto como respuesta Juan MondragónModerator viernes, 22 de septiembre de 2017 21:37
- Marcado como respuesta Juan MondragónModerator lunes, 25 de septiembre de 2017 20:52
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:
- Editado DAMN1Self jueves, 14 de septiembre de 2017 17:02
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.IdPaisWhere 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:
- Editado DAMN1Self jueves, 14 de septiembre de 2017 17:13
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.- Propuesto como respuesta Juan MondragónModerator viernes, 22 de septiembre de 2017 21:37
- Marcado como respuesta Juan MondragónModerator lunes, 25 de septiembre de 2017 20:52
jueves, 14 de septiembre de 2017 19:04