Por Alfonso Ricaño En la segunda parte hicimos una tabla con una llave primaria, ahora crearemos otra tabla, y haremos una liga de integridad referencial, mediante una llave foránea (foreign key).
Suponiendo que la tabla personas que fue creada en la parte 2 se refiere a las personas que trabajan en una oficina, ahora vamos a crear una tabla donde especifiquemos el equipo que tiene cada persona a su cargo. Para ello deberemos de guardar los datos de: * Nombre del Equipo * Precio * Fecha de asignación Obviamente, tendremos que enlazar al equipo y a la persona que fue asignado. Para ello tenemos que agregar en la tabla otra columna que haga referencia a la clave de la persona. Si nos vamos directamente al código SQL para la creación de la tabla, queda algo así: CREATE TABLE EQUIPO( CLAVEPERSONA INTEGER NOT NULL, NOMBREEQUIPO VARCHAR(100), PRECIO FLOAT, FECHA_ASIGNACION DATE) Aquí nos damos cuenta de que se utilizan varios tipos de datos (INTEGER, VARCHAR, FLOAT, DATE). A continuación se muestra una tabla con los tipos de datos de InterBase.
| Nombre | Tamaño | Precisión |
| BLOB | Variable | Ninguna. |
| CHAR(n) | n caracteres | De 1 a 32767 bytes |
| DATE | 64 bits | De 1/01/100 a 29/02/32768 |
| DECIMAL(precisión, escala) | Variable (16, 32, 64 bits) | Precisión=de 1 a 18. Espefica exactamente los dígitos de precisión que se guardarán. |
| SMALLINT | 16 bits | -32768 a 32767 |
| TIME | 64 bits | 0:00 AM a 23:59:9999 PM |
| TIMESTAMP | 64 bits | Igual que el tipo DATE; pero también incluye información de la hora. |
| VARCHAR(n) | n caracteres | 1 a 32,765 bytes |
Ahora vamos a crear el generador que nos dará los valores consecutivos y únicos para la columna CLAVEEQUIPO de la tabla EQUIPO. Esto es muy sencillo, sólo hay que especificar el nombre del generador y utilizar la instrucción CREATE GENERATOR:
CREATE GENERATOR G_CLAVEEQUIPO
Esto lo escribimos en la sección Cursor del WISQL y lo ejecutamos (acuérdate de confirmar la transacción después de ejecutar cada instrucción).
Ahora vamos a crear un trigger que tome un valor del generador y lo asigne al campo CLAVEEQUIPO cada vez que se agregue un nuevo registro. Como se explicó anteriormente, se pueden crear triggers para antes y después de insertar/modificar o eliminar un registro. En este caso, vamos a crear un trigger para antes de insertar.
Para crear el trigger, seleccionamos la tabla equipo en la ventana browse (como se muestra en la imagen anterior) y seleccionamos la parte Triggers, de esta manera:
Oprimimos el botón New, y nos saldrá una plantilla para crear el trigger:
Date cuenta que lo que está con // antes muestra las opciones que tenemos, pero debemos de quitar algunas cosas. Por ejemplo, donde dice:
// BEFORE AFTER
sólo debemos utilizar uno de los dos: o BEFORE, ó AFTER.
Igualmente pasa en la parte de INSERT UPDATE DELETE.
En el caso del trigger que vamos a crear, utilizaremos BEFORE INSERT, para que se ejecute justo antes de insertar el registro.
También cambiaremos el nombre del trigger a EQUIPO_BI, aunque puede llevar cualquier nombre, pero así sabremos que es un trigger que pertenece a la tabla EQUIPO y que se ejecuta antes de insertar (Before Insert).
A continuación muestro el código completo del trigger:
CREATE TRIGGER EQUIPO_BI FOR EQUIPO
BEFORE INSERT
AS
BEGIN
NEW.CLAVEEQUIPO=GEN_ID(G_CLAVEEQUIPO, 1);
END
Para crearlo, tenemos que oprimir el botón:
e inmediamente después el botón que confirma la transacción:
Hasta aquí tendremos las dos tablas, con una integridad referencial entre ellas, y la tabla de EQUIPO con un trigger que utiliza un generador para ir creando los valores de la llave primaria. En la próxima entrega hablaré ahora sí de las transacciones, y un poco más de los triggers y procedimientos.