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

Progettazione della contabilità e del database, memorizzazione dell'importo di debito e credito

L'utilizzo di una colonna per tutto e quindi l'utilizzo di numeri negativi per debiti o crediti non funziona, come hai scoperto. I valori contabili non sono scalari:sono vettori che contengono un enum (debito o credito) e un numero decimale a virgola fissa (che può essere positivo o negativo).

Qualsiasi transazione contabile deve contenere un numero uguale di addebiti e accrediti. In caso contrario, non è una transazione valida.

Allo stesso modo, anche il saldo di un conto è lo stesso tipo di vettore. In qualsiasi momento, i debiti totali e i crediti totali su tutti i conti in un sistema contabile devono essere uguali tra loro, altrimenti si è rotto qualcosa.

Un altro modo di guardare a questo è pensare a un valore contabile come a un numero complesso, in cui i debiti sono reali e i crediti sono immaginari. Ciò significa che 4 debiti + 3 crediti =4 + 3i. Ciò rende ovvio che non puoi semplificalo ulteriormente comprimendo il termine immaginario in un termine reale negativo:non è lo stesso asse della retta numerica. Sarebbe come affermare che 4 + 3i =4 - 3. Matematica non valida.

Se un database potesse memorizzare numeri complessi in modo nativo, i numeri complessi sarebbero effettivamente un buon modo per archiviare dati contabili, probabilmente chiarirebbero molta della confusione che i programmatori di solito hanno sulla contabilità e porterebbero a tutti i tipi di proprietà interessanti. Ad esempio, una transazione bilanciata avrebbe sempre un angolo di fase di 45 gradi, così come una serie bilanciata di conti. Ma la maggior parte dei database richiede che tu scomponga il numero complesso nei suoi termini reali e immaginari prima dell'archiviazione e memorizzi quei termini in colonne diverse:nel mondo contabile, i nomi di queste due colonne sono rispettivamente "debiti" e "crediti".

P.S.:sono consapevole che alcune persone usano il negativo per i crediti e il positivo per i debiti, ma questo richiede molta attenzione per fare bene ed è fragile. Devi tenere traccia del saldo normale di qualsiasi account ogni volta che lo tocchi, ad esempio, poiché un conto di asset ha un saldo di debito normale, puoi utilizzare un numero positivo per aumentarlo. Ma un conto passivo ha un saldo normale negativo, quindi un aumento del valore di quel conto è un numero negativo. Non puoi sommare questi due valori in qualsiasi momento:non sono la stessa cosa. Un debito è qualcosa che hai, mentre un credito è qualcosa che devi. Mettere entrambi nella stessa colonna in una tabella di database ha un cattivo odore.