![]() |
incluir totales o no
hola...
la pregunta es: ¿conviene o no incluir un campo para totales en una tabla de mysql? la mayoria (yo incluido) no lo recomienda, pero me surgio la duda de que sera mas importante , espacio en disco o desempeño... supongamos algo como esto: un sistema que genera facturas o liquidaciones con 3 tablas: tbliquidacion con campos tipo int: idliq*,totalproduccion,totalprestamos. tbproduccion con campos tipo int: idliq, produccion. tbprestamos con campos tipo int: idliq, prestamo. asi a simple vista hay quien diria que los campos totales no son necesarios y que solo aumentarian el tamaño de la base de datos... pero que tan importante es eso cuando tenemos dispositivos de almacenamiento sobrados?... no seria mas conveniente sacrificar un poco de espacio para hacer algunas consultas mas rapidas?? saludos... |
Hola,
Pero, ¿qué te hace pensar que las consultas serían más rápidas? En La biblia de MySQL que estoy leyendo (y que por cierto recomiendo a todos, pues leer, aunque sea traducido a Ian Gilfillan resulta muy ameno) se trata sobre el tema en el sentido de que los cálculos que puedan delegarse al gestor de bases de datos es mejor delegarlos, por varios motivos. Mezclaré a continuación una serie de motivos, unos directamente sacados del libro que menciono y otros añadidos por mi cuenta y riesgo. Se me ocurre que añadir un campo a una tabla de la base de datos está demás, cuando ese campo puede calcularse de la suma (por ejemplo) de dos campos de dicha tabla u otra, supongo. Según el libro el que nuestra aplicación no se ocupe de lo que pueda ocuparse el gestor de bases de datos la convierte en más portable; el delegar, como ya he dicho, al gestor de la base de datos ciertos cálculos, como en este caso, puede redundar en una mejora en el rendimiento de la aplicación (y ahí iba yo antes con lo de que no sabes si las consultas resultarían más rápidas y menos costosas,... hasta que no lo pruebes, digo yo, vamos). En fin, no me hagas tampoco mucho caso, porque recién comienzo en MySQL, pero, yo entendí más o menos lo que he tratado de explicar. Pueden todos corregirme, tú incluído, si ves que es menester. ;) PD. Estoy seguro de que había más beneficios tratando de delegar (insisto) en el gestor de bases de datos las tareas de que puede ocuparse, y no llevarlas a cabo en nuestra aplicación, aun cuando fuera posible también llevar a cabo dichas tareas en ella. |
Cita:
// Saludos |
A ver, una cosa. Si el campo calculado se obtiene de otros campos de la misma tabla, ciertamente veo pocos beneficios en guardarlo. Pero en el ejemplo que se pone, el campo calculado es el producto de campos de distintas tablas. Se dice fácil multiplicar, pero para ello habrá que hacer dos joins:
y un join siempre toma tiempo. A lo mejor el caso expuesto es muy simplista pero pienso que no podemos afirmar que se puede prescindir siempre de guardar el cálculo. Dependerá en mucho del objetivo, quizá si se requieren muchos listados o reportes, convenga guardarlo. // Saludos |
Hola,
Bueno. Sin duda, revisando por encima de nuevo el capítulo cinco del libro que mencioné arriba, he debido confundir algunos conceptos y términos y hasta dónde puede llegarse con la portabilidad, porque, no encuentro escrito, efectivamente, algo que confirme lo que he dicho. Sin embargo, tal vez me equivocase de capítulo... tal vez estuviera en otro... lo que me hizo decir lo que dije, o fueron varios capítulos los que me han llevado a decirlo. En fin. Puedo aceptar que en este caso en concreto no se consiga un código "más portable", aunque mantengo que considero mejor (más lógico, modestamente) el calcular un "total" a partir de uno o más campos, que no guardar un "total" en un campo aparte. Al menos así, sin conocer del todo de qué estamos hablando realmente, como norma general. Por otro lado, lo de que fuera también más portable lo que pudiera resultar de hacerlo de ese modo, puede que me saliera de haber leído este párrafo introductorio del capítulo cinco del libro susomentado: Cita:
Disculpad que no sepa hablar del tema, que no utilize bien ciertos conceptos, palabras, etc., pero, sobre esto, como sobre tantas cosas, estoy más bien pez. ;) |
Hola,
Cita:
Me permito citar otro párrafo del capítulo cinco del libro susomentado: Cita:
|
hola de nuevo.
yo tambien he sido de la idea de preferentemente no utilizar campos para totales pero imaginemos esto: liquidacion #1 esta formada por 5 producciones y 4 prestamos. para saber el total de produccion neta de dicha liquidacion habria que hacer la suma de las 5 producciones y restarle la suma de los 4 prestamos... y peor aun, si queremos la produccion neta desde la factura #1 hasta la #10,000 ... tendriamos que hacer la suma de todas las producciones donde idliquidacion este entre 1 y 10000 y a eso restarle la suma de todos los prestamos si ponemos un campo totalneto, para cada liquidacion, solo seria un select que nos regrese la suma de los totales supongo debe haber circunstancias donde se compliquen aun mas las cosas... ahi es cuando me surge la duda si no conviene hacer trabajar practicamente nada al cliente al momento de insertar producciones y prestamos saludos a todos |
Repito lo mismo. Hay que hacer un balance entre ser más papista que el papa y el rendimiento. En ocasiones, por ejemplo, conviene sacrificar normalización de la base en aras de rendimiento. Por otra parte esto no es tanto un problema de entre qué dejar a la aplicación y qué al motor de la base (*) sino de guardar o no un campo redundante.
(*) Y en cuanto a esto también hay muchas opiniones. El autor que mencionas tiene la suya pero también hay muchos que opinan en sentido contrario. Hasta donde entiendo, los procedimientos almacenados tienden a ser muy dependientes del motor y por ende, un uso excesivo de ellos hará el sistema poco portable a otros motores. // Saludos |
Justamente reevil, ahora expones un caso mucho más realista. Los cálculos se complican y ante todo está el rendimiento, máxime que tales cálculos dependen ya no sólo de otras columnas sino de otros registros. No veo problema alguno en usar un campo extra.
// Saludos |
Cita:
Cita:
|
Hola,
A ver, a ver, aclaremos algunas cosas... ;) En primer lugar diré que, efectivamente, yo había pensado en un par de campos que hubieran de sumarse o multiplicarse o con los que realizar un cálculo, en fin, para obtener un total. Quizás no leí del todo bien el problema que planteaba el compañero y me lanzé a contestar, puesto que tengo bastante reciente lo leído en el libro de Ian Gilfillan. Cita:
Cita:
Cita:
Cita:
Cita:
Cita:
En fin. ¿Quién me manda a mí meterme en estos berenjenales? :D |
Cita:
// Saludos |
Hola,
Cita:
|
La franja horaria es GMT +2. Ahora son las 09:23:01. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi