Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/08/2011, 16:21
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: otra forma de hacer este esquema de de base de datos

En términos generales, es correcto: Se necesita cruzar todas las tablas para obtener esa información porque tienes tres parámetros repartidos en tres tablas distintas, y lo que quieres conseguir está en la cuarta.
En estas situaciones la cosa se resuelve mayormente con la creación de vistas (VIEW), que son tablas virtuales basadas en una consulta estandarizada, y que a los efectos de la performance son mucho más funcionales.
En tu caso sería así:
Código MySQL:
Ver original
  1. CREATE OR REPLACE VIEW veravisos
  2. SELECT TA.descripcion
  3. FROM TA.tabla_anuncio, MC.marca,  MO.modelo, TC.ciudades
  4.     INNER JOIN tabla_ciudad TC ON TA.id_ciudad = TC.id_ciudad
  5.     INNER JOIN marca_coche MC ON TC.id_ciudad = MC.id_ciudad
  6.     INNER JOIN modelo_coche MO ON MC.id_modelo = MO.id_modelo;

Usando una vista definida más o menos así, para obtener lo que deseas simplemente sería:
Código MySQL:
Ver original
  1. SELECT descripcion
  2. FROM veravisos
  3.     marca = 'renault'
  4.     AND  modelo = 'laguna'
  5.     AND ciudades = 'boyaca'

Ten en cuenta que la vista debe responder a una consulta genérica, no debe incluir los valores a buscados. Esos se usan cuando realizas la consulta a la vista.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)