Una vez realizado el diseño de la base de datos y obtenido el modelo relacional, ha llegado el momento de implementarlo (programarlo) en un manejador de base de datos específico. Para realizar esto, será necesario determinar cuál nos conviene. Hoy en día existe una gran variedad de ellos, desde los que cuentan con licencia de uso comercial, hasta los basados en la postura del software libre.
Algunos de los aspectos relevantes para la selección son: el volumen de información que pueden almacenar (generalmente medido en megabytes o terabytes); el número de usuarios que pueden acceder al mismo tiempo; sus ventajas en el manejo de transacciones; su velocidad de respuesta a un número considerable de transacciones; y sus características para imponer seguridad a los datos.
La programación en una base de datos relacional se realiza con el lenguaje SQL; éste es un lenguaje estándar y, si bien hay diferencias de programación entre los distintos manejadores de bases de datos, los comandos más utilizados, generalmente son los mismos.
Posteriormente, podrás realizar tres actividades de aprendizaje y una autoevaluación para verificar tus conocimientos adquiridos; además, si lo crees necesario, puedes revisar nuevamente el contenido y realizar las actividades para obtener un mejor desempeño.
Base de datos, tabla
El diseñador de bases de datos entrega el modelo lógico de tablas al implementador, o programador de bases datos, para que construya la base de datos en el sistema manejador. Sus principales roles o actividades son:
Esquema de las seis principales actividades de un implementador de una base de datos.
A continuación, revisarás a detalle cada una de dichas actividades.
Las tablas son un conjunto de filas y columnas que nos permiten almacenar los datos bajo el enfoque de un modelo relacional. Como sabes, el término tabla se conoce de manera formal como relación, al renglón como tupla y a la columna como atributo. Son en éstas donde almacenamos los datos mediante instrucciones en DML (Lenguaje de Manipulación de Datos).
Cutro, A. (s. f.). Modelo de base de datos relacional [tabla].
Tomada de http://www.dataprix.com/263-bases-datos-relacional
Para crear una tabla utilizamos el comando CREATE TABLE, con la siguiente sintaxis general:
Para ejemplificar la manera de crear una tabla veamos un ejemplo.
Pensemos que deseamos crear la siguiente tabla.
Ejemplo de tabla para crearse usando SQL.
Siguiendo la plantilla de sintaxis expuesta arriba, podemos crear la tabla de la siguiente manera:
La integridad de una base de datos se establece con restricciones, en inglés constraints. Ponemos restricciones en las columnas de una tabla para que acepten o rechacen ciertos valores. Con ello, evitamos que los datos ingresados a la base sean incorrectos o inapropiados.
La siguiente lista incluye posibles restricciones de una columna y la descripción de los valores que acepta o rechaza.
Restricciones de una columna
En seguida puedes ver el código completo para crear una tabla con todos los tipos de constraints.
Los índices permiten incrementar el rendimiento de la base de datos haciendo más rápida la ejecución de consultas. En otras palabras, una cláusula SELECT con WHERE encontraría más rápido los registros que cumplen la condición.
Se hacen sobre una o más columnas de una tabla. Es importante resaltar que debemos poner índices sólo en columnas usadas frecuentemente en nuestras expresiones de comparación con la cláusula WHERE.
Cutro, A. (s. f.). Modelo de base de datos relacional [tabla].
Tomada de http://www.dataprix.com/263-bases-datos-relacional
Los índices de tablas asociados a campos de tipo numérico y carácter pueden ser compuestos en virtud de que se pueden vincular dos campos para formar un solo índice, por ejemplo, en la tabla “Producto” y los atributos Cod_Prod y Suc_Prod, se pueden combinar para formar el índice compuesto “Pedido”. El comando sería el siguiente:
Una vista es un objeto de la base de datos que almacena una consulta. Funciona como una tabla, pero no existe físicamente en la base de datos; se genera de forma dinámica. Una vista nos permite encapsular consultas que utilizamos de forma recurrente, nos evita escribirlas de nuevo. También nos ayuda a manipular consultas muy complejas de una forma más sencilla.
La instrucción SQL para consultar datos es SELECT. La sintaxis básica general de esta instrucción es:
A partir de este tipo de consultas se crean las vistas con el comando CREATE VIEW, de la siguiente forma:
Veamos algunos ejemplos de vistas creadas a partir de diversas consultas.
Esquema mostrando tres ejemplos de vistas creadas a partir de consultas diversas.
Recuperar registros de una sola tabla es muy inusual. En la realidad siempre obtenemos datos de diferentes tablas, a veces de muchas. Es importante, entonces, conocer la manera de “unirlas” para poder obtener valores almacenados en columnas de unas y de otras. Esto lo realizamos con la operación relacional llamada junta o join. Existen varios tipos de join, entre ellos podemos mencionar:
SEl resultado es un producto cartesiano, es decir, una combinación de todos los valores de una tabla contra todos los valores de otra tabla.
El resultado es un conjunto de registros que resultan de la combinación de dos o más tablas, siempre y cuando existan columnas en común y los valores de dichas columnas coincidan. Este join necesita de una cláusula ON que iguale las columnas en común.
El resultado es un inner join que además incluye aquellos valores donde no hay coincidencia en el origen del lado izquierdo (LEFT OUTER JOIN) o del lado derecho (RIGHT OUTER JOIN), o aquellos que no coinciden en ningún lado (FULL OUTER JOIN).
A continuación, un ejemplo de consulta de dos tablas.
El resultado de este join no incluiría los libros sin autor, en caso de que no haya coincidencia entre las claves idautor de las dos tablas. Esto sucede porque el inner join rescata sólo aquellos que cumplen la condición de igualdad entre columnas en común. Si quisiéramos rescatar los libros que sí tienen autor y los que no tienen, deberíamos utilizar un outer join.
Se trata de un left outer join, porque la tabla libro está a la izquierda del join. Si lo que quisiéramos fuera todos los autores con y sin libro asociado, entonces tendríamos que programar un right outer join.
Un procedimiento almacenado (stored procedure) es un conjunto de instrucciones en un lenguaje de programación que se almacena como un objeto de la base de datos, y puede ser ejecutado en cualquier momento. Por lo general, estos procedimientos almacenados están escritos en un lenguaje peculiar que combina un lenguaje procedimental (procedural) con el SQL.
Este lenguaje se vuelve bastante poderoso, en tanto que une declaración de variables, manejo de excepciones, expresión de ciclos y condicionales con las capacidades del SQL. Todos los manejadores de bases de datos incluyen un lenguaje de este tipo, por ejemplo: Oracle tiene el pl/sql, elPostgreSQL el pl/pgsql y SQL Server cuenta con el Transact-sql.
Hay tres tipos de procedimientos almacenados. Los procedimientos como tales, que no regresan valor; las funciones, que sí regresan algún valor; y los triggers, se ejecutan automáticamente cuando se actualiza la tabla a la que están vinculados.
Esquema mostrando los tres tipos de procedimientos almacenados.
La programación de procedimientos almacenados varía de manejador en manejador. Además, es muy importante, ya que nos permite encapsular la lógica del procesamiento de datos al interior de la base de datos. Este hecho es una ventaja en comparación con programar el procesamiento de datos en los programas de aplicación, ya que los stored procedures se ejecutan más rápido y están precompilados y probados desde antes.
Es posible programar dentro de la base de datos, desde cálculos completos de impuestos y procesamientos estadísticos hasta modificaciones complejas de datos.
Un trigger ejecuta un determinado procedimiento almacenado en la base de datos, cuando se realiza cualquier modificación en una tabla. Un trigger es una función que se “dispara” antes o después de la instrucción que actualiza la tabla a la que está asociado. Son usados para implementar reglas de integridad de datos, auditoría de tablas importantes y actividades de mantenimiento de datos.
Para crear un trigger debemos usar la siguiente sintaxis general:
La siguiente lista incluye posibles restricciones de una columna y la descripción de los valores que acepta o rechaza.
Restricciones de una columna
Las opciones de BEFORE o AFTER permiten definir si el trigger se ejecutará antes o después de un evento INSERT, DELETE o UPDATE. La cláusula FOR EACH ROW indica que el procedimiento que dispara el trigger será ejecutado por cada renglón actualizado por el evento INSERT, DELETE o UPDATE. Si, por el contrario, se indica FOR EACH STATEMENT, el procedimiento será disparado una sola vez.
Podemos crear un trigger para los siguientes casos.
Después de borrar o actualizar en la tabla ventas, actualizar en la tabla venta total el total de venta.
Después de modificar, eliminar o actualizar la tabla venta, registrar en la tabla venta bitácora el usuario que modificó la venta y la hora de modificación.
Antes de actualizar o eliminar en la tabla cliente, revisar si el cliente no tiene registros en la tabla clientes_morosos, en caso de tener registros detener la actualización.
Actividad 1. Actividades que el implementador de una BD debe realizar
Posterior al diseño de la base de datos inicia la construcción de la misma, la cual conlleva varias actividades que debe realizar el implementador de bases de datos.
Por ello, en la siguiente actividad, deberás relacionar dichas actividades, con sus descripciones correspondientes, para que sepas cómo construir una base de datos.
Actividad 2. Conceptos a conocer antes de construir una BD
La construcción de una base datos es la fase posterior al diseño de la misma; existen sintaxis y comandos que debes conocer perfectamente, antes de su construcción. ¿Eres capaz de identificarlos?
Actividad 3. Construyendo una base de datos
Ahora que has identificado las actividades que debe desarrollar un implementador de una BD, así como las sintaxis y comandos para su posterior construcción, es momento que, a través de un caso hipotético, construyas una base de datos.
Autoevaluación. Construcción de una base de datos
Como revisaste en este tema, la construcción de una base de datos implica la realización de varias tareas y la identificación de varios conceptos, como crear las tablas utilizando SQL, realizar vistas, y construir procedimientos almacenados, como triggers.
Así entonces, es necesario que verifiques si te has apropiado de estos conocimientos. Para ello, elige si las siguientes descripciones forman parte o no de las tareas y conceptos primordiales para construir una base de datos.