sql >> Databasteknik >  >> RDS >> Sqlserver

Bokföring och databasdesign, lagring av debet- och kreditbelopp

Att använda en kolumn för allt och sedan använda negativa tal för antingen debeter eller krediter fungerar inte, som du har upptäckt. Redovisningsvärden är inte skalärer - de är vektorer som innehåller en enum (debet eller kredit) och ett decimaltal med fast punkt (som kan vara positivt eller negativt).

Varje bokföringstransaktion måste innehålla lika många debeteringar och krediter. Om den inte gör det är det inte en giltig transaktion.

På samma sätt är ett kontosaldo också samma sorts vektor. När som helst måste de totala debiteringarna och de totala krediterna över alla konton i ett redovisningssystem vara lika med varandra, annars har något gått sönder.

Ett annat sätt att se på detta är att tänka på ett redovisningsvärde som ett komplext tal, där debeteringar är verkliga och krediter är imaginära. Det betyder att 4 debeter + 3 krediter =4 + 3i. Detta gör det uppenbart att du inte kan förenkla det ytterligare genom att kollapsa den imaginära termen till en negativ real term -- det är inte samma tallinjeaxel. Det skulle vara samma sak som att hävda att 4 + 3i =4 - 3. Ej giltig matematik.

Om en databas kunde lagra komplexa tal inbyggt, så skulle komplexa tal faktiskt vara ett bra sätt att lagra redovisningsdata, skulle förmodligen reda ut mycket av den förvirring som programmerare vanligtvis har om redovisning, och skulle leda till alla möjliga intressanta egenskaper. Till exempel skulle en balanserad transaktion alltid ha en fasvinkel på 45 grader, liksom en balanserad uppsättning konton. Men de flesta databaser kräver att du bryter ner det komplexa numret till dess verkliga och imaginära termer före lagring, och lagrar dessa termer i olika kolumner -- i bokföringsvärlden är namnen på dessa två kolumner "debeter" respektive "krediter".

P.S.:Jag är medveten om att vissa människor använder negativa för krediter och positiva för debiteringar, men detta tar stor omsorg för att göra rätt och är bräckligt. Du måste hålla reda på det normala saldot på vilket konto som helst varje gång du trycker på det - till exempel, eftersom ett tillgångskonto har ett normalt debetsaldo, kan du använda ett positivt tal för att öka det. Men ett skuldkonto har ett negativt normalsaldo, så en ökning av kontots värde är ett negativt tal. Du kan inte summera dessa två värden när som helst – de är inte samma sak. En debet är något du har, medan en kredit är något du är skyldig. Att lägga båda i samma kolumn i en databastabell luktar illa.



  1. MySQL - PHP unika värden från rader

  2. Logga in som en annan användare på MySQL

  3. Hur visar man WORK_MEM för externa PostgreSQL-anslutningar?

  4. Hur man deklarerar en markör efter startdelen av en Oracle PL/SQL-procedur