Punteros esenciales: puntero a maestro y enlace a histórico

Enlazar tablas de datos en Velneo es fácil con el uso del enlazador en el esquema de tablas. Cuando conectamos dos tablas entre sí, se crean dos relaciones distintas, una desde la tabla que actúa como maestra hacia la que actúa como histórica y que llamaremos enlace histórico ( EH a partir de ahora) y otra desde la que actúa como histórica hacia la que actúa como maestra y que llamaremos puntero a maestro (PAM a partir de ahora ). El EH nos permite relacionar una ficha de la tabla maestra con varias fichas de la tabla histórica ( relación singular->plural ) con lo que desde una ficha de maestro podemos ver muchos históricos. En cambio el PAM relaciona cada ficha de la tabla histórica con una sola ficha de la tabla maestra ( relación singular->singular ).

En C y en C++ ,un puntero es un tipo especial de variable, que almacena el valor de una direccion de memoria. En Velne

o un puntero es un campo de una tabla en el que se guarda la posición de un registro en otra tabla. Si pudiéramos hacer un simil con la física, un puntero es como un vector. Su punto de origen es un registro de la tabla histórica, su sentido va desde la histórica a la maestra y su punto destino es e registro de la tabla maestra apuntada.

¿Para qué sirve el PMA? Sirve sobre todo para saber siempre a qué registro de la maestra estoy aputando, en un ejemplo concreto el puntero a maestro CLIENTES desde una tabla CABECERA DE FACTURAS, me indicará a qué ficha de CLIENTES  pertenece dicha FACTURA. El dato que guarda el campo puntero es el CODIGO de la ficha del cliente al que pertenece la factura.

La utilización de los PAM también nos dá economía de espacio en disco. El hecho de tener guardado sólo el código de la ficha maestra nos evita introducir los datos del cliete cada vez que le hagamos una factura. Simplemente indicándole a qué cliente pertenece mediante el puntero, tenemos la relación establecida.

El EH nos permite conectar una única ficha con muchas fichas de su histórico. Todo EH se establece mediante un índice de la tabla histórica pero no se guarda en un campo como el PMA sino en un componente especial de las tablas llamado Históricos. Los enlaces a histórico pueden ser múltiples, dependiendo de qué indice usemos en la tabla histórica para acceder a sus datos desde la maestra.

Cuando realizamos un enlace entre dos tablas mediante el esquema de tablas y el enlazador se producen varios cambios en las mismas, sobre todo en la tabla que actúa como histórica. Seguiremos con el ejemplo de CORDILLERAS (maestra ) y MONTAÑAS (histórica ).

TablasSi nos fijamos en la tabla Montañas , veremos que se han producido dos cambios: en los campos ha aparecido uno nuevo CORDILLERAS.Este es el puntero a la tabla maestra

Si entramos en sus propiedades veremos ahora que está Enlazado a Tabla de Datos Maestra y el nombre a la tabla que apunta, CORDILLERAS.

Además se ha creado un índice nuevo llamado también Cordilleras, del tipo Aceptar repetidas, es decir, puede haber más de un registro de esta tabla (MONTAÑAS ) cuyo puntero sea el mismo a CORDILLERAS:  puede  haber muchas MONTAÑAS que pertenezcan a la misma CORDILLERA. Vemos también que ese índice está “alimentado” por el campo puntero Cordilleras.

En la tabla maestra, ha aparecido un nuevo componente histórico, el historico a montañas. Si abrimos las propiedades de dicho EH, veremos que apunta a la tabla MONTAÑAS a través del índice CORDILLERAS  de dicha tabla. Esto permitirá que desde una ficha de CORDILLERAS veamos un histórico de sus MONTAÑAS ordenado por el índice, es decir, nos ordenará el listado de MONTAÑAS  de dicha CORDILLERA  según el orden en que los hayamo introducido.

Imaginemos que queremos que nos ordene ese histórico por la altura de dichas montañas. Creamos en la tabla un campo altura numérico de longitud 3 y con dos decimales sin signo. Creamos un índice nuevo al que podemos llamar Alturas que estará formado por los campos Cordilleras y Alturas, “alimentamos” el índice con los valore de los dos campos. En la tabla CORDILLERAS, nos posicionamos sobre la carpeta Históricos y damos a la tecla Insert o bien, tabla->nuevo objeto de tabla->enlace histórico.

Tabla de datos enlazada: MONTAÑAS  Indice: Alturas. Al cargar ahora con este nuevo EH la tabla de MONTAÑAS desde una ficha de COORDILLERAS nos mostrará las montañas que pertenecen a esa cordillera ordenadas por su altura ( siempre de valores más bajos a valores más altos ).

Podremos de esta forma crear los EH que necesitemos para poder ver los históricos de una ficha maestra ordenados de la forma que necesitemos, pudiendo jugar con la composición de los índices que usamos para enlazar contra la histórica.

 

 Espero que los enlaces empiecen a ser más claros y que veais la potencia que nos brindan  a la hora de organizar la información de nuestras aplicaciones de una manera lógica y sencilla.

 

Análisis : segunda fase

Una vez que hemos visto cómo usando las frases podemos establecer qué tablas actúan como maestras y cuáles como históricas, vamos a plasmarlo en del vDeveloper. Para ello usaremos el esquema de tablas        barraherramientas.jpg  al que accederemos con el icono de la derecha del todo de la imagen.

El esquema de tablas, aparecido en la versión 2.1 , es un importante asistente a la hora de establecer enlaces entre las tablas de nuestras aplicaciones.

 

Podemos tener en nuestra aplicación tantos esquemas de tablas como necesitemos, pintando en ellos las tablas que  necesitemos. Por ejemplo, podemos tener un esquema para reflejar las relaciones de las tablas de Ventes, otra para las Compras, otra para la Facturación… En el esquema podemos apreciar un area grande a la derecha, en donde se irán pintando las tablas y en la izquierda y de arriba abajo, tres partes, la superior en la que nos vienen listados todos los esquemas que tenemos ( para cambiar de nombre a un esquema sólo hay que posicionarse sobre él y pulsar la tecla F2 ), las tablas del esquema que nos lista las tablas que tenemos en ese esquema en concreto, y las tablas no usadas que son las que no hemos incluido en el esquema en que estamos. Para “sacar” al esquema una tabla que no está, basta ponerse sobre ella en Tablas no usadas y hacer doble click con el botón izquierdo del ratón. Para eliminarla del esquema, que no de la aplicación basta posicionarse sobre ella y pulsar Supr.( eliminar una tabla de un esquema no hace que esta se borre de la aplicación )

Podemos desde aquí crear las tablas, o bien acudiendo al almacén de objetos o a la barra que aparece en la parte  izquierda del editor de esquemas. En ella podemos encontrar, de arriba abajo      

  • Botón para ocultar la parte izquierda                                                                    
  • Botón para nueva tabla Maestra
  • Botón para nueva tabla Submaestra
  • Botón para nueva tabla Maestra de Clave Arbolada          
  • Botón para nueva tabla Histórica.

Usaremos el de la tabla maestra para crear una tabla de Cordilleras y otra de Montañas. Tal y como habíamos analizado en el anterior artículo, Cordilleras es maestra de Montañas. Recomiendo que a la hora de utilizar los esquemas, coloqueis las maestras en la parte de arriba del esquema, y sus histórcas por debajo, esto os dará una ventaja a posteriori pues con un simple vistazo del esquema sabreis qué tablas actúan como maestras y cuáles como históricas.

Enalzando Una vez colocadas en el esquema, nos queda establecer la relación entre ambas. Para ello usaremos el enlazador.Vamos a establecer la relación Cordilleras es maestra de Montañas, de singular Cordilleras a plural Montañas. Si posiciono el ratón sobre el cuadrante gris superior izquierda de la tabla Cordilleras, aparecerá el icono de una mano además del tooltip que se ve en la imagen. Una vez que aparezca la mano pulsamos botón izq del ratón y aparece una flecha roja. Esta flecha roja nos indica que vamos a establecer una relación de Maestro-Histórico con otra tabla. Arrastraremos sin soltar( con la flecha roja visible ) hasta la tabla Montañas y una vez sobre ella dejaremos de pulsar el botón.

Enlazadas

EnlazadasCon ello ya habremos logrado enlazar las dos tablas. El puntero azul, indica que la relación entre Montañas y Cordilleras es de uno a uno ( Una Montaña está en una y sólo en una Cordillera ) mientras que el puntero rojo indica una relación de uno a muchos ( una Cordillera puede tener muchas Montañas )

Esta forma de “pintar” las relaciones entre tablas que Velneo nos proporciona, resulta una herramienta muy potente a la hora del análisis e implementación de nuestras bases de datos. Es básico y fundamental aprender a analizar bien y sacarle así todo el rendimiento al vDeveloper.

Maestras e histórica de enlace Siguiendo el mismo procedimiento de creación de enlaces, podemos enlazar también las tablas del ejemplo de los Artículos y los Almacenes con la histórica de ambas ( recordemos que las frases válidas y más lógicas eran  LOS ALMACENES DE LOS ARTÍCULOS y LOS ARTICULOS DE LOS ALMACENES  plural-plural ) que nos permitirán navegar desde la tabla de Almacenes hasta la de artículos y viceversa.

Hemos de tener en cuenta que , si existen distintos punteros por los que navegara para moverse por las disitintas tablas, esto indica que desde una tabla se puede acceder a los datos de la otra. Es decir, desde Almacenes, puedo navegar al histórico de Existencias, para ver los Artículos que contine, y al revés, desde Artículos puedo navegar al histórico de Existencias para luego navegar por el maestro Almacenes

Análisis: primera fase

El modelo real de Velneo me encanta. No he encotrado una forma más sencilla, intuitiva y directa para diseñar las relaciones entre las tablas que las  que Velneo establece. Su modelo no obliga a que la información se adapte a la informática sino que la informática se adapta a la información, de una manera que yo suelo llamar natural.

Cuando asistí al primer curso , Juan nos enseñó una forma de analizar que me parece fácil e infalible, se trata del método de las frases. Escojamos dos tablas cualesquiera e intentemos crer las frases de singular y plural y ambos plurales. Veamos.

Cordilleras y Montañas. Construyamos las frases

  1. La Cordillera de una Montaña
  2. Las Cordilleras de una Montaña
  3. Las Cordilleras de unas Montañas
  4. La Montaña de una Cordillera 
  5. Las Montañas de una Cordillera.

¿De las cincon frases cuál de ellas tiene más sentido? La número 5 es la más lógica. Por tanto Cordillera es el singular y Montañas es el plural: el singular es siempre la tabla que actúa como maestra y el plural la que actúa como histórica. La tabla Cordilleras es la maestra de Montañas.

Clientes y Cabeceras de Facturas o Facturas.

  1. Los Clientes de una Factura
  2. El cliente de una Factura
  3. Las Facturas de un Cliente
  4. La Factura de los Clientes
  5. Las Facturas de los Clientes

La más lógica es la número 3, un cliente tiene muchas facturas, y una factura sólo se le puede imputar a un cliente. El singular es Cliente y el plural Facturas, luego Clientes es maestra de Facturas.

Veamos un caso en el que la frase correcta es la plural-plural.

Tenemos Artículos y Almacenes en una aplicación  multialmacén.

  1. El Articulo de los almacenes
  2. Los Artículos de los almacenes
  3. El Artículo de un almacén.
  4. Los almacenes de un artículo
  5. Los almacenes  de los artículos

Todas las frases tienen sentido, por tanto no podemos decir que una tabla es maestra de la otra. Para poder solucionar esta situación necesitaremos una tabla intermedia que nos permita relacionarlas. Creemos por ejemplo una tabla llamada Existencias. Haremos que tanto Artículos como Almacenes sean maestras de Existencias, con lo que tendremos conectados a través de ella los datos de las dos tablas, así  de un Artículo veré las Existencias en los distintos Almacenes, y en un Almacén las Existencias de los distintos Artículos.

Siguiendo este método de las frases, aunque la aplicación vaya teniendo cada vez más tablas, no tendremos fallos en el análisis y por tanto en la estructuración de las tablas que es la piedra angular sobre la que se deben basar nuestras aplicaciones.

Punteros indirectos

Punteros indirectos.

Uno de los elementos de Velneo que me parecen más potentes y que a mí me dan mucha utilidad son los punteros indirectos.

Un puntero indirecto es parecido a un puntero a maestro, ya que con él se apunta a una única ficha de otra tabla.

Pero tiene la particularidad de que la tabla Origen del puntero y la de Destino del puntero no tienen otra forma de relacionarse directamente.

Para crear un puntero indirecto, hay que tener en cuenta varias cosas_

1.      Saber de qué tabla parte el puntero, es decir la tabal Origen

2.      Saber a qué tabla ha de llegar dicho puntero, la tabla Destino.

3.      El puntero ha de resolverse en Origen pero a través de un índice de CLAVE UNICA de la tabla destino.

4.      El puntero puede servir para dos cosas: para ver un registro de la tabla Destino desde una ficha de la tabla Origen, o para actualizar o crear un registro en la tabla destino, usando las actualizaciones  y la opción “dar de alta si no existe”.

Veámoslo con un par de ejemplos.

1 Una entidad deportiva desea llevar las estadísticas de uso de sus instalaciones, de forma semanal, mensual, la afluencia de usuarios que pasan por sus tornos de entrada…

Esquema

En primer lugar creamos las tablas históricas en las que guardaremos esos datos.

Serán históricas porque no necesitamos ni campo ni índice código para ordenarlas, por tanto son históricas “puras” y no sólo en relación.

Veamos la tabla UsoInstalaciones

Usoinstalaciones

En esta tabla llevaremos los usuarios que han usado cada instalación por fecha, si las han reservado de forma presencial  (centralita) o por Internet, además de otros datos.

El índice fecha es del tipo Aceptar repetidas, pues puede haber registros con la misma fecha, pero el índice INST, es de clave única y está formado por la unión del puntero a maestro INSTALACIONES  y el campo fecha, con lo que sólo puede haber un registro por Instalación y fecha.

 

 

Con esto logramos que parte del requisito 3 esté resuelto, tengo ya un INDICE DE CLAVE UNICA.

Según vemos en el esquema de tablas, la tabla Origen será Reservas y la tabla destino            UsoInstalaciones

Al hacer una Reserva, quiero que se actualice la estadística, por eso Reservas es el Origen, puntos 1  y 2 también resueltos

Nos quedaría ahora crear el campo de tipo puntero Tabla de datos indirecta Real y resolverlo.

Creamos dicho campo

puntero

Enlazado a Tabla de Datos Indirecta (Real) y escogemos la tabla UsoInstalaci.

Marcamos el flan Dar de alta si no existe, pues así, si al resolver el puntero, la dupla a resolver INSTALACIÓN – FECHA  aún no tiene registro en la tabla UsoInstaciones , nos creará un registro en esa tabla con esos valores.

Nos queda solamente darle al botón de resolver pues este tipo de punteros no los resuelve Velneo directamente

Nos aparece un cuadro de diálogo, en la parte de la derecha los datos de la tabla destino y en la izquierda la tabla origen.

En la tabla destino, escogeremos el INDICE DE CLAVE UNICA  que hemos creado previamente, en nuestro caso INST, y en la parte inferior nos aparecerán las partes de las que está compuesto dicho índice, la Instalación y la Fecha.

Ahora nos toca resolver y la siguiente operación la debemos hacer por CADA UNA DE LAS PARTES DE LAS QUE SE COMPONE EL INDICE.

A.     parte Instalación:

                        Nos posicionamos a la Izq sobre Instalación y en la derecha (Origen) le indicaremos de dónde debemos sacar ese valor, es decir, nos posicionaremos sobre el punteo a Instalación.

B.     parte Fecha.

                        Nos posicionamos a la izq sobre la fecha, y a la derecha le indicaremos de dónde debemos sacar ese valor, es decir, nos posicionaremos sobre el campo Fecha de la Tabla Reservas.

Ya tendremos así resuelto el puntero indirecto.

resolucion

Ahora haremos una actualización desde la tabla Reservas, Campo enlazado, el puntero, y añadiremos tantos componentes de actualización como sean necesarios.

Por ejemplo en UsoInstalaciones tendremos un campo numérico para ir contando los usuarios que entraron en una instalación cada día, por tanto actualizaremos ese campo, de forma Acumular, y con valor 1, para que nos cuente un uso cada vez que entra un usuario.

Espero que esto os pueda ayudar y sacar provecho a estos punteros que a mí me resultan tan útiles y potentes, pues con ellos puedo lanzar actualizaciones y por tanto evitarme trabajo en la parte derecha del vDeveloper que debería sino suplir con procesos.

Un saludo

 

 

A %d blogueros les gusta esto: