Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Projeto de contabilidade e banco de dados, armazenando valores de débito e crédito


Usar uma coluna para tudo e depois usar números negativos para débitos ou créditos não funciona, como você descobriu. Os valores contábeis não são escalares - são vetores que contêm um enum (débito ou crédito) e um número decimal de ponto fixo (que pode ser positivo ou negativo).

Qualquer transação contábil deve conter um número igual de débitos e créditos. Se isso não acontecer, não é uma transação válida.

Da mesma forma, um saldo de conta também é esse mesmo tipo de vetor. A qualquer momento, o total de débitos e o total de créditos em todas as contas em um sistema contábil devem ser iguais, ou então algo quebrou.

Outra maneira de ver isso é pensar em um valor contábil como um número complexo, onde os débitos são reais e os créditos são imaginários. Isso significa que 4 débitos + 3 créditos =4 + 3i. Isso torna óbvio que você não pode simplifique ainda mais reduzindo o termo imaginário em um termo real negativo - não é o mesmo eixo da linha numérica. Seria o mesmo que afirmar que 4 + 3i =4 - 3. Matemática inválida.

Se um banco de dados pudesse armazenar números complexos nativamente, então os números complexos seriam realmente uma boa maneira de armazenar dados contábeis, provavelmente esclareceria muita confusão que os programadores geralmente têm sobre contabilidade e levaria a todos os tipos de propriedades interessantes. Por exemplo, uma transação balanceada sempre teria um ângulo de fase de 45 graus, assim como um conjunto balanceado de contas. Mas a maioria dos bancos de dados precisa que você decomponha o número complexo em seus termos reais e imaginários antes do armazenamento e armazene esses termos em colunas diferentes - no mundo da contabilidade, os nomes dessas duas colunas são "débitos" e "créditos", respectivamente.

P.S.:Estou ciente de que algumas pessoas usam negativo para crédito e positivo para débito, mas isso tem muito cuidado para fazer certo, e é frágil. Você precisa acompanhar o saldo normal de qualquer conta toda vez que tocar nela - por exemplo, como uma conta de ativo tem um saldo normal de débito, você pode usar um número positivo para aumentá-lo. Mas uma conta de passivo tem um saldo normal negativo, portanto, um aumento no valor dessa conta é um número negativo. Você não pode somar esses dois valores a qualquer momento - eles não são a mesma coisa. Um débito é algo que você tem, enquanto um crédito é algo que você deve. Colocar ambos na mesma coluna em uma tabela de banco de dados cheira mal.