2011-09-04 6 views
5

Estoy buscando la mejor manera de manejar esta situación. Quiero almacenar un cronograma de amortización dentro de una tabla de databse. Cada fila contiene la fecha, el saldo actual, el pago, el pricipal, el interés y el nuevo saldo. Para una hipoteca típica de 30 años, esto sería 360 filas o insertos de bases de datos.En Delphi, ¿debo usar varias inserciones de bases de datos desde un bucle o utilizar un procedimiento almacenado?

¿Debo hacer los cálculos dentro de un bucle usando Delphi y hacer una inserción para cada resultado o debo realizar estos cálculos dentro de un procedimiento almacenado?

Esta sería una aplicación de escritorio de un solo usuario, máquina local.

Respuesta

5

Haría las operaciones en el procedimiento almacenado. De esa forma, trabajar con datos está en la base de datos a la que pertenece.

Además, al mantener todas las operaciones relacionadas con los datos en la base de datos, se ahorrará la molestia de codificarla de nuevo si en algún momento en el futuro decide cambiar de idioma.

+0

vengo de un mundo de clientes bloqueados en Oracle DBMS lo que el cambio es casi imposible :) . En mi humilde opinión, tener todas las operaciones relacionadas con los datos (SELECT para una, pero en su mayoría operaciones específicas que incluyen la modificación de una o más tablas) deben estar en la base de datos a la que pertenecen. Almacenar las reglas de negocio en una base de datos y exponerlas a través de API personalizadas también. Es cierto que esto aumentará la curva de aprendizaje de un programador responsable, pero creo que vale la pena. Admito que esto probablemente se reduce al tamaño de la aplicación y las preferencias de las personas que trabajan en él :) – phil

+0

@Miho, sí, es una preferencia personal, pero una que me mataría si alguien lo hiciera en uno de mis proyectos. Para un desarrollador de aplicaciones, el uso de procedimientos almacenados es un nido de víboras. Esencialmente mueve las reglas de datos fuera del alcance del desarrollador de la aplicación y las aleja de la vista.Me gusta saber qué está pasando con los datos, no hacer que aparezca misteriosamente para mí. – Misha

+0

@Misha, estoy de acuerdo con usted acerca de los datos que acaban de aparecer. Las personas que trabajan con datos necesitan saber qué y cómo se recupera o procesa. El problema es la distinción entre el desarrollador de la aplicación y el desarrollador de la base de datos. No entiendo cómo algo aparece misteriosamente en tu código. Si ponemos algo en un procedimiento almacenado, eso no significa que un desarrollador de aplicaciones no pueda localizar y modificar/ver ese procedimiento. Simplemente agrega otro nivel de abstracción. Una buena vista (aunque sesgada de DB): http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2143974700346554115 – phil

8

Las consultas preparadas y los procedimientos almacenados son comparables en cuanto al rendimiento. Como desarrollador de aplicaciones detesto los procedimientos almacenados con pasión porque trasladan la lógica desde el interior de la aplicación, donde puedo encontrarla, a otro lugar no visible cuando se mira el código fuente. Y seamos sinceros, nadie va a volver a desarrollar una aplicación en un idioma diferente si funciona.

Por lo tanto, si lo suyo son las bases de datos y el SQL, y usted se siente cómodo con eso, entonces los procedimientos almacenados están bien. Sin embargo, si usted es principalmente un desarrollador de aplicaciones, no veo ningún beneficio de usar procedimientos almacenados para que las consultas se ejecuten desde el código.

+0

¿Qué es una "Consulta preparada" y cómo usaría una en una aplicación Delphi? –

+0

Una consulta preparada es una consulta parametrizada que tiene los recursos "asignados" (preparados) en el servidor para un mejor rendimiento. A continuación, puede ejecutar la misma consulta varias veces y solo está "configurada" (preparada) una vez en el servidor. Busque una propiedad preparada en los componentes de consulta que está utilizando (ADO, dbExpress, etc.). – Misha

+1

Si los datos de origen ya se encuentran en la base de datos, y el destino es la misma base de datos. Entonces, un procedimiento almacenado es la única manera de hacerlo, de lo contrario, usted tiene un rendimiento de red en la mezcla y ralentiza la operación. –

0

Si su base de datos es local y no planta para convertirla en cliente/servidor algún día, podría haber poca diferencia desde el punto de vista del rendimiento. Mucho depende de la base de datos que use. Algunos tienen "matriz DML" que le permiten realizar todas las inserciones 360 en una base de datos de ida y vuelta, básicamente, en lugar de hacer inserciones 360, completa las variables de vinculación de matriz y realiza una sola inserción. La peor forma sería usar n inserciones sin variables de enlace. El código Delphi compilado y optimizado puede ser algo más rápido que un código de procedimiento almacenado interpretado, si la base de datos no lo compila (algunos simplemente pueden usar el código P). Desde el punto de vista del diseño, poner la lógica de datos dentro de la BD publicando un tipo de API a través de procedimientos almacenados (puede prohibir otras formas de modificar datos) puede garantizar un mayor control de los datos.

2

Si usa AnyDAC, es compatible con ArrayDML para todas sus bases de datos compatibles. Creo que esta es una característica ingeniosa. Este es un software comercial, pero una muy buena inversión. (No estoy asociado a ellos de ninguna manera, excepto como un cliente muy satisfecho.)

Ver Very High Performance using the Array DML

Cuestiones relacionadas