D2B Express C: secuencias, importaciones y actualización de registros

En esta tercera entrega vamos a ver cómo establecer restricciones (CONSTRAINTs) en nuestra base de datos,  qué son y para qué sirven las secuencias, cómo importar información desde ficheros texto y cómo borrar y actualizar registros de las tablas.
Empecemos con CONSTRAINT. Algunos ejemplos son las claves primarias y externas, valores por defecto en columnas, chequeo de integridad, etc. Vamos a ver algunos usos en acción creando por ejemplo una nueva tabla, Empleados, y a la que vamos a establecer algunas reglas de diseño: el "número de empleado" (nuestra Primary key en este caso) será de tipo "Integer" PERO con formato 5 dígitos y con ceros a la izquierda. Además el campo "sexo" sólo podrá contener los valores "M" (masculino) ó "F" (femenino).
Respecto a las secuencias (SEQUENCE), éstas nos sirven para generar valores numéricos ÚNICOS independientes de las tablas. Un ejemplo sería este código para generar los números impares, donde indicamos también que se guarden hasta los 5 próximos valores en memoria CACHE (para mejor rendimiento) y que NO se generen números cuando se alcance el máximo o mínimo de la secuencia (NO CYCLE):
Ahora usemos dicha secuencia para insertar un registro en nuestra tabla Empleado, aprendiendo ya de paso cómo rellenar con '0's a la izquierda el número de empleado haciendo uso de la función LPAD, y de longitud '5'. Sí, tal y como puedes imaginar, existe la función RPAD que hace exactamente lo mismo pero rellenando la cadena a la derecha con el carácter pasado como parámetro. El "truco" está en usar la sintaxis "NEXT VALUE FOR [nombresecuencia]"

 Ahora insertemos un par de registros más en la tabla Empleado:


¡Detalle importante!: si por algún motivo salimos de la sesión o la cerramos tecleando TERMINATE, cuando volvamos y si intentáramos insertar un nuevo registro hay que tener en cuenta que la secuencia NO CONTINUARÁ EXACTAMENTE POR DONDE SE QUEDÓ EN LA TABLA, sino por donde se quedó en memoria caché. Es decir, como definimos la secuencia con 5 valores en caché, cuando insertemos un nuevo registro tomará el CONTADOR SIGUIENTE DE LA SECUENCIA al último previamente guardado en la caché, en este caso "11".


De todos modos siempre podremos alterar el índice de la secuencia si fuera necesario, usando ALTER SEQUENCE [nombresecuencia] RESTART WITH [siguientevalor]. Vamos a suponer que queremos insertar un registro que sea el empleado número exactamente "21":

Ahora vamos a crear un par de nuevas tablas, para almacenar, en una los empleos que han tenido los trabajadores y en la otra tabla el historial de dichos empleos, asociados a algún departamento. Empecemos por la primera (tabla "Job"), y de paso vamos a aprender cómo importar datos de un fichero directamente a nuestras tablas DB2. La sentencia para ello es simple: IMPORT FROM [fichero texto] OF DEL INSERT INTO [nombre tabla]
Creamos un simple fichero CSV con los registros que queremos insertar, y lo llamaremos "jobfile" por ejemplo. Cada línea tendrá los valores separados por coma. En mi caso he creado también una subcarpeta FICHEROS dentro de C:\DB2 y es ahí donde almacenaré este tipo de ficheros. El contenido de dicho fichero CSV podría ser similar a esto:


Vamos ahora con la última tabla, la del historial de empleos. Aquí vamos a introducir los nuevos conceptos de clave primaria asociada a varios campos a la vez y cómo se referencian (REFERENCES) las claves externas a otras tablas y sus campos correspondientes.


Y ahora probemos a forzar algunos de los CONSTRAINT de la tabla y veremos que sólo cuando introducimos datos "válidos" el registro podrá ser insertado. En el primer intento, no existe el JobCode "AAAA", aunque sí por ejemplo el empleado "00001" y el resto de campos son correctos, a pesar de ello da error por FOREIGN KEY. Finalmente insertamos por ejemplo a "John Smith" como VP, con un salario de 50000 a fecha 31-12-2000 aunque no está asociado a ningún departamento, y ya parece que la cosa va bien, como podemos ver más abajo:

No hay comentarios :

Publicar un comentario

Buscar en el Blog: