Almacenamiento de la entrada de transacción en una base de datos contable de doble entrada.Diseño de la base de datos: tabla de transacciones contables
Presenté dos soluciones, opción 1 y opción 2, me dijeron que la mayoría de los paquetes bancarios eligen la opción 2 para el diseño de su base de datos. Sin embargo, prefiero la opción 1 sobre la opción 2 porque simplemente tiene sentido y es más eficiente.
Es decir, para el movimiento de fondos 2, la opción 1 requiere 2 registros frente a la opción 2 requiere 4 registros.
Me gustaría saber por qué el banco elegiría la opción 2 sobre la opción 1? ¿Cuál es la razón para esto?
Option 1)
TRANSACTION
Credit_AccountId
Debit_AccountId
Amount
...
Option 2)
TRANSACTION
AccountId
Amount
...
gracias, puedo ver su punto allí sobre transacciones complejas. – 001
Gracias por su respuesta @Justin Cave, ¿podría ayudarme en el campo de saldo actual de la respuesta, utilizamos el modelo 2 para las transacciones y también tengo una tabla de cuentas con el campo de saldo? el campo de saldo se actualiza después de cada transacción, para problemas de concurrencia usamos el bloqueo de nivel de fila en la tabla de cuentas. todo fue bueno hasta que necesitamos usar el compromiso de dos fases debido a la multiplataforma de Java y .Net y ... Nos enfrentamos a muchos bloqueos suspendidos en la tabla de Cuentas. Especialmente "Transacción esperando bloqueo". DBA está matando la sesión manualmente y eliminando bloqueos. Es el diseño incorrecto? –
@ M.Heydari - Esto parece más adecuado para una nueva pregunta: los comentarios no son realmente el lugar apropiado para discusiones extensas. No mantendría un valor agregado en un sistema transaccional. Si realmente considera que el agregado es absolutamente necesario, use una vista materializada. –