2010-12-11 24 views
15

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 
... 

Respuesta

17

La opción 1 será potencialmente más eficiente desde la perspectiva de una inserción. Pero dado que muchas transacciones contables afectarán a más de dos cuentas, es probable que el beneficio sea sustancialmente menor que 2: 1.

La opción 2 será más clara para estas transacciones más complejas. Es decir, un contador normalmente se encuentran tres filas

  • débito $ 100
  • crédito B $ 60
  • crédito C $ 40

más clara de dos filas

  • débito A $ 60 Crédito B $ 60
  • Débito A $ 40 Crédito C $ 40

Si tiene varias cuentas en ambos lados, también sería un poco incierto cómo hacer coincidir los débitos y créditos en una sola cuenta. Es decir,

  • débito $ 100
  • B
  • débito $ 30 de
  • crédito C $ 60
  • crédito D $ 70

puede ser representada como

  • débito A $ 60 de crédito C $ 60
  • Débito A Crédito de $ 40 D $ 40
  • débito B crédito de $ 30 D $ 30

pero también hay otras formas posibles para la construcción de los datos para el modelo de datos 2.

Además, la opción 2 va a ser más eficiente si Está intentando determinar el saldo actual de una cuenta en particular agregando las transacciones.

+0

gracias, puedo ver su punto allí sobre transacciones complejas. – 001

+0

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? –

+0

@ 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. –

5

En un diseño de base de datos de contabilidad general, es lógico y eficiente almacenar sus débitos y créditos en un solo campo (es decir, la opción 2), ya que esto simplificaría la agregación, manipulación de números e informes.Debería haber un campo de fecha y hora adjunto a cada transacción de débito y crédito para filtrar un período en particular. Obtenga el libro de Smashwords, titulado, diseño de base de datos contables. Proporciona algunas buenas muestras sobre el diseño del sistema de contabilidad y algunas consultas sql interesantes para los informes financieros.

+0

Es un buen enfoque, pero es insuficiente ya que no hay un modelo predeterminado para la contabilidad. – B4NZ41

Cuestiones relacionadas