Дизайн базы данных: таблица бухгалтерских транзакций - PullRequest
16 голосов
/ 11 декабря 2010

Сохранение записи транзакции в базе данных учета с двойной записью.

Я предложил два варианта решения 1 и 2, мне сказали, что большинство банковских пакетов выбирают вариант 2 для своей базы данных.дизайн.Однако я предпочитаю вариант 1, а не вариант 2, потому что он просто имеет смысл и эффективнее!

Т.е. для 2 движения денежных средств вариант 1 требует 2 записи, а вариант 2 требует 4 записи.

Я хотел бы знать, почему банк выбрал бы вариант 2 вместо варианта 1?Что является причиной этого?

Option 1)
TRANSACTION
Credit_AccountId
Debit_AccountId
Amount
...

Option 2)
TRANSACTION
AccountId
Amount
...

Ответы [ 2 ]

19 голосов
/ 11 декабря 2010

Вариант 1 потенциально будет немного более эффективным с точки зрения вставки. Но поскольку многие бухгалтерские операции затронут более двух учетных записей, выгода, вероятно, будет существенно меньше 2: 1.

Вариант 2 будет понятнее для этих более сложных транзакций. То есть бухгалтер обычно находил бы три строки

  • Дебет A $ 100
  • Кредит B $ 60
  • Кредит C $ 40

четче, чем два ряда

  • Дебет A $ 60 Кредит B $ 60
  • Дебет A $ 40 Кредит C $ 40

Если у вас есть несколько учетных записей с обеих сторон, было бы также немного неясно, как сопоставить дебеты и кредиты с одной учетной записью. То есть

  • Дебет A $ 100
  • Дебет B $ 30
  • Кредит C $ 60
  • Кредит D $ 70

может быть представлено как

  • Дебет A $ 60 Кредит C $ 60
  • Дебет A $ 40 Кредит D $ 40
  • Дебет B $ 30 Кредит D $ 30

но есть и другие возможные способы построения данных для модели данных 2.

Кроме того, вариант 2 будет более эффективным, если вы попытаетесь определить текущий баланс определенного счета путем агрегирования транзакций.

5 голосов
/ 11 декабря 2010

В общей структуре базы данных бухгалтерского учета логично и эффективно хранить свои дебеты и кредиты в отдельных полях (т. Е. Вариант 2), поскольку это упростит агрегирование, манипуляции с числами и отчетность.К каждой транзакции по дебету и кредиту должно быть прикреплено поле даты и времени для фильтрации определенного периода.Получить книгу от Smashwords, под названием, учет базы данных дизайна.Он предоставляет несколько хороших примеров по разработке системы бухгалтерского учета и некоторые интересные SQL-запросы для финансовой отчетности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...