Sei sulla pagina 1di 6

Las tablas en una base de datos, se encuentran relacionadas por atributos que tienen en comn.

Esto implica que los datos de las tablas no son independientes, sino que al insertar, modificar y eliminar registros en ellas, se deben tener en cuenta los datos de las otras tablas para que siempre se conserve la consistencia de la informacin en la base de datos. GeneXus al crear la base de datos correspondiente a una aplicacin y sus tablas, prende el control de integridad referencial que el manejador de base de datos ofrece. Esto es: la base de datos controla que los datos relacionados entre las tablas siempre se mantengan consistentes. Para lograrlo, denega ciertos intentos de operaciones.

44

Los objetos GeneXus de tipo Transaccin, proveen la interfaz para realizar las inserciones, modificaciones y eliminaciones de registros en las tablas de la base de datos. En la diapositiva de arriba se muestran las transacciones Country, Customer e Invoice. GeneXus genera automticamente el cdigo necesario para que las transacciones desplieguen todos los mensajes que informen qu operaciones no pueden realizarse y el motivo. A modo de ejemplo, observemos cules validaciones se realizan en la transaccin Customer: Cuando se intenta insertar un nuevo cliente o modificar el pas (CountryId) de un cliente existente Se controla que exista el registro relacionado en la tabla COUNTRY. De no existir el pas, se informa y no ser posible asignar ese cdigo de pas a un cliente, hasta que el mismo exista en la tabla COUNTRY. Cuando se intenta eliminar un cliente Se controla que no existan registros relacionados en la tabla INVOICE para dicho cliente. De existir alguna factura con el cliente referenciado, se informa y la eliminacin del cliente no se realiza.

Con el ejemplo visto, se pueden entender en general, las validaciones que se realizan al trabajar con cualquier transaccin: Cuando se intenta insertar un nuevo registro o modificar una llave fornea de un registro existente se controla que exista el registro referenciado en su correspondiente tabla. Cuando se intenta eliminar un registro Se controla que no existan registros relacionados en otras tablas (que referencien al registro que se est intentando eliminar).

GeneXus crea automticamente para cada tabla que crea en la base de datos: * un ndice primario (por su llave primaria) * tantos ndices forneos como llaves forneas la tabla tenga Por qu crea ndices primarios y forneos para las tablas desde el comienzo en forma automtica, siendo que luego deben ser mantenidos? Porque dado que las tablas estn relacionadas, hay constantes accesos, bsquedas y validaciones filtrando por valores de llaves primarias y franeas. Entonces, la existencia de ndices primarios y forneos permite resolver eficientemente estos accesos muy asduos a las tablas.

Cmo podemos ver en GeneXus los ndices que cada tabla tiene creados? En la ventana Folder View bajo el nodo Tables, se ven los nombres de las tablas que GeneXus cre en la base de datos a partir de las transacciones que definimos. Presionando doble clic sobre cada tabla, podemos ver la informacin de la misma, en la ventana de la derecha. Se presentan 2 solapas: Structure: Muestra los atributos que fsicamente estn includos en la tabla (en la transaccin asociada pueden haber ms atributos que son frmula o que son inferidos de la tabla extendida, pero aqu se ven los que estn fsicamente includos en la tabla). Indexes: Muestra los ndices que la tabla tiene creados. En la imagen de la diapositiva, se puede observar que se muestran los ndices creados automticamente por Genexus (primarios y forneos) y que es posible crear otros ndices (de usuario).

ndices de usuario Estos ndices son definidos explcitamente por el informtico, cuando lo considera necesario para acceder a los datos ordenados por determinados atributos de forma eficiente (ms adelante, veremos cuando diseemos consultas y listados, la necesidad y evaluacin de definirlos). Al crear un ndice de usuario, adems de darle un nombre, e indicar cul o cules atributos lo componen, hay que indicar si el mismo acepta valores duplicados (valor: duplicate) o no (valor: unique). En el ejemplo mostrado en la diapositiva, para la tabla CUSTOMER, el analista GeneXus ha definido 2 ndices de usuario: Un ndice de nombre UCustomerName, compuesto solamente por el atributo CustomerName, que acepta valores duplicados (es decir que se podrn almacenar 2 nombres de clientes exactamente iguales en distintos registros). Un ndice de nombre UCustomerEmail, compuesto solamente por el atributo CustomerEmail, que no acepta valores duplicados (es decir que no ser posible almacenar 2 direcciones de correo iguales para distintos registros).

Potrebbero piacerti anche