Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/03/2007, 15:22
javi_bus
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
Puntos: 0
JOINs, WHEREs y convencionalismos

Hola,

Mi primera duda es entorno a los JOINs y el WHERE. Tengo varias consultas multitabla en un programilla. Consultas de dos, tres, cuatro, etc. tablas. Yéndome a lo más simple (dos tablas) tendría una tabla con datos "comunes" sobre algo y otra con datos por idioma sobre ese algo. Os pondré un ejemplo inventado para que me entendáis:

Tabla productos
id_producto
precio

Tabla descripcion_productos
id_producto
id_idioma
nombre

Digamos que tenemos dos idiomas. Entonces por cada registro de la tabla productos tendremos dos en la tabla descripcion_productos. Sé que lo mejor es usar un INNER JOIN con su cláusula USING u ON para relacionar el campo "id_producto" en lugar de relacionarlas en el WHERE. Pero tengo una duda más: ¿Cómo sería mejor?:

1. SELECT {loquesea} FROM productos AS a
INNER JOIN descripcion_productos AS b USING(id_producto)
WHERE b.id_idioma = {IdDeIdioma} && {RestoDeCondiciones}

2. SELECT {loquesea} FROM productos AS a
INNER JOIN descripcion_productos AS b ON(b.id_producto = a.id_producto && b.id_idioma = {IdDeIdioma})
WHERE {RestoDeCondiciones}

Es decir, ¿sería mejor meter lo del idioma en el WHERE o en el JOIN? Tanto desde el punto de vista del rendimiento (más que nada) como de los convencionalismos. Hay que tener en cuenta que la tabla descripcion_productos va unida a la de productos y solo nos interesa obtener la fila correspondiente al ID de producto e idioma consultados pero todas las demás restricciones y condiciones (WHERE) se haría sobre la tabla productos.

Mis otras dudas son sobre convencionalismos (es decir, intentar buscar el "estandar") nada más. ¿Qué es más común o "mejor visto" desde ese punto de vista? ¿Usar los símbolos && y || o utilizar las palabras AND y OR?

Y... Sobre los nombres de las tablas y campos... ¿Sería del tipo NombreTabla y NombreCampo o nombre_tabla y nombre_campo? Me imagino que lo segundo pero quiero confirmarlo.

Gracias de antemano y perdón por el ladrillo.