MySQL Двойная запись Система учета базы данных Дизайн? - PullRequest
6 голосов
/ 19 ноября 2011

Я собираюсь создать базу данных для системы учета двойных записей в MySQL.

Я недавно прочитал статью: http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html

Я нашел в этой статье, что это было бы удобноиметь три таблицы ACCOUNT, JOURNAL и POSTING:

ACCOUNT(accountID, accountName)
JOURNAL(journalID, journalType)
POSTING(postingID, journalID, accountID, amount)

В статье описывается, что при дебетовании счета значение поля «сумма» будет положительным, в противном случае оно будет отрицательным.

теперь для приведенной выше таблицы POSTING, у меня также есть две другие опции ..

(1) POSTING(postingID, journalID, accountID, isDr, amount)

в этой опции поле 'isDr' является логическим.если учетная запись списана, поле isDr будет содержать значение «true», иначе «false».и поле «сумма» всегда будет иметь положительное значение.

(2) POSTING(postingID, journalID, accountID, debitAmount, creditAmount)

здесь, если счет будет списан, я буду хранить сумму в поле «debitAmount», в противном случае я буду хранить ее в поле «creditAmount».

так, какой именно вариант из трех выше лучше использовать ??

Ответы [ 3 ]

4 голосов
/ 19 ноября 2011

Это субъективно, но я думаю, что вариант № 0 (тот, где единственное поле amount является положительным или отрицательным) является лучшим.Вариант № 1 причинит вам много боли, когда вы захотите заняться математикой, которая включает в себя как кредиты, так и дебеты, так как вам придется обратиться к полю isDr, чтобы определить, умножать ли на -1.Вариант № 2 плохо нормирован, так как выражения debitAmount IS NULL и creditAmount IS NOT NULL будут эквивалентны (и если они когда-либо будут различаться, то ваша база данных находится в несогласованном состоянии).

2 голосов
/ 31 августа 2012

Опция # 0 имеет недостаток, с которым я недавно столкнулся:

В некоторых случаях требуется записанная / записанная сумма, которая также рассматривается как минус (-) на стороне кредита в бухгалтерских книгах, вместо этогопоказывать ее сумму как положительную (+) на дебетовой стороне.(также наоборот)

Опция # 0 не работает в этом случае (если она не помечена как дебетовая или кредитная или не решена каким-либо иным способом)

Вы должны спросить об этом своего бухгалтера.(если какая-либо сумма минус (-) должна быть учтена и отражена в кредитной части (и наоборот).

0 голосов
/ 19 ноября 2011

Я рекомендую вариант № 1. Опция № 2 приведет к множеству неиспользуемых полей (50% от общего количества полей debitAmount и creditAmount). Кроме того, Вариант № 1 позволяет вам легко получить текущий баланс.

И наконец (или, возможно, во-первых), вариант № 1 придерживается правильной нормализации.

...