Según la célebre frase de Benjamín Franklin solamente hay dos cosas seguras en la vida: la muerte y los impuestos.

Entonces, ¿cuál es la manera más conveniente de registrar los impuestos adeudados y los impuestos pagados, en nuestras tablas?

Supongamos que cuando hacemos una venta tenemos que pagar dos impuestos, una forma sería la siguiente:

IMPUESTO1

Captura 1. Si haces clic en la imagen la verás más grande

En la tabla MOVIMCAB (cabecera de movimientos) guardamos los datos de cabecera de cada venta. Como puedes ver en la Captura 1, tenemos dos impuestos y por lo tanto también tenemos dos columnas en nuestra tabla. Esto funcionará … hasta que al gobierno se le ocurra agregar un nuevo impuesto. Como sabes, esos fulanos solamente quieren recaudar así que no es raro que incrementen los porcentajes de los impuestos o que agreguen nuevos impuestos.

Por lo tanto, la solución de la Captura 1 no es la más adecuada porque si hay que pagar un nuevo impuesto eso implicará agregarle una columna a la tabla, lo cual significará que deberemos modificar todas las vistas y todos los stored procedures que usan las columnas de impuestos. Y también deberemos modificar todos los programas que escribimos en nuestro lenguaje de programación (Visual FoxPro, Visual Basic, C, C++, Delphi, etc.) porque hay que grabar el nuevo impuesto y mostrárselo al usuario.

La solución correcta requiere normalizar las tablas, de la siguiente manera:

  • De la tabla MOVIMCAB (cabecera de movimentos) quitamos todas las columnas de impuestos
  • Agregamos una tabla llamada IMPUESTOS donde guardaremos los identificadores y los nombres de los impuestos
  • Agregamos una tabla llamada CAMBIOS_IMPUESTOS donde guardaremos los identificadores de los impuestos, las fechas en que sus porcentajes fueron cambiados y los nuevos porcentajes
  • Agregamos una tabla llamada MOVIMIMP (movimientos de impuestos) donde guardaremos el identificador de la cabecera, el identificador del impuesto, y el importe a pagar por ese impuesto

La tabla CAMBIOS_IMPUESTOS tiene una Foreign Key con la tabla IMPUESTOS

La tabla MOVIMIMP tiene una Foreign Key con la tabla MOVIMCAB y una Foreign Key con la tabla IMPUESTOS

IMPUESTO2

Captura 2. Si haces clic en la imagen la verás más grande

 IMPUESTO6

Captura 3. Si haces clic en la imagen la verás más grande

 IMPUESTO7

Captura 4. Si haces clic en la imagen la verás más grande

IMPUESTO8

Captura 5. Si haces clic en la imagen la verás más grande

Como puedes ver, se trabaja más de esta forma, pero la ventaja es que el gobierno puede agregar impuestos (o quitar, lo cual sería muy raro) o modificar los porcentajes de los impuestos todas las veces que quiera que siempre tendremos perfectamente registrados a los impuestos sin necesidad de tocar ni las tablas ni nuestros programas.

Artículos relacionados:

Consideraraciones a tener en cuenta al diseñar una Base de Datos

Diseño de bases de datos. 1FN

Diseño de bases de datos. 2FN

Diseño de bases de datos. 3FN

Más ejemplos de tablas que no cumplen con la 1FN

El índice del blog Firebird21

Anuncios