Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Дизайн на счетоводство и база данни, съхраняване на дебитни и кредитни суми

Използването на една колона за всичко и след това използването на отрицателни числа за дебити или кредити не работи, както сте открили. Счетоводните стойности не са скалари - те са вектори, които съдържат enum (дебит или кредит) и десетично число с фиксирана запетая (което може да бъде положително или отрицателно).

Всяка счетоводна транзакция трябва да съдържа равен брой дебити и кредити. Ако не стане, транзакцията не е валидна.

По същия начин салдото по сметка също е същия вид вектор. Във всеки един момент общите дебити и общите кредити във всички сметки в една счетоводна система трябва да бъдат равни помежду си или в противен случай нещо се счупи.

Друг начин да разгледаме това е да мислим за счетоводна стойност като комплексно число, където дебитите са реални, а кредитите са въображаеми. Това означава, че 4 дебита + 3 кредита =4 + 3i. Това прави очевидно, че не можете опростете това допълнително, като свиете въображаемия член в отрицателен реален член -- това не е същата ос на числовата линия. Би било същото като да твърдите, че 4 + 3i =4 - 3. Невалидна математика.

Ако една база данни може да съхранява комплексни числа естествено, тогава комплексните числа всъщност биха били добър начин за съхраняване на счетоводни данни, вероятно биха изчистили много от объркването, което програмистите обикновено имат относно счетоводството, и биха довели до всякакви интересни свойства. Например една балансирана транзакция винаги ще има фазов ъгъл от 45 градуса, както и балансиран набор от сметки. Но повечето бази данни се нуждаят от вас да разложите комплексното число на неговите реални и имагинерни термини преди съхранение и да съхранявате тези термини в различни колони -- в света на счетоводството имената на тези две колони са съответно "дебити" и "кредити".

P.S.:Наясно съм, че някои хора наистина използват отрицателни за кредити и положителни за дебити, но това изисква много внимание, за да се направи правилно, и е крехко. Трябва да следите нормалното салдо на всяка сметка всеки път, когато я докоснете -- например, тъй като сметка на активи има дебитно нормално салдо, тогава можете да използвате положително число, за да го увеличите. Но пасивната сметка има отрицателен нормален баланс, така че увеличението на стойността на тази сметка е отрицателно число. Не можете да сумирате тези две стойности заедно по всяко време - те не са едно и също нещо. Дебитът е нещо, което имате, докато кредитът е нещо, което дължите. Поставянето на двете в една и съща колона в таблица на база данни мирише лошо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализиране на нулева стойност на колона от ненулева стойност в предишния ред

  2. Какво не е наред с това изчисление на разделяне на заявка на SQL Server?

  3. Изберете Заявка с условие Where в зависимост от стойностите на списъка в asp.net

  4. Променете типовете колони в огромна таблица

  5. Попълване на набор от данни с имена на таблици от съхранена процедура