Sistemas de Bases de Datos BASES DE DATOS I ISI0514 CUADERNO DOCENTE Contenido: Fundamentos Profesor: de Bases de Datos Oswaldo MERCHAN Marzo/2004 ISI0514 Fundamentos de Bases de Datos Página 1 de 120 Sistemas de Bases de Datos INTRODUCCIÓN El presente documento recopila información de las obras bibliográficas especializadas en los fundamentos de Bases de Datos, incluye además ejemplos prácticos que se encuentran desarrollados para que puedan ser revisados y analizados por el alumno. Los resúmenes y extractos obtenidos, han sido organizados para que el documento sirva como guía para los estudiantes que cursan la materia de Bases de Datos El capítulo 1 presenta en forma general las características de un sistema de Bases de Datos, sus componentes y ventajas en comparación con los sistemas tradicionales orientados a procesos. En el capítulo 2 se describe el modelo entidad - relación que se emplea para interpretar, especificar y documentar los requerimientos para sistemas de procesamiento de Bases de Datos, siendo muy útil este modelo para el diseño que parte de lo general a lo particular. El capítulo 3 presenta lo principios del Modelo Relacional y los aspectos de los fundamentos matemáticos (Álgebra Relacional) El objetivo del capítulo 4 es el de presentar de manera práctica los conceptos del lenguaje SQL. Se describe el manejo de datos que se realiza mediante las instrucciones de consulta, inserción, actualización y eliminación; comprende también la teoría de la integridad de datos. Al final del capítulo se incluye una serie de ejemplos de consultas a las tablas generadas en el capítulos 2. En el capítulo 5 se expone un tema que complementa al modelo relacional, la teoría de Normalización, metodología que es empleada para validar la adecuada construcción de una relación. Se incluyen los conceptos necesarios de Dependencias Funcionales que servirá para definir las Formas Normales ISI0514 Fundamentos de Bases de Datos Página 2 de 120 Sistemas de Bases de Datos CAPITULO 1 SISTEMAS DE BASES DE DATOS 1.1 INTRODUCCIÓN. Un sistema de gestión de bases de datos SGBD (DBMS Data Base Management System) consiste en una colección de datos interrelacionados y un conjunto de programas para acceder a esos datos. El término bases de datos corresponde a un conjunto autodescriptivo de registros integrados. Es autodescriptivo, porque además de los datos fuentes del usuario, contiene una descripción de su propia estructura; tal descripción es conocida como diccionario de datos. La Base de Datos es un depósito único de datos para toda la organización, por lo que debe ser capaz de integrar los distintos sistemas y aplicaciones, atendiendo a las necesidades de los usuarios en los niveles: operativo, táctico y estratégico. El objetivo del SGBD es suministrar la interfaz entre el conjunto de los datos y los usuarios. El SGBD también debe proporcionar a los otros usuarios (analistas, programadores, administradores) las correspondientes herramientas que les permitan un adecuado desarrollo de sus funciones. Una Base de Datos es un conjunto de registros integrados que jerárquicamente está caracterizada de la siguiente manera: los bits conforman los bytes o caracteres; los caracteres constituyen campos; los campos integran registros y los registros componen archivos. Una base de datos contiene cuatro componentes: archivos de datos del usuario, una descripción de su propia estructura que se denomina diccionario de datos o metadatos, incluye también índices que se usan para representar las relaciones entre los datos y para mejorar el desempeño de las aplicaciones de la base de datos, y un último tipo de información o componente que se almacena en la base de datos son los metadatos de aplicación; se usan para almacenar la estructura y el formato de reportes, consultas, y otros componentes de aplicación. Bits } Bytes } Campos } Registros } Archivos } Bits } Bytes } Campos } Registros } Archivos + Metadatos + Indices + Metadatos de Aplicación Jerarquía de los elementos de datos en un sistema de procesamiento de archivos y en un sistema de bases de datos ISI0514 Fundamentos de Bases de Datos Página 3 de 120 Sistemas de Bases de Datos Los sistemas de bases de datos están diseñados para gestionar grandes bloques de información. La gestión de datos implica tanto la definición de estructuras para el almacenamiento de la información como la provisión de mecanismos para la gestión de la información. Relación entre una aplicación de base de datos y un DBMS DBMS Aplicaciones de B.D. Bases de Datos 1.2 GESTION DE LOS DATOS • Enfoque tradicional: En las primeras etapas del procesamiento de datos, las aplicaciones que se desarrollaban en las organizaciones estaban orientadas a cubrir necesidades muy específicas de procesamiento, por lo que, tanto los lenguajes de programación como las estructuras de datos se centraban en realizar de manera más eficiente una tarea específica. Los sistemas informáticos tradicionales se denominan sistemas orientados hacia procesos, debido a que en ellos se pone énfasis en los tratamientos que reciben los datos, los cuales se almacena en ficheros que son diseñados para una determinada aplicación. Mundo Real Ficheros Individuales Personal Nómina Personal Nómina Vehículos Procesos: ISI0514 Fundamentos de Bases de Datos Vehículos Página 4 de 120 Sistemas de Bases de Datos Sistema orientado a procesos: D1 F1 T1 D2 F2 T2 D3 T3 D4 F3 F6 D5 T4 F4 D6 F5 T5 D7 Datos • Archivo Tratamiento Resultados Enfoque de base de datos: Con el fin de resolver los problemas que se presentan con los sistemas informáticos tradicionales y con el objeto de lograr una gestión más racional del conjunto de datos, surge un nuevo enfoque que se apoya sobre una “Base de Datos” en la cual los datos son recogidos y almacenados, al menos lógicamente, una sola vez, con independencia de los tratamientos. Por lo tanto, en los sistemas orientados a datos el análisis comienza por formular la lógica de los datos organizacionales como un todo independiente, para después involucrarlos con los procesos que lo utilizan. Mundo Real Base de Batos Datos Procesos: Personal ISI0514 Nómina Fundamentos de Bases de Datos Vehículos Página 5 de 120 Sistemas de Bases de Datos Sistema orientado a las Bases de Datos D1 D2 Creación Depuración Recuperación D3 BD D4 Actualización D5 D6 Tratamiento Almacenamiento D7 Datos Creación y actualización Recuperación y Tratamiento 1.3 OBJETIVOS DE LOS SISTEMAS DE BASES DE DATOS Un sistema de procesamiento de archivos apoyado por un sistema operativo convencional, tiene un número de desventajas importantes que tienen que ser evitadas por un sistema de bases de datos: • Datos integrados: En un sistema de bases de datos, todos los datos de las aplicaciones se almacenan en un medio sencillo llamado Bases de Datos. Por ejemplo, en un programa de facturación, la aplicación puede acceder a los datos del cliente, los datos de proveedores o ambos. En caso de necesitar ambos datos, el programador de la aplicación sólo especifica cómo deberán combinarse los datos y el DBMS realizará las operaciones necesarias para conseguirlo. Cuando los datos se encuentran aislados, éstos están repartidos en varios archivos, y pueden tener diferentes formatos, lo que complica la creación de nuevos programas para obtener los datos apropiados. • Independencia programa / datos: Una de las principales ventajas que brinda una Base de Datos es la independencia entre los datos y los tratamientos que se hacen de ellos, a diferencia de los Sistemas Orientados a Procesos, en los cuales los datos eran sumamente dependientes de los programas. De hecho, para que un proceso pudiera utilizar un determinado dato que se encontraba almacenado en un archivo debía hacer la declaración completa de la estructura de este archivo, esta declaración era sólo modificable en tiempo de edición quedando fijada en tiempo de compilación. Un sistema de procesamiento de bases de datos hace que los programas dependan menos de los formatos de archivo. Los formatos de registro se ISI0514 Fundamentos de Bases de Datos Página 6 de 120 Sistemas de Bases de Datos almacenan en la misma base de datos y son accedidos por el DBMS y no por los programas de aplicación. La independencia de programas y datos minimiza el impacto de los cambios en el formato de los datos de los programas de aplicación. La mayoría de las veces los programas de aplicación no se enteran de que el formato de los datos ha cambiado. • Redundancia e inconsistencia de datos: En un sistema de procesamiento de archivos, éstos y los programas de aplicación son creados por diferente personal durante un período largo de tiempo, en donde, probablemente los archivos tengan diferentes formatos y puedan estar duplicados en varios sitios. Esto puede causar la redundancia de la información que aumenta los costos de almacenamiento y además puede llevar a inconsistencia de los datos, esto es, las diversas copias de los mismos datos no concuerdan entre sí. Por ejemplo, si la dirección de un empleado está registrada en un archivo que contenga la información del Personal de la empresa y además está registrada en el archivo con la información del Control de Asistencia, un cambio en la dirección del empleado puede estar reflejada en el registro del Personal, pero no estarlo en el registro del control de asistencia, produciendo una inconsistencia de los datos lo que implica dudas en la credibilidad de los datos almacenados. • Problemas de integridad: Los valores de datos almacenados en la base de datos deben satisfacer ciertos tipos de restricciones de consistencia. Por ejemplo, el saldo mínimo de una cuenta corriente debe ser 100 dólares. • Acceso concurrente: En un entorno de multiprogramación es posible ejecutar varias transacciones de manera concurrente, lo que significa actualizar los datos simultáneamente, para lo cual es necesario que el sistema controle la interacción entre las transacciones concurrentes para evitar que se destruya la consistencia de la base de datos. • Control de seguridad: No todos los usuarios del sistema de bases de datos pueden acceder a todos los datos. 1.4 CONCEPTO DE BASES DE DATOS: Las definiciones de Bases de Datos son numerosas, aunque todas coinciden en que es un conjunto de datos almacenados en un soporte de acceso directo. Los datos están interrelacionados y estructurados de acuerdo a un modelo que sea capaz de recoger el máximo contenido semántico. El concepto de bases de datos ha ido cambiando y configurándose a lo largo del tiempo. A continuación se enuncian algunas de estas definiciones: ISI0514 Fundamentos de Bases de Datos Página 7 de 120 Sistemas de Bases de Datos Definición 1: “Colección de datos interrelacionados almacenados en conjunto, sin redundancia perjudicial o innecesaria. Su finalidad es servir a una o más aplicaciones de la mejor forma posible. Los datos se almacena de modo que resulten independientes de los programas que lo usan. Se emplean métodos bien determinados para incluir nuevos datos y para modificar o extraer los datos almacenados ¨ [Martín 1995] Definición 2: “Colección o depósito de datos donde los mismos se encuentran lógicamente relacionados entre sí, tienen una definición y descripción comunes y están estructurados de una forma particular. Una Base de Datos es también un modelo del mundo real, y como tal, debe servir para toda una gama de usos y aplicaciones”. [Conference des Statisticiens Europeéns, 1977] Definición 3: “Colección de datos interrelacionados” [Elmasri y Navathe, 1989] Definición 4: “Una colección o depósito de datos integrados, con redundancia controlada y con una estructura que refleje las interrelaciones y restricciones existentes en el mundo real. Los datos, que han de ser compartidos por diferentes usuarios y aplicaciones, deben mantenerse independientes de éstas, y su definición y descripción, han de estar almacenadas junto con los mismos. Los procedimientos de actualización y recuperación, comunes y bien determinados, habrán de ser capaces de conservar la seguridad (integridad, confiabilidad y disponibilidad) del conjunto de datos” [De Miguel y Piattini, 1993] 1.5 VENTAJAS DE LAS BASES DE DATOS. CUADRO RESUMEN DE LAS VENTAJAS DE LAS BASES DE DATOS Referido a: Ventajas: Los datos • Independencia de los datos respecto a los tratamientos y viceversa • Mejor disponibilidad de los mismos • Mayor eficiencia en la recogida, codificación y entrada Los resultados • Mayor coherencia • Mayor valor informativo • Mejor y más normalizada la documentación de la información Los usuarios • Acceso más rápido y sencillo de los usuarios finales • Más facilidades para compartir los datos por el conjunto de usuarios • Mayor flexibilidad para atender a demandas cambiantes ISI0514 Fundamentos de Bases de Datos Página 8 de 120 Sistemas de Bases de Datos 1.6 ABSTRACCIONES DE DATOS. Un objetivo importante de un sistema de bases de datos es proporcionar a los usuarios una visión abstracta de los datos. Es decir, el sistema esconde ciertos detalles de cómo se almacenan y mantienen los datos. Puesto que, muchos usuarios de sistemas de bases de datos no tienen experiencia en computadoras, se les esconde la complejidad a través de diversos niveles de abstracciones para simplificar su interacción con el sistema. En los sistemas de información tradicionales se puede observar la existencia de dos estructuras distintas: - Lógica (vista de usuario) - Física (forma en la que se encuentran los datos en el almacenamiento) En las Bases de Datos aparece un nuevo nivel de abstracción que se ha denominado de diversas maneras: nivel conceptual, estructura lógica global, etc. El nivel externo es la visión que tiene de la base de datos cada usuario en particular, el nivel conceptual responde al enfoque del conjunto de la empresa (visión del administrador), y el nivel interno es la forma en la que se organizan los datos en el almacenamiento físico. • Nivel físico o interno: Nivel más bajo de abstracción, describe cómo se almacenan realmente los datos. Se distinguen tres clases de aspectos: Estrategia de almacenamiento: Incluye la asignación de espacio de almacenamiento para el conjunto de datos, las estrategias para optimizar tiempo y espacio en memoria secund aria, tratamiento de desbordamientos, etc. Caminos de acceso: Incluye las especificaciones de claves primarias y secundarias, así como la de índices o punteros. Misceláneos: Técnicas de compresión de datos, criptografiado, optimización, etc. Nivel conceptual: Este nivel describe qué datos son realmente almacenados en la base de datos y las relaciones que existen entre los datos. El nivel conceptual de abstracción lo usan los administradores de bases de datos, quienes deben decidir qué información se va a guardar en la base de datos. En el esquema o nivel conceptual deberá incluirse la descripción de todos los datos e interrelaciones entre éstos, las restricciones de integridad y de confidencialidad. • ISI0514 Nivel de visión o externo: Es el nivel más alto de abstracción, describe un número de vistas, cada vista describe una parte de la base de datos completa que le interesa a un particular grupo de usuarios. Fundamentos de Bases de Datos Página 9 de 120 Sistemas de Bases de Datos La interrelación entre estos tres niveles de abstracción se detalla continuación. Vista 1 Vista n. Nivel conceptual Nivel físico Almacenamiento de Bases de datos Tres niveles de abstracción de datos 1.7 ESQUEMA E INSTANCIA. La información almacenada en la base de datos, en un determinado momento en el tiempo recibe el nombre de instancia (ejemplar), en tanto que el diseño global de la base de datos se llama esquema. Los esquemas cambian muy rara vez o nunca. Los sistemas de Bases de Datos tienen va rios esquemas, divididos de acuerdo con los niveles de abstracción. En el nivel más bajo está el esquema físico; en el nivel intermedio, el esquema conceptual; en el nivel más alto un subesquema. 1.8 USUARIOS DE UNA BASE DE DATOS En esta sección se identifican las personas que están involucradas en el diseño, uso y mantenimiento de una base de datos. • ISI0514 Administrador de una base de datos (DBA): Es el responsable del diseño, control y administración de la base de datos, puede ser desempeñada por una persona o por un grupo de personas dependiendo de la envergadura del proyecto. Fundamentos de Bases de Datos Página 10 de 120 Sistemas de Bases de Datos Será responsabilidad del Administrador de la Base de datos (DBA): - La estructura de la base de datos, en el sentido de determinar qué información va a ser necesaria almacenar en la misma, después de haber analizado los requisitos de los distintos usuarios. - La descripción conceptual y lógica de la Base de datos, una vez especificados los requisitos de la información es preciso realizar el diseño conceptual de la base de datos para después, adecuar la estructura conceptual a un SGBD específico. - La descripción física de la Base de datos, encontrando una estructura interna que soporte el esquema lógico y los objetivos de diseño. Es una labor que se extiende a lo largo de la vida de la base de datos, el DBA tendrá que variar parámetros, reorganizar los datos, modificar estructuras de almacenamiento, realizar nuevas distribuciones de los ficheros en los soportes, etc. - Definición de estándares con los que se va a regir la organización. - Los aspectos relativos a la seguridad. - El control y la interacción entre la red y la base de datos. - Los procedimientos de explotación y uso. - La estrategia de transición. • Diseñador de la base de datos: Es responsable de identificar los datos que va n a ser almacenados en la base de datos y escoger las estructuras apropiadas. Define además los requerimientos del usuario o grupos de usuarios. • Usuarios finales: Son las personas que en su trabajo requieren el acceso a la base de datos para realizar consultas, actualizaciones y generar reportes. Existen tres categorías de usuarios: ISI0514 - Usuario casual: Usuarios que hacen consultas a la base de datos. - Usuarios especializados: Realizan consultas y modificaciones a la base de datos. - Usuarios sofisticados: Incluyen familiarizados con el DBMS. ingenieros, Fundamentos de Bases de Datos analistas que están Página 11 de 120 Sistemas de Bases de Datos 1.9 INDEPENDENCIA DE DATOS Se llama independencia de datos a la capacidad para modificar una definición de esquema en un nivel sin que afecte a una definición de esquema en el siguiente nivel más alto. Existen dos niveles de independencia de datos: • Independencia física de datos : Es la capacidad de modificar el esquema físico sin provocar que los programas de aplicación tengan que rescribirse. En algunas ocasiones son necesarias las modificaciones en el nivel físico para mejorar el funcionamiento En este punto se puede encontrar cambios al tamaño de los bloques, longitud de los registros, creación y eliminación de índices, cambios en las direcciones relativas y absolutas de almacenamiento. • Independencia lógica de datos : Es la capacidad de modificar el esquema lógico sin provocar que los programas de aplicación tengan que rescribirse. Las modificaciones en el nivel lógico son necesarias siempre que la estructura lógica de la base de datos se altere. Los cambios pueden realizarse en los campos (nombre, tipo, etc) o en los registros (cambio de nombre, introducir nuevos campos, borrado de los mismos, etc). 1.10 MODELOS DE DATOS Un modelo de datos consiste en una colección de herramientas conceptuales para describir datos, relaciones entre ellos, la semántica asociada a los datos, y restricciones de consistencia. Se dividen en tres modelos: • Modelo lógico basado en objetos: Este modelo describe los datos a nivel conceptual y de visión, los más conocidos son: Modelo entidad – relación Modelo orientado a objetos Modelo binario Modelo semántico de datos • Modelo lógico basado en registros: Los modelos lógicos basados en registros se utilizan para describir datos en los niveles conceptual y físico. La base de datos de un modelo basado en registros está estructurada en registros de formato fijo de varios tipos. Cada tipo de registro define un número fijo de campos y cada campo normalmente es de longitud fija. Los modelos más conocidos son: ISI0514 Fundamentos de Bases de Datos Página 12 de 120 Sistemas de Bases de Datos Modelo Relacional: Este modelo representa los datos y las relaciones entre ellos, mediante una colección de tablas, cada una de las cuales tiene un número de columnas con nombres únicos. NOMBRE Pérez CALLE Sucre CIUDAD Cuenca NUMERO 900 Torres Torres Jara Jara Bolívar Bolívar Córdova Córdova Quito Quito Guayaquil Guayaquil 556 647 801 647 NUMERO SALDO 900 55 556 647 100000 105666 801 10533 Modelo de red: Los datos se representan mediante colección de registros y las relaciones de datos mediante enlaces que pueden considerarse como punteros. Modelo jerárquico: Es similar al modelo de red, la diferencia está en que los registro están organizados como colección de árboles en vez de grafos arbitrarios. • Modelo físico basado en datos: Se usa para describir datos en el nivel más bajo. 1.11 LENGUAJES DE BASES DE DATOS. Para llevar a cabo las distinta funciones que cumple un SGBD, se hace necesario contar con diferentes lenguajes y procedimientos que permitan la comunicación con la Base de datos. Un sistema de bases de datos proporciona dos tipos de lenguaje diferentes: uno para especificar el esquema de la base de datos y el otro para expresar las consultas y actualizaciones de la base de datos. Data definitión language (DDL): Lenguaje especial basado en un conjunto de definiciones, que sirve para especificar el esquema de una base de datos. El resultado de la compilación de sentencias de DDL es un conjunto de tablas que se almacenan en un archivo llamado Diccionario de Datos (DD). Storage definition lenguaje (SDL) y View definition languaje (VDL). Son lenguajes que nos sirven para especificar la estructura de almacenamiento y los métodos de acceso. ISI0514 Fundamentos de Bases de Datos Página 13 de 120 Sistemas de Bases de Datos Data manipulation languaje (DML). El objetivo es proporcionar una interacción eficiente entre las personas y el sistema. Por manipulación se entiende la recuperación, inserción, supresión y modificación de la información almacenada en la base de datos. Tipos de DML: No procedimentales: Los DML requieren que el usuario especifique QUÉ datos se necesitan, sin especificar CÓMO obtenerlos. Ej: SQL. Procedimentales: Los DML requieren que el usuario especifique QUÉ datos se necesitan y CÓMO obtenerlos. Ej. DL/I (lenguaje propio de los ordenadores IBM) Representación de la acción de un lenguaje de bases de datos Voy a crear un nuevo archivo en la base de datos Quiero consultar datos del estudiante Nro 263 DML DDL GESTOR DE LA BD (DBMS) BASE DE DATOS COMUN 1.12 GESTOR DE BASE DE DATOS. Es un modelo de programa que proporciona el interfaz entre los datos de bajo nivel almacenados en la base de datos y los programas de aplicación y consultas hechas al sistema. ISI0514 Fundamentos de Bases de Datos Página 14 de 120 Sistemas de Bases de Datos USUARIO Consultas Aplicaciones Sistema de gestión de bases de datos B.D. B.D. B.D. Un gestor de bases de datos es responsable de las siguientes tareas: • Interacción con el gestor de archivos: Es responsable del almacenamiento, recuperación y actualización de los datos en la base de datos. El gestor de bases de datos traduce las sentencias DML a comandos del sistema de archivos de bajo nivel, para procesar los datos almacenados en el disco. • Implantación de la integridad: Controla que los datos almacenados en la base de datos cumplan con ciertas restricciones de consistencia. Por ejemplo el número máximo de horas semanales =< 40. • Implantación de la seguridad: No todos los usuarios de la base de datos necesitan tener acceso a todo su contenido, es función del gestor de la base de datos administrar estas seguridades. • Copias de seguridad y recuperación: Es responsabilidad del gestor de bases de datos detectar las fallas ocasionadas por hardware o software, y restaurar la base de datos al estado en el que se encontraba antes de ocurrir el fallo. • Control de concurrencia: Es responsabilidad del gestor de bases de datos conservar la consistencia de los datos, cuando varios usuarios actualizan la base de datos concurrentemente. En resumen se puede definir como un Sistema de Gestión de la Bases de Datos (SGBD) “Al conjunto coordinado de programas, procedimientos, lenguajes, etc., que suministra, tanto a los usuarios no informáticos como a los analistas, programadores, o al administrador, los medios necesarios para describir, recuperar y manipular los datos almacenados en la base, manteniendo su seguridad.” [DE MIGUEL y PIATTINI, 1993] 1.13 COMPONENTES DE UN SISTEMA DE BASES DE DATOS Un sistema de base de datos contempla los siguientes componentes: • ISI0514 La Base de Datos. Fundamentos de Bases de Datos Página 15 de 120 Sistemas de Bases de Datos • Los sistemas de gestión de bases de datos (SGBD, DBMS), tal como el DB2, oracle, Sybase, etc., que varían considerablemente en cuanto a características y funciones. Las características y funciones de un DBMS, pueden dividirse en tres subsistemas: Herramientas de diseño, tiempo de ejecución y motor DBMS. Subsistema de Herramientas de Diseño: Consta de un conjunto de implementos que facilitan el diseño y la creación de la base de datos y sus aplicaciones. Generalmente incluye herramientas para la creación de tablas, formas, consultas y reportes. También proporcionan lenguajes e interfaces de programación para programar con lenguajes. Por ejemplo Access tiene dos lenguajes: un macrolenguaje que no requiere conocimientos profundos de programación y una versión de BASIC llamada Visual Basic. Sistema de Run Time (Tiempo de Ejecución): Procesa los componentes de aplicación que se desarrollan al utilizar las herramientas de diseño. (procesador de formas, de consultas). El motor DBMS: Es el intermediario entre las herramientas de diseño y los subsistemas run-time y los datos. El motor recibe los requerimientos de los otros dos componentes (plantados en términos de tablas, filas y columnas) y traduce los requerimientos a órdenes dirigidas al sistema operativo para leer y escribir datos en medios físicos. El motor DBMS también es responsable del manejo de transacciones, bloqueo, respaldo y recuperación de la base de datos. ISI0514 • Programas de aplicación. • Un conjunto de usuarios. • Medios técnicos. • Programas utilitarios (generadores de informes, de interfaces, herramientas de desarrollo, de administración, etc). Fundamentos de Bases de Datos Página 16 de 120 Sistemas de Bases de Datos Una estructura completa de un sistema de bases de datos, se detalla en el siguiente gráfico: Usuarios ingenuos Interfaz de aplicación Programadores de aplicaciones Usuarios sofisticados Programadores de aplicaciones Consultas Precompilador de lenguaje de manipulación de datos Administradores de bases de datos Planificación de bases de datos Procesador de consultas Compilador de lenguaje de definición de datos Código objeto de programas de aplicación Gestor de bases de datos • Gestor de archivos • • Control de concurrencia Backup Recovery Archivos Diccionario s ISI0514 Fundamentos de Bases de Datos Página 17 de 120 Sistemas de Bases de Datos CAPITULO 2 MODELO ENTIDAD - RELACIÓN 2.1 INTRODUCCIÓN Podemos definir un Modelo de Datos como un conjunto de conceptos que permiten describir la estructura de una Base de Datos a diferentes niveles de abstracción. Según este nivel de abstracción podemos clasificar a los modelos de datos como: • Externo. Permite presentar los datos que necesita cada usuario en particular, con las estructuras propias del lenguaje de programación que va a emplear. • Global. Estos modelos ayudan a describir los datos para el conjunto de usuarios . Los mismos se clasifican en: - Modelo Conceptual o de alto nivel. Se refiere a la descripción del mundo real de acuerdo con un modelo altamente semántico e independiente del hardware y del SGBD en el que posteriormente se vaya a realizar la implementación de la base de datos. En general, los Modelos Conceptuales, por su nivel de abstracción y riqueza semántica, constituyen una interfaz útil entre los profesionales de la informática y los usuarios finales, en las primeras etapas del proceso de diseño de Bases de Datos. - Modelos Convencionales. Se encuentran soportados por los SGBD y están orientados a describir los datos a nivel lógico para el SGBD, por lo que sus conceptos son propios de cada SGBD. Estos modelos se pueden considerar como una interfaz entre el informático y el ordenador. Los tres modelos convencionales más extendidos en el mercado son el Jerárquico, el de Codasyl y el Modelo Relacional. ISI0514 Fundamentos de Bases de Datos Página 18 de 120 Sistemas de Bases de Datos • Interno. Estos modelos también conocidos como Modelos Físicos, se orientan a la máquina. De manera más precisa se puede definir a un Modelo de Datos como un conjunto de conceptos, reglas y convenciones que nos permiten describir y manipular los datos del mundo real y que deseamos almacenar en la Base de Datos. Dentro de la problemática del diseño de Bases de Datos, los modelos de datos cumplen un papel muy importante, ya que son las herramientas que nos permiten generar los esquemas de Bases de Datos que regirán su estructura. La modelación de datos expresa un diseño lógico de datos de la misma manera en que un diagrama de flujo expresa el diseño lógico de un programa. 2.2 EL DISEÑO CONCEPTUAL DESARROLLO DE SOFTWARE. EN EL PROCESO DE Consideremos el Ciclo de Vida Clásico de un producto de Software. Ingeniería del Sistema Análisis Diseño Codificación Pruebas Mantenimiento En el desarrollo de software, las primeras etapas son las que cobran mayor importancia, ya que en ellas se debe centrar la mayor cantidad de esfuerzo para asegurar una mayor calidad del producto. Dentro de estas etapas, se encuentra el diseño. El diseño como actividad se puede entender en distintos niveles de abstracción, separándolo en Diseño Conceptual, Diseño lógico y Diseño Físico. • Diseño Conceptual. Es de un alto nivel de abstracción, y puede confundirse inicialmente con el término de la etapa de análisis. Este diseño no está necesariamente asociado con una ISI0514 Fundamentos de Bases de Datos Página 19 de 120 Sistemas de Bases de Datos plataforma de implementación, sino es más cercano a la realidad, al problema a solucionar. El diseño conceptual recibe como entrada la especificación de los requerimientos y su resultado es el esquema conceptual de la Base de datos, independiente del software que se use para manipularlo. • Diseño Lógico. Recibe como entrada el esquema conceptual y da como resultado un esquema lógico, que es una descripción de la estructura de la Base de Datos que puede procesar el software del Sistema de Gestión de Bases de Datos. El diseño lógico se acerca más a la implementación del producto en una plataforma computacional, integrando consideraciones para la plataforma en cuestión. • Diseño Físico: Recibe como entrada el esquema lógico y da como resultado un esquema físico, que es una descripción de la implementación de una Base de Datos en la memoria secundaria del ordenador. Describe la estructura de almacenamiento y los métodos usados para tener acceso efectivo a los datos. Realidad Requisitos de datos Diseño Conceptual Modelo Conceptual Esquema conceptual Diseño Lógico Modelo Lógico Esquema Lógico Diseño Físico Modelo Físico Esquema Físico ISI0514 Fundamentos de Bases de Datos Página 20 de 120 Sistemas de Bases de Datos 2. 3 MODELO ENTIDAD RELACIÓN (MER): El Modelo Entidad–Relación fue desarrollado por Peter Chen en 1976 como metodología gráfica para el diseño de Bases de Datos, por lo que puede decirse que es un “método de representación abstracta del mundo real centrado en las restricciones o propiedades lógicas de una Base de Datos”. El Modelo de datos Entidad-Relación (MER) se basa en una percepción del mundo real, que consiste en un conjunto de objetos básicos llamados entidades y de relaciones entre estos objetos. Se emplea para interpretar, especificar y documentar los requerimientos para sistemas de procesamiento de bases de datos. 2.3.1 ENTIDADES: Una entidad es algo que puede identificarse en el ambiente de trabajo de los usuarios, debe ser un objeto que existe y es distinguible de otros objetos. Una entidad con una existencia física es una persona, un carro; o puede ser un objeto con una existencia conceptual: una compañía, un trabajo o un curso de universidad. Las entidades se agrupan en clases de entidades o conjunto de entidades del mismo tipo, una clase de entidad es la forma general o descripción de algo, por ejemplo un CLIENTE. Se define como ocurrencia de una clase de entidad, a la representación de una entidad particular, tal como CLIENTE 23456. Cada entidad tiene propiedades particulares llamadas atributos. 2.3.2 ATRIBUTOS: Las entidades tienen atributos o como se les llama en ocasiones, propiedades, que describen las características de una entidad, por ejemplo una entidad EMPLEADO, tiene sus propiedades particulares como: nombre, edad, dirección, sueldo, actividad, etc. Tipos de atributos: ISI0514 • Atómico: Los atributos que no son divisibles, por ejemplo: Nombre, Cédula de identidad, Ciudad. • Compuestos: Cuando un atributo es dividido en pequeñas subpartes. Los atributos compuestos pueden formar una jerarquía de atributos, por ejemplo: Fundamentos de Bases de Datos Página 21 de 120 Sistemas de Bases de Datos dirección Ciudad Parroquia Nombre Calle Número Barrio Nro.Dep. • Atributo con simple valor: Cuando un atributo tiene un simple valor para una identidad particular. Por ejemplo, una persona tiene un valor por su edad y la edad es un simple valor de la persona. • Atributo multivalor: Cuando un atributo tiene una serie de valores para identificarse, por ejemplo el atributo color de un automóvil. Automóvil Color • Atributos derivados: Cuando los valores de un atributo son afines, y el valor para este tipo de atributo se puede derivar de los valores de otros atributos. Por ejemplo, la edad y la fecha de nacimiento de una persona; si conocemos la fecha de nacimiento, podemos determinar su edad, en este caso decimos que la edad es derivada de la fecha de nacimiento. • Atributo llave: Una entidad usualmente tiene un atributo sobre el cual los valores son distintos para cada entidad individual, ésta nos permite identificar de forma única a una entidad en el conjunto de entidades, por ejemplo, en la entidad PERSONAL el atributo puede ser el número de la cédula de identidad. En algunos casos varios atributos juntos pueden formar una llave, significando que la combinación de los valores de los atributos debe ser distinta para cada entidad individual. • Atributos Nulos: Un valor nulo se usa cuando una entidad no tiene valor para un atributo. Nulo puede también indicar que el valor de un atributo es desconocido. Cada atributo simple de una entidad es asociado con un set de valores al que llamamos Dominio de un atributo. En otros términos, Dominio de un atributo es el conjunto de ISI0514 Fundamentos de Bases de Datos Página 22 de 120 Sistemas de Bases de Datos posibles valores que puede tomar un atributo. Por ejemplo, el rango de edad de los empleados de una empresa es de 25 a 50 años; el estado civil de los empelados. 2.3.3 RELACIÓN: 2.3.3.1 CONCEPTO: Una relación es cualquier asociación R que pueda establecerse entre entidades de la misma clase o de clases diferentes. Entidad Personal Entidad Vehículo Relación Conductor Personal Vehículo Conductor Una relación puede incluir muchas entidades; la cantidad de entidades en una relación es el grado de la relación. Por ejemplos: Vendedor Pedido Relación de grado 2 ISI0514 Madre Padre Hijo Relación de grado 3 Fundamentos de Bases de Datos Página 23 de 120 Sistemas de Bases de Datos Aunque el modelo E-R permite relaciones de cualquier grado, la mayoría de las aplicaciones del modelo sólo consideran relaciones de grado 2 a las que se les llama relaciones binarias. Ejemplos: Ríos atraviesan Provincias, Empleados trabajan para Departamentos, Autor escribe Documentos. Relaciones unitarias o Relaciones Recursivas: Se establece entre entidades de la misma clase. Por ejemplo, Personas son hijos de Personas. La relación HABITACION-CON, podría definirse en la entidad ESTUDIANTE. Estudiante Empleado 1:N HABITACION-CON 1:N SUPERVISOR Relación N-arias : La relación se establece entre N clases de entidades, siendo N > 2. Este tipo de relaciones tienen limitaciones, por lo que cada una de ellas suele ser sustituida por un conjunto de relaciones binarias. 2.3.3.2 PROPIEDADES DE LAS RELACIONES: • Los roles de una relación: Son las funciones que desempeñan cada una de las clases de entidades asociadas. En toda relación existen dos roles diferentes correspondientes a las entidades de cada una de las clases relacionadas. Suponiendo que A representa la clase de entidad formada por todos los profesores de un centro de estudios universitario, y B la formada por todos los alumnos de dicho centro, entre las entidades de estas dos clases podrían establecerse varias relaciones caracterizadas por los siguientes roles: - • ISI0514 Dar clase a / Recibir clase de Es tutor de / Es dirigido por Es director de / es dirigido por Cardinalidad de una relación: Expresa el número de entidades de una clase que pueden asociarse a una entidad de la otra clase. En función de esta propiedad, se distinguen tres tipos de relaciones: Fundamentos de Bases de Datos Página 24 de 120 Sistemas de Bases de Datos P1 P2 P3 Persona P1 P2 P3 1 Persona 1 conductor N 1 v1 v2 Vehículo v3 Vehículo v1 v2 v3 v4 v5 v5 Cada persona maneja un vehículo, cada vehículo es manejado por una persona Una persona maneja varios vehículos, un vehículo es manejado por una sola persona (A) Relación 1:1 (B) Relación 1:N P1 P2 P3 P4 P5 Persona P1 P2 P3 P4 N Persona N conductor N 1 v1 v2 Vehículo v3 v1 v2 v3 v4 v5 v5 Vehículo Un vehículo puede ser manejado por algunas personas. Una persona maneja un vehículo solamente. Una persona puede manejar un número de vehículos, un vehículo puede ser manejado por algunas personas. (C) Relación N:1 (D) Relación N:M Ejemplos: Empleado 1:1 Auto (a) Auto - Asignación Dormitorio 1:N Estudiante (b) Dormitorio - Ocupante - ISI0514 Un Río y su desembocadura Las manzanas y las parcelas catastrales Los empleados y su departamento Un departamento y su jefe Un empleado y sus cargas familiares Fundamentos de Bases de Datos Página 25 de 120 Sistemas de Bases de Datos El número dentro del rombo en la relación, detalla la cantidad máxima de entidades que pueden ocurrir en un lado de ella. En ocasiones, tales limitaciones se denominan la cardinalidad máxima de la relación. En el ejemplo anterior (b) la relación tiene una cardinalidad máxima de 1:N. Es posible que la cardinalidad máxima sea distinta de 1 y N, por ejemplo en el caso de la relación EQUIPO DE BASQUETBOL y JUGADOR, puede tener una cardinalidad máxima de 5. Ejemplos de Cardinalidad (obtenido mediante el software Power Designer) A) Relación 1 : 1 VEHICULO PLACA MARCA MODELO CONDUCTOR PERSONA CODIGO NOMBRE APELLIDO Modelo de Datos Conceptual (CDM) VEHICULO PLACA CODIGO MARCA MODELO <pk> <fk> PERSONA C(6) C(5) C(10) C(10) CODIGO PLACA NOMBRE APELLIDO CODIGO PLACA = CODIGO = PLACA <pk> <fk> C(5) C(6) C(15) C(15) Modelo de Datos Físico (FDM) Relación 1 : N VEHICULO PLACA MARCA MODELO CONDUCTOR PERSONA CODIGO NOMBRE APELLIDO CDM PERSONA VEHICULO PLACA MARCA MODELO <pk> C(6) C(10) C(10) CODIGO PLACA = PLACA PLACA NOMBRE APELLIDO <pk> <fk> C(5) C(6) C(15) C(15) PDM Relación N: 1 VEHICULO PLACA MARCA MODELO CONDUCTOR PERSONA CODIGO NOMBRE APELLIDO CDM VEHICULO PLACA CODIGO MARCA MODELO <pk> <fk> PERSONA C(6) C(5) C(10) C(10) CODIGO = CODIGO CODIGO NOMBRE APELLIDO <pk> C(5) C(15) C(15) PDM ISI0514 Fundamentos de Bases de Datos Página 26 de 120 Sistemas de Bases de Datos Relación N : M VEHICULO PLACA MARCA MODELO CONDUCTOR PERSONA CODIGO NOMBRE APELLIDO CDM VEHICULO PLACA MARCA MODELO <pk> PERSONA C(6) C(10) C(10) CODIGO NOMBRE APELLIDO <pk> C(5) C(15) C(15) CONDUCTO CODIGO PLACA = PLACA PLACA <pk,fk> <pk,fk> C(5) C(6) CODIGO = CODIGO PDM • Participación de un conjunto de entidades: Especifica si todas las entidades de una clase participan o no en la relación establecida con otra(s) clase(s) de entidad(es), es decir, indica si todas las entidades de una clase se relacionan necesariamente con entidades de otra clase asociada. Una participación es total, si cada entidad en E (conjunto de entidades) participa en al menos una relación en R (Conjunto de relaciones). La participación es parcial, si sólo alguna entidad en E participa en relaciones en R. Ejemplo: Empleado e1 * e2 * e3 * e4 * e5 * e6 * * * Jefes R1 R2 R3 Departamento D1 D2 D3 Participación parcial de Empleado y participación total de Departamento. ISI0514 Fundamentos de Bases de Datos Página 27 de 120 Sistemas de Bases de Datos • Dependencia de existencia: Si la existencia de la entidad x depende de la existencia de la entidad y, entonces se dice que x es dependiente por existencia de y. Operativamente eso significa que si se suprime y, también se suprime x. La entidad y se dice que es una entidad dominante y x una entidad subordinada. Como ejemplo, considérese el conjunto de entidades cuenta y el conjunto de entidades Transacción, que mantiene información de todas las transacciones hechas por cada una de las cuentas. El conjunto de entidades transacción se describe mediante los atributos numero-transacción, fecha-transacción, e importe-transacción. Se forma un conjunto de relaciones cuenta–transacción (bitácora) entre estos dos conjuntos de entidades, que es uno a varios, desde cuenta a transacción. Cada entidad transacción debe estar asociada con una entidad cuenta. Si la entidad cuenta se borra, todas sus entidades transacción asociadas se deben borrar también. En cambio, las entidades transacción se pueden borrar de la Base de Datos sin afectar a ninguna cuenta. En este caso la entidad cuenta es dominante y la entidad transacción es subordinada. Ejemplo: y x Cuenta Bitacora Transacción Edificio Edi_num Departamento 2.4 CLAVES En el modelo Entidad – Relación, los atributos pueden ser o no Claves, según permitan o no la identificación unívoca de las entidades de una clase o de las ocurrencias de una relación. A continuación se exponen los conceptos relacionados con este tema: Superclave: conjunto de uno o más atributos cuyos valores identifican unívocamente cada entidad de la clase u ocurrencia de la relación. Clave candidata: conjunto de uno a más atributos cuyos valores identifican unívocamente cada entidad de la clase, sin que ningún subconjunto de ellos pueda realizar esta misma función. Una clave candidata es una superclave mínima. Una clase de entidad o relación puede tener varias claves candidatas. Clave primaria: Clave candidata de una clase de entidad o relación que se elige como identificador unívoco de sus entidades u ocurrencias. ISI0514 Fundamentos de Bases de Datos Página 28 de 120 Sistemas de Bases de Datos 2.5 DIAGRAMA ENTIDAD - RELACIÓN (E-R) En un diagrama E-R las clases de entidades se muestran con rectángulos; las relaciones mediante rombos, y la cardinalidad de la relación aparece dentro del rombo. El nombre de la relación se muestra cerca del rombo. Frecuentemente el nombre de la relación se coloca dentro o sobre el rombo, y para estos casos la cardinalidad de la relación se detalla colocando “patas de gallo” en la línea que conecta a las entidades en el lado muchos de la relación. Dormitorio - Ocupante Dormitorio Estudiante Para expresar la cardinalidad mínima, podemos ilustrar colocando una línea perpendicular a la línea de la relación, para así indicar que una entidad debe existir en la relación, y colocar un óvalo perpendicular a la línea de la relación, señalando que puede haber, o no, una entidad en la relación. En el siguiente ejemplo se tiene que: un DORMITORIO debe tener una relación con un ESTUDIANTE al menos, pero que no se requiere que un ESTUDIANTE, tenga una relación con un DORMITORIO. En este caso, DORMITORIO posee una cardinalidad mínima de 1 y una cardinalidad máxima de múltiples entidades ESTUDIANTE. Un ESTUDIANTE tiene una cardinalidad mínima de cero y una cardinalidad máxima de una entidad DORMITORIO. Dormitorio 1:N Estudiante Dormitorio – Ocupante En algunas versiones de los diagrama s E–R los atributos se representan con elipses que se conectan con la entidad o la relación a la que pertenece. La identificación de los atributos que forman la clave primaria en un diagrama Entidad – Relación puede representarse, subrayando el nombre del atributo. Elipses dobles que representan atributos multivalor, elipses discontinuas que denotan atributos derivados, líneas dobles que indican participación total de una entidad en un conjunto de relaciones. ISI0514 Fundamentos de Bases de Datos Página 29 de 120 Sistemas de Bases de Datos Ejemplo: Nom-Dormi Numero de estudiantes Ubicación Dormitorio 1:N Cantidad de Habitaciones Renta Estudiante Nombre de estudiante Año del estudiante Entidades fuertes y débiles: Una entidad fuerte es aquella entidad con identificador interno y una entidad débil es aquella con identificador externo o mixto. En otras palabras un conjunto de entidades que tiene una clave primaria se denomina conjunto de entidades fuertes, y se llama conjunto de entidades débiles aquellas que pueden no tener suficientes atributos para formar una clave primaria. Los conceptos de entidades “débil y fuerte”, están relacionados con el concepto de dependencia de existencia. Un miembro de un conjunto de entidades fuerte es por definición una entidad dominante, mientras que un miembro de un conjunto de entidades débiles es una entidad subordinada. La entidad débil se puede representar con un rectángulo de doble contorno. 2.6 REDUCCIÓN DE LOS DIAGRAMAS E-R A TABLAS Una base de datos que se ajusta a un diagrama E-R puede representarse por medio de una colección de tablas. Para cada conjunto de entidades, y para cada conjunto de relaciones en la base de datos, existe una tabla única a la que se asigna el nombre del conjunto de entidades o del conjunto de relaciones correspondiente. Cada tabla tiene un número de columnas que, a su vez, tienen nombres únicos. En esta etapa transformaremos el esquema conceptual (MER) a un esquema relacional. Este esquema sigue siendo independiente del SGBD que se utilizará en las siguientes etapas del desarrollo de software. El paso del esquema Entidad / Relación se basa en los siguientes principios: ISI0514 • Todo tipo de entidad se convierte en una tabla. • Todo tipo de relación N:M se transforma en una tabla. • Todo tipo de relación 1:N se traduce en el fenómeno de propagación de la clave o bien se crea una nueva relación. Fundamentos de Bases de Datos Página 30 de 120 Sistemas de Bases de Datos 2.6.1 REGLAS DE TRANSFORMACIÓN: 2.6.1.1 RELACIÓN N:M Un tipo de relación de N:M se transforma en una relación que tendrá como clave primaria la concatenación de los identificadores de cada entidad que asocia. Cada uno de los atributos que forman la llave primaria de una tabla derivada de una relación N:M, son llave foráneas respecto de cada una de las tablas de las entidades que se relacionan. Autor N Escribe N Libro AUTOR(cod-autor, Nombre, apellido) LIBRO(cod- libro, título) ESCRIBE (cod-autor, cod-libro) La tabla ESCRIBE está formada por las columnas cod-autor que es llave foránea que referencia a la tabla AUTOR, cod- libro llave foránea que referencia a la tabla LIBRO. 2.6.1.2 RELACIÓN 1:N Como se indicó anteriormente todo tipo de relación 1:N se traduce en el fenómeno de propagación de la clave. Existen casos en que es necesario transformarla en una tabla, como si se tratara de una relación N:M, siendo conveniente en los siguientes casos: • El número de ocurrencias de la entidad que propaga la clave es muy pequeño, evitando los valores nulos. Empleado Departamento NOMBRE APELLIDO ND Juan Pedro ----------------Pablo Luis Torre Calle ---------------------Pere z Polo 1 1 Null Null Null Null 2 3 DNO 1 2 3 NOMBRE Técnico Cómputo Producción Para evitar los valores nulos en la tabla EMPLEADO, se recomienda crear una nueva tabla de la relación. • • ISI0514 Cuando se prevé que en el futuro dicha relación se convierta en una N:M Cuando la relación tiene atributos propios. Fundamentos de Bases de Datos Página 31 de 120 Sistemas de Bases de Datos 2.6.1.3 RELACIÓN 1:1 Son casos en donde se puede crear una tabla o bien propagar la clave. Esto último puede ser en ambas direcciones Si ambas entidades tienen una participación parcial en la relación, es recomendable crear una nueva tabla de la relación, para evitar valores nulos. 1 Hombre 1 Matrimonio Mujer HOMBRE (cod-hombre, ………) MUJER (cod- mujer, ………) MATRIMONIO (cod-hombre, cod-mujer) Para el caso en que una de las entidades tenga una participación total y la otra parcial, conviene propagar la clave de la entidad con participación parcial. Empleado 1 1 Jefe Departamento EMPLEADO (cod-empleado, nombre, ……..) DEPARTAMENTO (dno, cod-empleado, nombre, ……………) Si la participación es total para las dos entidades, se puede propagar la clave en cualquiera de las dos direcciones. 2.6.1.4 ATRIBUTOS DE UNA RELACIÓN. Es conveniente que aquellas relaciones que contiene atributos propios se transformen en una tabla, en donde aquellos atributos pasan a se columnas de dicha tabla. 2.6.2 EJEMPLO DE REDUCCIÓN Num_ Fecha Nom_cli Num_Cta N CtaCli Cliente CI N 1 Cuenta Fecha Saldo Bitácora N Transacción Calle Cantidad Ciudad ISI0514 Fundamentos de Bases de Datos Página 32 de 120 Sistemas de Bases de Datos Num-Cta Saldo 259 630 401 700 199 467 115 183 118 225 210 Tabla Cuenta 1000 2000 5000 500 1300 900 1200 1300 2000 2500 2200 Num-Cta Num_tran Fecha Cantidad 259 5 630 11 401 22 700 69 199 103 259 6 259 53 259 104 259 7 Tabla Transacción 11-ago-97 17-ago-97 23-ago-97 28-ago-97 3-sep-97 7-sep-97 7-sep-97 13-sep-97 17-sep-97 50 70 -300 -500 900 -44 120 -200 -79 Nom-Cli CI Calle Ciudad Pablo Antonio Alberto Manuel Pedro Juan Andrés 654-32 890-12 456-78 369-12 246-80 121-21 135-79 Bolívar Sucre Boyacá 9 octubre Talbot Amazonas Borrero Cuenca Cuenca Guayaquil Guayaquil Quito Quito Cuenca Tabla Clientes CI Num-Cta 654-32 259 654-32 630 890-12 401 456-78 700 369-12 199 246-80 467 146-80 115 121-21 183 135-79 118 135-79 225 135-79 210 Tabla CtaCli ISI0514 Fecha 17/jun/1990 17/may/1990 23/may/1990 28/may/1990 13/jun/1990 7/jun/1990 7/jun/1990 13/jun/1990 17/jun/1990 19/jun/1990 27/jun/1990 Fundamentos de Bases de Datos Página 33 de 120 Sistemas de Bases de Datos 2.7 AGREGACIÓN Los conceptos analizados en los numerales anteriores, son los conceptos básicos el modelo E – R con los que se puede modelar la mayoría de las características de las bases de datos. Sin embargo existen ciertos aspectos de una base de datos que serán expresados de mejor manera, mediante extensiones del modelo E – R, como es el caso de la agregación. En el modelo E –R no es posible expresar relaciones entre relaciones, para modelar una situación como ésta se usa la agregación, que es una abstracción a través de la cual las relaciones se tratan como entidades de nivel más alto. Ejemplo: Consideremos las entidades cliente y cuenta, cada cliente puede tener una o varias cuentas, y de igual manera una cuenta corriente puede pertenecer a varios clientes; la relación entre estas dos entidades la denominamos impositor. Si al par cliente - cuenta le asignamos privilegios (solicitar sobregiro, cerrar cuenta, etc), que están definidos en la entidad privilegios, estaríamos en el caso de modelar una relación entre relación. Como el modelo no admite esta expresión, necesitamos crear una agregación, generando una entidad de nivel más alto formada por la relación prestatario y las entidades cliente y cuenta. Esta entidad de nivel más alto se trata de la misma forma que cualquier otro conjunto de entidades. Nombre CI Dirección Cliente Num_cue Impositor Importe Cuenta Privilegi o codigo Descripció n El modelo entidad - relación no admite relaciones entre relaciones, razón por la cual no es posible generar el diagrama anterior, relacionando impositor con privilegio. A continuación se muestra el diagrama E –R con el uso de agregación. ISI0514 Fundamentos de Bases de Datos Página 34 de 120 Sistemas de Bases de Datos Nombre CI Dirección Cliente Importe Num_cue Impositor Cuenta Privilegi o codigo ISI0514 Descripció n Fundamentos de Bases de Datos Página 35 de 120 Sistemas de Bases de Datos 2.7 EJEMPLOS DE MODELO E-R 2.7.1 Se requiere llevar un control de las calificaciones de los exámenes de los estudiantes en cada una de las materias. A lo largo del curso se realizarán dos aportes y el examen final. Los datos que se registrarán para los alumnos serán su nombre, apellido, número de cédula, fecha de ingreso, edad y para el caso de las materias su nombre y número de créditos. Fecha_ingreso Edad N-Matricula Apellido Nombre Estudiante CI N Aporte-1 Calificación Final Aporte-2 N Código N_créditos Materia Nombre De este modelo aparecen las siguientes tablas: ESTUDIANTE MATERIA ISI0514 CI NOMBRE APELLIDO FECHA_ING N_MATRICULA 1101775849 Nelly 1234567890 Mario Barrera 1-Oct-95 5630 Fajardo 5-Nov-98 7810 9876543210 Luis Arias 9-Sep-99 9315 1122334455 Francisco Cabrera 7-May-99 9148 ..... ..... ..... ..... ..... CODIGO NOMBRE N_CREDITOS ISI515 Bases de Datos 5 ISI213 Lenguajes I 6 ISI 432 Estructura de Datos 3 ISI 313 Lenguaje II 6 ISI 712 Sistemas Expertos 4 ..... ..... ..... Fundamentos de Bases de Datos Página 36 de 120 Sistemas de Bases de Datos CALIFICACION CI CODIGO APORTE-1 APORTE-2 FINAL 1101775849 ISI515 8 6 7 1234567890 ISI515 9 7 7 9876543210 ISI712 7 4 8 1122334455 ISI213 6 9 6 1101775849 ISI432 6 8 7 1101775849 ISI712 5 6 9 1234567890 ISI313 9 8 8 ..... ..... ..... ..... ..... Analizando los atributos de las dos clases de entidades, se podrían establecer las claves correspondientes. ESTUDIANTE Superclaves: CI, Edad N_Matrícula, CI N_Matrícula, Fecha_Ing. Edad Claves Candidatas: CI N_Matrícula Clave Primaria: CI Se considera que el Número de Matrícula es un valor único para cada estudiante, por lo que permite identificar de forma unívoca a cada estudiante. Este atributo también podría haberse escogido como cla ve primaria en vez de la CI. La elección de uno u otro es indiferente en este caso. MATERIA Superclaves: Código, Nombre Código, Creditos Claves Candidatas: Código Nombre Clave Primaria: Código La clave primaria de una relación se forma por unión de las claves primarias de las clases de entidades que interviene en dicha relación. Teniendo en cuanta este principio, las claves correspondientes a la relación Calificación serían las siguientes: ISI0514 Fundamentos de Bases de Datos Página 37 de 120 Sistemas de Bases de Datos CALIFICACION Superclaves: CI, Código, Aporte_1 CI, Código, Aporte_2 CI, Código, Final Claves Candidatas: CI, Código Clave Primaria: CI, Código ISI0514 Fundamentos de Bases de Datos Página 38 de 120 Sistemas de Bases de Datos 2.7.2 Suponemos un modelo formado por las siguientes clases de entidades, atributos y relaciones. - Universidades: Se caracterizan por su Nombre, Tipo (privada, estatal, etc), Nro. de carreras universitarias. - Departamentos: Cada universidad tiene una serie de departamentos caracterizados por su Nombre, Especialidad, Líneas de investigación. - Profesores: Los profesores pertenecen a un departamento específico, dan clases a uno o varios cursos, y se caracterizan por su Nombre y Apellido, CI, Título(s) universitarios, Especialidad, Asignaturas que imparte. - Alumnos: Los alumnos de cada universidad pertenecen a un solo departamento, pueden estar matriculados en uno o varios cursos, y se caracterizan por su Nombre y Apellido, Nro de matrícula, Código, Edad, Expediente Académico. - Cursos: Cada curso de una universidad es dirigido y administrado por un solo departamento, está formado por un número indeterminado de alumnos, y pueden dar clase en él uno o varios profesores del departamento al que pertenecen. Se caracteriza por su identificador, Nro de alumno, Ubicación. Tip Nombre Universidad 1 Se compone de Apellido Especialida d N Están matriculados 1 N 1 Departamento 1 Nombre N Nombre Alumno CI Profesor N Se compone de Nombre N Asiste a Da clases a N Codigo Fe_Na N N Títulos Curso Id_cu ISI0514 Pertenece a Nro_Alumnos Fundamentos de Bases de Datos Página 39 de 120 Sistemas de Bases de Datos 2.7.3 Ejemplo de un modelo Entidad – Relación para una Compañía, en la que los empleados trabajan en diferentes departamentos y en diferentes proyectos. Estos proyectos son controlados por un departamento. Un empleado es jefe de un departamento y un departamento tiene varias localizaciones. Del listado de empleados existen supervisores, quines son los encargados de supervisar a un determinado número de empleados. En el modelo se especifica también las cargas familiares de los empleados. (Ref: Fundamentals of DataBase Systems. Elmasri/Navathe) Fecha_N Número Apellido Nombre Sexo Nombre Locales Dirección Trabaja para N CI Empleado 1 Departamento Fecha_i Num_Emp Salario 1 1 N 1 Jefe Supervisor 1 Horas Controla N N Trabaja _en N Proyecto 1 Dependen de Num Nombre N Localización Carga_f Nombre Relación Fe_Na Sexo ISI0514 Fundamentos de Bases de Datos Página 40 de 120 Sistemas de Bases de Datos Reducción del modelo E - R de la Compañía a tablas EMPLEADO NOMBRE APELLIDO Juan CI FECHA_N DIRECCIÓN SEXO SALARIO SUPERCI DNO Polo 123456789 3-mar-59 Sucre 7-12 M 3000 333445555 5 Humberto Pons 333445555 25-dic-60 Bolívar 5-67 M 4000 888665555 5 Irma Vega 999887777 13-nov-50 P. Córdova 3-45 F 2500 987654321 4 Elena Tapia 987654321 3-may-61 F 4300 888665555 4 Pablo Castro 666884444 15-sep-55 Bolívar 1-50 M 3800 333445555 5 Marcia Mora 453453453 29-mar-60 Colombia 4-23 F 2500 333445555 5 Manuel Bonilla 987987987 16-jul-58 B. Malo 1-10 M 2500 987654321 4 Jaime Pérez 888665555 5-abr-57 Sangurima 8-34 M 5500 1 DEPARTAMENTO DNOMBRE DNUMERO JEFECI JEFE_FI Investigación 5 333445555 12-may-80 Administrativo 4 987654321 05-dic-82 Compras 1 888665555 06-jun-78 LOCALIZACION DNUMERO TRABAJA_ EN ISI0514 Ordóñez 7-29 null DEP_LOCA 1 Cuenca 4 Guayaquil 5 Quito 5 Manta 5 Cuenca ECI PNO HORAS 123456789 1 12,5 123456789 2 15,6 666884444 3 14,7 453453453 1 10 453453453 2 10 333445555 2 20 333445555 3 10 333445555 10 10 333445555 20 10 999887777 30 30 999887777 10 5 987987987 10 15 987987987 30 17 987654321 30 10 987654321 20 12 888665555 20 NULL Fundamentos de Bases de Datos Página 41 de 120 Sistemas de Bases de Datos PROYECTO CARGA_F ISI0514 PNOMBRE PNUMERO PLOCAL DNUM ProductoX ProductoY ProductoZ Computadora Reorganizar Beneficios 1 2 3 10 20 30 Quito Manta Cuenca Guayaquil Cuenca Guayaquil 5 5 5 4 1 4 ECI DEP_NOM SEXO FECHAN_N RELACION 333445555 María F 2/02/86 hija 333445555 Teodoro M 10/10/90 hijo 333445555 Ana F 15/09/65 cónyuge 987654321 Alberto M 6/07/67 cónyuge 123456789 Miguel M 5/11/84 hijo 123456789 María F 9/01/87 Hija 123456789 Elizabeth F 12/12/60 Cónyuge Fundamentos de Bases de Datos Página 42 de 120 Sistemas de Bases de Datos CAPITULO 3 EL MODELO RELACIONAL “No hay que confundir un diagrama de esquema con un diagrama entidad – relación. En particular, los diagrama E – R no muestran explícitamente los atributos llave externa, mientras que los diagramas de esquema si”. 1 El presente capítulo está dividido en dos partes, la primera corresponde a la Estructura de la Base de Datos Relacionales y la segunda a la dinámica del Modelo Relacional. 3.1 ESTRUCTURA DEL MODELO RELACIONAL. 3.1.1 CONCEPTO DEL MODELO RELACIONAL. El modelo relacional representa los datos en una base de datos como una colección de relaciones. Cada relación se asemeja a una tabla, en donde; cada fila de la tabla representa una colección de datos conexos o afines. Los nombres de la tabla y de la columna son usados para ayudar en la interpretación del significado de los valores de cada fila de la tabla. La relación es el elemento básico del Modelo Relacional y se representa por una tabla. Informalmente, los términos y su equivalente son: Relación Tupla Atributo Número de tuplas Número de atributos Dominio Clave primaria Tabla Fila Columna Cardinalidad Grado Colección de valores, de los cuales uno o más atributos obtienen sus valores reales Identificador único para la tabla, es decir, una columna o combinación de columnas con la propiedad de que nunca existen 2 filas de la tabla con el mismo valor en esa columna o combinación de columnas. Es importante indicar que la tabla es plana en el sentido de que el cruce de un fila y una columna sólo puede dar un valor. 3.1.2 DOMINIO y ATRIBUTO. 1 Silberschatz – Korth - Sudarshan, Fundamentos de Bases de Datos, cuarta edición, 2002 ISI0514 Fundamentos de Bases de Datos Página 43 de 120 Sistemas de Bases de Datos • Dominio. Se entiende por dominio D al conjunto finito de valores homogéneos y atómicos V1, V2, .... Vn, caracterizados por un nombre. Homogéneo significa que los valores son todos del mismo tipo y atómicos significa que son indivisibles, es decir, si se descompone se perdería la semántica del dominio. Ejemplos: - Dominio de Nacionalidades: Ecuatoriana, Peruana, Colombiana, etc. - Dominio Edad_Empleado: Posible edad de los empleados de una compañía; un valor entre 18 y 50 años. - Dominio teléfono: La colección de siete números telefónicos de una provincia en particular. Todo dominio tiene un nombre y un tipo de dato, en el primer ejemplo, el tipo de datos es un conjunto de caracteres de longitud máxima de 20. Un tipo de datos o un formato son también especificados por cada dominio. Por ejemplo, el número telefónico podemos especificar como (d)ddd-ddd, donde d es un número entero y el primer dígito representa un código para una provincia determinada. Se considera que los dominios no incluyen nulos, ya que nulo (null) no es un valor. La importancia de los dominios es que restringen las comparaciones, es decir, sólo se puede comparar atrib utos definidos sobre el mismo dominio. Dominio compuesto: Es una combinación de dominios simples que tiene un nombre y sobre él se puede aplicar ciertas restricciones de integridad. Por ejemplo: un usuario podría manejar además de los tres dominios Día, Mes, Año, un dominio compuesto llamado Fecha que sería la combinación de los tres, al que podríamos aplicar restricciones de integridad a fin de que no aparezcan valores no válidos para la fecha. Todos los atributos compuestos como los dominios compuestos pueden ser tratados como piezas únicas de información, es decir, como valores atómicos. • Atributo. Un atributo A es el papel que tiene un determinado dominio D en una relación. Se dice que D es el domino de A y se denota dom(A). El modelo relacional admite sólo atributos simples, monovalentes. ISI0514 Fundamentos de Bases de Datos Página 44 de 120 Sistemas de Bases de Datos Los atributos compuestos se pueden transformar según las siguientes dos alternativas: 1. Eliminar el atributo compuesto considerando todos sus componentes como un atributo individual, o; 2. Eliminar los componentes individuales y considerar el atributo compuesto entero como un solo atributo. Ejemplo: CI PERSONA Dirección Nombre Calle Número Ciudad Para la primera alternativa de transformación el esquema relacional sería: Persona (CI, Nombre, Calle, Número, Ciudad) Para la segunda:. Persona (CI, Dirección) La transformación de atributos polivalentes o multivalor requieren la introducción de relaciones nuevas; cada atributo polivalente distinto requiere una relación en la cua l pueda estar representado como atributo monovalente. La nueva relación contiene el atributo polivalente más el identificador de la entidad original; el identificador de la nueva relación es el conjunto de todos sus atributos. Ejemplo: CI PERSONA (1,n) ISI0514 Dirección Fundamentos de Bases de Datos Nombre Calle Número Ciudad Página 45 de 120 Sistemas de Bases de Datos Esquema relacional: Persona (CI, Nombre) Dirección (CI, Calle, referencia a Persona. Número, Ciudad) con CI como clave foránea que 3.1.3 RELACIÓN Una relación R sobre un conjunto de dominios D1, D2, ... Dn, (no necesariamente distintos), se compone de dos partes: una cabecera y un cuerpo. La Cabecera está formada por un conjunto de atributos o, en términos más precisos, de pares de atributo-domino {(A1:D1), (A2:D2), .... ,(An:Dn)}, donde cada atributo Aj corresponde a uno y sólo uno de los dominios Dj. El Cuerpo está formado por un conjunto de tuplas, que varían en el tiempo. Cada tupla está formada por pares de atributo – valor {(A1:vi1), (A2,vi2), .... (An:vin)}, (i = 1,2,..., m), donde m es el número de tuplas del conjunto. En una relación se debe cumplir las siguientes restricciones: - Las celdas de la tabla deben ser de valores únicos. - Cada atributo sólo puede tomar un único valor del dominio, no se admiten por lo tanto los grupos repetitivos ni arreglos como valores. - Todos los ingresos en cualquier atributo deben ser del mismo tipo. - Cada atributo posee un nombre único. - El orden de las columnas no es significativo. - En una tabla no pueden ser idénticas dos tuplas. - No es importante el orden de las tuplas. 3.1.4 CLAVES. Los conceptos de claves que fueron analizadas en el Capítulo 2, también son aplicables en el modelo relacional. • Clave Candidata: Es un conjunto no vacío de columnas que identifican unívoca y mínimamente cada tupla. Toda relación siempre tendrá una clave candidata. ISI0514 Fundamentos de Bases de Datos Página 46 de 120 Sistemas de Bases de Datos • Clave Primaria: Es aquella clave candidata que es elegida por el diseñador de la base de datos como elemento principal para identificar las tuplas de la relación. • Claves Altenativas: Son aquellas claves candidatas que no han sido escogidas como claves primarias. • Clave Ajena o Foránea: De una relación R2 es un conjunto no vacío de atributos cuyos valores han de coincidir con los valores de la clave primaria de una relación R1. Debe tenerse en cuenta que la clave ajena y la correspondiente clave primaria han de estar definidas sobre el mismo dominio. 3.2 DINÁMICA DEL MODELO RELACIONAL El componente dinámico del Modelo Relacional se divide en dos partes: • Álgebra relaciona y • Cálculo relacional. El álgebra relacional se basa en un conjunto de operadores que operan sobre relaciones. El cálculo relacional se basa en predicados que definen un estado objetivo de la Base de datos. Dentro de éstos tenemos el cálculo relacional orientado a tuplas y el cálculo relacional orientado a dominios. 3.2.1 ALGEBRA RELACIONAL 3.2.1.1 INTRODUCCIÓN. El Algebra Relacional es una colección de operaciones que son usadas para manipular relaciones. Estas operaciones seleccionan tuplas de relaciones individuales o combina tuplas de varias relaciones, con el propósito de especificar una búsqueda o consulta en la base de datos. El resultado de cada operación es una nueva relación, la misma que puede ser también manipulada por las operaciones del álgebra relacional. Las operaciones del álgebra relacional son divididas en dos grupos. El primer grupo incluye las operaciones que son definidas de las matemáticas: la UNION, INTERSECCION, DIFERENCIA, y PRODUCTO CARTESIANO. El otro grupo conforma las operaciones desarrolladas específicamente para el manejo de bases de datos relacionales e incluye las operaciones SELECT, PROJECT y JOIN. ISI0514 Fundamentos de Bases de Datos Página 47 de 120 Sistemas de Bases de Datos 3.2.1.2 OPERACIÓN SELECT. Es utilizada para seleccionar tuplas en una relación. Estas tuplas deben satisfacer una condición de selección. Operación: Unaria Formato: σ <condición de selección>(<nombre de la relación>) Donde: - σ Denota la operación SELECT - <Condición de selección> expresión booleana de la forma: <nombre atributo><comparación><valor constante>, o <Nombre atributo><comparación><nombre atributo>. La comparación normalmente tiene los operadores: {=,<, ≥,>,≤,≠}. Condiciones: AND, OR, y NOT - <nombre relación> Nombre de la relación. Nota: Los ejemplos que se presentan en este capítulo están realizados sobre la base de la tablas del modelo E R para Compañías del Capítulo 2. Ejemplos. - Seleccione los empleados que trabajan en el departamento 4 σ DNO=4 (EMPLEADO) - Seleccionar los empleados con salario mayor a 2500 σ SALARIO > 2500 (EMPLEADO) - Lista de empleados que trabajan en el departamento 4, con un salario mayor a 2500 o empleados que trabajan en el departamento 5 y ganan más de 4000. σ(DNO=4 AND SALARIO > 2500) OR (DNO=5 AND SALARIO > 4000)(EMPLEADO) 3.2.1.3 OPERACIÓN PROJECT. La operación PROJECT selecciona columnas de una tabla, las otras columnas son eliminadas. Si nos interesamos en ciertos atributos de una relación, utilizamos la operación PROJECT. Formato: π <lista de atributos>(<nombre relación>) Ejemplos: - Crear una tabla con el sexo y salario de los empleados. π SEXO, SALARIO (EMPLEADO). ISI0514 Fundamentos de Bases de Datos Página 48 de 120 Sistemas de Bases de Datos Secuencia de operaciones: Es posible escribir operaciones con una simple expresión del álgebra relacional. Ejemplos: - Recuperar el primer nombre, el último nombre y el salario de los empleados que trabajan en el departamento 5. π NOMBRE,APELLIDO,SALARIO(σ DNO= 5(EMPLEADO)). R Renombrar atributos: Ejemplo: TEMP σ DNO=5 (EMPLEADO) R(FNAME,LNAME,SALARY) π NOMBRE,APELLIDO,SALARIO(TEMP) 3.2.1.4 OPERACIONES TEÓRICAS. El siguiente grupo de operaciones son las correspondientes a las operaciones de la matemática estándar. • UNION: El resultado de esta operación denotada por R ∪ S, es una relación que incluye tuplas que están en R o en S o en ambas. Las tuplas duplicadas se eliminan. • INTERSECCIÓN: El resultado de esta operación denotado por R ∩ S, es una relación que incluye todas las tuplas que están en la relación R y en la relación S. • DIFERENCIA: El resultado de esta operación denotada por R-S, es una relación que incluye todas las tuplas que están en R pero no en S. La operación UNION e INTERSECCION son conmutativas R ∪ S = S ∪ R, y R ∩ S = S ∩ R También cumplen la propiedad de ser asociativas. R ∪ (S ∪ T) = (R ∪ S) ∪ T, y (R ∩ S) ∩ T = R ∩ (S ∩ T). La operación DIFERENCIA no es conmutativa: R–S≠S–R ISI0514 Fundamentos de Bases de Datos Página 49 de 120 Sistemas de Bases de Datos Ejemplos: ESTUDIANTE (a) (c) (a) (b) (c) (d) NOMBRE APELLIDO Susana Juan INSTRUCTOR FNAME LNAME Perez Pablo Medina Reyes Ricardo Duran Jaime Torres Susana Perez Freddy Flores Francisco Lopez Antonio Gómez Juan Reyes Ana Rojas María Garcia NOMBRE APELLIDO Susana Juan Jaime Torres Freddy Flores Antonio Gómez Ana Rojas María Garcia Pablo Medina Ricardo Duran Francisco Lopez NOMBRE APELLIDO Jaime Freddy (b) NOMBRE APELLIDO Perez Susana Perez Reyes Juan Reyes NOMBRE APELLIDO Torres Pablo Medina Flores Ricardo Duran Antonio Gómez Francisco Lopez Ana Rojas María Garcia (d) ESTUDIANTE ∪ INSTRUCTOR ESTUDIANTE ∩ INSTRUCTOR ESTUDIANTE – INSTRUCTOR INSTRUCTOR – ESTUDIANTE • ISI0514 PRODUCTO CARTESIANO: Operación binaria representada por ⊗ . En general, el resultado de las relaciones R ⊗ S de R(A1,A2,...,An) ⊗ S(B1,B2...Bm) es una relación Q con n * m atributos Q(A1,A2,...,An,B1,B2,...,Bm). El resultado de la relación Q tiene un tupla de cada combinación de tuplas, una de R y una de S. Fundamentos de Bases de Datos Página 50 de 120 Sistemas de Bases de Datos Ejemplo: Nom-cliente Nom-banquero Nom-cliente Calle Ciudad_clie Arévalo Torres Pérez Gonsález Vélez Arroyo Vega Torres Orellana Illescas Perez Sucre Cordova Boyaca Larga Gasca Cuenca Cuenca Guayaquil Cuenca Quito Nom-cliente Nom-banquero Nom-cliente Calle Ciudad_clie Arévalo Arévalo Arévalo Arévalo Arévalo Torres Torres Torres Torres Torres Pérez Pérez Pérez Pérez Pérez Gonzales Gonzales Gonzales Gonzales Gonzales Velez Velez Velez Velez Velez Arroyo Arroyo Arroyo Arroyo Arroyo Vega Torres Orellana Illescas Pérez Vega Torres Orellana Illescas Pérez Vega Torres Orellana Illescas Pérez Sucre Córdova Boyaca Larga Gasca Sucre Córdova Boyaca Larga Gasca Sucre Córdova Boyaca Larga Gasca Cuenca Cuenca Guayaquil Cuenca Quito Cuenca Cuenca Guayaquil Cuenca Quito Cuenca Cuenca Guayaquil Cuenca Quito 3.2.1.5 OPERACIÓN JOIN Denotada por , es usada para combinar tuplas similares a partir de dos relaciones. La forma general de un JOIN con dos relaciones R(A1,A2,...,An) y S(B1,B2,...,Bm) es R Χ <JOIN CONDICIÓN> S El resultado de la operación join es una relación Q con n + m atributos Q(A1,A2,..,An,B1,B2,...Bm); Q tiene una tupla por cada combinación de tuplas, una por R y una por S, sin embargo, la combinación satisface la <join condición>. Esta es la principal diferencia entre el PRODUCTO CARTESIAONA y el JOIN; En un join, solame nte las combinaciones que satisfacen la condición aparecen en el resultado, en tanto que en el producto cartesiano todas las combinaciones de tuplas se incluyen en el resultado. La <join condición> es de la forma: <condición> AND <condición> AND....AND<condición> ISI0514 Fundamentos de Bases de Datos Página 51 de 120 Sistemas de Bases de Datos donde cada condición es de la forma Ai θ Bj, Ai es un atributo de R, Bj es un atributo de S, Ai y Bj tienen el mismo dominio, y θ es uno de los siguientes operadores de comparación {=, <, ≤, >, ≥, ≠}. Una operación join con condiciones de este tipo se lo llama THETA JOIN. Los más comunes join envuelven condiciones únicamente de igualdad, utilizando el operador =. A este tipo de join se le denomina EQUIJOIN. NATURAL JOIN : Idéntico al EQUIJOIN, excepto que los <join atributos> de R2 no son incluidos en el resultado de la relación. Está denotada por *. R1 * <JOIN CONDICIÓN>, o R1 *( <join atributo>),(<join atributo2>) R2 o R1 * R2. Ejemplos: - Recuperar el nombre del jefe de cada departamento. DEPARTAMENTO X JEFECI = CI EMPLEADO DEPT_JEFE RESULT - π DNUMERO, NOMBRE, APELLIDO (DEPT_JEFE) Natural join. PROY_DEPT PROYECTO * DNUM = DNUMERO DEPARTAMENTO En este caso en la tabla PROY_DEPT no se repite el atributo DNUMERO de la relación DEPARTAMENTO. Si los join atributos tienen el mismo nombre en ambas relaciones, se puede escribir la instrucción obviando el nombre de los join atributos. DEPT_LOCS DEPARTAMENTO* LOCALIZACION Nótese que el nombre de los join atributos, es el mismo DNUMERO para las dos relaciones. 3.2.1.6 LA OPERACIÓN DIVISION. Operación binaria representada por el símbolo ÷, se establece para aquellas consultas que incluyen la frase “para toda”. ISI0514 Fundamentos de Bases de Datos Página 52 de 120 Sistemas de Bases de Datos R A a1 a2 a3 a4 a1 a3 B b1 b1 b1 b1 b2 b2 S A a1 a2 a3 a2 b3 T a3 a4 a1 a2 a3 b3 b3 b4 b4 b4 B b1 b4 R÷ S T 3.2.1.7 FUNCIONES. Consideramos las siguientes operaciones aplicadas a la colección de valores numéricos: SUM AVERAGE MAXIMUN MINIMUN COUNT : Suma : Media aritmética : Valor máximo : Valor mínimo : Contador. Las funciones están denotadas por el símbolo ℑ. Su formato es: <grupo atributos> ℑ <lista funciones>(<nombre relación>) Donde <grupo atributos> es una lista de atributos de la relación especificada en <nombre relación>, y <lista funciones> es una lista de pares (<función><atributo>) Ejemplo: - Recuperar, para cada número de departamento, el número de empleados en el departamento y su salario promedio. R(DNO, N_EMPLEADOS, SALARIO_PROME) DNO ℑ COUNT CI, AVERAGE SALARIO (EMPLEADO) R DNO 5 4 1 ISI0514 N_EMPLEADOS SALARIO_PROME 4 3 1 3325 3100 5500 Fundamentos de Bases de Datos Página 53 de 120 Sistemas de Bases de Datos Si no especificamos el <grupo atributos>, la función es aplicada a todas las tuplas de la relación, y como resultado se obtiene una simple relación. ℑ COUNT CI, AVERAGE SALARIO (EMPLEADO) CONUT_CI AVERAGE_SALARIO 8 3512.5 Si no se especifica los nombres de los atributos en el resultado de la relación R, los nombres son aplicados desde la <función>_<atributos>. DNO ℑ COUNT CI, AVERAGE SALARIO(EMPLEADO) DNO COUNT_CI 5 4 1 AVERAGE_SALARIO 4 3 1 3325 3100 5500 3.3 EJERCICIOS 3.3.1 Modelo Relacional. Ejercicio 1. Se desea implementar una solución de base de datos que describa las pruebas de autocomprobación para cada una de las materias que se imparten en una universidad, de acuerdo con los siguientes criterios: - Se realiza una prueba de autocomprobación para cada uno de los capítulos que definen a una Materia. - Una prueba contiene una o varias preguntas, las que a su vez pueden tener una o varias respuestas posibles. - Se desea identificar qué profesores imparten cada materia. Una materia puede ser impartida por mas de un profesor. - Se debe tener constancia de qué capítulo han sido respondidas por cada alumno, de manera que si ya ha sido respondida no se vuelvan a almacenar sus datos. Sólo es posible que el alumno responda a un capítulo de una determinada Materia, sólo una vez. MATERIA (Cod_Materia, Descripción, Contenido, Duración) CAPITULO (Cod_Materia, Cod_Capitulo, Título_Capítulo) ISI0514 Fundamentos de Bases de Datos Página 54 de 120 Sistemas de Bases de Datos PREGUNTAS (Cod_Materia, Cod_Capítulo, Cod_Pregunta, Enunciado) RESPUESTAS (Cod_Materia, Cod_Capítulo, Co d_Pregunta, Cod_Respuesta, Texto) PROFESORES (Cod_Profesor, Nombre, Apellidos, Dirección, Teléfono) IMPARTEN (Cod_Materia, Cod_Profesor) ALUMNOS (Cod_Alumno, Nombre, Apellidos, Dirección, Teléfono) EXAMENES (Cod_Alumno, Cod_Materia, Cod_Capitulo, Fecha, Calificación ) Ejercicio 2 Deseamos diseñar una Base de Datos que recoja la organización de una universidad. Se considera que: - Los departamentos pueden estar en una sola facultad o ser interfacultativos. - Una cátedra se encuentra en un único departamento. - Una cátedra pertenece a una sola facultad. - Un profesor está siempre asignado a un único departamento y adscrito a una o varias cátedras, pudiendo cambiar de cátedra pero no de departamento; interesa la fecha en la que un profesor es adscrito a un departamento. - Existen varias áreas de conocimiento, y todo departamento tendrá una única área de conocimiento. DEPARTAMENTOS (CodDpto, DescripcionDpto, JefeDpto, Edificio, Planta, CodAreaCon) FACULTADES (CodFac, DescripcionFac, Rector) CATEDRAS (CodCat, CodDpto, CodFac) PROFESORES (CodProf, Nombre, CodDpto, Fecha_de_admisión ) AREACONOCIMIENTO (CodAreaCon, DescripcionArea) DPTO-FAC (CodDpto, CodFac) PROF-CAT (CodProf, CodCat) Ejercicio 3 Se desea diseñar una Base de datos que contenga la información relativa a las carreteras de un país, sabiendo que: - En dicho país las carreteras se encuentran divididas en tramos. - Un tramo siempre pertenece a una carretera, y no puede cambiar de carretera. - Un tramo puede pasar por varios términos municipales, siendo un dato de interés el kilómetro del tramo por el que entra en dicho término municipal, y el kilómetro por el que sale. ISI0514 Fundamentos de Bases de Datos Página 55 de 120 Sistemas de Bases de Datos - Existe una serie de áreas en la que se agrupan los tramos, cada uno de los cuales no puede pertenecer a más de un área. CARRETERAS (CodCarretera ; DescripcionCarr) TRAMOS (CodTramo, DescripcionTramo, CodCarretera, CodArea ) MUNICIPIOS (CodMunicipio, DescripcionMcpio) TRAMO-MCPIO (CodTramo, CodMunicipio, KmEntra, kMSale) AREAS (CodArea, DescripcionArea) 3.3.2 Algebra Relacional. 1. Seleccionar las tuplas para todos los empleados que trabajan en el departamento 1 y ganan más de $ 2000 o trabajan en el departamento 4 y ganan más de $ 1000. R ← σ (DNO=1 AND SALARIO>1000) OR ( DNO=4 AND SALARIO>1000) (EMPLEADO) 2. Listar el nombre, apellido y salario de todos los empleados que trabajan en el departamento 1 y ganan más de $ 3000 o trabajan en el departamento 4 y ganan más de $ 1000. Alternativa 1. R ← Π NOMBRE, APELLIDO, SALARIO (σ (DNO=1 AND SALARIO>3000) OR ( DNO=4 AND SALARIO>1000) (EMPLEADO)) Alternativa 2. TEMP ← σ (DNO=1 AND SALARIO>3000) OR ( DNO=4 AND SALARIO>1000) (EMPLEADO) R ← Π NOMBRE, APELLIDO, SALARIO (TEMP) 3. Listar todos los nombres, apellidos y salario de todos los empleados de sexo masculino, con salario mayor a $ 1500, renombrando los atributos en la tabla resultante como fname, lname y salary respectivamente. TEMP ← σ (SEXO = M AND SALARIO > 1500)(EMPLEADO) R(FNAME, LNAME, SALARY) ← Π NOMBRE, APELLIDO, SALARIO(TEMP) 4. Recuperar la cedula de ciudadanía de todos los empleados que cumplan cualquiera de las dos condiciones, trabajar en el departamento 5 o ser directamente supervisor de un empleado que trabaja en el departamento 5. ISI0514 Fundamentos de Bases de Datos Página 56 de 120 Sistemas de Bases de Datos EMP_DEP5 ← σ DNO = 5 (EMPLEADO) CONDICION1 ← Π CI(EMP_DEP5) CONDICION2 (CI) ← Π SUPERCI(EMP_DEP5) RESULTADO ← CONDICION1 ∪ CONDICION2 El desarrollo de este ejemplo se detalla a continuación: EMP_DEP5 NOMBRE INICIAL APELLIDO CI FECHA_N DIRECCIÓN SEXO SALARIO SUPERCI DNO Juan B Polo 123456789 3-mar-59 Sucre 7-12 M 3000 333445555 5 Humberto t Pons 333445555 25-dic-60 Bolívar 5-67 M 4000 888665555 5 Pablo K Castro 666884444 15-sep-55 Bolívar 1-50 M 3800 333445555 5 Marcia A Mora 453453453 29-mar-60 Colombia 4-23 F 2500 333445555 5 CONDICION1 CI 123456789 333445555 666884444 453453453 CONDICION2 CI 333445555 888665555 RESULTADO CI 123456789 333445555 666884444 453453453 888665555 5. Para cada empleado de sexo masculino, recuperar su nombre, apellido y el nombre de su dependiente. Alternativa 1 (con producto cartesiano) NOM_EMP ← Π NOMBRE, APELLIDO, CI (σ SEXO = M (EMPLEADO)) EMP_DEP ← NOM_EMP ⊗ CARGA_F RESULTADO1 ← σ CI = ECI (EMP_DEP) RESULTADO ← Π NOMBRE, APELLIDO, DEP_NOM(RESULTADO1) Alternativa 2 ISI0514 (con join) Fundamentos de Bases de Datos Página 57 de 120 Sistemas de Bases de Datos NOM_EMP ← Π NOMBRE, APELLIDO, CI (σ SEXO = M (EMPLEADO)) RESULTADO1 ← NOM_EMP * CI = ECI CARGA_F RESUTADO ← Π COMBRE, APELLIDO, DEP_NOM(RESULTADO1) 6. Listar el nombre, apellido y CI de los empleados que trabajan en el departamento de compras DEP_COMP ← σ DEP_NOM = ‘Compras’ (DEPARTAMENTO) R2 ← EMPLEADO * DNO = DEP_NUM DEP_COMP RESULTADO ← Π NOMBRE, APELLIDO, CI (R2) 7. Para cada empleado recuperar su nombre y apellido y el nombre y apellido de su supervisor. E_E (E_NOMBRE, E_APELLIDO, E_SUPERCI) ← Π NOMBRE, APELLIDO, SUPERCI (EMPLEADO) E_S (S_NOMBRE, S_APELLIDO, S_SUPERCI) ← Π NOMBRE, APELLIDO, CI (EMPLEADO) R1 ← E_E * E_SUPERCI = S_CI E_S RESULTADO ← E_NOMBRE, E_APELLIDO, S_NOMBRE, S_APELLIDO ( R1) 8. Listar el nombre del empleado y su número de dependientes. R1 (CI, NUMERO_D) ← ECI τ COUNT DEP_NOM (CARGA_F) R2 ← EMPLEADO * CI = ECI R1 RESULTADO ← Π NOMBRE, NUMERO_D (R2) 9. Listar el nombre y cédula de ciudadanía de los empleados que tienen más de dos dependientes. R1 (CI, NUMERO_D) ← ECI τ COUNT DEP_NOM (CARGA_F) R2 ← σ NUMERO_D > 2 (R1) RESULTADO ← Π NOMBRE, CI (R2 * EMPLEADO) 10. Determinar el número de horas totales trabajadas por cada empleado. R1 (CI, TOTAL_HORAS) ← ECI τ SUM HORAS (TRABAJA_EN) RESULTADO ← Π NOMBRE, APELLIDO, TOTAL_HORAS (EMPLEADO * R1) ISI0514 Fundamentos de Bases de Datos Página 58 de 120 Sistemas de Bases de Datos CAPITULO 4 EL LENGUAJE SQL 4.1 GENERALIDADES. Los sistemas de bases de datos comerciales requieren de un lenguaje de consulta “amigable para el usuario”. Existen diferentes lenguajes comerciales como: SQL, QBE, QUEL. QBE (QUERY-BY-EXAMPLE) está basado en el cálculo relacional de dominio; QUEL está basado en el cálculo relacional de tuplas y SQL (STRUCTURE QUERY LANGUAGE) usa una combinación de construcciones del álgebra relacional y del cálculo relacional. En este capítulo se hace referencia al lenguaje SQL, el mismo que está compuesto por comandos, cláusulas, operadores y funciones de agregado (funciones de columna). Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las Bases de datos. • Comandos. El SQL es un lenguaje de DBMS relacional que puede ser usado como lenguaje de manipulación de datos. Existen cuatro postulados de SQL para realizar las funciones básicas de manipulación (DML) de datos: Comando SELECT INSERT UPDATE DELETE Descripción Utilizado para operaciones de lectura, es decir consultas de tuplas de la base de datos que cumplan una condición determinada. Se utiliza para insertar nuevas tuplas en una relación. Modifica valores de los campos. Elimina tuplas de una tabla. También sirve como lenguaje de definición (DLL) de datos. Se emplea el SQL para crear las estructuras de datos; es decir, las relaciones en las que posteriormente se almacenarán las tuplas. Los postulados de SQL para este propósito son: Comando CREATE DROP ALTER Descripción Define la estructura de una nueva tabla, campos e índices. Elimina una tabla. Utilizado para modificar las tablas, agregar campos o cambiar la definición de los campos. SQL también es útil como lenguaje de control de acceso. Es utilizado para dar autoridad de acceso a los datos almacenados en las relaciones. Hay dos postulados de SQL que se encargan de ello. ISI0514 Fundamentos de Bases de Datos Página 59 de 120 Sistemas de Bases de Datos Comando GRANT REVOKE Descripción Otorga autoridad de acceso a los usuarios. Suprime autoridades de acceso a los usuarios. Conviene aclarar que, por lo general, los mecanismos de autorización en los DBMS son muy sofisticados y suelen ir mucho más allá que la simple autorización de acceso a datos. • Cláusulas Las cláusulas son condiciones de modificación utilizadas para definir los datos que se desea seleccionar o manipular. Cláusula FROM WHERE GROUP BY HAVING ORDER BY • Operadores Lógicos Operador AND OR NOT • ISI0514 Descripción Utilizada para especificar la tabla de la cual se van a seleccionar los registros. Utilizada para especificar las condiciones que debe reunir los registros que se van a seleccionar. Utilizada para separar los registros seleccionados en grupos específicos. Utilizada para expresar la condición que debe satisfacer cada grupo. Utilizada para ordenar los registros seleccionados de acuerdo con un orden específico. Uso Es el “y” lógico. Evalúa dos condiciones y devuelve un valor de verdad sólo si ambas son ciertas. Es el “o” lógico. Evalúa dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta. Negación lógica. Devuelve el valor contrario de la expresión. Operadores de Comparación Operador Uso < Menor que. > Mayor que. <> Distinto. <= Menor ó igual que. >= Mayor ó igual que. = Igual que. BETWEEN Utilizado para especificar un intervalo de valores. LIKE Utilizado en la comparación de un modelo. IN Utilizado para especificar registros de una Base de Datos. Fundamentos de Bases de Datos Página 60 de 120 Sistemas de Bases de Datos • Funciones de Agregado Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros, para devolver un único valor que se aplica a un grupo de registros. Función AVG COUNT SUM MAX MIN Descripción Calcula el promedio de los valores de un campo determinado Calcula el número de registros de la selección. Calcula la suma de todos los valores de un campo determinado. Devuelve el valor más alto de un campo determinado. Devuelve el valor más bajo de un campo determinado. 4.2 CONSULTAS DE UNA TABLA. La instrucción SELECT, permite manipular los datos contenidos en una tabla para responder a los diversos tipos de preguntas que pueden presentarse, y de esta manera explotar la información que está registrada en forma relacional. Formato: SELECT [ALL, DISTINCT] <lista de atributos> FROM <nombre de la tabla> WHERE <condición> GROUP BY <nombre de la columna> HAVING <condición de búsqueda> ORDER BY <nombre de columna> ASC, DECS. SQL Interactivo SELECT AUTOR, GENERO FROM LIBROS ........................... Consulta Resultado de la consulta AUTOR GENERO Hugo Teatro Hugo Poesía Balzac Romana Dumas Teatro DBMS BD PROGRAMA Consulta SQL programado Estructura tabular de los resultados de una consulta SQL ISI0514 Fundamentos de Bases de Datos Página 61 de 120 Sistemas de Bases de Datos 4.2.1 SELECCIÓN SIMPLE • SELECT * El primer operando que sigue al SELECT es el carácter *. Este significa el ensamble de columnas de la tabla, presentadas en el mismo orden que el de la definición de la tabla al momento de la creación. SELECT * FROM LIBROS; AUTOR TITULO AÑO GENERO PRECIO HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS 1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866 TEATRO POESIA ROMANA ROMANA ROMANA ROMANA ROMANA TEATRO ROMANA ROMANA ROMANA POESIA 120.000 78.500 148.500 100.000 80.000 80.000 110.000 98.500 110.500 99.500 90.500 Tabla LIBROS • SELECT con expresión. Una o varias expresiones pueden seguir a la palabra SELECT. SELECT columna_1 * columna_2 FROM nombre_tabla SELECT (col_1 * 1.25) / (col_2 * col_3) FROM nombre_tabla • SELECT con una o varias columnas La expresión más simple, que contiene únicamente las columnas especificadas SELECT TITULO FROM LIBROS SELECT AÑO, TITULO FROM LIBROS • SELECT con valores calculados Esta consulta se ilustra con el siguiente ejemplo: ISI0514 Fundamentos de Bases de Datos Página 62 de 120 Sistemas de Bases de Datos Listar el título y el precio con un incremento del 20% de cada obra de la tabla libros. SELECT TITULO, ‘Precio: ‘, PRECIO*1.2, ‘Sucres’ FROM LIBROS HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIES Precio Precio Precio Precio Precio Precio Precio Precio Precio Precio Precio Precio : : : : : : : : : : : : 144000 94200 178200 120000 0 96000 96000 132000 118200 132600 119400 108600 Sucres Sucres Sucres Sucres Sucres Sucres Sucres Sucres Sucres Sucres Sucres Sucres La opción DISTINCT, permite seleccionar un ejemplar de cada línea. Ejemplo: SELECT AUTOR FROM LIBROS; SELECT DISTINCT AUTOR FROM LIBROS Los resultados para cada una de estas consultas son los siguientes: AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE AUTOR BALZAC DUMAS FLAUBERT HUGO STENDHAL VERLAINE 4.2.2 SELECCIÓN CONDICIONAL CON WHERE El predicado de base es la forma más simple de una condición de búsqueda. Está constituida de dos expresiones compatibles, separadas por un operador de comparación (=, <=, >=, <, >, <>). Los resultados del predicado pueden ser Verdadero (v), Falso (f) o Desconocido (d), este último caso se obtiene si una de las dos expresiones tiene un valor nulo. ISI0514 Fundamentos de Bases de Datos Página 63 de 120 Sistemas de Bases de Datos Las condiciones de búsqueda atan uno a más predicados, separados por los operadores lógicos AND, OR y NOT. Valores de la tabla de verdad de los operadores lógicos: X V V V F F F D D D Y V F D V F D V F D NOT X F F F V V V D D D X AND Y V F D F F F D F D X OR Y V V V V F D V D D SQL ofrece un conjunto de condiciones de búsqueda, permitiendo elaborar diferentes tipos de consultas: 4.2.2.1 Test de Comparación: Compara el valor de una expresión con el valor de otra. Ejemplos: - Busque en la tabla LIBROS el título y género de todos los libros escritos por DUMAS. SELECT TITULO, GENERO FROM LIBROS WHERE AUTOR = ‘DUMAS’ - Busque en la tabla LIBROS, los datos concernientes a las obras no escritas por DUMAS y posteriores a 1835. SELECT * FROM LIBROS WHERE NOT (AUTOR = ‘DUMAS’) AND AÑO > 1835; - Busque en la tabla LIBROS el título, año, género y precio de las obras en donde el precio es menor a $ 100.000 o superior a $ 135000. SELECT TITULO, AÑO, GENERO, PRECIO FROM LIBROS WHERE PRECIO < 100000 OR PRECIO > 135000; Cuando la columna de comparación es una clave primaria, el test aísla una sola fila de la tabla, produciendo una sola fila de resultado. 4.2.2.2 Test de rango (BETWEEN) Determina si el valor de una expresión cae dentro de un rango específico de valores. ISI0514 Fundamentos de Bases de Datos Página 64 de 120 Sistemas de Bases de Datos El predicado BETWEEN permite buscar un valor a partir de dos expresiones enmarcadas mediante la palabra AND. X BETWEEN Y AND Z es equivalente a (X >= Y) AND (X <= Z) La versión negada del test de rango (NOT BETWEEN) comprueba los valores que caen fuera del rango. Ejemplo: Liste el nombre y el lugar de nacimiento de todos los autores nacidos entre 1802 y 1850. SELECT AUTOR, LUGAR FROM AUTORES WHERE FE_NE BETWEEN 1802 AND 1805; 4.2.2.3 Test de pertenencia a conjunto El predicado IN examina si un valor coincide con uno de una lista de valores determinados explícitamente por enumeración o implícitamente por una subconsulta. La condición: A IN (X, Y, Z ) es equivalente a: (A = X) OR (A = Y) OR (A = Z) Ejemplo: - Listar el autor, título y el año de las obras de la tabla LIBROS escritas en 1839, 1866 o 1857. SELECT AUTOR , TITULO, AÑO FROM LIBROS WHERE AÑO IN (1839, 1866, 1857) 4.2.2.4 Test de correspondencia con patrón Se utiliza para comparar una expresión de cadena, con un modelo en una expresión SQL. Caracteres comodines: (%) se corresponde con cualquier secuencia de dos a más caracteres. (_) Se corresponde con cualquier carácter simple. Ejemplo: ISI0514 Fundamentos de Bases de Datos Página 65 de 120 Sistemas de Bases de Datos - Liste los títulos de las obras de la tabla LIBROS que compongan la cadena “DAM” en el título. SELECT TITULO FROM LIBROS WHERE TITULO LIKE ‘%DAM%’ 4.2.2.5 Test de valor nulo El predicado NULL permite verificar el o los valores nulos contenidos en una columna. La forma negativa del test de valor nulo (IS NOT NULL), encuentra la filas que no contiene un valor NULL. Ejemplo: Liste el autor y el título de las obras donde no se conoce el precio. SELECT AUTOR, TITULO FROM LIBROS WHERE PRECIO IS NULL 4.2.3 LAS OPCIONES GROUP BY Y HAVING. • GROUP BY La opción GRO UP BY es seguida del nombre de una o varias columnas llamadas columnas de agrupamiento. Las líneas donde el contenido de las columnas de agrupamiento son idénticas forman un grupo. Ejemplo: Liste agrupados por género y autor, los datos de autor y género de la tabla LIBROS. SELECT AUTOR, GENERO FROM LIBROS GROUP BY AUTOR, GENERO; Como resultado de esta consulta se obtiene los siguientes datos: AUTOR BALZAC DUMAS DUMAS FLAUBERT HUGO HUGO HUGO STENDHAL VERLAINE ISI0514 GENERO ROMANA ROMANA TEATRO ROMANA POESIA ROMANA TEATRO ROMANA POESIA Fundamentos de Bases de Datos Página 66 de 120 Sistemas de Bases de Datos • HAVING La opción HAVING, permite aplicar una condición de búsqueda a los grupos de datos definidos por la opción GROUP BY. No confundir las operaciones WHERE y HAVING. WHERE permite seleccionar una línea antes de formar los grupos, en tanto que HAVING selecciona cuando los grupos han sido formados por GROUP BY. Ejemplo: Liste reagrupando por autor y género, los datos relativos a autor y género de obras de la tabla LIBROS, eliminando las de género poesía. SELECT AUTOR, GENERO FROM LIBROS GROUP BY AUTOR, GENERO HAVING GENERO <> ‘POESIA’; 4.2.4 LA OPCIÓN ORDER BY. Las filas de la tabla resultante pueden ser ordenadas por los valores de una o más columnas. Podemos especificar que la secuencia sea creciente (ASC) o decreciente (DESC). Ejemplo: Liste el autor, el título, y el año de las obras de la tabla LIBROS, ordenada cronológicamente. SELECT AUTOR, TITULO, AÑO FROM LIBROS ORDER BY AÑO; Es posible en la opción ORDER BY colocar el número de la posición en el SELECT de la columna que deseamos ordenar. SELECT AUTOR, TITULO, AÑO FROM LIBROS ORDER BY 3; 4.3 LA OPCIÓN UNION (UNION ALL) La operación UNION permite definir una tabla resultante a partir de la combinación de los resultados de dos o más consultas o tablas independientes. Restricciones: ISI0514 • Ambas tablas deben tener el mismo número de columnas. • El tipo de dato de cada columna en la primera tabla debe ser el mismo que el tipo de dato de la columna correspondiente en la segunda tabla. Fundamentos de Bases de Datos Página 67 de 120 Sistemas de Bases de Datos • Ninguna tabla puede estar ordenada con la sentencia ORDER BY, sin embargo, el resultado de la consulta UNION, puede ser ordenado con la utilización de la cláusula ORDER BY al final de la última consulta SELECT. • Las columnas resultado no son nombradas. Si se utiliza la opción UNION ALL, la tabla resultante contiene todas las líneas provenientes de cada SELECT. En la opción UNION, las líneas repetidas son eliminadas. Ejemplo: AUTOR FE_NA LUGAR SALA ESTANTE HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804 BESANCON TOURS VILLERS PARIS GRENOBLE ROUEN METZ PARIS CHARLEVILLE PARIS 2 1 1 1 3 1 3 3 3 3 3 1 1 1 5 2 6 6 5 5 Tabla AUTORES Liste el ensamble de autores que se encuentran en la tabla LIBROS y que hayan escrito una obra antes de 1835, o figuran en la tabla AUTORES y nacidos después de 1850. SELECT AUTOR FROM LIBROS WHERE AÑO < 1835 UNION SELECT AUTOR FROM AUTORES WHERE FE_NA > 1850; Resultado: BALZAC HUGO RIMBAUD STENDHAL El desarrollo del ejemplo anterior se describe en la siguiente figura: ISI0514 Fundamentos de Bases de Datos Página 68 de 120 Sistemas de Bases de Datos Tabla LIBROS AÑO > 1835 AUTOR HUGO BALZAC BALZAC STENDHAL UNION Tabla AUTORES Resultado BALZAC HUGO STENDHAL RIMBAUD AUTOR BALZAC STENDHAL RIMBAUD FE_NA > 1850 La operación unión puede ser utilizada repetidamente para combinar tres o más conjuntos de resultados: SELECT * FROM A UNION (SELECT * FROM B UNION SELECT * FROM C) 4.4 CONSULTAS MULTITABLA SQL permite consultar datos procedentes de dos o más tablas de la Base de Datos. Para ilustrar con ejemplos este tipo de consultas, utilizaremos el modelo de la compañía detallado en el capítulo 2. ISI0514 Fundamentos de Bases de Datos Página 69 de 120 Sistemas de Bases de Datos Esquema de la Base de datos relacional de la COMPAÑIA EMPLEADO NOMBRE APELLIDO CI FECHA_N DIRECCIÓN SEXO SALARIO SUPERCI DNO DEPARTAMENTO DNOMBRE DNUMERO JEFECI JEFE_FI LOCALIZACION DNUMERO DEP_LOCA TRABAJA EN ECI PROYECTO PNOMBRE PNO PNUMERO HORAS PLOCAL DNUM CARGA_F ECI DEP_NOM SEXO FECHAN_N RELACION El Proceso de formar parejas de fila haciendo coincidir los contenidos de las columnas relacionadas se denomina componer (joining) las tablas. La tabla resultante que contiene datos de las dos tablas basadas en una coincidencia exacta entre dos columnas se denomina equicomposición. 4.4.1 CONSULTAS PADRE/HIJO Las claves foráneas y las claves primarias crean relaciones padre/hijo en una base de datos. Partiendo de este concepto las consultas multitabla más comunes implican a dos tablas que tienen esta relación. Ejemplo: • Listar cada uno de los empleados y el nombre del departamento donde trabajan. SELECT NOMBRE, APELLIDO, DNOMBRE FROM EMPLEADO, DEPARTAMENTO WHERE DNO = DNUMBER Cada empleado (hijo) tiene un departamento (padre) asociado y cada departamento (padre) puede tener muchos empleados (hijos) asociados. ISI0514 Fundamentos de Bases de Datos Página 70 de 120 Sistemas de Bases de Datos La columna DNO de la tabla EMPLEADO, es una clave foránea correspondiente a la columna DNUMERO (clave primaria) de la tabla DEPARTAMENTO. • Listar el nombre y apellido de los jefes departamentales. SELECT NOMBRE, APELLIDO FROM EMPLEADO, DEPARTAMENTO WHERE CI = JEFECI 4.4.2 COMPOSICIONES CON CRITERIO DE SELECCIÓN DE FILA. La condición de búsqueda que especifica las columnas de emparejamiento en una consulta multitabla, pueden combinarse con otras condiciones de búsqueda para restringir aún más los contenidos del resultado. Ejemplo: • Listar el nombre y apellido del jefe del departamento administrativo. SELECT NOMBRE, APELLIDO FROM EMPLEADOS, DEPARTAMENTO WHERE DNO = DNUMERO AND DNOMBRE = ‘Administrativo’ • Listar los no mbres de los dependientes del empleado Juan Polo. SELECT DEP_NOM FROM EMPLEADOS, CARGAS_F WHERE CI = ECI AND NOMBRE = ‘Juan’ AND APELLIDO = ’Polo’ 4.4.3 CONSULTAS DE TRES O MAS TABLAS Con la misma técnica que utiliza SQL para combinar dos tablas, es posible combinar tres o más tablas. Ejemplo: • Listar los nombres de los dependientes de todos los empleados que trabajan en el departamento de investigación. SELECT NOMBRE, APELLIDO, DEP_NOM FROM EMPLEADOS, DEPARTAMENTO, CARGAS_F WHERE DNOMBRE = ‘Investigación’ AND DNUMERO = DNO AND CI = ECI ISI0514 Fundamentos de Bases de Datos Página 71 de 120 Sistemas de Bases de Datos 4.4.4 OTRAS COMPOSICIONES • La mayor parte de consultas entre múltiples tablas se realizan en relaciones de padre/hijo, sin embargo, SQL no exige que las columnas de emparejamiento sean necesariamente llaves primarias o llaves foráneas. Cualquier tipo de columnas pueden servir como columnas de emparejamiento, siempre que tengan tipos de datos comparables. • Las comparaciones más habituales son aquellas basadas en la igualdad de dos columnas (equicomposiciones), sin embargo, SQL permite componer tablas basándose en otros operadores de comparación. 4.4.5 CONSULTAS DE COLUMNAS CUALIFICADAS. Si una sentencia en SQL afecta a dos columnas con el mismo nombre correspondiente a dos tablas diferentes, debe utilizarse un nombre de columna cualificado para identificar sin ambigüedad la columna designada. Un nombre de columna cualificado especifica tanto el nombre de la tabla que contiene la columna, como el nombre de la columna separados por un punto (.). Por ejemplo: la columna de nombre SEXO de la tabla EMPLEADO tiene el nombre de columna cualificado: EMPLEADO . SEXO Ejemplo: • Mostar el sexo de los empleados que tienen dependiente. SELECT NOMBRE, APELLIDO, EMPLEADO.SEXO FROM EMPLEADOS, CARGAS_F WHERE CI = ECI 4.4.6 SELECCIÓN DE TODAS LAS COLUMNAS. En una consulta multitabla, el asterisco (*) selecciona todas las columnas de todas las tablas seleccionadas en la cláusula FROM. Ejemplo: • Recuperar todos los datos de los empleados que trabajan en el departamento de Investigación, incluyendo todos los atributos del departamento. SELECT * FROM EMPLEADO, DEPARTAMENTO WHERE DNO = DNUMERO AND DNOMBRE = ‘Investigación’ • Especificar el Producto Cartesiano de las relaciones EMPLEADO Y DEPARTAMENTO. SELECT * FROM EMPLEADO, DEPARTAMENTO ISI0514 Fundamentos de Bases de Datos Página 72 de 120 Sistemas de Bases de Datos 4.4.7 AUTOCOMPOSICIONES. Algunas consultas multitabla afectan a una relación que una tabla tiene consigo misma, es decir cuando se cuenta con una relación recursiva. Ejemplo: • Para cada empleado, recuperar su nombre y apellido y el nombre y apellido de su inmediato supervisor. SELECT EMP.NOMBRE, EMP.APELLIDO, SUP.NOMBRE, SUP.APELLIDO FROM EMPLEADO EMP SUP WHERE EMP.SUPERCI = SUP.CI. En este caso hemos creado tabas alternativas EMP y SUP de la tabla EMPLEADO llamadas alias. Estas tablas se crean en la cláusula FROM, separadas con espacio en blanco y no con coma. EMP y SUP son copias de la tabla EMPLEADO, la primera EMP representa los empleados y el rol de supervisados y la segunda SUP representa los empleados y el rol de supervisor. Una vez creadas las tablas alias podemos hacer la combinación de las dos. 4.5 FUNCIONES DE COLUMNA Una función de columna reenvía un valor único dependiendo de la aplicación de la función sobre la expresión o del contenido de la columnas que se especifica entre paréntesis FUNCIÓN(expresión). Si aplicamos funciones de columna en un SELECT sin la cláusula GROUP BY, el resultado que obtendremos será una línea de valores. Si el SELECT esta conformado por la cláusula GROUP BY, la función de columna es aplicada a cada uno de los grupos, por lo tanto se obtendrá un valor por cada grupo distinto de valores. A este tipo de consultas se los denomina Consultas Agrupadas., y las columnas indicadas en la cláusula GROUP BY se denominan Columnas de agrupación. SQL cuenta con seis funciones de columna diferentes: 4.5.1 LA FUNCIÓN AVG() Calcula la media aritmética de un conjunto de valores contenidos en un campo específico de una consulta. Los datos de la columna deben ser de tipo numérico. Su sintaxis es : Avg(exp) Ejemplo: ISI0514 Fundamentos de Bases de Datos Página 73 de 120 Sistemas de Bases de Datos • Calcular el salario promedio de todos los trabajadores SELECT AVG(SALARIO) FROM EMPLEADO Como resultado obtenemos: AVG(SALARIO) 3512.5 • Calcular para cada uno de los departamentos el salario promedio de sus empleados. SELECT DNO, AVG(SALARIO) FROM EMPLEADO GROUP BY DNO Como resultado obtenemos: DNO 5 4 1 AVG(SALARIO) 3325 3100 5500 4.5.2 FUNCIÓN SUM() Devuelve la suma del conjunto de valores contenido en un campo específico de una consulta. Su sintaxis es: Sum(expresión) En donde expresión representa el nombre del campo que contiene los datos que desean sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Ejemplo: • Calcular la suma total del salario de los empleados. SELECT SUM(SALARIO) FROM EMPLEADOS Como resultado obtenemos: SUM(SALARIO) 28100 ISI0514 Fundamentos de Bases de Datos Página 74 de 120 Sistemas de Bases de Datos • Calcular la suma total del salario de los empleados por departamento. SELECT DNO, SUM(SALARIO) FROM EMPLEADO GROUP BY DNO Como resultado obtenemos: DNO 5 4 1 SUM(SALARIO) 13300 9300 5500 4.5.3 FUNCIÓN MAX Y MIN Devuelve el máximo o el mínimo de un conjunto de valores contenidos en un campo específico de una consulta. Su sintaxis es: Min(exp), Max (exp) En donde exp es el campo de una tabla sobre el que se desea realizar el cálculo. • Para el empleado que gana el máximo salario, mostrar su nombre y el salario. SELECT NOMBRE, MAX(SALARIO) FROM EMPLEADO Resultado: NOMBRE Jaime • MAX(SALARIO) 5500 Para cada departamento, mostrar el mínimo salario de los empleados. SELECT DNO, MIN(SALARIO) FROM EMPLEADO GROUP BY DNO 4.5.4 FUNCIÓN COUNT() Cuenta el número de valores de datos que hay en una columna. Su sintaxis es: Count(exp) ISI0514 Fundamentos de Bases de Datos Página 75 de 120 Sistemas de Bases de Datos Donde exp contiene el nombre del campo que deseamos contar. Puede contar cualquier tipo de dato incluso texto. Count cuenta el número de registros sin tener en cuenta el valor que está almacenado. No cuenta los registros que tienen campos nulos a menos que exp sea un carácter comodín asterisco (*). Ejemplo: • Calcular el número total de departamentos. SELECT COUNT(DNUMERO) FROM DEPARTAMENTO • Calcular el número total de empleados por departamento. SELECT DNO, COUNT(CI) FROM EMPLEADO GROUP BY DNO • Determinar el número de empleados que ganan más de $ 3000. SELECT COUNT(CI) FROM EMPLEADO WHERE SALARIO > 3000 4.5.5 FUNCIÓN COUNT(*) Proporciona como resultado el número de líneas de una tabla o de un grupo de líneas luego de aplicar una condición de selección. Ejemplo: • Calcular el número de empleados de sexo masculino. SELECT COUNT(*) FROM EMPLEADO WHERE SEXO = ‘M’ Resultado: COUNT(*) 5 La siguiente instrucción generará el mismo resultado: SELECT COUNT(CI) FROM EMPLEADO WHERE SEXO = ‘M’ ISI0514 Fundamentos de Bases de Datos Página 76 de 120 Sistemas de Bases de Datos 4.5.6 FUNCIÓN DE COLUMNAS CON LA PALABRA CLAVE DISTINCT Para eliminar valores duplicados, es necesario incluir la palabra clave DISTINCT delante del argumento de la función de columna inmediatamente después del paréntesis abierto. Para aplicar DISTINCT, la expresión de la función debe ser un simple nombre de columna. El estándar de SQL permite utilizar la palabra clave DISTINCT para las funciones de SUM(), AVG() y COUNT(). No permite el DISTINCT para las funciones de MAX() y MIN(), puesto que, no tiene impacto en su resultado. La palabra clave DISTINCT no puede ser usada con la función COUNT(*), ya que ésta no trata con una columna de datos sino que simplemente cuenta filas. Ejemplo: • Determinar los salarios distintos de los empleados. SELECT COUNT (DISTINCT SALARIO) FROM EMPLEADO 4.5.7 FUNCIONES DE COLUMNA CON VALORES NULOS El estándar de SQL especifica que los valores NULL de la columna deben ser ignorados para las funciones de columna. Esta especificación se muestra en los siguientes ejemplos: Ejemplo: • SELECT COUNT(*), COUNT(CI), COUNT(SUPERCI) FROM EMPLEADO Resultado: COUNT(*) COUNT(CI) COUNT(SUPERCI) 8 8 7 • En función de la tabla T, calcular la siguiente consulta. T ISI0514 A 3 5 2 1 4 B 1 NULL 2 1 1 Fundamentos de Bases de Datos Página 77 de 120 Sistemas de Bases de Datos SELECT SUM(A), SUM(B), (SUM(B) - SUM(B), SUM(A – B) FROM T Resultado: SUM(A) 15 SUM(B) 5 SUM(A) – SUM(B) 10 SUM(A-B) 5 El estándar especifica las siguientes reglas para gestionar las funciones de columna con valores NULL. • Si algún valor de datos de una columna es NULL, se ignora para el propósito de calcular el valor de la función de columna. • Si todos los datos de una columna son NULL, las funciones SUM(), AVG(), MIN() y MAX(), devuelven un valor NULL; la función COUNT() devuelve cero. • Si no hay datos en la columna (vacía), las funciones SUM(), AVG(), MIN() Y MAX() devuelven un valor cero. • La función COUNT(*) cuenta filas, y no depende de la presencia o ausencia de valores NULL en la columna; sin no hay filas devuelve un valor de cero. Los gestores de bases de datos comerciales pueden producir resultados diferentes a los especificados por el estándar. 4.5.8 CONDICIONES DE BÚSQUEDA DE GRUPOS (HAVING) La cláusula HAVING puede ser utilizada para seleccionar y rechazar grupos de filas, es decir, especifica una condición de búsqueda para grupos. Ejemplo: • Listar la CI de los empleados que tengan más de un dependiente. SELECT ECI FROM CARGAS_F GROUP BY ECI HAVING COUNT(*) > 1 • Para todos los empleados que han trabajado más de 30 horas, listar su cédula de identidad, nombre y número de horas trabajadas. SELECT ECI, NOMBRE, SUM(HORAS) FROM TRABAJA_EN, EMPLEADOS WHERE CI = ECI GROUP BY ECI HAVING SUM(HORAS) > 30 ISI0514 Fundamentos de Bases de Datos Página 78 de 120 Sistemas de Bases de Datos 4.6 SUBCONSULTAS SQL tiene la característica de permitir utilizar el resultado de una consulta como parte de otra, a esta característica se lo denomina Subconsulta. Una subconsulta aparece dentro de la cláusula WHERE o HAVING de otra sentencia SQL. Con la cláusula WHERE se seleccionan las filas individuales que aparecen en los resultados de la consulta, en tanto que, con la cláusula HAVING ayuda a seleccionar los grupos de filas que aparecen en los resultados de la consulta. Existen algunas diferencias entre una subconsulta y una sentencia SELECT real: • Una subconsuta produce una única columna de datos como resultado, esto significa que tiene un único elemento de selección. • La cláusula ORDER BY no puede ser especificada en una subconsulta. • Una subconsulta no puede ser la UNION de varias sentencias SELECT diferentes; sólo se permite una única sentencia SELECT. • Los nombres de columnas que aparecen en una subconsulta pueden referirse a columnas de tablas de la consulta principal. A esta referencia se lo denomina Referencia Externa. 4.6.1 CONDICIONES DE BÚSQUEDA EN UNA SUBCONSULTA. SQL proporciona las siguientes condiciones de búsqueda en una subconsulta. 4.6.1.1 Test de comparación subconsulta. (=, <>, <,<=, >, >=) Este test compara el valor de una expresión con el valor producido por una subconsulta, y devuelve un resultado verdadero (TRUE) si la comparación es cierta. Formato: ------- expresión ----- operador de comparación ---- ( Subconsulta ) El resultado de la subconsulta produce un único valor que será comparado con un valor de la fila que está siendo examinada en la consulta principal. Si la subconsuta produce más de una fila como resultado, SQL informa de una condición de error. Si la subconsulta no produce filas o produce un valor NULL, el test de comparación devuelve NULL. Ejemplo: ISI0514 Fundamentos de Bases de Datos Página 79 de 120 Sistemas de Bases de Datos • Listar el nombre y apellido de los empleados que trabajan en el departamento Administrativo. SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE DNO = (SELECT DNUMERO FROM DEPARTAMENTO WHERE DNOMBRE = ‘Administrativo’ En este ejemplo el resultado de la subconsulta es 4, valor que corresponde al número del departamento Administrativo. Este resultado de 4 será comparado con cada uno de los valores de la columna DNO de la tabla EMPLEADOS, devolviendo verdadero (TRUE) si la comparación es cierta. • Listar los nombres de los proyecto controlados por el departamento de Investigación. SELECT PNOMBRE FROM PROYECTO WHERE DNUM = (SELECT DNUMERO FROM DEPARTAMENTO WHERE DNOMBRE = ‘Investigación’ • Listar los nombres de los dependientes del empleado Humberto Pons. SELECT DEP_NOM FROM CAGAS_F WHERE ECI = (SELECT CI FROM EMPLEADO WHERE NOMBRE = ‘Humberto’ AND APELLIDO = ‘Pons’) 4.6.1.2 Test de pertenencia a subconjunto IN Este test se emplea para recuperar únicamente aquellos registros de la consulta principal para los que algunos registros de la subconsulta contienen un valor igual. Compara un único valor de datos con una columna de valores producida por una subconsulta y devuelve un resultado verdadero (TRUE) si el valor coincide con uno de los valores de la columna. Inversamente se puede utilizar NOT IN para recuperar únicamente aquellos registros de la consulta principal para los que no hay ningún registro de la subconsulta que contenga un valor igual. Ejemplo: • ISI0514 Recuperar el nombre de los empleados que tienen dependientes con el mismo sexo. Fundamentos de Bases de Datos Página 80 de 120 Sistemas de Bases de Datos SELECT NOMBRE FROM EMPLEADOS EMP WHERE CI IN (SELECT ECI FROM CARGAS_F WHERE ECI = EMP.CI AND SEXO = EMP .SEXO) • Recuperar el nombre de todos los empleados que trabajan en el proyecto Computadora. SELECT NOMBRE FROM EMPLEADOS WHERE CI IN (SELECT ECI FROM TRABAJA _EN, PROYECTO WHERE PNOMBRE = ‘Computadoras’ AND PNUMERO = PNO) 4.6.1.3 Test de existencia (EXISTS ) El test de existencia EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdadero / falso, para determinar si la subconsulta devuelve algún registro. Si la subconsulta produce filas, el test de EXISTS es TRUE, y si no produce filas, el test de EXISTS es FALSE. En este test, SQL permite utilizar la forma SELECT * en razón de que la condición de búsqueda EXISTS no utiliza realmente los resultados de la subconsulta. En la práctica siempre se utiliza la notación SELECT *. El test de existencia EXISTS se utiliza sólo con subconsultas. Ejemplos: • Recuperar el nombre de los empleados que tiene dependiente. SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE EXISTS (SELECT * FROM CARGAS_F WHERE CI = ECI) En este ejemplo, la subconsulta incluye una Referencia Externa a una columna de la tabla de la consulta principal. En la subconsulta, la columna CI referencia a la tabla EMPLEADOS de la consulta principal. Una Referencia Externa es un nombre de columna que no se refiere a ninguna de las tablas designadas en la cláusula FROM de la subconsulta en la cual aparece el nombre de la columna, en vez de ello, el nombre de la columna se refiere a una columna de una tabla específica en la tabla FROM de la consulta principal. ISI0514 Fundamentos de Bases de Datos Página 81 de 120 Sistemas de Bases de Datos En la práctica, la subconsulta de un test EXISTS siempre contiene una referencia externa que enlaza la subconsulta a la fila que actualmente está siendo examinada por la consulta principal. • Listar el nombre de los departamentos en donde los empleados ganan más de $ 3000. SELECT DNOMBRE FROM DEPARTAMENTOS WHERE EXISTS( SELECT * FROM EMPLEADO WHERE SALARIO > 3000 AND DNO = DNUMERO) 4.6.1.4 Test cuantificados (ANY y ALL) El test ANY se utiliza para recuperar filas de la consulta principal que satisfagan la comparación con cualquier otra fila recuperada en la subconsulta. Los operadores de comparación que se utilizan para el test ANY son ( = , <>, <, >, <=, >=). Si alguna de las comparaciones individuales produce un resultado TRUE, el test ANY devuelve un resultado TRUE. En la instrucción WHERE X < ANY (SELECT Y .......) el test puede leerse de la siguiente manera: “ en donde, para algún Y, X es menor que Y” Por ejemplo: si X = 1000 y la subconsulta genera una columna Y con los siguientes valores: 600, 500, 1200, 800, el resultado del ANY es TRUE, puesto que, existe al menos un valor (1200) que cumple la condición. WHERE X 1000 < ANY < Y 600 500 1200 800 Ejemplo: • Listar el nombre de los empleados que tienen dependiente SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE CI = ANY (SELECT ECI FROM CARGA_F) ISI0514 Fundamentos de Bases de Datos Página 82 de 120 Sistemas de Bases de Datos El test ALL, se utiliza para recuperar únicamente filas de la consulta principal que satisfacen la comparación con todas las filas recuperadas en la subconsulta. Los operadores de comparación que se utilizan para el test ALL son ( = , <>, <, >, <=, >=). Si todas las comparaciones individuales producen un resultado TRUE, el test ALL devuelve un resultado TRUE. En la instrucción WHERE X < ALL (SELECT Y .......) el test puede leerse de la siguiente manera: “ donde, para todo Y, X es menor que Y” Por ejemplo: si X = 1000 y la subconsulta genera una columna Y con los siguientes valores: 600, 500, 1200, 800, el resultado del ALL es FALSE, al existir valores que no cumplen con la condición. WHERE X 1000 < ALL < Y 600 500 1200 800 Ejemplo. • Listar el nombre de los empleados que por cada proyecto han trabajado más horas que las trabajadas por los empleados en el proyecto 30. SELECT NOMBRE, APELLIDO FROM EMPLEADO, TRABAJA_EN WHERE CI = ECI AND HORAS > ALL (SELECT HORAS FROM TRABAJA_EN WHERE PNO = 30) 4.7 BUSQUEDAS ANIDADAS Del mismo modo que se puede utilizar una subconsulta dentro de una consulta principal, se puede utilizar subconsultas dentro de otra subconsulta. A este tipo de consultas de más de dos niveles se las denomina Subconsultas Anidadas. SELECT ......... WHERE ............ (SELECT......... WHERE ............(SELECT........... WHERE .................)) • ISI0514 Determinar los proye ctos en donde trabajan empleados que tienen dependientes Cónyuges. Fundamentos de Bases de Datos Página 83 de 120 Sistemas de Bases de Datos SELECT PNOMBRE FROM PROYECTO WHERE PNUMERO IN (SELECT PNO FROM TRABAJA_EN WHERE ECI IN (SELECT ECI FROM CARGAS_F WHERE RELACIÓN = ‘Cónyuge’)) 4.8 OPERACIONES DE ACTUALIZACIÓN DE LA BASE DE DATOS. Denominadas también como consultas de acción y son las encargadas de añadir, borrar y modificar una fila. Las instrucciones que corresponden a estas acciones son: INSERT, DELETE y UPDATE. Es necesario indicar que las operaciones de actualización pueden ser el origen de errores en la base de datos, si las tablas relacionales no son bien construidas, análisis que se realizará en el siguiente capítulo. 4.8.1 INSERT Agrega una fila a una tabla. Se conoce como una consulta de datos añadidos. A una fila se le considera como la unidad de datos más pequeña que puede añadirse a una base de datos relacional. Esta instrucción puede ser de tres tipos: • Insertar una única fila. Para este caso la sintaxis es la siguiente: INSERT INTO tabla (campo1, campo2, ….. campo n) VALUES (valor 1, valor 2, valor …… n) Esta consulta graba en el campo 1 el valor 1, en el campo 2 el valor 2 y así sucesivamente. Consideraciones para esta instrucción: ISI0514 - El INSERT se puede utilizar con SQL interactivo. - Si se omite el nombre de una columna, SQL inserta NULL. - Si se insertan todas las columnas de una tabla, se puede omitir el listado del nombre de las columnas en la sentencia INSERT. Al utilizarse esta alternativa, SQL genera automáticamente todas las columnas de la tabla en secuencia de izquierda a derecha. En este caso si se quiere ingresar valores nulos se tendrá que utilizar la palabra clave NULL. Fundamentos de Bases de Datos Página 84 de 120 Sistemas de Bases de Datos Ejemplo: • Insertar un nuevo empleado con los siguientes datos: Nombre: Apellido: CI: Fecha de nacimiento: Dirección: Sexo: Salario: Supervisor: Departamento: Pedro Torres 112233445 25/Feb/1967 Vega Muñoz 10-12 Masculino 1000 333445555 Compras INSERT INTO EMPLEADOS (NOMBRE, INICIAL, APELLIDO, CI, FECHA_N, DIRECCIÓN, SEXO, SALARIO, SUPERCI, DNO) VALUES(‘Pedro’ , ‘J’ , ’Torres’ , ’112233445’ , ’25/Feb/1967’ , ’Vega Muñoz’ , ’M’, 1000 , ’333445555’ , 5) • Inserta Multifilas Para esta alternativa su sintaxis es: INSERT INTO Tabla (campo 1, campo 2,.... , campoN) SELECT TablaOrigen.campo2, TablaOrigen.campo2, ................................... TablaOrigen.campoN). FROM TablaOrigen En este caso se seleccionarán los campos 1, 2, .... N de la TablaOrigen y se grabarán en los campos 1, 2, .... N de la Tabla. La condición SELECT puede incluir la cláusula WHERE para filtrar las filas a copiar. Si la Tabla y TablaOrigen poseen la misma estructura, podemos simplificar la sintaxis a: INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen. Ejemplo: Copiar en la tabla EMPLEADO2, el nombre, apellido, ci y salario, de todos los empleado que ganan más de $ 2000. INSET INTO EMPLEADO2 (NOMBRE, APELLIDO. CI, SALARIO) SELECT (NOMBRE, APELLIDO, CI, SALARIO) FROM EMPLEADO WHERE SALARIO > 2000 La representación gráfica del desarrollo de esta consulta es la siguiente: ISI0514 Fundamentos de Bases de Datos Página 85 de 120 Sistemas de Bases de Datos EMPLEADO NOMBRE APELLIDO CI CONSULTA ............. SALARIO DNO SELECT (NOMBRE, APELLIDO, CI, SALARIO FROM EMPLEADO WHERE SALARIO > 2000 EMPLEADO2 NOMBRE APELLIDO CI Resultado de la Consulta SALARIO NOMBRE APELLIDO CI SALARIO Restricciones (estándar SQL1) o La consulta no puede contener una cláusula ORDER BY. o El resultado de la consulta debe contener el mismo número de columnas que hay en la lista de columnas de la sentencia INSERT y además los tipos de datos deben ser compatibles columna a columna. o La tabla destino no puede aparecer en la cláusula FROM. • Carga Masiva Los productos DBMS comerciales incluyen una capacidad de carga masiva que cargan los datos desde un archivo a una tabla a alta velocidad. El estándar SQL ANSI/ISO no considera esta función y suele ser suministrada como un programa de utilidad autónomo en lugar de formar parte del lenguaje SQL. La utilidad que cada vendedor suministra, dispone de un conjunto ligeramente diferente de características, funciones y órdenes. 4.8.2 DELETE La sentencia DELETE elimina las filas seleccionadas de datos de una única tabla. La cláusula FROM especifica la tabla destino que contiene las filas. La cláusula WHERE especifica qué filas de la tabla van a ser suprimidas. Esta instrucción elimina las filas completas, no es posible eliminar el contenido de algún campo en concreto. Sus sintaxis es: DELETE FROM tabla WHERE criterio Ejemplos: • ISI0514 Eliminar a Jaime Pérez de la base de datos. Fundamentos de Bases de Datos Página 86 de 120 Sistemas de Bases de Datos DELETE FROM EMPLEADO WHERE NOMBRE = ‘Jaime’ AND APELLIDO = ‘Pérez’ • Suprimir todas las filas de la tabla departamento. DELETE FROM DEPARTAMENTO Se suprimen los datos de la tabla departamento, pero la tabla no es borrada. • Eliminar las cargas familiares del empleado Humberto Pons DELETE FROM CARGA_F, EMPLEADO WHERE ECI = CI AND NOMBRE = ‘Humberto’ AND APELLIDO = ‘Pons’ En esta instrucción las filas seleccionadas que se eliminarán, dependen de los datos contenidos en otras tablas. La instrucción anterior presenta un error, al especificarse más de dos tablas en la cláusula FROM Para evitar estos inconvenientes es necesario utilizar subconsultas: DELETE FROM CARGA_F WHERE ECI = (SELECT CI FROM EMPLEADO WHERE NOMBRE = ‘Humberto’ AND APELLIDO = ‘Pons’ 4.8.3 UPDATE Esta instrucción cambia los valores de los campos de una tabla basándose en un criterio especificado. UPDATE tabla SET Campo1=Valor1, Campo2=Valor2, ...., CampoN=ValorN WHERE Criterio; Ejemplo: • Incrementar el salario en 10 % a los empleados que trabajan en el departamento Administrativo. UPDATE EMPLEADOS SET SALARIO = SALARIO * 1.1 WHERE DNO = (SELECT DNUMERO FROM DEPARTAMENTO WHERE DNOMBRE = ‘Administración’ ISI0514 Fundamentos de Bases de Datos Página 87 de 120 Sistemas de Bases de Datos 4.9 INTEGRIDAD DE DATOS Cuando los contenidos de una Base de Datos se modifica con las sentencias INSERT, DELETE, UPDATE, la integridad puede perderse. Con el propósito de preservar la consistencia y corrección de los datos almacenados , un DBMS relacional impone una o más restricciones de integridad que pueden ser de varios tipos: RESTRICCIONES DE INTEGRIDAD: 1. Datos requeridos : Ciertas columnas de una base de datos deben contener un valor de dato válido en cada fila, es decir no se permite ausencia de valor o que contenga valores NULL. Esta restricción de integridad se declara cuando la tabla que contiene la columna se crea por primera vez mediante la restricción NOT NULL, que se especifica en la sentencia CREATE TABLE. 2. Chequeo de validez: En una base de datos cada columna tiene un dominio, por ejemplo: utilizar números mayores a 1000 para el registro del CODIGO en una tabla de estudiantes, o la columna EDAD de los empleados de una empresa debe estar en el rango de 20 a 45 años. El gestor de bases de datos puede ser preparado para que se introduzcan datos válidos para cada columna de acuerdo a su dominio y tipo. (chek) 3. Integridad de Entidad: La clave primaria de una tabla debe contener un valor único para cada fila diferente a los valores de todas las filas restantes, caso contrario, la base de datos perderá su integridad. Esta exigencia se denomina restricción de integridad de entidad. El DBMS comprueba automáticamente la unicidad del valor de la clave primaria con cada sentencia INSERT y UPDATE. En ciertas ocasiones resulta necesario que una columna que no es clave primaria de una tabla, contenga valores únicos en cada fila. Este requerimiento se obtiene con la restricción de unicidad, que se declara mediante la restricción UNIQUE de la sentencia CREATE TABLE. Toda columna que forma parte de una clave primaria y toda columna designada con una restricción de unicidad deben ser declaradas NOT NULL. 4. Integridad Referencial: “Si una tabla R2 tiene una clave foránea correspondiente a la clave primaria de la tabla R1, todo va lor de dicha clave foránea debe concordar con un valor de la clave primaria de R1 o ser nulo”. En otros términos, una clave foránea en una base de datos relacional, enlaza cada fila de la tabla hijo que contiene la clave foránea con la fila de la tabla padre que contiene el valor de la clave primaria correspondiente. ISI0514 Fundamentos de Bases de Datos Página 88 de 120 Sistemas de Bases de Datos EMPLEADO NOMBRE APELLIDO Juan CI FECHA_N DIRECCIÓN SEXO SALARIO SUPERCI DNO Polo 123456789 3-mar-59 Sucre 7-12 M 333445555 5 Humberto Pons 333445555 25-dic-60 Bolívar 5-67 M 888665555 5 Irma Vega 999887777 13-nov-50 P. Córdova 3-45 F 987654321 4 Elena Tapia 987654321 3-may-61 F 888665555 4 Pablo Castro 666884444 15-sep-55 Bolívar 1-50 M 333445555 5 Marcia Mora 453453453 29-mar-60 Colombia 4-23 F 333445555 5 Manuel Bonilla 987987987 16-jul-58 B. Malo 1-10 M 987654321 4 Jaime Pérez 888665555 5-abr-57 Sangurima 8-34 M null 1 DEPARTAMENTO DNOMBRE Ordóñez 7-29 DNUMERO JEFECI JEFE_FI Investigación 5 333445555 12-may-80 Administrativo 4 987654321 05-dic-82 Compras 1 888665555 06-jun-78 Las columnas DNUMERO y DNO, crean una relación padre/hijo entre las tablas DEPARTAMENTO Y EMPLEADO. Cada fila DEPARTAMENTO (padre) tiene cero (según el caso) o más filas EMPLEADO (hijo) con nombres de departamento coincidentes. Análogamente, cada fila EMPLEADO (hijo) tiene exactamente una fila DEPARTAMENTO (padre) con un número de departamento coincidente. Si se intenta realizar la instrucción: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, CI, EDAD, SALARIO, DNO) VALUES (´Juan´, Peréz´, 111222333, 35, 1500, 6) Aparentemente no hay error, la base de datos mostrará que Juan Pérez trabaja en el departamento número 6, aun cuando no existe el departamento 6 en la tabla DEPARTAMENTO. Sin embargo, la fila recién ingresada rompe la relación padre/hijo entre las dos tablas. Este ejemplo demuestra que necesariamente el valor de la columna DNO debe ser forzado para que corresponda a algún valor de los que aparecen en la columna DNUMERO. Esta regla se conoce como restricción de Integridad Refere ncial, que asegura la integridad de las relaciones padre/hijo creadas mediante claves foráneas y claves primarias. Problemas de integridad referencial: • ISI0514 La inserción de una nueva fila hijo : Cuando se inserta una nueva fila en la tabla EMPLEADO, su va lor de la clave foránea DNO debe coincidir con uno de los valores de la clave primaria DNUMERO. Si el valor no coincide, la inserción de la fila corromperá la base de datos, ya que habrá un hijo sin un padre (un huérfano). El insertar una nueva fila en la tabla padre no representa problemas a la base de datos, porque simplemente se creará un padre sin hijos. Fundamentos de Bases de Datos Página 89 de 120 Sistemas de Bases de Datos • La actualización de la clave foránea de una fila hijo : Si se modifica la clave foránea DNO mediante la sentencia UPDATE, el nuevo valor debe coincid ir con un valor de la clave primaria DNUMERO de la tabla padre (DEPARTAMENTO), caso contrario la fila actualizada quedará huérfana. • La supresión de una fila padre : Si una fila de la tabla padre (DEPARTAMENTO) que tiene uno o varios hijos en la tabla EMPLEADOS se suprime, todas las filas de la tabla hijo quedarán huérfanas. Si se suprime una fila de la tabla hijo, esto no representa problema, pues el padre de esta fila tendrá un hijo menos después de la eliminación. Supongamos que se cierra el departamento Administrativo y deseamos eliminar la fila correspondiente; ¿ Qué sucedería con todos los empleados que trabajaban en este departamento?. Según el caso se podría desear: • - Impedir que el departamento se elimine hasta que los empleados fueran reasignados. - Suprimir automáticamente a los tres empleados de la tabla EMPLEADO. - Poner la columna DNO de los tres empleados a NULL, indicando que la asignación del departamento es desconocida. - Poner la columna DNO de los tres empleados a algún valor por defecto. La actualización de la clave primaria en una fila padre . Para este caso, si el valor de la clave primaria en una tabla padre se modifica, todos los hijos actuales de esa fila quedarán huérfanos. En la práctica, esta restricción no suele provocar problemas, ya que los valores de claves primarias casi nunca se modifican. Reglas de supresión actualización: ISI0514 • Operación restringida (RESTRICT): Borrar (DELETE) una fila o modificar (UPDATE) la clave primaria de una tabla que contiene la clave primaria referenciada, sólo se permite, si no existen filas con dicha clave en la tabla que contiene la clave foránea. La operación RESTRICT impide suprimir una fila o actualizar la clave primaria de la tabla padre si la fila tiene algún hijo. Ejemplo: Para borrar un departamento, no tendría que haber ningún empleado asignado a dicho departamento. • Operación en cascada (CASCADE): El borrar o modificar una fila de la tabla que contiene la clave primaria referenciada, lleva consigo el borrado o modificado en cascada de las filas de la tabla que contiene la clave foránea. CASCADE le dice al DBMS que cuando una fila es borrada o se modifique la llave primaria de una tabla Fundamentos de Bases de Datos Página 90 de 120 Sistemas de Bases de Datos padre, todas sus filas hijos también deberán ser borradas o modificadas automáticamente. Ejemplo: Al modificar el número de un departamento, modifica automáticamente el número de departamento de todos los empleados asignados a ese departamento. Para el caso de eliminación de un departamento, se suprime automáticamente todos los empleados asignados a ese departamento. • Operación de puesta a nulos (SET NULL). Al borrar una fila o modificar el valor de una clave primaria de una tabla padre, los valores de la clave foránea de todas las filas hijo deben automáticamente pasar a NULL. Ejemplo: Cuando borramos un departamento, a los empleados que pertenecen a ese departamento en la tabla EMPLEADOS, se indicará que la asignación del departamento al empleado es desconocida (NULL). • Operación de puesta a valor por defecto (SET DEFAULT). Indica que cuando la fila padre sea suprimida o el valor de la clave primaria de una fila padre sea modificada, el valor de la clave foránea en todas las filas hijo deben automáticamente pasarse al valor por defecto para esa columna particular. Ejemplo: si se modifica el número de un departamento, automáticamente cambia la asignación del departamento de su empleado al departamento por defecto especificado en la definición de la tabla EMPLEADO. Si no se especifica una regla, la regla RESTRICT, es el valor por omisión. 4.10 DEFINICIÓN DE DATOS EN SQL 4.10.1 Comando CREATE TABLE. Este comando es utilizado para especificar una nueva tabla, para darle un nombre y especificar cada uno de sus atributos. Cada atributo es especificado con un nombre, su tipo, su dominio de valores y alguna condición del atributo. Formato: CREATE TABLE nombre tabla (lista de columnas – tipo - NOT NULL, NOT NULL WHIT DEFAULT). Las relaciones creadas con la instrucción CREATE TABLE son llamadas tablas base. NOT NULL: impide la introducción de valores nulos, y provoca la emisión de un mensaje de error al momento de tratar de ingresar un valor nulo. NOT NULL WHIT DAFAULT: permite reemplazar a la ausencia de un valor, por un valor por omisión, dependiendo del tipo de dato definido para la columna. ISI0514 Fundamentos de Bases de Datos Página 91 de 120 Sistemas de Bases de Datos Cero para los datos numéricos. Blanco para las cadenas de caracteres de longitud fija Cadena de longitud cero para las cadenas de caracteres de longitud variable Ejemplo: CREATE TABLE EMPLEADO(NOMBRE APELLIDO CI FECHA_N DIRECCION SEXO SALARIO SUPERCI DNO VARCHAR(15) NOT NULL, VARCHAR(15) NOT NULL, CHAR(9) NOT NULL, CHAR(9), VARCHAR(30), CHAR(1), INTEGER, CHAR(9), INTEGER); CREATE TABLE DEPARTAMENTO ( DNOMBRE DNUMERO JEFECI JEFE_FI CREATE TABLE LIBROS (AUTOR TITULO AÑO GENERO PRECIO AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUÉS LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS VARCHAR(15) NOT NULL, INTEGER NOT NULL, CHAR(9), CHAR(9)); CHARACTER(8) NOT NULL, CHARACTER(24) NOT NULL, SMALLINT, CHAR(8) NOT NULL WHIT DEFAULT, DECIMAL(5,2)); AÑO 1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866 GENERO TEATRO POESIA ROMANA ROMANA ROMANA ROMANA ROMANA TEATRO ROMANA ROMANA ROMANA POESIA PRECIO 120.000 78.500 148.500 100.000 80.000 80.000 110.000 98.500 110.500 99.500 90.500 Tabla LIBROS 4.10.2 Comando DROP TABLE Si se considera que una tabla no es necesaria en la base de datos relacional, se puede eliminar utilizando el comando DROP TABLE. Ejemplo: DROP TABLE EMPLEADO; ISI0514 Fundamentos de Bases de Datos Página 92 de 120 Sistemas de Bases de Datos 4.10.3 Comando ALTER TABLE Si se necesita adicionar un atributo (columna) a una de las tablas de la base de datos relacional, utilizamos el comando ALTER TABLE. El nuevo atributo tendrá nulos en todas las tuplas después que el comando es ejecutado. Ejemplo: ALTER TABLE EMPLEADO ADD JOB VARCHAR(12); 4. 11 EJEMPLOS 1. Recuperar la fecha de nacimiento y dirección de la empleada Elena Tapia. SELECT FECHA_N, DIRECCION FROM EMPLEADO WHERE NOMBRE = ‘Elena’ AND APELLIDO = ‘Tapia’ 2. Recuperar el nombre, apellido y salario de todos los empleados que trabajan en el departamento administrativo. SELECT NOMBRE, APELLIDO, SALARIO FROM EMPLEADO, DEPARTAMENTO WHERE DNO = DNUMERO AND DNOMBRE = ‘Administrativo’ 3. Seleccionar toda la información de los empleados que trabajan en el departamento 5. SELECT * FROM EMPLEADO WHERE DNO = 5 4. Seleccionar toda la información de los empleados que trabajan en el departamento de investigación. SELECT * FROM EMPLEADO WHERE DNOMBRE = ‘Investigación’ AND DNUMERO = DNO 5. Listar los diferentes tipos de salarios de los empleados. SELECT DISTINCT SALARIO FROM EMPLEADO ISI0514 Fundamentos de Bases de Datos Página 93 de 120 Sistemas de Bases de Datos 6. Recuperar el nombre y apellido de los empleados que tienen dependientes. SELECT DISTINCT NOMBRE, APELLIDO FROM EMPLEADO, CARGA_F WHERE CI = ECI 7. Listar el nombre, apellido y la cédula de identidad de todos los empleados que trabajan en el departamento de investigación y ganan mas de $ 2500. SELECT NOMBRE. APELLIDO, SALARIO FROM EMPLEADO, DEPARTAMENTO WHERE DNOMBRE = ‘Investigación’ AND SALARIO > 2500 AND DNO = DNUMERO 8. Recuperar el nombre, dirección y sexo de los jefes de departamento. SELECT NOMBRE, DIRECCION, SEXO FROM EMPLEADO, DEPARTAMENTO WHERE JEFECI = CI 9. Para cada proyecto localizado en Cuenca, listar el número de proyecto, el número de departamento que lo controla, incluyendo el apellido del jefe, la dirección y salario. SELECT PNUMERO, DNUM, APELLIDO, DIRECCION, SALARIO FROM EMPLEADO, PROYECTO, DEPARTAMENTO WHERE PLOCAL = ‘Cuenca’ AND DNUM = DNUMERO AND JEFECI = CI 10. Listar el apellido del empleado y su sexo e incluir el nombre y sexo de su dependiente. SELECT APELLIDO, EMPLEADO. SEXO, DEP_NOM, CARGA_F.SEXO FROM EMPLEADO, CARGA_F WHERE CI = ECI 11. Listar el nombre del departamento y su localización. SELECT DNOMBRE, DEP_LOCA FROM DEPARTAMENTO, LOCALIZACIÓN WHERE DEPARTAMENTO.DNUMERO = LOCALIZACION.DNUMERO 12. Recuperar el nombre y el apellido de todos los empleados de sexo masculino y el nombre, apellido y sexo de su supervisor. ISI0514 Fundamentos de Bases de Datos Página 94 de 120 Sistemas de Bases de Datos SELECT E.NOMBRE, E.APELLIDO, E.SEXO, S.NOMBRE, S.APELLIDO, S.SEXO FROM EMPLEADO E, EMPLEADO S WHERE E.SUPERCI = S.CI AND E.SEXO = ‘M’ 13. Listar la cédula de identidad y el apellido de todos los empleados que ganan más de $ 2500 o han trabajado más de 20 horas en cada uno de los proyectos. SELECT CI, APELLIDO FROM EMPLEADO WHERE SALARIO > 2500 UNION SELECT ECI, APELLIDO FROM TRABAJA_EN, EMPLEADO WHERE HORAS > 20 AND CI = ECI 14. Listar todos los números de proyecto que son controlados por el departamento en donde el empleado Tapia es jefe, o todos los proyecto en donde trabaja el empleado Tapia. SELECT PNUMERO FROM EMPLEADO, DEPARTAMENTO, PROYECTO WHERE APELLIDO = ‘Tapia’ AND CI = JEFECI AND DNUMERO = DNUM UNION SELECT PNO FROM EMPLEADO, TRABAJA_EN WHERE APELLIDO = ‘Tapia’ AND CI = ECI 15. Listar los nombres de los empleados que trabajan en los departamentos 1, 10 y 30. SELECT DISTINCT NOMBRE, APELLIDO FROM EMPLEADO, TRABAJA_EN WHERE CI = ECI AND PNO IN (1,10,30) 16. Listar el nombre, apellido y la cédula de identidad de todos los empleados cuyos apellidos están comprendidos entre los apellidos Mora y Vega. SELECT NOMBRE, APELLIDO, CI FROM EMPLEADO WHERE APELLIDO BETWEEN ‘Mora’ AND ‘Vega’ ISI0514 Fundamentos de Bases de Datos Página 95 de 120 Sistemas de Bases de Datos 17. Listar el nombre de los empleados que no tienen supervisor. SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE SUPERCI IS NULL 18. Listar el nombre del empleado, su cedula de identidad, el número de proyecto y las horas trabajadas en cada proyecto. Ordenar de forma ascendente por horas. SELECT NOMBRE, CI, PNO, HORAS FROM EMPLEADO, TRABAJA_EN WHERE CI = ECI ORDER BY 4 19. Listar los nombres en orden alfabético de los dependientes de sexo femenino, seguidos de los dependientes de sexo masculino. SELECT DEP_NOM, SEXO FROM CARGA_F ORDER BY 2, DEP_NOM 20. Recuperar los nombres de los empleados que trabajan en los proyectos controlados por el departamento de investigación. SELECT NOMBRE FROM EMPLEADO WHERE CI IN (SELECT ECI FROM DEPARTAMENTO, PROYECTO, TRABAJA_EN WHERE DNOMBRE = ‘Investigación’ AND DNUMERO = DNUM AND PNUMERO = PNO ) 21. Recuperar el nombre de los empleados que tiene un dependiente con el mismo primer nombre y el mismo sexo que el empleado. Consulta simple: SELECT NOMBRE. APELLIDO FROM EMPLEADO E, CARGA_F C WHERE E.CI = C.ECI AND E.SEXO = C.SEXO AND F.NOMBRE = C.DEP_NOM Con subconsulta: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE CI IN (SELECT ECI ISI0514 Fundamentos de Bases de Datos Página 96 de 120 Sistemas de Bases de Datos FROM CARGA_F WHERE NOMBRE = DEP_NOM AND EMPLEADO.SEXO = CARGA_F.SEXO AND CI = ECI) 22. Seleccionar el nombre y apellido de todos los empleados que tiene únicamente dependientes de sexo femenino SELECT NOMBRE, APELLIDO FROM EMPLEADO, CARGA_F WHERE CI = ECI AND ECI NOT IN (SELECT ECI FROM CARGA_F WHERE SEXO = ‘M’) 23. Listar el nombre de los jefes de departamento que tienen dependientes. Alternativa 1 SELECT NOMBRE, APELLIDO FROM EMPLEADO, DEPARTAMENTO, CARGA_F WHERE JEFECI = CI AND ECI = CI Alternativa 2 SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE EXIST (SELECT * FROM DEPARTAMENTO WHERE CI = JEFECI) AND EXIST (SELECT * FROM CARGA_F WHERE ECI = CI) 24. Calcular el salario máximo y mínimo de los empleados, el salario total, su promedio y el número total de empleados. SELECT MAX(SALARIO), MIN(SALARIO), SUM(SALARI0), AVG(SALARIO), COUNT(CI) FROM EMPLEADO 25. Para el departamento de Investigación, calcular el salario máximo y mínimo de los empleados, el salario total y su promedio y el número total de empleados. SELECT MAX(SALARIO), MIN(SALARIO), SUM(SALARI0), AVG(SALARIO), COUNT(CI) FROM EMPLEADO, DEPARTAMENTO ISI0514 Fundamentos de Bases de Datos Página 97 de 120 Sistemas de Bases de Datos WHERE DNUMERO = DNO AND DNOMBRE = ‘Investigación’ 26. Para cada departamento calcular el salario máximo y mínimo de los empleados, el salario total y su promedio y el número total de empleados. SELECT DNO, MAX(SALARIO), MIN(SALARIO), SUM(SALARI0), AVG(SALARIO), COUNT(CI) FROM EMPLEADO GROUP BY DNO 27. Para cada departamento calcular el salario máximo y mínimo de los empleados, el salario total y su promedio, y el número total de empleados. Siempre que el departamento tenga más de 2 empleados. SELECT DNO, MAX(SALARIO), MIN(SALARIO), SUM(SALARI0), AVG(SALARIO), COUNT(CI) FROM EMPLEADO GROUP BY DNO HAVING COUNT(CI) > 2 28. Obtener el número total de horas trabajadas por cada empleado. SELECT NOMBRE, APELLIDO, SUM(HORAS) FROM EMPLEADO, TRABAJA_EN WHERE CI = ECI GROUP BY ECI 29. Determinar el número total de horas trabajadas por los empleados en cada proyecto. SELECT PNOMBRE, PNUMERO, SUM(HORAS) FROM TRABAJA_EN, PROYECTO WHERE PNUMERO = PNO GROUP BY PNO 30. Determinar el número de dependientes de cada empleado. SELECT APELLIDO, COUNT(ECI) FROM EMPLEADO, CARGA_F WHERE CI = ECI GROUP BY ECI 31. Determinar el número de salarios diferentes de los empleados. SELECT COUNT (DISTINCT SALARIO) FROM EMPLEADO ISI0514 Fundamentos de Bases de Datos Página 98 de 120 Sistemas de Bases de Datos 32. Listar el nombre de los empleados que tienen 2 o más dependientes. SELECT NOMBRE, APELLIDO FROM EMPLEADO, CARGA_F WHERE CI = ECI GROUP BY ECI HAVING COUNT(ECI) > 2 33. Para cada proyecto con más de dos empleados, recuperar el nombre y número de proyecto y los empleados que trabajan en el proyecto. SELECT PNUMERO, PNOMBRE, COUNT(CI) FROM PROYECTO, TRABAJA_EN WHERE PNO = PNUMERO GROUP BY PNUMERO, PNOMBRE HAVING COUNT(CI) > 2 34. Listar el nombre de departamento, número de empleados y salario promedio por departamento, de todos los departamentos en donde el promedio del salario de los empleados es menor a $ 3000. SELECT DNOMBRE, COUNT(CI), AVG(SALARIO) FROM EMPLEADO, DEPARTAMENTO WHERE DNO = DNUMERO GROUP BY DNO HAVING AVG(SALARIO) < 3000 35. Cuantos supervisores hay en la compañía. SELECT COUNT (DISTINCT SUPERCI) FROM EMPLEADO 36. Determinar el nombre del empleado que tiene como dependiente a Miguel. SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE CI = (SELECT ECI FROM CARGA_F WHERE DEP_NOM = ‘Miguel’) (Esta instrucción tal como está concebida se ejecutará siempre y cuando exista un sólo dependiente de nombre Miguel). ISI0514 Fundamentos de Bases de Datos Página 99 de 120 Sistemas de Bases de Datos 37. Listar el nombre de los empleados que tengan por lo menos una dependiente mujer. SELECT NOMBRE , APELLIDO FROM EMPLEADO, CARGA_F WHERE CI IN (SELECT ECI FROM CARGA_F WHERE SEXO = ‘F’) 38. Calcular la nota final de cada uno de los estudiantes (la nota final es igual al promedio de los dos aportes más el examen final). SELECT ESTUDIANTE.NOMBRE, APELLIDO, MATERIA.NOMBRE, (APORTE1 + APORTE2)/2 + FINAL FROM CALIFICACIÓN, ESTUDIANTE, MATERIA WHERE ESTUDIANTE.CI = CALIFICACIÓN.CI AND MATERIA.CODIGO = CALIFICACIÓN.CODIGO 39. Para que los estudiantes aprueben una materia deben tener una nota final igual o mayor a 14, se pide, listar los nombres de los estudiantes, las materias reprobadas y su nota final. (nota final = (aporte1 + aporte2)/2 + final). SELECT ESTUDIANTE.NOMBRE, APELLIDO, MATERIA.NOMBRE, (APORTE1 + APORTE2)/2 + FINAL FROM CALIFICACIÓN, ESTUDIANTE, MATERIA WHERE ESTUDIANTE.CI = CALIFICACIÓN.CI AND MATERIA.CODIGO = CALIFICACIÓN.CODIGO AND (APORTE1 + APORTE2)/2 + FINAL < 14 40. Listar el total de créditos aprobados por el estudiante Barrera con cédula de identidad 1101775849. SELECT SUM(N_CREDITOS) FROM MATERIA, CALIFICACIÓN WHERE CI = ‘1101775849’ AND (APORTE1 + APORTE2)/2 + FINAL >= 14 AND MATERIA.CODIGO = CALIFICACIÓN.CODIGO 41. Determinar el número de alumnos que estudian la materia de Sistemas Expertos. SELECT COUNT (CALIFICACIÓN.CODIGO) FROM CALIFICACIÓN, MATERIA WHERE NOMBRE = 'Bases de Datos' AND MATERIA.CODIGO = CALIFICACION.CODIGO ISI0514 Fundamentos de Bases de Datos Página 100 de 120 Sistemas de Bases de Datos 42. Calcular el promedio de las notas de cada una de las materias. SELECT MATERIA.NOMBRE, AVG(APORTE1), AVG(APORTE2), AVG(FINAL) FROM CALIFICACIÓN, MATERIA WHERE MATERIA.CODIGO = CALIFICACIÓN.CODIGO GROUP BY MATERIA.CODIGO 43. Calcular el promedio de notas de cada uno de los estud iantes. SELECT NOMBRE, APELLIDO, AVG(APORTE1), AVG(APORTE2), AVG(FINAL) FROM ESTUDIANTE, CALIFICACIÓN WHERE ESTUDIANTE.CI = CALIFICACIÓN.CI GROUP BY CALIFICACIÓN.CI ISI0514 Fundamentos de Bases de Datos Página 101 de 120 Sistemas de Bases de Datos CAPITULO 5 DEPENDENCIA FUNCIONAL Y NORMALIZACION DE BASES DE DATOS RELACIONALES En este capítulo nos interesaremos en las operaciones de mantenimiento de una tabla: insertar, modificar y eliminar un dato, estas operaciones de mantenimiento pueden ser el origen de errores si las tablas relacionales no son bien construidas. Se verá las dependencias funcionales, que es la normalización de tablas y que aportan las tres primeras formas normales. 5.1 EJEMPLOS DE ANOMALÍAS EN LA ACTUALIZACIÓN. Para ilustrar las operaciones de actualización o mantenimiento de tablas y los problemas que se presentan al utilizar estas instrucciones: INSERT, UPDATE y DELETE, definimos la siguiente tabla OBRAS: CREATE TABLE OBRAS (AUTOR CHR(8) NOT NULL WITH DEFAULT; TITULO CHR(24) NOT NULL WITH DEFAULT; FE_NA INT NOT NULL WITH DEFAULT; SALA INT; ESTANTE INT) ; AUTOR TITULO FE_NA SALA ESTANTE Tabla: OBRAS Esta tabla contiene los datos relativos a los autores (nombre del autor y el año de nacimiento), el título de las obras escritas por estos autores, así como, la sala y el estante de la biblioteca donde se encuentran ubicadas las obras organizadas por autor. Adicionalmente trabajaremos con la estructura y los datos de las siguientes tablas (LIBROS y AUTORES). AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ISI0514 TITULO HERNANI LAS CONTEMPACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS Tabla: LIBROS AÑO 1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866 GENERO TEATRO POESIA ROMANA ROMANA ROMANA ROMANA ROMANA TEATRO ROMANA ROMANA ROMANA POESIA Fundamentos de Bases de Datos PRECIO 120,000 78,500 148,500 100,000 80,000 80,000 110,000 98,500 110,500 99,500 90,500 Página 102 de 120 Sistemas de Bases de Datos AUTOR HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND FE_NA 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804 LUGAR BESANCON TOURS VILLERS PARIS GRENOBLE ROUEN METZ PARIS CHARLEVILLE PARIS SALA 2 1 1 1 3 1 3 3 3 3 ESTANTE 3 1 1 1 5 2 6 6 5 5 Tabla: AUTORES En los ejemplos que se desarrollan a continuación, se detallan las diferentes anomalías que pueden presentarse al utilizar los comandos de actualización de datos. 5.1.1 INSERT Se ha visto que la instrucción INSERT permite insertar información en una tabla previamente creada, por medio de la opción VALUES. Es igualmente posible incluir un subselect en la instrucción INSERT, para poder insertar en una tabla valores provenientes de otra tabla. INSERT INTO nombre-tabla (nombre-columnas,) SELECT nombre-columna FROM nombre -tabla. Ejemplo 5.1 Inicializar la tabla OBRAS (considerada como vacía) a partir de la tabla LIBROS y listar la tabla después de inicializar. INSERT INTO OBRAS (AUTOR, TITULO) SELECT AUTOR, TITULO, FROM LIBROS; SELECT * FROM OBRAS; AUTOR TITULO FE_NA SALA ESTANTE HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------- ISI0514 Fundamentos de Bases de Datos Página 103 de 120 Sistemas de Bases de Datos La columna FE_NA, SALA y ESTANTE no figuran en la orden INSERT: la fecha de nacimiento se coloca en cero, puesto que, su formato está especificado como NOT NULL WITH DEFAULT, mientras que, los números de sala y estante son puestos en NULL. Ejemplo 5.2: Inicializar la tabla OBRAS (considerada como vacía) a partir de la tabla AUTORES y listar después de la inicialización. INSERT INTO OBRAS (AUTOR, FE_NA, SALA, ESTANTE) SELECT AUTOR, FE_NA, SALA, ESTANTE FROM AUTORES; SELECT * FROM OBRAS; AUTOR HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND TITULO FE_NA 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804 SALA 2 1 1 1 3 1 3 3 3 3 ESTANTE 3 1 1 1 5 2 6 6 5 5 Los títulos no figuran en la orden INSERT; el contenido de la columna TITULO es blanco en cada línea, puesto que, se indica la opción NOT NULL WITH DEFAULT. Ninguna de las dos operaciones descritas en los ejemplos anteriores permiten crear completamente la tabla OBRAS. 5.1.2 UPDATE La instrucción UPDATE modifica el valor de los datos de las columnas de una o varias líneas de una tabla. Ejemplo 5.3: Actualizar la tabla OBRAS obtenida en el ejemplo 1, reemplazando el año de nacimiento por la constante 1800. UPDATE OBRAS SET FE_NA = 1800; SELECT *FROM OBRAS; ISI0514 Fundamentos de Bases de Datos Página 104 de 120 Sistemas de Bases de Datos AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS FE_NA 1800 1800 1800 1800 1800 1800 1800 1800 1800 1800 1800 1800 SALA ESTANTE ------------ ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ------------ Ejemplo 5.4: Actualizar la tabla OBRAS obtenida en el ejercicio 3, reemplazando el año de nacimiento de Victor Hugo por 1802 y colocando para la SALA y ESTANTE sus valores correspondientes. UPDATE OBRAS SET FE_NA SALA ESTANTE WHERE AUTOR = 1802, = 2, = 3 = 'HUGO'; SELECT * FROM OBRAS; AUTOR TITULO FE_NA SALA ESTANTE HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS 1802 1802 1802 1800 1800 1800 1800 1800 1800 1800 1800 1800 2 2 2 ---------------------------------------------------------------------------------------------------- 3 3 3 ---------------------------------------------------------------------------------------------------- Ejemplo 5.5: Actualizar la tabla OBRAS obtenida en el ejemplo 4, reemplazando el año de nacimiento, la sala y el estante por los valores 1799, 1 y 1 respectivamente, de los autores comprendidos entre BALZAC y DUMAS. ISI0514 Fundamentos de Bases de Datos Página 105 de 120 Sistemas de Bases de Datos UPDATE OBRAS SET FE_NA = 1799, SALA = 1, ESTANTE = 1 WHERE AUTOR BETWEEN 'BALZAC' AND 'DUMAS'; AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS FE_NA 1802 1802 1802 1799 1799 1799 1799 1799 1800 1800 1800 1800 SALA ESTANTE 2 3 2 3 2 3 1 1 1 1 1 1 1 1 1 1 ------------ ----------------------- ----------------------- ----------------------- ------------ En este último ejemplo se puede apreciar lo siguiente: 1. Si los datos de la SALA y ESTANTE son correctos para BALZAC y DUMAS, sólo la fecha de nacimiento de BALZAC está de acuerdo a la realidad, representada en la tabla AUTORES. 2. Comparando los datos de la tabla AUTORES y los de la tabla OBRAS, se constata que existe dos veces el nombre DUMAS en la tabla AUTORES, con dos fechas de nacimiento diferentes. Esto se debe a que existen dos autores diferentes: Alejandro DUMAS padre y Alejandro DUMAS hijo; si vamos a corregir la actualización, es necesario ser capaces de distinguir los dos autores. 3. La tabla AUTORES y la tabla OBRAS en el estado actual presentan distorsiones, afectando la coherencia de los datos; por ejemplo, la fecha de nacimiento de VERLAINE es 1844 en la tabla AUTORES y 1800 en la tabla OBRAS. La operación de actualización no asegura implícitamente la integridad de los datos, por lo cual en los ejemplos siguientes trataremos de remediar provisionalmente estos inconvenientes con otras órdenes de UPDATE. Ejemplo 5.6. Actualizar la tabla OBRAS obtenida en el ejemplo 5, diferenciando DUMAS padre y DUMAS hijo, corrigiendo la fecha de nacimiento. UPDATE OBRAS SET AUTOR = 'DUMAS H' , FE_NA = 1824 WHERE AUTOR = 'DUMAS' AND TITULO = 'LA DAMA DE LAS CAMELIAS'; ISI0514 Fundamentos de Bases de Datos Página 106 de 120 Sistemas de Bases de Datos UPDATE OBRAS SET AUTOR = 'DUMAS P' , FE_NA = 1802 WHERE AUTOR = 'DUMAS' ; AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS P DUMAS P DUMAS H STENDHAL STENDHAL FLAUBERT VERLAINE 5.1.3 TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS FE_NA 1802 1802 1802 1799 1799 1802 1802 1824 1800 1800 1800 1800 SALA ESTANTE 2 3 2 3 2 3 1 1 1 1 1 1 1 1 1 1 ------------ ----------------------- ----------------------- ----------------------- ------------ DELETE La instrucción DELETE permite suprimir líneas de una tabla. Su formato general es: Ejemplo 5.7: Anular, en la tabla OBRAS obtenida en el ejemplo 6, las líneas correspondientes a los autores con fecha de nacimientos de 1800. DELETE FROM OBRAS WHERE FE_NA = 1800; AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS P DUMAS P DUMAS F TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS FE_NA 1802 1802 1802 1799 1799 1802 1802 1824 SALA 2 2 2 1 1 1 1 1 ESTANTE 3 3 3 1 1 1 1 1 Ejemplo 5.8: Anular en la tabla OBRAS obtenida en el ejemplo 7, las líneas correspondientes a DUMAS padre e hijo. ISI0514 Fundamentos de Bases de Datos Página 107 de 120 Sistemas de Bases de Datos DELETE FROM OBRAS WHERE AUTOR LIKE 'DUMAS%'; AUTOR HUGO HUGO HUGO BALZAC BALZAC TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT FE_NA 1802 1802 1802 1799 1799 SALA 2 2 2 1 1 ESTANTE 3 3 3 1 1 5.2 DEPENDENCIAS FUNCIONALES La teoría de la normalización se basa en restricciones definidas sobre los atributos de una relación o tabla que son conocidas como dependencias. 5.2.1 DEPENDENCIA FUNCIONAL Sea el esquema relacional R definido sobre el conjunto de atributos A y sea X e Y subconjuntos de A llamados descriptores. Se dice que Y depende funcionalmente de X o que X determina a Y, que se representa X à Y, si y solo si , cada valor de X tiene asociado en todo momento un único valor de Y. Ejemplo : cod_libro à Título, el código del libro determina el título. El cod_libro es el implicante y título es el implicado. Siempre el implicado es un hecho (una info rmación) acerca del implicante. Una dependencia funcional es una relación entre uno a más atributos. Supongamos que si se da el valor de un atributo se puede obtener (o buscar) el valor de otro. Si se conoce el valor de NúmeroDeCuentaDeCliente, se puede hallar el valor de EstadoDeCuentaDeCliente. Si esto es cierto, se puede decir que EstadoDeCuenctaDeCliente es funcionalmente dependiente de NúmeroDeCuentaDeCliente. En forma general, si se conoce el valor de X, se puede obtener el valor de Y. Las ecuaciones pueden representar dependencia funcional. Si se sabe el precio de un artículo y la cantidad de artículos comprados, se puede calcular el precio total de esos artículos. PrecioTotal = PrecioDelArtículo * Cantidad En este caso se puede decir que PrecioTotal es dependiente del PrecioDelArtículo y Cantidad. Las dependencias funcionales entre atributos de una tabla no involucran ecuaciones. ISI0514 Fundamentos de Bases de Datos Página 108 de 120 Sistemas de Bases de Datos A continuación, mediante un ejemplo se comenta la definición de dependencia funcional. La identificación de un estudiante es su cédula de identidad (CI) y suponemos que cada alumno tiene una y sólo una especialidad. En este caso dado el valor de la CI, se puede conocer la especialidad del estudiante y así la especialidad depende de la CI. La dependencia funcional se escribe usando la siguiente notación: CI à Especialidad. La expresión se lee como “CI determina funcionalmente Especialidad” o “Especialidad es dependiente de CI”. El atributo al lado izquierdo de la flecha se denomina determinante. Si CI determina Especialidad, un valor particular de CI hará pareja sólo con un valor de Especialidad. En sentido inverso, un valor de Especialidad puede hacer pareja con uno o más valores diferentes de CI. CI 0123456789 9876543210 1122334455 9988776655 4445556666 8888999911 ESPECIALIDAD Contabilidad Economía Informática Contabilidad Informática Contabilidad Supongamos que la Contabilidad es la especialidad del estudiante cuya CI es 0123456789. Cada vez que CI y Especialidad se encuentren juntos en una tabla, la CI número 0123456789 siempre hará pareja con el valor de la especialidad Contabilidad. Sin embargo, lo opuesto no es cierto, pues la Especialidad Contabilidad puede hacer pareja con varios valores de CI, como en este caso hará pareja además con los estudiantes que tienen la CI número: 9988776655 y 8888999911. Se puede decir que la relación de CI con Especialidad es muchos a uno (N:1). En general se dice que si A determina a B, la relación de los valores de A a B es de N:1. La dependencia funcional puede involucrar grupos de atributos. Considere la tabla CALIFICACIÓN (CI, Materia, calificación). La combinación de una CI y una materia determinan una calificación, una dependencia funcional que se escribe así: (CI, materia) Calificación Consideremos los dos siguientes casos: Ø Si X à (Y , Z) entonces X à Y y X à Z ISI0514 Fundamentos de Bases de Datos Página 109 de 120 Sistemas de Bases de Datos Por ejemplo, si CI à (Nombre_Estudiante, Especialidad), entonces CI à Nombre_estudiante) y CI à Especialidad. Ø Si (X , Y) à Z entonces en general no es cierto que X à Y o Y à Z Por ejemplo, si (CI, Materia) à Calificación, entonces CI por si mismo no puede determinar Calificación. 5.2.2 DEPENDENCIA FUNCIONAL TRANSITIVA El atributo Y de la relación R tiene una dependencia transitiva del atributo X de R a través de un tercero Z, si se verifica: - Los tres atributos son disjuntos - X à Z, Z à y, Z à X Por tanto X à Z Ejemplo : LIBRO_ED (Codlibro, Editorial. País) La dependencia entre codlibro y país es transitiva, a través de editorial. Intuitivamente se interpreta como que PAIS es una información del libro, pero indirectamente, ya que es una información de EDITORIAL y ésta a su vez de LIBRO. 5.3 NORMALIZACIÓN DE BASES DE DATOS Las operaciones INSERT; UPDATE y DELETE, permiten efectuar todas las operaciones necesarias para el mantenimiento de una tabla, sin embargo, la coherencia de los datos no puede ser asegurada si no se toman ciertas precauciones al momento de la concepción de la tabla. En los ejemplos anteriores se pudo poner en evidencia las anomalías que se presentan en el mantenimiento de las tablas. En este capítulo veremos los procedimientos de normalización de tablas, los mismos que permiten evitar estas anomalías y obtener actualizaciones coherentes. La normalización es un proceso de optimización del diseño de la estructura de una Base de Datos, que tiene por objeto reducir al mínimo las duplicaciones de datos innecesarios, de modo que las únicas duplicaciones existentes sean las debidas al uso de Claves Foráneas. La normalización se realiza a través de Formas Normales, e implican la descomposición de una relación o tabla en un conjunto de tablas equivalentes, que carezcan de las anomalías que presentaba la inicial y contenga la misma información. Por Formas Normales se entie nde un conjunto de reglas o criterios cuyo cumplimiento garantiza un diseño correcto de la Base de Datos, y la no existencia de duplicaciones ISI0514 Fundamentos de Bases de Datos Página 110 de 120 Sistemas de Bases de Datos innecesarias. Una tabla está en una determinada forma normal si satisface un cierto conjunto de restricciones. Las anomalías en una relación se producen en proceso de actualización y no en procesos de consulta. La normalización penaliza las consultas, al disminuir la eficiencia, ya que la normalización aumenta el número de relaciones presentes en la Base de Datos, por lo que una determinada consulta puede llevar consigo el acceso a varias tablas, lo que aumenta el costo de ésta. La normalización se lleva a cabo por cuatro razones: • Estructurar los datos de tal manera que se pueda presentar las relaciones pertinentes entre los datos. • Permite la recuperación sencilla de los datos en respuesta a las solicitudes de consulta y reportes. • Simplifica el mantenimiento (actualizar, borrar, insertar) de los datos. • Reduce la necesidad de reestructurar o reorganizar los datos cuando surjan nuevas aplicaciones. Para ilustrar los procedimientos de normalización, partiremos de la tabla OBRAS que fue creada en el apartado 5.1 con los siguientes datos: AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND TITULO FE_NA SALA ESTANTE HERNANI 1802 2 3 LAS CONTEMPLACIONES 1802 2 3 LOS MISERABLES 1802 2 3 EUGENIA GRANDET 1799 1 1 PAPÁ GORIOT 1799 1 1 LOS TRES MOSQUETEROS 1802 1 1 VEINTE AÑOS DESPUES 1802 1 1 LA DAMA DE LAS CAMELIAS 1824 1 1 ROJO Y NEGRO 1783 3 5 LA CARTUJA DE PARMA 1783 3 5 MADAME BOVARY 1821 1 2 POEMAS SATURNIANOS 1844 3 6 GERMINAL 1840 3 6 UNA ESTANCIA EN EL INFIERNO 1854 3 5 LA CHARCA DEL DIABLO 1804 3 5 Tabla: OBRAS 5.3.1 PRIMERA FORMA NORMAL (FN1) Se dice que una tabla está en primera forma normal cuando ésta posee únicamente datos elementales para cada columna en cada línea, es decir, para cada línea el valor almacenado para cada columna es único (atómico). ISI0514 Fundamentos de Bases de Datos Página 111 de 120 Sistemas de Bases de Datos La primera forma normal se alcanza cuando se quitan todos los grupos de datos de repetición, es decir, la aparición repetida de un dato o grupos de datos dentro de un registro. De acuerdo a esta definición, la tabla OBRAS se encuentra en Primera Forma Normal. Sin embargo, esta tabla no ofrece todas las garantías de integridad cuando se realizan diversas operaciones de actualización, como se ilustran en los diferentes casos de anomalías que se detalla a continuación. • Anomalía con DELETE. Ejemplo 5.9: Anular, en la tabla OBRAS, las líneas relativas a las obras escritas por el autor HUGO. DELETE FROM OBRAS WHERE AUTOR = 'HUGO' AUTOR TITULO FE_NA BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS GERMINAL UNA ESTANCIA EN EL INFIERNO LA CHARCA DEL DIABLO 1799 1799 1802 1802 1824 1783 1783 1821 1844 1840 1854 1804 SALA ESTANTE 1 1 1 1 1 3 3 1 3 3 3 3 1 1 1 1 1 5 5 2 6 6 5 5 Anulando la información relativa a las obras escritas por Victo HUGO, se pierde además la fecha de nacimiento de este autor, información que es independiente de las obras. • Anomalías con INSERT Ejemplo 5.10 Introducir en la tabla OBRAS, el libro 'EL CORONEL CHABERT' del autor BALZAC. INSERT INTO OBRAS (AUTOR, TITULO) VALUES ( ' BALZAC ' , ' EL CORONEL CHABERT ' ); ISI0514 Fundamentos de Bases de Datos Página 112 de 120 Sistemas de Bases de Datos AUTOR BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND BALZAC TITULO FE_NA EUGENIA GRANDET 1799 PAPÁ GORIOT 1799 LOS TRES MOSQUETEROS 1802 VEINTE AÑOS DESPUES 1802 LA DAMA DE LAS CAMELIAS 1824 ROJO Y NEGRO 1783 LA CARTUJA DE PARMA 1783 MADAME BOVARY 1821 POEMAS SATURNIANOS 1844 GERMINAL 1840 UNA ESTANCIA EN EL INFIERNO 1854 LA CHARCA DEL DIABLO 1804 EL CORONEL CHABERT 0 SALA 1 1 1 1 1 3 3 1 3 3 3 3 --------- ESTANTE 1 1 1 1 1 5 5 2 6 6 5 5 ---------- La orden INSERT no obliga a ingresar todos los valores relativos a todas las columnas de la tabla, lo que puede ocasionar que se ingrese una incoherencia, la fecha de nacimiento de BALZAC tiene un valor diferente. De igual manera puede suceder con los valores correspondientes a la ubicación de las obras de este autor en los atributos sala y estante. • Anomalías con UPDATE Ejemplo 5.11 Dar mantenimiento a la fecha de nacimiento, la sala y el estante del libro "EL CORONEL CHABERT" del autor BALZAC. UPDATE OBRAS SET FE_NA = 1800, SALA = 2 , ESTANTE = 2 WHERE AUTOR = ' BALZAC ' AND TITULO LIKE 'EL CORONEL CHABERT' ; AUTOR BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND BALZAC ISI0514 TITULO FE_NA SALA ESTANTE EUGENIA GRANDET 1799 1 1 PAPÁ GORIOT 1799 1 1 LOS TRES MOSQUETEROS 1802 1 1 VEINTE AÑOS DESPUES 1802 1 1 LA DAMA DE LAS CAMELIAS 1824 1 1 ROJO Y NEGRO 1783 3 5 LA CARTUJA DE PARMA 1783 3 5 MADAME BOVARY 1821 1 2 POEMAS SATURNIANOS 1844 3 6 GERMINAL 1840 3 6 UNA ESTANCIA EN EL INFIERNO 1854 3 5 LA CHARCA DEL DIABLO 1804 3 5 EL CORONEL CHABERT 1800 2 2 Fundamentos de Bases de Datos Página 113 de 120 Sistemas de Bases de Datos En este ejemplo, se introduce voluntariamente valores erróneos en una línea. La instrucción UPDATE no controla la presencia de datos relativos a BALZAC que se encuentran en otra línea de la tabla. Para corregir el error, podemos realizar la siguiente instrucción: UPDATE OBRAS SET FE_NA = 1799 , SALA = 1 , ESTANTE = 1 WHERE AUTOR = ' BALZAC ' ; Pero para determinar los valores correctos del autor BALZAC, debemos recorrer toda la tabla, lo que puede ocasionar problemas de rendimiento en una tabla grande. Causas y soluciones: Porqué esas anomalías ?. Por que la tabla tal como está, no es mas que una yuxtaposición de columnas. Analizando el contenido de la tabla OBRAS, podemos concluir lo siguiente: o Existen datos que están relacionados únicamente a los autores (AUTOR, FE-NA, SALA, ESTANTE), considerando que las obras se guardan por autor. o Existen datos que están relacionados únicamente a las obras (AUTOR, TITULO). Además, los autores no son correctamente identificados. Hemos visto que el nombre DUMAS corresponde a dos autores diferentes; Alejandro DUMAS padre y Alejandro DUMAS hijo, cada uno tiene una fecha de nacimiento diferente. Para solucionar el inconveniente, partiendo de la tabla OBRAS, podemos crear dos nuevas tablas como se mostrará en los siguientes ejemplos. Ejemplo 5.12 A partir de la tabla OBRAS, en la que se distingue DUMAS P y DUMAS H, crear una tabla LIBROS1 que contenga los datos relativos a libros. CREATE TABLE LIBROS1 (AUTOR CHAR(8) NOT NULL; TITULO CHAR(24) NOT NULL) ; INSERT INTO LIBROS1 (AUTOR, TITULO) SELECT DISTINCT AUTOR, TITULO FROM OBRAS; ISI0514 Fundamentos de Bases de Datos Página 114 de 120 Sistemas de Bases de Datos AUTOR HUGO HUGO HUGO BALZAC BALZAC DUMAS P DUMAS P DUMAS F STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND TITULO HERNANI LAS CONTEMPLACIONES LOS MISERABLES EUGENIA GRANDET PAPÁ GORIOT LOS TRES MOSQUETEROS VEINTE AÑOS DESPUES LA DAMA DE LAS CAMELIAS ROJO Y NEGRO LA CARTUJA DE PARMA MADAME BOVARY POEMAS SATURNIANOS GERMINAL UNA ESTANCIA EN EL INFIERNO LA CHARCA DEL DIABLO Tabla: LIBROS1 La tabla LIBROS1 es una proyección obtenida a partir de la tabla OBRAS, donde cada libro es identificado de una manera única por su título. Ejemplo 5.13 A partir de la tabla OBRAS, crear una tabla AUTORES1 que contenga los datos relacionados con los autores. CREATE TABLE (AUTOR FE_NE SALA ESTANTE AUTORES1 CHAR (8) INT INT INT NOT NULL; NOT NULL; NOT NULL; NOT NULL); INSERT INTO AUTOR1 (AUTOR, FE_NE, SALA, ESTANTE) SELECT DISTINCT AUTOR, FE_NE, SALA, ESTANTE FROM OBRAS; AUTOR HUGO BALZAC DUMAS P DUMAS H STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND FE_NA 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804 SALA 2 1 1 1 3 1 3 3 3 3 ESTANTE 3 1 1 1 5 2 6 6 5 5 Tabla: AUTORES1 ISI0514 Fundamentos de Bases de Datos Página 115 de 120 Sistemas de Bases de Datos 5.3.2 SEGUNDA FORMA NORMAL (FN2) Una relación está en segunda forma normal si y solamente si está en primera forma normal y si todos los atributos que no son llaves dependen únicamente de la llave. De acuerdo a esta definición, cada tabla que tiene un atributo único como clave, está en segunda forma normal. La tabla LIBROS1 no contiene más redundancia. Es un conjunto de datos relacionados únicamente a los libros de la biblioteca. Los datos FE_NA, SALA y ESTANTE, dependen funcionalmente de los datos de AUTOR de la tabla AUTORES1, puesto que, a cada dato AUTOR corresponde un dato de FE_NA y uno solo, un dato de SALA y uno solo y un dato de ESTANTE y uno solo. Sin embargo las anomalías pueden todavía ocurrir al momento de realizar el mantenimiento de la tabla AUTORES1, puesto que, existe también dependencia funcional al interior mismo de la tabla AUTORES1: en efecto, un estante pertenece a una sala y solo una, esto significa que el conocimiento de un estante implica el conocimiento de su sala, podemos por tanto decir que, existe una dependencia transitiva entre autor y sala a través del estante. • Anomalías con DELETE Anular de la tabla AUTORES1 las obras escritas por el autor HUGO. DELETE FROM AUTORES1 WHERE AUTOR = 'HUGO' ; Ocasionamos la pérdida de información: La sala 2 contiene el estante 3, información independiente del autor HUGO. • Anomalías con INSERT No podemos crear una nueva sala y un nuevo estante si no tenemos un autor a registrar. • Anomalías con UPDATE La instrucción: UPDATE AUTORES1 SET SALA = 4 WHERE AUTORES = ´ZOLA´; Introduce una incoherencia, puesto que, el estante 6 pertenece a la sala 4 para el autor ZOLA y a la sala 3 para el autor VERLAINE. 5.3.3 TERCERA FORMA NORMAL (FN3) La solución a los problemas de la tabla AUTORES1 que se encuentra en segunda forma normal, es crear dos tablas a partir de AUTORES1: ISI0514 Fundamentos de Bases de Datos Página 116 de 120 Sistemas de Bases de Datos - Una tabla AUTORES2 que contenga los datos de AUTOR, FE_NA, y ESTANTE. Esta tabla contiene datos que dependen funcionalmente de AUTOR. SELECT AUTOR , FE_NE, ESTANTE FROM AUTORES1 - Una tabla ESTANTES que contenga los datos de ESTANTE y SALA. SELECT DISTINCT ESTANTE, SALA FROM AUTORES1 Las dos tablas AUTORES2 Y ESTANTES están en tercera forma normal. Una tabla está en Tercera Forma Normal, si y solamente si, está en segunda forma normal y no tiene dependencia transitiva. Por lo tanto para eliminar las anomalías de una tabla en segunda forma normal, es necesario quitar la dependencia transitiva. La tercera forma normal es la mínima requerida para asegurar la coherencia lógica de los datos al momento de la concepción de una tabla. Otra definición, presentada por Boyce y Codd, no hace referencia a las dos primeras formas normales, ésta introduce una forma más completa, que se lo llama forma normal Boyce y Codd (BCNF). Si llamamos determinante a un dato o un conjunto de datos que dependen funcionalmente de un atributo, podemos construir la siguiente definición: Una relación está en forma normal Boyce/Codd si y solamente si cada determinante es una llave candidata. 5.4 EJEMPLOS 5.4.1 VUEL_PILOTO VUELO 112 112 203 ASIGNADO VUELO 112 112 203 DIA NUMPILOTO NOMBRE Jun-06 31174 TORRES Jun-07 30046 PEREZ Jun-09 31174 TORRES DIA NUMPILOTO Jun-06 31174 Jun-07 30046 Jun-09 31174 PILOTO NUMPILOTO NOMBRE 31174 TORRES 30046 PEREZ ISI0514 HRS_VUELO 7250 15412 7250 HRS_VUELO 7250 15412 Fundamentos de Bases de Datos Página 117 de 120 Sistemas de Bases de Datos 5.4.2 ALMACEN DEPART 1 1 7 ARTICULO Computadora Monitor Teclado JEFE Perez Perez Aguilar CANTIDAD 15 20 13 7 2 3 3 3 Monitor Raton Impresora Computadora Tarjera Aguilar Torres Suarez Suarez Suarez 25 40 35 10 50 ALMACEN1 DEPART 1 2 3 7 JEFE Perez Torres Suarez Aguilar ALMACEN2 DEPART 1 1 7 7 2 3 3 3 ARTICULO Computadora Monitor Teclado Monitor Raton Impresora Computadora Tarjera CANTIDAD 15 20 13 25 40 35 10 50 5.4.3 ESCRIBE ISI0514 AUTOR Date, C. Date, C. Date, C. Cood, E NACIONALIDAD COD_LIBRO TITULO Norteamericana 98987 Database Norteamericana 97777 SQL Stan Norteamericana 98987 Guide for Norteamericana 7890 Relational EDITORIAL Addison Addison, W. Addison, W. Addison, W. AÑO 1990 1986 1988 1990 Gardain Gardain Valduriez Kim, W. Lochovsky Francesa Francesa Francesa Norteamericana Canadiense Paraninfo Eyrolles Eyrolles ACM ACM 1986 1984 1984 1989 1989 12345 67890 67890 11223 11223 Basi Dati Comp DB Comp DB BD OO BD OO Fundamentos de Bases de Datos Página 118 de 120 Sistemas de Bases de Datos LIBRO Cod_libro Titulo AUTOR Nombre Nacionalidad ESCRIBE Cod_libro Nombre ISI0514 Editorial Fundamentos de Bases de Datos Año Página 119 de 120 Sistemas de Bases de Datos BIBLIOGRAFÍA 1. [Adad y otros 1993] Rubén Abad, Alfredo Careaga, Miguel Angel Medina, Fundamentos de las estructuras de datos relacionales. Limusa S.A. 2. [Elmasri y Navathe 1989] R. Elmasri y S. B. Navathe, Fundamentals of Database Systems. Benjamin Cummings, Redwood City, CA 3. [Groff y Weinberg 1998] James R. Groff y Paul N. Weinberg, Guía Lan Times de SQL. McGraw- Hill. 4. [Korth y Silberchatz 2002] Henry F. Korth y Abraham Silberschatz, Fundamentos de Bases de Datos. 4ta Edición. McGraw-Hill. 5. [Korth y Silberchatz 1998] Henry F. Korth y Abraham Silberschatz, Fundamentos de Bases de Datos. 3ra Edición. McGraw-Hill. 6. [Kroenke 2003] David M. Kroenke, Procesamiento de Bases de Datos, Fundamentos Diseño e Instrumentación. Octava Edición. Prentice-Hall Hispanoamericana, S.A. 7. [Koutchouk 1992]. Michel Koutchouk, SQL et DB2 le relationnel et sa pratique. 2da Edición. Masson, Paris. 8. [Moreno y otros 2002] Pilar Moreno, Iñigo Molina, Santiago Ormeño, Curso de Fundamentos de sistemas de información geográfico, Universidad Politécnica de Madrid, Cepade. 9. [O’Brien 2001] James A. O’Brien, Sistemas de Información Gerencial, MacGraw – Hill. 10. [Piattini y otros 1996] Mario Piattini, José Antonio Calvo, Joaquín Cervera, Luis Fernando Sanz, Análisis y diseño detallado de aplicaciones informáticas de gestión. Ra-Ma. 11. [Ramos 2002] Humberto Ramos, Curso de Gestión de Bases de Datos, Universidad Politécnica de Madrid, Cepade. ISI0514 Fundamentos de Bases de Datos Página 120 de 120