Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/01/2010, 21:39
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: 16 años, 5 meses
Puntos: 2658
Respuesta: relacionar mas de 1 campo

- Antes que nada, no te ahogues sin haber nadado. Cruzar dos tablas donde la FK tiene una alta selectividad no produce un descenso de performance apreciable. En realidad, pierdes mas tiempo creando la conexión de lo que la base tarda en cruzar 45 tablas...

- Respecto a lo de MySQL Hispano, eso es un exceso de ortodoxia. Es cierto que debe evitarse la lectura repetitiva de tablas para obtener otros datos, pero eso no quiere decir eliminar las consultas repetitivas. Además, hay otras formas de resolver el problema sin llegar a necesitar aumentar la redundancia.

- Respecto a las PK multicampo, hay que tener cuidado con un detalle: No se crean PK en forma arbitraria, porque a la larga te generará muchísimos más problemas de performance, sin contar con inmensos problemas de integridad. Las PK forman índices agrupados, que son los que se usan para mantener el ordenamiento físico de los registros en el diso, y no solamente la identidad de los mismos. Eso signfica que cada vez que modificas una estructura de PK se produce un nuevo orden físico: los registros se reescriben y el índice también.
No hay que tratar las PK con liviandad.
Además de eso, el único sentido de usar una PK multicampo es si un sólo campo no identifica un registro, por lo que se necesita otro más para lograr una clave candidata. Y ese no es tu caso.

- Considera además este detalle: Si usas un ID autonumérico con un campo de texto como PK, con sólo cambiar una letra puedo usar el mismo numero para dos clientes distintos, o para el mismo cliente con dos escrituras diferentes... ¿Lo habías pensado?

- A mi entender y experiencia no vas a tener problemas de performance por tener que realizar ese cruce de tablas, por lo que todo el problema es irrelevante. Pon sólo el ID del cliente y resuelve el resto por JOIN.

- Si aún así quieres mantener esa forma redundante de datos, mejor manejalo con TRIGGERS, y no inventando claves que solamente te traerán problemas. No te olvides que cada clave primaria o foránea, es un índice que el DBMS debe mantener y actualizar... y eso sí afecta la performance del mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)