Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Información no relacionada por id en base de datos, es correcto asi?

Estas en el tema de Información no relacionada por id en base de datos, es correcto asi? en el foro de Mysql en Foros del Web. Abri este post por que el anterior ya salia del tema Establecimiento es donde registran los datos de su negocio Pais Ciudad Estado son las ...
  #1 (permalink)  
Antiguo 02/04/2017, 18:30
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Información no relacionada por id en base de datos, es correcto asi?

Abri este post por que el anterior ya salia del tema

Establecimiento

es donde registran los datos de su negocio

Pais
Ciudad
Estado

son las del lugar

y la de
Localizacion_relacion que tiene los campos

idlocalizacion_relacion
idestablecimiento
pais varchar
estado varchar
ciudad varchar

son tipo var char para hacer la busqueda mas optima
aunque se que lo correcto es usar los ids para solo relacionar.
Estan de acuerdo en esto?
Sacrificar la forma correcta con la forma mas optima pero que a futuro puede acarrar problemas de datos, (integridad referencial) pero el caso es que si modifico Mexico por México en la tabla pais esto no repercutira en la tabla de localizacion_relacion ya que no tiene ningun id relacionado.
¿que opinan?
de antemano gracias
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 03/04/2017 a las 00:47
  #2 (permalink)  
Antiguo 03/04/2017, 08:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

Me gusta donde dices

Sacrificar la forma correcta con la forma mas optima

Por algo las relaciones son obligatorias en las bases de datos relacionales, ademas de que no entiendo que es lo que hiciste, ni porque es mas optimo
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/04/2017, 10:44
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

Cita:
Iniciado por Libras Ver Mensaje
Me gusta donde dices

Sacrificar la forma correcta con la forma mas optima

Por algo las relaciones son obligatorias en las bases de datos relacionales, ademas de que no entiendo que es lo que hiciste, ni porque es mas optimo

Es mas optimo por que en una tabla
tengo por ejemplo

id 1
pais Mexico
estado sinaloa
ciudad culiacan
y puedo darle un like directo

en cambio si en vez de poner cadenas pongo los ids de las tablas de pais,estado y ciudad tengo que hacer la relacion con estas y luego hacer el like en ellas a los nombres(cadenas).
Aun no mido cual sea mas optima puesto que me estoy pegando una batalla con la de los ids(la correcta por la integridad)
pero creo que la de cadenas es mas optimas por que no hago relaciones y es directo.
¿sera?
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #4 (permalink)  
Antiguo 03/04/2017, 10:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

En una base de datos relacional no es mas optimo la de cadenas, porque estas repitiendo demasiada informacion que puede quedar sobre un Id, para agilizar estos procesos tienes los indices, ademas en la forma que propones estas matando la normalizacion.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 03/04/2017, 11:50
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

Código MySQL:
Ver original
  1. select * from Localizacion_relacion where l.pais like '%México%' or l.estado like '%México%' or
  2.  l.ciudad like '%México%';

de la tabla con cadenas
Localizacion_relacion
idLocalizacion_relacion
pais
estado
ciudad


La idea es igualar esa relación asi como va la lógica de la primera
si no encuentra en pais que busque en estado y si no que busque en municipio, como la tabla ya tiene las cadenas es mas facil, con ide seria diferente.




Código MySQL:
Ver original
  1. select * from Localizacion_relacion l, pais p, estado e, ciudad c where

Alli me pierdo..

por que habra registros donde el idestado y el idciudad estará vació debido a que indica que ese lugar está en todo México
y habrá registros donde solamente la idciudad está vacia por que significa que ese establecimiento esta en todo el estado
cuando los 3 esten con id significa que está en solo una ciudad en especifico.

y por que jalo las tablas de pais,estado y ciudad?
por que ocupo hacer like con sus nombres para hacer el filtro, el problema aqui es que si los ids estan vacios no jalara datos.
El caso es que quiero igualar lo que en la primera ya me funciona, para que este de la manera correcta.

La tabla quedaria con ids asi

Localizacion_relacion
idLocalizacion_relacion
id_pais
id_estado
id_ciudad
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #6 (permalink)  
Antiguo 03/04/2017, 12:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

Para empezar este tipo de busquedas:

Código MySQL:
Ver original
  1. select * from Localizacion_relacion where l.pais like '%México%' or l.estado like '%México%' or
  2.  l.ciudad like '%México%'

No es nada recomendable, pero no entiendes razones o quieres hacerlo a tu manera, al final de cuentas si asi te funciona adelante, solo te comento que hay mejores formas de hacer eso que necesitas. como por ejemplo hacer un procedure para buscar en las 3 tablas y saber que es lo que tienes que regresar.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 03/04/2017, 13:53
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

Si entiendo razones, por eso estoy aqui consultando.

Es que ocupo los datos tal y como me los regresa la consulta, mas no necesariamente necesito hacerla de esa forma, pero si que me regrese los datos asi.
No puedo usar procedimientos por que estoy en un hosting que no me permite eso, por que es compartido.

En todo caso uso like para buscar en 3 tablas o ¿a que manera de buscar te refieres?
no puedo buscar por cadenas completas por que el usuario podria escribir solo "Mexic"

cabe destacar que el usuario busca en un cuadro de texto escribiendo manualmente el pais,estado o ciudad que quiere consultar y ya le aparece una lista con los establecimientos relacionados(Es es la idea).

En todo caso ocupo saber si el dato esta en una de esas 3 tablas no importa que manera sea, creo que ya tengo suficiente perdida de optimizacion la otra mitad de la consulta que no muestro, ya que esos datos que me regresa son para hacer un and id in (la consulta de arriba).

Agradezco cualquier sugerencia, se que no es recomendable por eso es que estoy aqui preguntando, si funciona como lo tengo pero no hay integridad referencial ni nada de eso, y eso es lo que busco.

Me gustaria usar procedimientos pero lamentablemente donde estoy actualmente no puedo cambiarme de plan para que eso se permita.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 03/04/2017 a las 14:03
  #8 (permalink)  
Antiguo 03/04/2017, 14:12
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 1.996
Antigüedad: 7 años, 3 meses
Puntos: 51
Respuesta: Información no relacionada por id en base de datos, es correcto asi?

Código MySQL:
Ver original
  1. select p.nombrepais,e.nombreestado,c.nombreciudad from localizacion l, pais p, estado e, ciudad c where l.idpais=p.idpais and
  2.  l.idestado=e.idestado and l.idciudad=c.idciudad.

continuando
Código MySQL:
Ver original
  1. select p.nombrepais,e.nombreestado,c.nombreciudad from localizacion l, pais p, estado e, ciudad c where l.idpais=p.idpais and
  2. if(l.idestado is not null, l.idestado=e.idestado,null) and if(l.idciudad is not null,l.idciudad=c.idciudad,null).

para hacer like u otra cosa que me ayude a filtrar
Código MySQL:
Ver original
  1. select p.nombrepais,e.nombreestado,c.nombreciudad from localizacion l, pais p, estado e, ciudad c where l.idpais=p.idpais and
  2. if(l.idestado is not null, l.idestado=e.idestado,null) and if(l.idciudad is not null,l.idciudad=c.idciudad,null) and p.nombrepais like '%Sonora%' or nombreestado like '%Sonora%' or nombreciudad like '%Sonora%' l.

Esa consulta no siempre coincidira en la fila y por eso no me regresara nada cuando el id en alguna fila de localizacion sea null.

Bueno ese es el diseño que tiene ahorita no se que otro diseño podria darle de tal manera de que si alguien escribe Mexico me ponga todos los que estan en ese pais.

Estoy pensando
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 03/04/2017 a las 14:18

Etiquetas: correcto, forma, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:46.