Usar una columna para todo y luego usar números negativos para débitos o créditos no funciona, como ha descubierto. Los valores contables no son escalares, son vectores que contienen una enumeración (débito o crédito) y un número decimal de punto fijo (que puede ser positivo o negativo).
Cualquier transacción contable debe contener un número igual de débitos y créditos. Si no es así, no es una transacción válida.
Asimismo, el saldo de una cuenta es también ese mismo tipo de vector. En cualquier momento, los débitos totales y los créditos totales en todas las cuentas de un sistema contable deben ser iguales entre sí, o de lo contrario algo se rompió.
Otra forma de ver esto es pensar en un valor contable como un número complejo, donde los débitos son reales y los créditos son imaginarios. Esto significa que 4 débitos + 3 créditos =4 + 3i. Esto hace que sea obvio que no puede simplifique eso aún más colapsando el término imaginario en un término real negativo:no es el mismo eje de la recta numérica. Sería lo mismo que afirmar que 4 + 3i =4 - 3. Matemáticas no válidas.
Si una base de datos pudiera almacenar números complejos de forma nativa, entonces los números complejos serían una buena forma de almacenar datos contables, probablemente aclararían gran parte de la confusión que los programadores suelen tener sobre la contabilidad y darían lugar a todo tipo de propiedades interesantes. Por ejemplo, una transacción equilibrada siempre tendría un ángulo de fase de 45 grados, al igual que un conjunto equilibrado de cuentas. Pero la mayoría de las bases de datos necesitan que descomponga el número complejo en sus términos reales e imaginarios antes del almacenamiento, y almacene esos términos en diferentes columnas; en el mundo de la contabilidad, los nombres de esas dos columnas son "débitos" y "créditos", respectivamente.
PD:Soy consciente de que algunas personas usan negativo para créditos y positivo para débitos, pero esto requiere mucho cuidado para hacerlo bien y es frágil. Debe realizar un seguimiento del saldo normal de cualquier cuenta cada vez que la toque; por ejemplo, dado que una cuenta de activos tiene un saldo normal de débito, puede usar un número positivo para aumentarlo. Pero una cuenta de pasivo tiene un saldo normal negativo, por lo que un aumento en el valor de esa cuenta es un número negativo. No puede sumar esos dos valores en ningún momento, no son lo mismo. Un débito es algo que tienes, mientras que un crédito es algo que debes. Poner ambos en la misma columna en una tabla de base de datos huele mal.