Modelo relacional

ÍNDICE ÍNDICE _______________________________________________________________ I INTRODUCCIÓN ___________________________

Views 178 Downloads 1 File size 208KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

ÍNDICE ÍNDICE _______________________________________________________________ I INTRODUCCIÓN _____________________________________________________ 2 MODELO RELACIONAL __________________________________________________ 3 TÉRMINOS BÁSICOS ____________________________________________________ 3 CLAVES _____________________________________________________________ 5 TIPOS DE CLAVE ______________________________________________________ 7 EL VALOR NULO _______________________________________________________ 8 CLAVES FORÁNEAS ____________________________________________________ 8 RESTRICCIONES DE INTEGRIDAD _________________________________________ 10 ACTUALIZACIÓN DE RELACIONES_________________________________________ 11 OPERACIÓN INSERTAR _________________________________________________ 12 OPERACIÓN ELIMINAR _________________________________________________ 13 OPERACIÓN MODIFICAR ________________________________________________ 14 ÁLGEBRA RELACIONAL ________________________________________________ 15 LA OPERACIÓN SELECCIÓN ______________________________________________ 16 LA OPERACIÓN PROYECCIÓN ____________________________________________ 17 LA OPERACIÓN PRODUCTO CARTESIANO ___________________________________ 18 LA OPERACIÓN REUNIÓN _______________________________________________ 20 OPERACIONES BÁSICAS DE LA TEORÍA DE CONJUNTOS _________________________ 22

2

CAPÍTULO I

Introducción El Structured Query Language, conocido como SQL es el lenguaje estándar utilizado para interactuar con sistemas de bases de datos relacionales. El SQL fue desarrollado por IBM en la década de 1970 con la finalidad de implantar1 el modelo de manejo y almacenamiento de grandes bancos de datos desarrollado años antes por E. F. Codd. El SQL está conformado por un amplio espectro de comandos y está diseñado para manejar datos almacenados en las tablas de una base de datos. Debido a su configuración, se dice que es un lenguaje no-procedimental ya que el usuario sólo especifica los datos que deben extraerse pero no la manera en la cual deben ser manipulados. Este lenguaje posee dos clasificaciones. Una de ellas es el DDL2 donde el usuario define los datos que van a manipularse. La otra clasificación es la DML, donde el usuario manipula los datos que están almacenados.

La mayoría de los fabricantes de gestores de bases de datos soportan SQL como su principal lenguaje de consulta. Aunque hay especificaciones ANSI que definen el estándar del SQL, muchos fabricantes agregan extensiones propias; por este motivo se han definido tres niveles de compatibilidad con los estándares ANSI. El primer nivel se denomina de entrada, donde las instrucciones SQL implantadas por el fabricante poseen compatibilidad mínima con el estándar. El segundo nivel es el intermedio, donde el fabricante agrega extensiones propias en el lenguaje

1 Conversando con muchas personas, hemos discutido sobre la conveniencia de utilizar el vocablo “implantar” sobre el vocablo “implementar”. La Real Academia Española de la Lengua (RAE) define implantar como “Establecer y poner en ejecución nuevas doctrinas, instituciones, prácticas o costumbres”. Por otro lado, la misma RAE define implementar como “Poner en funcionamiento, aplica métodos, medidas, etc. para llevar a cabo algo”. En el contexto de este párrafo, Codd implantó el modelo relacional mas no lo implementó ya que para entonces el modelo era una innovación. 2 DDL: Abreviatura de la definición inglesa Data Definition Language. Los DDL se utilizan para la creación de los objetos que posteriormente almacenarán la data. También se utilizan para la creación de estructuras más complejas como los índices y vistas, a los cuales se les dará un tratamiento más profundo posteriormente. DML: Abreviatura de la definición inglesa Data Manipulation Language. Los DML abarcan todas las instrucciones que sirven para procesar los datos, o lo que es lo mismo consultar, modificar, agregar y eliminar.

3 y finalmente el nivel completo, donde se involucran todas las instrucciones definidas por el estándar.

Modelo Relacional El modelo relacional propuesto por E. F. Codd entre 1969 y 1979 introdujo cambios importantes en la manera en la que estaban concebidas las bases de datos. Esta propuesta causó revuelo en el momento y treinta años después es el pilar de la mayoría de los gestores de bases de datos existentes.

La primera de las publicaciones que mencionaba esta nueva metodología de trabajo hizo su aparición en 1969 y presentó el título “Derivability, Redundancy, and Consistency of Relations stored in Large Datos Banks”. Este documento era parte de las publicaciones privadas de IBM, por lo cual no tuvo mayor diseminación en el mundo de la informática. Un año después, este artículo recibe un tratamiento más profundo y es publicado en la revista “Communications of the ACM”. Esto originó un gran revuelo en la comunidad académica y provocó un giro sin precedentes en el estudio de las bases de datos.

El modelo relacional garantiza amplia robustez y la presencia de predicados que facilitan tareas de uso cotidiano en grandes bancos de datos, tales como la exclusión de elementos, unión de conjuntos y relación entre entidades. Tres décadas después, los gestores de bases de datos relacionales se basan en este modelo y aunque han aparecido nuevas metodologías de diseño, la propuesta de Codd subyace aún como soporte de datos en las aplicaciones de manejo masivo de datos.

Términos básicos El modelo relacional representa a las bases de datos como una agrupación de relaciones. En términos menos formales, cada relación es similar a una tabla, o, en el peor de los casos a un archivo independiente.

Si se visualiza una relación como una tabla, cada fila de la misma representa combinaciones de datos relacionados entre sí; los cuales pueden interpretarse como hechos que describen una

4 entidad o un vínculo entre entidades del mundo real. Estos datos relacionados entre sí están definidos en forma de columnas. En términos del modelo relacional una fila es denominada tupla, una cabecera de columna es un atributo y la tabla es una relación. El tipo de datos que describe los valores que una columna puede almacenar se denomina dominio. Seguidamente se describen cada uno de estos términos con mayor detalle. •

Dominio: Es el rango de valores a los cuales está limitado un objeto. Se puede decir, por ejemplo, que el dominio de una variable numérica de 8 bits está comprendido por los números entre 0 y 2553. Ejemplos de dominio son: caracteres, números con punto flotante, números enteros o valores lógicos. Se dice que cada dominio es atómico, lo que significa que cada uno de éstos es indivisible en lo concerniente al modelo relacional.



Atributos: Los atributos son aquellos objetos que pueden almacenar los valores restringidos por un dominio, es decir, pertenece exclusivamente a un dominio particular. Ejemplos de atributos son: fecha, nombre y talla.; un atributo, desde el punto de vista relacional no es un ente aislado sino que debe estar conectado a una entidad.

Los

atributos también son conocidos como columnas. •

Relación: Es una correspondencia entre un grupo de atributos. Por ejemplo, la siguiente relación se define como persona(nombre, apellido, fecha de nacimiento) e indica una correspondencia entre dichos atributos. Cuando existen varias relaciones, esto se denomina conjunto de relaciones, cada una de las cuales deben poseer nombres únicos que las identifiquen.



Grado de una relación:4 Una relación posee un grado que la representa y éste no es más que la cantidad de atributos existentes en la relación.

En este caso, la relación

persona(nombre, apellido, fecha de nacimiento) es de grado 3. •

Tuplas: De ellas se habló anteriormente y son la serie de registros que se almacenan en las relaciones. Ejemplo de tupla es: Olinto – 41 – Maracaibo, que indica que la persona Olinto calza número 41 y vive en Maracaibo, aunque también puede significar que Olinto vive en el apartamento 41 del edificio Maracaibo.

Claramente, la

interpretación de las tuplas es definida por el diseñador de la base de datos.

3 Se supone que la variable no acepta valores negativos. En caso contrario, el dominio varía. 4 Muchos autores denominan al “grado de una relación” como “cabecera”.

5

Desde el punto de vista formal, puede definirse una relación de la siguiente manera: Una relación sobre un conjunto de dominios D1, D2, D3,... ,Dn (no necesariamente todos distintos) es un par ordenado (cabecera, cuerpo) donde: •

La cabecera está formada por un conjunto fijo de atributos, o en términos más precisos, de pares atributo-dominio {(A1,D1), (A2,D2), ..., (An,Dn)} tales que cada atributo Aj corresponde a uno y sólo uno de los dominios subyacentes Dj (j = 1, 2, ...,n).



El cuerpo está formado por un conjunto de tuplas, el cual varía con el tiempo. Cada tupla está formada por un conjunto de pares atributo-valor {(A1, vi1), (A2, vi2), ..., (An, vin)} (i = 1, 2, ..., m), donde m es el número de tuplas del conjunto). En cada tupla hay un par atributo-valor para cada atributo Aj de la cabecera. Para cada par atributo-valor(Aj ; vij), vij es un valor del dominio único Dj asociado al atributo Aj.



Los valores m y n reciben el nombre de cardinalidad y grado.

Finalmente, una base de datos relacional estaría incompleta sin la existencia de un lenguaje que permita tanto la definición de datos como la manipulación de éstos. En los documentos originales del modelo de datos relacional, se especifica que este lenguaje debe permitir tanto el manejo de conjuntos de tuplas como la manipulación de relaciones entre las entidades. Este lenguaje de manipulación de datos perdura en la actualidad, incrustado en varios lenguajes comerciales, como el SQL.

Claves Una clave es una combinación de uno o varios atributos que identifica sin ambigüedades los registros de una tabla. Dado que en una base de datos relacional no existe el concepto de orden ni posición de registros, no es posible acceder a éstos por medio de su ubicación física; por lo tanto es necesario poseer algún método de localización para los mismos.

Es recomendable que una clave sea simple o dicho de otra manera, que los atributos de una clave sean de longitud mínima.

Desde el punto de vista computacional, la comparación y

almacenamiento de números es más eficiente que la de caracteres, por lo tanto la búsqueda de registros cuya clave sea compuesta por atributos numéricos es más veloz que aquella que se ejecuta cuando los atributos de la clave sean de tipo alfanumérico. Así, es deseable que los

6 atributos de una clave sean numéricos, aunque en ciertos casos, la presencia de claves con atributos tipo alfanumérico es inevitable.

Adicionalmente, es recomendable que una clave posea las siguientes características: •

Minimalismo5: Esto ocurre cuando la clave posee la cantidad mínima de atributos necesaria. Todos aquellos atributos que sobran, o que no aportan una identificación de registros sin ambigüedades deben ser excluidos de la clave. Con esto no se quiere decir que las claves deben estar conformadas exclusivamente por un atributo, sino que deben poseer la menor cantidad posible de éstos. Desde el punto de vista del desempeño en búsquedas, esto tiene una ventaja: mientras más atributos existan en una clave, se necesita realizar comparaciones con mayor cantidad de caracteres. La consecuencia de esto: búsquedas lentas. Por definición, una clave debe poseer atributos no redundantes, es decir, una clave debe ser irreducible. Una clave irreducible es aquella que al quitarle cualquiera de los atributos que la conforman, pierde su propiedad de identificar registros sin ambigüedad.



Estabilidad: Los atributos que conforman las claves no deben cambiar sus valores constantemente. Considérese por ejemplo el caso en el que un registro de una tabla A está relacionado con 10.000 registros de una tabla B. Si estos valores de la clave en A cambian constantemente, se deben hacer cambios en los 10.000 registros de la tabla B. Si bien un gestor de bases de datos puede ejecutar esta labor de manera eficiente, en aquellos sistemas donde trabajan usuarios concurrentes los tiempos de respuesta pueden ser prohibitivos.



Familiaridad: Las claves deben poseer atributos que tengan sentido para los usuarios. Considérese por ejemplo la identificación de automóviles. Es sabido que existen varios atributos que tomados en forma independiente identifican un registro de otros. Estos atributos pueden ser: número de matrícula, serial del motor y serial de carrocería, los cuales tomados en forma independiente identifican sin ambigüedad a los registros. Aunque esto es cierto, para un usuario es más sencillo recordar la matrícula de un automóvil (En el caso de Venezuela 6 caracteres y números combinados) que el serial del motor o de la carrocería (por lo menos 15 caracteres y números).

La Real Academia Española define minimalismo como “Corriente artística que utiliza elementos mínimos y básicos”. Aunque aquí no se refiere a ninguna corriente del arte en particular, se toma prestado este término para indicar que una clave debe poseer la menor cantidad posible de atributos.

5

7

Muchas veces no es posible cumplir simultáneamente con todas estas características, por lo tanto la selección de los atributos que conforman la clave dependerá de la situación planteada.

Tipos de Clave •

Claves candidatas: Conjunto de atributos que identifican sin ambigüedad los registros de una tabla.

En el caso de la identificación de automóviles se poseen tres claves

candidatas: número de matrícula, serial de motor y serial de carrocería. Una vez que se define a una de ellas como aquella que identificará a los registros, ésta se convierte en clave primaria; el resto se convierten en claves secundarias.

Ambas se definen a

seguidamente: •

Clave primaria: Es la seleccionada por el diseñador de la base de datos para identificar unívocamente los registros. Aunque en una base de datos pueden existir muchas claves primarias, sólo existe una clave primaria por tabla. Aquellos atributos que conforman la clave primaria reciben el nombre de atributos primos, a diferencia de los atributos noprimos, que son aquellos que no forman parte de la clave primaria.



Claves secundarias: Son conjuntos de atributos que identifican unívocamente los registros, pero que no son seleccionados como claves primarias.

Las claves, a su vez, pueden subdividirse en simples y compuestas. Una clave es simple cuando posee exactamente un atributo.

Claramente una clave simple cumple con la condición de

minimalismo. Adicionalmente, una clave se dice compuesta cuando está conformada por más de un atributo. En ocasiones una clave compuesta puede estar conformada por una cantidad de atributos mayor a la que realmente necesita. Cuando esto ocurre, la clave compuesta se denomina súper clave.

Muchas veces una tabla no posee claves, por lo tanto es necesario crear una clave para identificar las tuplas sin ambigüedad. Un típico caso de esto lo conforman los sistemas de transacciones bancarias. Supóngase que existe una tabla denominada transacción que posee los atributos (hora, fecha, cuenta, monto). Claramente ninguna combinación de atributos proporciona unicidad a los registros.

En este caso, se adiciona un campo denominado número de

transacción que se incrementa en la medida en que se van agregando registros en la tabla;

8 claramente, todos los registros pueden identificarse sin mayores problemas. Una clave artificial se dice que es completamente estable.

El valor nulo El valor nulo es un valor soportado por el modelo relacional. Cuando se dice que un valor es “nulo” se refiere a que dicha información es desconocida.

Existen ciertas características especiales del valor nulo. Éstas se explican seguidamente: •

El valor nulo no es un tipo de datos especial, sino que es un valor que puede ser almacenado en primera instancia por cualquier atributo existente en el modelo relacional. Se destaca la expresión primera instancia ya que bajo ciertas condiciones, que se expondrán posteriormente, ciertos atributos deben ser definidos de manera que no puedan aceptar dicho valor.



El valor nulo no es igual ni distinto a cualquier otro valor, incluso a sí mismo. De esta manera, comparar un valor cualquiera con un valor nulo trae como resultado una respuesta indefinida.



Las operaciones que se ejecuten sobre un valor nulo, traen como resultado valores nulos, así, para efectuar cálculos u operaciones con valores nulos, debe proveerse de funciones o transformaciones que conviertan los valores nulos a valores manipulables.



El valor nulo no es igual a cero o caracteres en blanco. El cero y los caracteres en blanco tienen valores definidos. El valor nulo, no.

Muchos autores denominan NULL a los valores nulos.

De ahora en adelante se utilizará

cualquiera de los dos términos indistintamente.

Claves foráneas Sean R y S dos relaciones. Un conjunto de atributos V es una clave foránea de S si: •

Los atributos en V poseen el mismo dominio de los atributos primos de otra relación R.



Los valores de todos los atributos en V son iguales a los valores de los atributos primos de exactamente una tupla en R.

9 •

Si la condición anterior no se cumple, entonces los atributos de V en a son nulos.

Un ejemplo de esto se muestra seguidamente:

Departamento

Empleado

Número

Descripción

1

Informática

2

Inventario

3

Mercadeo

Carné

Nombre

Departamento

001

María

1

002

Juan

1

003

Alonso

2

004

Mónica

2

005

Andrés

nulo

En este caso, el atributo departamento de la relación empleado, es foránea en empleado con respecto a departamento ya que: •

Todos los valores distintos de nulo existentes en el atributo departamento en las tuplas de empleado existen en el atributo número de las tuplas de departamento.



El tipo de datos del atributo departamento de empleado es igual al tipo de datos del atributo número de la relación departamento.



El único valor que no existe en el atributo departamento de la relación empleado es un valor nulo. Esto puede indicar que aquellos empleados en cuyo atributo departamento posea valores nulos, no están asignados a un departamento particular.

Por todo lo anteriormente dicho, el atributo departamento de la relación empleado es foráneo en empleado.

10

Restricciones de integridad

Para cada conjunto de relaciones del modelo relacional deben cumplirse ciertas normas que garanticen consistencia entre los datos que se manipulan.

En los conceptos previamente descritos se han mencionado algunos criterios que deben existir en el modelo de datos relacional, sin embargo, no se les ha dado el tratamiento formal que merecen.

Seguidamente se exponen las distintas restricciones de integridad inherentes a dicho modelo: •

Restricciones de dominio: Éstas indican que el valor de cada atributo debe ser un valor del dominio de dicho atributo o dicho en otras palabras: un atributo sólo debe aceptar el tipo de valores permisibles por su dominio. Esto significa que si un atributo se ha definido para soportar valores numéricos, éste no puede aceptar valores alfanuméricos. De igual manera, si un atributo se ha definido para aceptar valores enteros, éste no puede aceptar valores que contengan decimales.



Restricciones de clave: Todos los atributos primos deben poseer un valor no nulo, o lo que es lo mismo; no es posible almacenar un atributo primo si éste no adquiere un valor que permita distinguir una tupla de otra. De aquí se infiere que dentro del modelo relacional y de las bases de datos relacionales ningún atributo primo puede aceptar valores NULL.



Restricciones de integridad referencial: Es aquella que existe entre una relación S que mantiene claves foráneas contra una relación R. Siendo más rigurosos, la restricción de integridad referencial obliga a que una tupla existente en S tiene que referirse a una tupla existente en R. Aunque puede suponerse que el concepto de restricción de integridad referencial sólo aplica a relaciones distintas, debe indicarse que en ocasiones una relación puede poseer una clave foránea hacia sí misma.

Esto se conoce como referencia

recursiva. Continuando con el ejemplo de empleado y departamento, extenderemos la relación empleado a empleado(carné, nombre, id_departamento, supervisor); en esta relación el atributo supervisor hace referencia a la relación misma para indicar que un empleado está supervisado por otro. Claramente, este valor también puede ser

11 nulo para indicar que un empleado no tiene supervisor. Esto significa que el atributo supervisor de dicha relación es foránea para sí misma.

Consecuencia de todo lo anteriormente dicho es el hecho de que cada lenguaje de manipulación de datos debe poseer instrucciones que permitan garantizar el cumplimiento de estas restricciones de integridad. Afortunadamente esto se cumple para lenguajes de consulta como el SQL

Actualización de relaciones Las operaciones para manejar relaciones pueden dividirse en dos; aquellas que obtienen datos y aquellas que actualizan datos. Estas operaciones de actualización de datos se dividen según se especifica seguidamente: •

Operación insertar: Agrega nuevas tuplas en conjuntos de relaciones.



Operación modificar: Altera los valores almacenados en uno o varios atributos de un conjunto de relaciones.



Operación eliminar: Elimina tuplas almacenadas en conjunto de relaciones.

Todas estas operaciones deben garantizar que al ejecutarse las reglas de integridad de clave y de dominio deben ser respetadas, a fin de mantener consistencia en las relaciones. Seguidamente se muestran ejemplos donde se demuestra el uso de estas operaciones y la manera en la que éstas cumplen las restricciones de integridad.

Para continuar con esta explicación, se seguirán

utilizando las relaciones empleado y departamento, mencionadas en secciones anteriores. Así, se muestra el siguiente conjunto de tuplas asignadas a cada relación.

departamento

Dominio

id_departamento 1 2 3 4 5 9 Numérico

descripción Sistemas Administración Mantenimiento Mercadeo Criogénicos Presidencia Alfanumérico

12

empleado id_empleado 70 71 72 73 Numérico

Dominio

nombre Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel Alfanumérico

id_departamento 9 1 4 3 Numérico

supervisor NULL 70 70 70 Numérico

Operación insertar Ésta proporciona una lista de valores de atributos para una tupla t que desea agregarse a una relación R. La operación insertar puede violar cualquiera de las siguientes restricciones según se muestra a continuación: •

insertar (75, ‘Marianilca Olivares’, 10, NULL): Esta instrucción viola la integridad referencial ya que no existe ninguna tupla en departamento que posea en el atributo id_departamento el valor 10, que quiere insertarse en la relación.



insertar (70,’Guillermo Puertas’, ‘Nueve’, NULL): Esta instrucción viola la restricción de clave ya que intenta incluir un registro cuyo atributo primo posee valor 70, el cual ya existe dentro de la relación. De igual manera, viola la restricción de dominio ya que intenta asignar al atributo id_departamento un valor alfanumérico, siendo este atributo de tipo numérico.

Un ejemplo de una instrucción exitosa es la siguiente: •

insertar (75, ‘Marianilca Olivares’, 1, 70). Esta instrucción no viola ninguna relación ya que: o

El valor del atributo id_empleado es único en la relación; así se garantiza la unicidad del mismo y el respeto a la integridad de la clave. Adicionalmente se respeta la restricción de dominio ya que como se observa, el atributo id_empleado que se está insertando es numérico, que es del tipo aceptado en la definición de empleado.

13 o

El valor del atributo id_departamento, además de cumplir con las restricciones de dominio, cumple con la restricción referencial ya que existe en la relación departamento, un atributo primo con dicho valor. Este valor pertenece a la tupla (1,’Sistemas’).

o

Lo mismo ocurre con el atributo supervisor ya que hace referencia a la tupla

(70,’Oliver Rodas’,9, NULL) que existe en la misma relación.

Operación eliminar Ésta proporciona la posibilidad de eliminar un conjunto de tuplas t de una relación R. La operación eliminar puede violar la restricción de integridad referencial al tratar de borrar tuplas que sean foráneas en otras relaciones. Esto se muestra seguidamente: •

eliminar la tupla departamento con id_departamento = 1. Esta eliminación no es válida ya que intenta eliminar la tupla (1,’Sistemas’) de la relación departamento, la cual es referenciada por la tupla (71,’Orlando Quintero’,1, 70) de la relación empleado. Si la eliminación tuviera éxito, entonces la tupla existente en empleado violaría la restricción de integridad referencial ya que habría una tupla que referencia a otra que no existe.

La situación antes descrita obliga a eliminar en primera instancia a la tupla de empleado para posteriormente eliminar la tupla de departamento.

Obsérvese que necesariamente deben

eliminarse primeros todas aquellas tuplas de empleado que hagan referencia a departamento.

Para solucionar esto, el gestor de bases de datos puede brindar cualquiera de las siguientes alternativas: a) Prohibir la eliminación del registro en departamento: Ya que existen tuplas en empleado que hacen referencia a departamento, el gestor no permite la eliminación de tuplas referenciadas en dicha relación. b) Efectuar eliminaciones en forma propagada: Previo a eliminar en departamento el gestor procede a eliminar las tuplas que hacen referencia a dicha relación. Obsérvese que

14 esta eliminación propagada (o en cascada) debe ser ejecutada a todas las relaciones que hacen referencia a departamento. c) Efectuar cambios en cascada en los valores de las tablas referentes: Antes de eliminar en departamento, el gestor procede a cambiar los valores de las columnas que hacen referencia a dicha relación.. Normalmente los gestores de bases de datos asignan como valor por defecto a las relaciones foráneas el valor NULL y posteriormente procede a eliminar los valores de la tabla original. Obsérvese que al colocar estos valores NULL en los atributos correspondientes, se mantienen las restricciones de integridad. Claramente, esta modificación en cascada es permisible cuando los atributos afectados permiten valores nulos, por lo tanto, la modificación en cascada previa a una eliminación no es permisible en atributos primos ya que éstos, por definición no pueden aceptar valores nulos.

Una instrucción válida para efectuar una eliminación es la siguiente: •

eliminar la tupla departamento con id_departamento = 5. Obsérvese que no existen tuplas que hagan referencia a la tupla (5, ‘Criogénicos’), así la eliminación es válida.

Operación modificar Ésta proporciona la posibilidad de modificar los valores de los atributos de una o varias tuplas t de una relación R.

Al ejecutar la operación modificar puede violarse las restricciones de

integridad referencial o de dominio. Esto se muestra seguidamente: •

modificar

id_departamento

de

la

tupla

departamento

con

id_departamento=1 cambiándolo a 2. Esta operación viola la restricción de clave porque ya existe una tupla con id_departamento igual a 2. Si dicha instrucción se ejecutara exitosamente, entonces existirían dos tuplas en departamento con igual clave primaria. •

modificar

id_departamento

de

la

tupla

departamento

con

id_departamento=1 cambiándolo a ‘dos’. Esta operación viola la restricción de

15 dominio ya que se intenta cambiar un valor de tipo numérico por otro valor de tipo alfanumérico. •

modificar

id_departamento

de

la

tupla

departamento

con

id_departamento=1 cambiándolo a 44. Esta modificación no es válida ya que intenta cambiar la tupla (1,’Sistemas’) de la relación departamento a (44,’Sistemas’). La tupla (1,’Sistemas’) es referenciada por la tupla (71,’Orlando Quintero’,1, 70) de la relación empleado. Si la modificación se ejecutara exitosamente, entonces la tupla existente en empleado violaría la restricción de integridad referencial ya que habría una tupla que referencia a otra que no existe.

Para solucionar esta última anomalía, el gestor de bases de datos puede brindar cualquiera de las siguientes alternativas: a) Prohibir la modificación del registro en departamento: Ya que existen tuplas en empleado que hacen referencia a departamento, el gestor no permite la modificación de tuplas referenciadas en dicha relación. b) Efectuar modificaciones en cascada: El gestor procede a modificar las tuplas que hacen referencia a departamento y una vez ejecutada esta acción, procede a modificar en departamento. Obsérvese que esta eliminación en cascada debe ser ejecutada a todas las relaciones que hacen referencia a departamento.

Álgebra Relacional Las operaciones de álgebra relacional manipulan relaciones. Esto implica que estas operaciones usan una o dos relaciones existentes para crear una nueva relación. Esta nueva relación a su vez, puede utilizarse como entrada para una nueva operación. El concepto de creación de una nueva relación a partir de relaciones existentes hace mucho más fácil la solución de las consultas, debido a que se puede experimentar con soluciones parciales hasta encontrar la proposición deseada.

Existen muchas operaciones en el álgebra relacional, pero sólo se analizarán las más utilizadas. En primera instancia se analizarán las tres operaciones que han sido creadas específicamente para bases de datos relacionales, como lo son selección, proyección y reunión. Luego se darán

16 ejemplos de las operaciones de la teoría de conjuntos, como lo son unión, intersección y diferencia.

La operación selección La operación selección consiste en recuperar un conjunto de tuplas de una relación que cumplan una condición dada.

En general la operación selección se denota de la siguiente manera:

σ< condición de selección > () Donde el símbolo σ (sigma) representa el operador de selección y es una expresión lógica especificada en función de los atributos de la relación indicada en .

Para determinar aquellos empleados cuyo código sea mayor que 71, bastará con utilizar la siguiente instrucción:

σ

id_empleado > 71

( empleado)

La relación resultante de dicha expresión posee los mismos atributos que la relación especificada. La expresión lógica que sirve de filtro para las tuplas puede formarse mediante conectores lógicos para formar una condición de selección más compleja. Por ejemplo, si se desea seleccionar aquellos empleados cuyo código sea mayor que 71 y que además trabajen en el departamento 3, sólo hace falta utilizar la siguiente instrucción.

σ

id_empleado > 71 y id_departamento = 3

( empleado)

El operador selección es unario, lo que implica que no puede ser utilizado para seleccionar tuplas de más de una relación. Como se dijo anteriormente, el grado de la relación resultante es el mismo de la relación indicada en el operador selección, sin embargo, el número de tuplas seleccionadas es menor o igual al número de tuplas de la relación original.

17

La operación proyección Sirve para seleccionar un subconjunto de los atributos de una relación. Es decir, si sólo interesa trabajar con ciertos atributos de una relación, entonces debe utilizarse el operador proyección sobre dicha relación. La forma general de dicho operador es la siguiente:

П () Donde П indica el operador proyección, es un subconjunto de la relación indicada en .

Por ejemplo, si quiere obtenerse el nombre y el código del departamento de los empleados, bastará con utilizar la instrucción:

П nombre, id_departamento (empleado) El operador proyección tiene como características que tanto el grado de la relación resultante como el número de tuplas de ésta, equivalen a los de la relación utilizada en el operador. Obsérvese que este operador utiliza como parámetro de entrada una relación, así, puede aceptar como parámetro, incluso, la relación proveniente de una operación selección.

Si quiere

obtenerse el nombre y código del departamento de aquellos empleados cuyo código sea mayor a 71 y que además trabajen en el departamento 3, bastará con utilizar la siguiente instrucción:

П nombre, id_departamento (σ

id_empleado > 71 y id_departamento = 3

(empleado))

También pueden almacenarse los resultados intermedios en una variable temporal y luego ejecutar sobre ésta las operaciones adicionales. Así, las siguientes instrucciones producen el mismo resultado que la instrucción anterior.

TMP = σ

id_empleado > 71 y id_departamento = 3

П nombre, id_departamento (TMP)

(empleado)

18

La operación producto cartesiano

Previo al análisis de la operación reunión, se discutirá el producto cartesiano entre dos relaciones. Esta operación se representa como X y es binaria, ya que produce una nueva relación a partir de dos relaciones existentes. La operación producto cartesiano se denota de la siguiente manera: Χ De donde a y b son relaciones con grados ga y gb respectivamente. El resultado de esta operación trae como resultado una relación de grado ga+b. Por otro lado, la cantidad de tuplas que trae esta operación será de ta.tb, siendo ta la cantidad de tuplas en a y tb la cantidad de tuplas en b. Un ejemplo de esta operación se muestra seguidamente: σ (departamento) Χ σ (empleado) Esto trae como resultado: Deparmento. Id_departamento 1 1 1 1 2| 2| 2| 2| 3| 3| 3| 3| 4| 4| 4| 4| 5| 5| 5| 5| 9 9 9 9

Deparmento. descripción Sistemas Sistemas Sistemas Sistemas Administración Administración Administración Administración Mantenimiento Mantenimiento Mantenimiento Mantenimiento Mercado Mercado Mercado Mercado Criogénicos Criogénicos Criogénicos Criogénicos Presidencia Presidencia Presidencia Presidencia

Empleado. Id_empleado 70 71 72 73 70 71 72 73 70 71 72 73 70 71 72 73 70 71 72 73 70 71 72 73

Empleado. Nombre Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel Oliver Rodas Orlando Quintero Jean Delfín Iván Montiel

Empleado. Id_Departamento 9 1 4 3 9 1 4 3 9 1 4 3 9 1 4 3 9 1 4 3 9 1 4 3

A continuación se muestran algunas observaciones sobre dicho resultado:

Empleado. Supervisor NULL 70 70 70 NULL 70 70 70 NULL 70 70 70 NULL 70 70 70 NULL 70 70 70 NULL 70 70 70

19 •

La relación resultante es la combinación de todas las tuplas de departamento con todas las de empleado. Así, la cantidad de tuplas de la operación es de 6.4 = 24.



Puesto que la operación producto cartesiano asocia todas las tuplas de departamento con todas las tuplas de empleado, se observan tuplas sin sentido. En realidad, las únicas tuplas con sentido, son aquellas que aparecen marcadas en letra negrilla, que son aquellos casos en que coincide el número del departamento del trabajador con el número del departamento de la empresa.

De esta manera, Orlando Quintero trabaja en el

departamento de Sistemas y así sucesivamente. •

La cantidad de columnas del resultado es igual a la suma de la cantidad de columnas de las relaciones originales, por lo tanto la cantidad de columnas total es de seis.



Finalmente, para evitar ambigüedades en la notación de las columnas se coloca a cada una de ellas como prefijo el nombre de la tabla a la cual pertenece. Un detalle importante se expresa en la columna id_departamento. Ya que esta columna es común a ambas relaciones (empleado y departamento), el prefijo ayuda a determinar a cual tabla pertenece.

Una solución al problema de las tuplas sin sentido es la operación producto natural, la cual combina las tuplas de una relación con otra y devuelve como respuesta sólo aquellas tuplas que posean valores iguales en atributos con nombres iguales. La operación producto natural se denota de la siguiente manera: |Χ Χ| Un ejemplo de dicha operación se muestra seguidamente: σ (departamento) |Χ Χ| σ (empleado) Id_departamento 1 3| 4| 9

descripción Sistemas Mantenimiento Mercado Presidencia

Id_empleado 71 73 72 70

Claramente, la operación anterior es equivalente a:

Nombre Orlando Quintero Iván Montiel Jean Delfín Oliver Rodas

Supervisor 70 70 70 NULL

20 TMP = σ (departamento) Χ σ (empleado) σ

empleado.id_departamento = departamento.id_departamento

(TMP)

Así, la operación producto natural combina una operación producto cartesiano con una operación selección, sin embargo, la ventaja de utilizar el producto natural consiste en que se ocultan ciertos detalles de manejo de resultados intermedios según se observó en el último ejemplo.

Finalmente se observa que los atributos comunes a ambas relaciones aparecen

reflejados sólo una sola vez.

La operación reunión6 La operación reunión, denotada como Ф, es un producto cartesiano al cual se le agrega una condición de selección.

Esta operación que permite trabajar con vínculos entre relaciones. La

forma general de la operación reunión es la siguiente:

Ф () De donde a y b son relaciones con grados ga y gb respectivamente. El resultado de esta operación trae como resultado una relación de grado Ga+b. Por otro lado, la cantidad de tuplas que trae esta operación será de tcondición, siendo tcondición la cantidad de tuplas que cumplen con la condición de selección definida en .

Recordando los ejemplos de producto cartesiano, puede utilizarse la operación reunión para filtrar las tuplas no deseadas de la siguiente manera:

departamento Ф empleado (empleado.id_departamento = departamento.id_departamento)

6 El autor ha tratado en lo posible de escribir la mayor cantidad de términos en lengua castellana. Con respecto a las operaciones de reunión, la gran mayoría de la literatura en castellano denomina estos términos como JOIN, dado que muchos autores conservan los términos originales proveniente del idioma inglés.

21

Lo que trae como resultado la siguiente relación:

Deparmento. Id_departamento

Deparmento. descripción

1

Sistemas

3|

Mantenimiento

4|

Mercado

9

Presidencia

Empleado. Id_empleado 71 73 72 70

Empleado. Nombre Orlando Quintero Iván Montiel Jean Delfín Oliver Rodas

Empleado. Id_Departamento 1

Empleado. Supervisor 70

3

70

4 9

70 NULL

La reunión más comúnmente utilizada se vale principalmente de comparaciones de igualdad (aunque esto no es limitante). Una reunión que utilice exclusivamente igualdades al momento de comparar es denominada equireunión. Claramente al utilizar equireunión dos o más atributos de la reunión resultante van a poseer los mismos valores, tal y como se observa en el ejemplo anterior.

Las operaciones de reunión antes descritas traen como resultado tuplas que tienen tuplas coincidentes en todas las relaciones utilizadas. Así, las tuplas "sin coincidencias" son eliminadas del resultado final. Lo mismo aplica para aquellos casos donde los atributos que enlazan una relación con otra poseen atributos nulos.

Supóngase que se desea mostrar los departamentos conjuntamente con los empleados que trabajan en ellos. Observando las tuplas que existen en departamento y empleado, se nota que no existen empleados que trabajen en los departamentos de Criogénicos y Administración, por lo tanto, estos departamentos no saldrán reflejados en resultado final. Afortunadamente existe un operador denominado operación de reunión externa izquierda, la cual conserva todas las tuplas de la relación de la izquierda tengan o no coincidencias en la relación de la derecha. Al momento de procesar aquellas tuplas de la izquierda que no posean relaciones, simplemente, rellena los atributos de la derecha con valores nulos.

22

A continuación se entrega un ejemplo de dicho operador:

departamento ← empleado (empleado.id_departamento = departamento.id_departamento) Deparmento. Id_departamento

Deparmento. descripción

1

Sistemas

2

Administración

3|

Mantenimiento

4| 5

Mercado Criogénicos

9

Presidencia

Empleado. Id_empleado 71 NULL 73 72 NULL 70

Empleado. Nombre Orlando Quintero NULL Iván Montiel Jean Delfín NULL Oliver Rodas

Empleado. Id_Departamento 1

Empleado. Supervisor 70

NULL 3

NULL 70

4 NULL 9

70 NULL NULL

Existe también una operación denominada reunión de externa derecha, denotada → que como el lector supondrá, conserva las tuplas de la relación de la derecha estén vinculadas o no con la de la izquierda. Adicionalmente existe otra operación de reunión denominada externa completa, denotada como ↔ y que conserva las tuplas de ambas relaciones estén o no vinculadas, completando el resultado final con valores nulos cuando esto último ocurra.

Operaciones básicas de la teoría de conjuntos Las siguientes operaciones del álgebra relacional son afines a las operaciones matemáticas de la teoría de conjuntos. Su aplicabilidad en el modelo relacional se basa en que las relaciones existentes en el mismo son básicamente conjuntos de tuplas.

Las operaciones a continuación descritas son binarias ya que producen un nuevo conjunto a partir de dos conjuntos existentes. Previo a continuar con la descripción de dichas relaciones deben definirse algunas de las propiedades de las relaciones involucradas en el uso de dichas operaciones: •

Se dice que dos relaciones R y S son compatibles para la si poseen el mismo grado y además, el dominio de los atributos Ri y Si son iguales para cualquier par tomado de ambas relaciones. Dicho de otra manera, dos relaciones son compatibles si éstas poseen

23 un mismo número de atributos y cada par de atributos correspondientes tienen el mismo dominio. Dicho esto, pueden definirse tres operaciones para dos relaciones compatibles R y S de la siguiente manera: •

Unión: El resultado de esta operación, denotada como R U S consiste en una relación que incluye todas las tuplas de R y todas las de S. Si existen tuplas repetidas en ambas relaciones, sólo se incluyen una sola vez.



Intersección: El resultado de esta operación que se denota como R ∩ S, incluye las tuplas comunes R y S, o dicho de otra manera, incluye las tuplas que están tanto en R como en S. Las tuplas resultantes sólo se incluyen una vez en el resultado final.



Diferencia: El resultado de esta operación, definida como R – S, devuelve todas las tuplas que están en R pero no en S.

Seguidamente se muestran ejemplos de cada una de dichas operaciones. Para estos ejemplos se utilizarán las siguientes relaciones:

Analista



Programador

Nombre

Carné

Nombre

Carné

Vladimir Aldana

VA4456

Marianilca Olivares

MO2345

James Bravo

JB5678

Milena Herrera

MH0123

Esteban Núñez

EN9876

Vladimir Aldana

VA4456

William Ruiz

WR5643

James Bravo

JB5678

Dayana Acosta

DA1234

Esteban Nuñez

EN9876

Lilibeth Da Silva

LD1122

William Ruiz

WR5643

Al efectuar la operación unión entre analista y programador, el resultado es el siguiente:

24 Nombre

Carné

Vladimir Aldana

VA4456

James Bravo

JB5678

Esteban Núñez

EN9876

William Ruiz

WR5643

Dayana Acosta

DA1234

Lilibeth Da Silva

LD1122

Marianilca Olivares

MO2345

Milena Herrera

MH0123

Obsérvese que los registros comunes sólo aparecen una sola vez. •

Al efectuar la operación intersección entre las mismas relaciones, se obtiene el siguiente resultado:



Nombre

Carné

Vladimir Aldana

VA4456

James Bravo

JB5678

Esteban Nuñez

EN9876

William Ruiz

WR5643

Al efectuar la operación diferencia entre analista y programador, el resultado es el siguiente:

Nombre

Carné

Dayana Acosta

DA1234

Lilibeth Da Silva

LD1122

Una de las propiedades interesantes de estas operaciones es que la unión e intersección son conmutativas, sin embargo la operación diferencia no lo es.

Al hacer la diferencia entre

programador y analista (observe que el ejemplo anterior fue la diferencia entre analista y programador), el resultado es el siguiente:

25 Nombre

Carné

Esteban Nuñez

EN9876

William Ruiz

WR5643

De aquí se observa que la operación diferencia no es conmutativa.