dic 21

¿Que es la abstracción?

Posted in analisis, optimización

Vamos a analizar una de las piezas fundamentales de cualquier aplicación de gestión, las Entidades, y lo vamos a hacer mostrando varios diseños y observando los detalles en cada uno de ellos.

En el siguiente ejemplo, vemos una estructura básica de entidades, que cualquiera hemos creado en los inicios,

Esque tablas básicas sin abstracción

En esta estructura, vemos como tenemos 3 tablas para las entidades: clientes, proveedores y agentes comerciales.

  • La tabla de Agentes es maestra de clientes, de esta forma, un agente puede tener varios clientes en su cartera, pero cada cliente solo puede pertenecer a un agente, y solo a uno.
  • La tabla de Clientes tambien es maestra y a su vez, historica de agentes.
  • Y la tabla de Proveedores es maestra

Las 3 tablas tienen enlaces a Formas juridicas, Formas de pago y Divisas, asi un proveedor puede tener una Forma de pago asignada por defecto, una forma juridica y un tipo de moneda. Y esto mismo es aplicable a Clientes y también a Agentes.

Y bién, si tanto se parecen las tres tablas, que tienen los mismos enlaces a tablas maestras, ¿porque no creamos una tabla común llamada Entidades?

Si hay una respuesta afirmativa a ésta pregunta, eso es la “abstracción”, en definitiva, es sacar la esencia del esquema sin perder funcionalidad en el trayecto.

Y si analizamos lo dicho anteriormente,

Un cliente, es una persona fisica o juridica

Tiene un domicilio fiscal,

tiene una Forma de pago,

trabaja con una moneda determinada

Un proveedor, tambien es una persona fisica o jurídica

y también tiene un domicilio fiscal,

y tiene una Forma de pago,

y trabaja con una moneda determinada

Y un agente, pues lo mismo.

Si todos son tan parecidos en tantos aspectos, porque no crear una única tabla Entidades donde reunirlos a todos. ¡Pues SI, es posible! Y fijate si es posible, que aquí te dejo el esquema,

Esquema de tablas básicas con abstracción

Pero, ¿hay diferencias?

¡Pues claro que hay diferencias!, en la ficha del cliente acumulamos normalmente las ventas realizadas, y en el proveedor las compras, y en el agente el total de ventas y las comisiones

Y ¿como podemos solucionar esto?

Pues muy facilmente, solo tendremos que crear los campos apropiados en la tabla entidades, Total-Ventas, Total-Compras, Total-Comisiones.

Pero si una entidad es cliente, ¿para que queremos los campos de Total-Compras, y Total-Comisiones en su ficha?

Pues en este caso, esos campos no se utilizarian, y su contenido sería “0”.

Y si estan todos juntos, ¿como puedo mostrar únicamente los clientes? y que los proveedores y los agentes no se vean.

Pues aquí tenemos otro inconveniente, pero también tiene solución. Usaremos campos booleanos para definir si una entidad es cliente, es proveedor o es agente o también puede ser varias cosas a la vez, y tendremos que duplicar indices por codigo, nombre, etc. y quizá tengamos que duplicar mas cosas, pero no tenemos otra opción. Si queremos abstraer las tres tablas en una sola, la tabla resultante va ser mas compleja de manejar que las 3 tablas anteriores por separado.

Y es en este punto dónde debemos reflexionar sobre el tema, y valorar las ventajas de tener una tabla única, o tener 3 tablas separadas. Porque a medida que abstraemos cualquier ocpión del programa, se hace mas dificil de mantener.

Además, ya hemos dicho que hay muchos campos que serán comunes a todas las entidades, como, Nombre, Dirección, C.Postal, Poblacion, Telefonos, etc. pero tendremos muchos mas campos que solo serán utiles cuando la entidad sea cliente, y otros solo para proveedores y otros solo para agentes.

El problema no es el espacio que este archivo va a ocupar en el disco, pues ahora no hay problemas de capacidad. El problema puede estar en el tratamiento de esos datos a la hora de realizar cambios en la estructura de la tabla (simplemente tendremos que tener mas precaución), ya que cualquier cambio en Clientes, puede afectar también a proveedores y a agentes si no tenemos cuidado.

A todo esto debemos añadir que si los datos estan en tablas separadas, no se mezclaran los datos, pero si una empresa es cliente y proveedor al mismo tiempo, tendras que duplicar sus fichas. Pero te aseguras que no se van a mezclar datos y las tablas son mas sencillas.

Si acabas de iniciarte en la herramienta, demasiada abstracción quizá no sea buena idea.

Después de leer esto, tú eres el único que debes tomar ésta decisión,

¡Abstracción! O ¡sencillez!

PDF Creator    Enviar artculo en formato PDF   
comments: Closed

5 Responses to “¿Que es la abstracción?”

  1. nexusfireman dice:

    Por lo que comentas puedo deducir, no se si me equiboco, que la abstraccion tiene muchas ventajas pero no a la hora de realizarla en el ejemplo que pones.
    Tal y como comentas puede llegar un momento en el cual sea casi insostenible la fluided al tener una tabla compleja.
    En la sencillez muchas veces esta la belleza.

  2. ascpepeto dice:

    La verdad es que no quiero decir nada en concreto, solo explicar lo que significa abstraer, y que cada uno debe valorar cada situación en concreto. Cada proyecto es diferente y hay veces que merece la pena y otras no. Y por supuesto, que para un principiante, la abstracción puede llegar a ser un problema. Pero claro que es bueno abstraer una estructura, pero cada uno debe saber donde esta el limite. Además, si abstraemos demasiado el esquema, puede llegar a ser un problema para el usuario/cliente final. La prueba esta en vBase (de 6.x) que es demasiado complicada para según que entidades.
    Lo mejor es encontrar un equilibrio.
    Espero haberte ayudado.

  3. DomK dice:

    Hola Jose Luís,

    Según entiendo en el ejemplo que propones, la abstracción de Clientes, Proveedores y Agentes a una única tabla de Entidades con sus respectivos checks booleanos marcados tiene la ventaja de que está todo junto y un mantenimiento coherente de entidades es más factible (añadir/modificar un mismo campo para todos ellos), ya que con tablas separadas debería realizar por triplicado los cambios.

    Pero por otra parte, las búsquedas y localizadores de Clientes, Proveedores y Agentes con todo junto en Entidades incluye más componentes y subindexaciones, cosa que por separado es más directa, y con gran cantidad de datos seguramente sea más rápido.

    A fn de cuentas creo que la decisión es mantener una aplicación estandard para todos los clientes o hacer negocio con la personalización a cada cliente según su casuística.

    Personalmente votaría por la abstracción para el desarrollo y la personalización para el negocio, todo ello compatible, claro ;-D

    Un saludo,

  4. ascpepeto dice:

    Parece que lo has entendido perfectamente, 😀



Pings responses to this post