sql >> Database teknologi >  >> RDS >> Sqlserver

Regnskabs- og databasedesign, lagring af debet- og kreditbeløb

At bruge én kolonne til alt og derefter bruge negative tal til enten debet eller kredit virker ikke, som du har opdaget. Regnskabsværdier er ikke skalarer -- de er vektorer, der indeholder en enum (debet eller kredit) og et fast punkt decimaltal (som kan være positivt eller negativt).

Enhver regnskabstransaktion skal indeholde lige mange debet- og krediteringer. Hvis det ikke gør det, er det ikke en gyldig transaktion.

Ligeledes er en kontosaldo også den samme slags vektor. På ethvert tidspunkt skal de samlede debiteringer og de samlede kreditter på tværs af alle konti i et regnskabssystem være lig hinanden, ellers gik der noget i stykker.

En anden måde at se dette på er at tænke på en regnskabsmæssig værdi som et komplekst tal, hvor debiteringer er reelle og kreditter er imaginære. Det betyder, at 4 debeter + 3 kreditter =4 + 3i. Dette gør det tydeligt, at du ikke kan forenkle det yderligere ved at kollapse det imaginære udtryk til et negativt reelt udtryk -- det er ikke den samme tallinjeakse. Det ville være det samme som at hævde, at 4 + 3i =4 - 3. Ikke gyldig matematik.

Hvis en database kunne lagre komplekse tal indbygget, så ville komplekse tal faktisk være en god måde at gemme regnskabsdata på, ville sandsynligvis opklare en masse af den forvirring, som programmører normalt har om regnskab, og ville føre til alle mulige interessante egenskaber. For eksempel vil en afbalanceret transaktion altid have en fasevinkel på 45 grader, ligesom et afbalanceret sæt konti. Men de fleste databaser har brug for, at du dekomponerer det komplekse tal til dets reelle og imaginære termer før lagring, og gemmer disse termer i forskellige kolonner -- i regnskabsverdenen er navnene på disse to kolonner henholdsvis "debet" og "kreditter".

P.S.:Jeg er klar over, at nogle mennesker bruger negativ til krediteringer og positiv til debet, men det er meget omhyggeligt at gøre det rigtigt, og det er skrøbeligt. Du skal holde styr på den normale saldo på enhver konto, hver gang du rører ved den - for eksempel, da en aktivkonto har en normal debetsaldo, kan du bruge et positivt tal til at øge den. Men en passivkonto har en negativ normal saldo, så en stigning i den kontos værdi er et negativt tal. Du kan ikke summere disse to værdier på noget tidspunkt – de er ikke det samme. En debet er noget du har, mens en kredit er noget du skylder. At sætte begge i samme kolonne i en databasetabel lugter dårligt.



  1. Sådan får du Dato fra et resultatsæt

  2. Konverter streng/varchar til dato mellem MySQL-tabeller

  3. Finde samtidige hændelser i en database mellem tidspunkter

  4. Omarranger TreeView-noder ved at trække og slippe