19/05/2010, 14:35
|
| 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: Unificar o minimizar consulta MySQL Si cada mes de cada año tienes 24 datos numéricos a ingresar, en realidad tienes una tabla de 4 campos: Tabla(anio, mes, dato_id, dato)
Los primeros dos definen a qué período pertenecen, y el tercer campo identifica el subitem de dato, y va numerado de 1 a 24. El último es dato real.
En este contexto, los campos se deben definir:
Tabla(
anio SMALLINT UNSIGNED,
mes TINYINT UNSIGNED,
dato_id TINYINT UNSIGNED, ,
dato INT UNSIGNED);
En esta forma, cada registro tendría 15 Bytes de longitud, contra una longitud que no puedo definir porque no detallas la estructura de los campos, pero supongo que debe ser mucho más extensa.
En este caso, se puede recuperar la misma estructura de datos, todos los 170 campos si quieres, en la consulta, sin necesidad de tener que crearlos.
Un par de consejos para la normalización que te pueden resultar útiles para evitar fallas de diseño:
- No se deben guardar datos calculables. Si tienes un campo C que representa la suma de los campos A y B, el C es superfluo, porque el resultado se puede crear en la consulta..
- No se deben usar campos más grandes de lo necesario. Si tienes un campo cuyo valor no superará el 12, no tiene sentido poner un INT, que tiene 4 Bytes, cuando un TINYINT alcanza, y tiene 1 byte (no te olvides que los números se guardan como binarios y no como cifras).
- Si tienes esquemas repetidos, como ha sido el caso de los meses en un mismo registro, esos pertenecen a otra tabla vinculada, o bien, el esquema entero puede ser simplificado.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |