sábado, 14 de marzo de 2015

Tipos de relaciones 

Un tipo de relación R entre n tipos de entidades E1, ..., En define un conjunto de asociaciones entre estos tipos. 

Puede ser visto como un conjunto de instancias de la relación  ri , donde cada ri asocia n entidades (e1, ..., en), y cada entidad ej en ri es un miembro del tipo de entidad Ej (1 <= j <= n). Un tipo de relación es un subconjunto del producto cartesiano E1 x E2 x ... x.En

Ejemplo. Algunas instancias de la relación TRABAJA_PARA del ejemplo anterior, podrían ser las siguientes.

Un tipo de relación podría también interpretarse como un conjunto de pares ordenados, en este caso: (e1, d1), (e2, d2), (e3, d1), (e4, d2), (e5, d3), (e6, d1), (e7, d3). Según el número de entidades relacionadas (o razón de cardinalidad), se pueden definir tres tipos de relaciones: 

1. Relaciones Uno a Uno (1:1). Una entidad A está asociada a lo más con una entidad B, y una entidad B a lo más con una entidad A. 

Ejemplo: "Ser jefe de" es una relación 1:1 entre las entidades empleado y departamento. 

2. Relaciones Uno a Muchos (1:n). Una entidad A está asociada con una o varias entidades B. Una entidad B, sin embargo, puede estar a lo más asociada con una entidad A. 

Ejemplo: "Ser profesor" es una relación 1:n entre profesor y curso, suponiendo que un curso sólo lo dicta un profesor.

3. Relaciones Muchos a Muchos (n:m). Una entidad A está asociada con una o varias entidades B, y una entidad B está asociada con una o varias entidades A. 

Ejemplo: "Estar inscrito" es una relación n:m entre las entidades alumno y curso. El siguiente es un ejemplo de la relación ADMINISTRA, con participación parcial de EMPLEADOS, y participación total de DEPARTAMENTOS.


Tipos de atributos

Los atributos compuestos se pueden dividir en sub-partes más pequeñas, que representan atributos más básicos con significados propios. Por ejemplo, una "dirección" puede sub-dividirse en: dir-calle, comuna, ciudad, región. 

Ejemplo:

Los atributos no sub-dividibles se llaman atómicos o simples. Si no hay necesidad de referirse a los elementos individuales de una dirección, entonces la dirección completa puede considerarse un atributo simple. Atributos de valor simple son los que tienen un sólo valor para una entidad particular. 

Por ejemplo: 
edad. Atributos multivalorados pueden tener un conjunto de valores para una misma entidad. Por ejemplo: "títulos profesionales" (una persona puede no tener ninguno, uno, dos o más). 

En algunos casos una entidad particular puede no tener valores aplicables para un atributo. 

Ejemplo: 
"depto". Para estas situaciones tenemos un valor especial llamado nulo. También, si no se conoce el valor. Un tipo de entidad define un conjunto de entidades con los mismos atributos. 

Ejemplo: 
Nombre del tipo de entidad: EMPLEADO Atributos: Nombre, Edad, Sueldo Conjunto de entidades: (Juan Pérez, 55, 800.000), (Federico Pardo, 40, 550.000), (Rodrigo Pozo, 25, 400.000). En los diagramas E-R, un tipo de entidad se representa como una caja rectangular, los nombres de los atributos como elipses y las relaciones como rombos. 

Los atributos multivalorados se representan con elipses dobles. Un tipo de atributo usualmente tiene un atributo cuyos valores son distintos para cada entidad individual (atributo clave o llave) y sus valores se usan para identificar cada entidad unívocamente. 

Para una entidad tipo PERSONA, un atributo clave típico es el RUT. Algunas veces, varios atributos juntos forman una clave (la combinación debe ser distinta). Estos atributos clave aparecen subrayados en los diagramas. 

Cada atributo simple tiene un conjunto de valores o dominio asociado, que especifica el conjunto de valores que puede asignarse a cada entidad individual. Por ejemplo, si las edades de los empleados pueden variar entre 16 y 70, entonces el dominio de Edad es {x R N / 16 <= x <= 70}. 

Los dominios no se muestran en los diagramas. Un atributo A del tipo de entidad E cuyo dominio es V, puede definirse como una función de E al conjunto potencia V (conjunto de todos los subconjuntos de V): A: E P(V) El valor del atributo A para la entidad e es A(e). 

Un valor nulo se representa por el conjunto vacío. Para un atributo compuesto A, el dominio V es el producto cartesiano de P(V1), ..., P(Vn) donde V1, ..., Vn son los dominios de los atributos simples que forman A: V = P(V1) x P(V2) x ... x P(Vn). Notemos que atributos compuestos y multivalorados pueden ser anidados de cualquier manera. 

Podemos representar anidamiento agrupando componentes de un atributo compuesto entre paréntesis ( ), separando componentes con comas, y mostrando atributos multivalor a dos entre llaves {}. 

Ejemplo: Si una persona puede tener más de una dirección, y en cada una de ellas hay múltiples teléfonos, podemos especificar un atributo DirTel para una PERSONA así: 

{ DirTel ( { Teléfono ( CódigoArea, NumTel ) }, Dirección ( DirCalle ( Calle, Número, NumDepto ), Comuna, Ciudad, Región ) ) } La persona Juan Pérez puede tener una instancia de este atributo así: { DirTel ( { Teléfono ( 2, 442-2855 ) }, Dirección ( DirCalle ( Blanco, 2120, nulo ), Santiago, Santiago, RM ) ), DirTel ( { Teléfono ( 2, 241-3416 ) }, Dirección ( DirCalle ( Manuel Montt, 74, 201 ), Providencia, Santiago, RM ) ) } 

Este modelo considera la Base de Datos (BD) como una colección de relaciones. De manera simple, una relación representa una tabla, en que cada fila representa una colección de valores que describen una entidad del mundo real. 

Cada fila se denomina tupla. Dominios, tuplas, atributos, relaciones Un dominio D es un conjunto de valores atómicos. Atómico quiere decir que cada valor en el dominio es indivisible. 

Es útil dar nombres a los dominios. 

Ejemplo:Números-telefónicos-locales: el conjunto de número de teléfono de 7 dígitos. RUTs: números de 8 dígitos más un carácter que puede ser del 0 al 9 o K Nombres: el conjunto de nombres de personas Notas: valores entre 1.0 y 7.0 También se puede especificar un tipo de datos o formato para cada dominio. 

Un esquema de relación R, denotado R(A1, A2, ..., An) está constituido por un nombre de relación R y una lista de atributos A1, ..., An. Cada atributo Ai es el nombre de un rol jugado por el dominio D en el esquema de la relación R. D se llama el dominio de Ai y se denota dom(Ai). Un esquema relacional se usa para describir una relación. R es el nombre de esta relación. 

El grado de una relación es el número n de atributos del esquema de la relación.
 
Ejemplos: 

ESTUDIANTE(Nombre, Rut, Teléfono, Dirección, Edad, Carrera, Promnota) tiene grado 7. dom(Nombre) = Nombres dom(Teléfono) = Números-telefónicos-locales etc. Def. Una relación o instancia de relación r del esquema de relación R(A1, A2, ..., An), denotado también como r(R) es un conjunto de n-tuplas r = {t1, t2, ..., tm}. Cada n-tupla t es una lista ordenada de n valores t = , donde cada valor vi , i <= i <= n, es un elemento de dom(Ai) o es un valor nulo.
Importancia de definir bien la base de datos. Un sistema gestor de base de datos nos permite almacenar la información de forma muy eficiente y permite realizar controles importantes sobre los datos. Pero todas estas cualidades no tendrán efecto si no hemos realizado un buen diseño de la base de datos. Es fundamental realizar un buen diseño de la base de datos. 

No podemos aquí enseñaros a diseñar bases de datos, esto está desarrollado en otro módulo del ciclo, pero sí recordaremos los puntos a tener en cuenta para que nuestra base de datos sea la mejor:

 - obtener un esquema lógico de la base de datos que sea normalizado, es completamente necesario distribuir de forma correcta los diferentes datos en las diferentes tablas, no incluir redundancia, definir la claves primarias adecuadas y las claves ajenas (o relaciones entre las diferentes tablas). 

- Definir reglas de validación de los campos 

- Definir reglas de comportamientos. Cuantas más reglas definamos, más cosas comprobará de forma automática el SGBD reduciendo así la probabilidad de errores en los datos. 

Base de datos local versus Cliente/Servidor Existen diferentes sistemas gestores de bases de datos que pueden funcionar en modo local o en modo Cliente/Servidor. 
En modo local tenemos la base de datos y el usuario ubicados en el mismo ordenador. Un ejemplo de base de datos que funciona en modo local es el Microsoft Access, MS Access es una base de datos fácil de manejar por usuarios poco expertos que funciona bien en modo local y mientras no tenga que albergar grandes cantidades de información. 

En modo Cliente/Servidor, la base de datos se encuentra en un ordenador (el Servidor) y los usuarios acceden simultáneamente a esa base de datos a través de la red (sea una red local o Internet) desde sus ordenadores a través de un programa Cliente. Aunque Access permite el acceso compartido y a través de una red, no está diseñado con ese objetivo por lo que si desea utilizar un sistema Cliente/Servidor se recomienda utilizar otro sistema como por ejemplo SQL Server, Oracle, DBII,... 

Conceptos básicos sobre bases de datos relacionales. Para trabajar con bases de datos relacionales es muy importante tener claros una serie de conceptos que veremos en este punto. 

Toda la información almacenada en una base de datos relacional está organizada en tablas. La tabla es el primer objeto de una base de datos y se organiza en filas y columnas, una fila equivale a un registro y las columnas definen los campos del registro. 

Cada columna se define sobre un tipo de datos, existen tipos de datos estándares como en cualquier lenguaje de programación, y tipos propios del SGBD. Se pueden definir reglas de validación de los campos. 
Una regla de validación no es más que una condición que deberán cumplir todas las filas de la tabla y que el sistema se encarga automáticamente de verificar e impedir que exista en la tabla un registro que no cumpla esa condición. 

En una tabla debe de existir una clave principal/primaria formada por una columna o combinación de varias columnas que permite identificar a cada uno de los registros de la tabla. Para poder cumplir con este objetivo la clave primaria no puede contener valores nulos ni valores duplicados. De eso se encargará el sistema, si intentamos crear un registro con el valor nulo en su campo clave o si el valor de clave ya existe en otro registro de la tabla, el sistema no nos dejará. En esto consiste la integridad de claves. 

También nos podemos encontrar con otros campos identificadores, se conocen como claves secundarias, estos campos también permiten identificar los registros de la tabla por lo que tienen las mismas restricciones que las claves principales (no nulo y no duplicado).

Para terminar con las claves, tenemos otro tipo de claves, las claves ajenas (foráneas/externas). 

Una clave ajena es un campo (o combinación de campos) que señala a un registro de otra tabla, contiene un valor que identifica un registro de la otra tabla. Estos campos sirven para relacionar las tablas entre sí. 

Por ejemplo tenemos una tabla de facturas con los siguientes campos: Código de factura, Fecha, importe total, cliente. El campo cliente indica de qué cliente es la factura, contiene pues un código de cliente. Es una clave ajena, señala a un registro de la tabla de clientes. Es evidente que para que no haya errores en la tabla de facturas, los códigos de cliente introducidos deben ser de clientes registrados en la tabla de Clientes. 

En esto consiste la integridad referencial. Para que no existan errores de integridad en la base de datos, el sistema comprueba automáticamente que los valores introducidos en las claves ajenas existan en el campo de referencia en la otra tabla, si no existe, no nos dejará insertar el registro. 

Si intentamos grabar una factura con un código de cliente que no existe en la tabla de clientes, el sistema no nos dejará grabar la factura. A diferencia de las claves primarias y secundarias, una clave ajena en principio sí puede contener el valor nulo (es decir ningún valor) como cualquier otro campo.

 El valor nulo (NULL) es importante porque representa la ausencia de valor en el campo y no es lo mismo que el valor cero”0“. De hecho es un valor tan especial que no funciona como los demás valores, por ejemplo no podemos comparar (con el operador de comparación =) un campo con el valor nulo, tenemos que utilizar una fórmula especial (IS NULL). 

Estos son los conceptos mínimos, luego cada SGBD utiliza sus propios objetos que en algunos casos se repiten en varios sistemas como las VIEWs, TRIGGERs, INDEX etc... pero esto se verá cuando se estudie un SGBD concreto como haremos con SQL Server.

los Modelos Relacionales son de los utilizados muy ampliamente y recordando que el modelo es la base (core) para los DBMS es importante refrendar los conceptos básicos y de donde vienen. Muchas disciplinas (y sus metodologías de diseño asociadas) tienen algún tipo de base teórica. 

Los ingenieros industriales diseñan estructuras utilizando teorías de la física. Los compositores crean sinfonías utilizando conceptos de teoría de la música. La industria del automóvil utiliza teorías de la aerodinámica para diseñar automóviles con menor consumo. 

La industria aeronáutica utiliza las mismas teorías para diseñar alas de aviones que reduzcan la resistencia al viento. Estos ejemplos demuestran que la teoría es muy importante. La ventaja principal de la teoría es que hace que las cosas sean predecibles: nos permite predecir qué ocurrirá si realizamos una determinada acción. 

Por ejemplo, sabemos que si soltamos una piedra, caerá al suelo. Si somos rápidos, podemos apartar nuestros pies del camino de la teoría de la gravedad de Newton. 
Lo importante es que siempre funciona. Si ponemos una piedra plana encima de otra piedra plana, podemos predecir que se quedarán tal y como las hemos puesto. Esta teoría permite diseñar pirámides, catedrales y casas de ladrillos. Consideremos ahora el ejemplo de una base de datos relacional. Sabemos que si un par de tablas están relacionadas, podemos extraer datos de las dos a la vez, simplemente por el modo en que funciona la teoría de las }bases de datos relacionales. 

Los datos que se saquen de las dos tablas se basarán en los valores coincidentes del campo que ambas tienen en común. Una vez más, nuestras acciones tienen un resultado predecible. 

El modelo relacional se basa en dos ramas de las matemáticas: la teoría de conjuntos y la lógica de predicados de primer orden. El hecho de que el modelo relacional esté basado en la teoría de las matemáticas es lo que lo hace tan seguro y robusto. Al mismo tiempo, estas ramas de las ASES DE DATOS MIS 308 2 matemáticas proporcionan los elementos básicos necesarios para crear una base de datos relacional con una buena estructura, y proporcionan las líneas que se utilizan para formular buenas metodologías de diseño. 

Hay quien ofrece una cierta resistencia a estudiar complicados conceptos matemáticos para tan sólo llevar a cabo una tarea bastante concreta. 

Es habitual escuchar quejas sobre que las teorías matemáticas en las que se basa el modelo relacional y sus metodologías de diseño, no tienen relevancia en el mundo real o que no son prácticas. No es cierto: las matemáticas son básicas en el modelo relacional. Pero, por fortuna, no hay que aprender teoría de conjuntos o lógica de predicados de primer orden para utilizar el modelo relacional. Sería como decir que hay que saber todos los detalles de la aerodinámica para poder conducir un automóvil. Las teorías de la aerodinámica ayudan a entender cómo un automóvil puede ahorrar combustible, pero desde luego no son necesarias para manejarlo.

La teoría matemática proporciona la base para el modelo relacional y, por lo tanto, hace que el modelo sea predecible, fiable y seguro. La teoría describe los elementos básicos que se utilizan para crear una base de datos relacional y proporciona las líneas a seguir para construirla. 

El organizar estos elementos para conseguir el resultado deseado es lo que se denomina diseño. En 1970, el modo en que se veían las bases de datos cambió por completo cuando E. F. Codd introdujo el modelo relacional. 

En aquellos momentos, el enfoque existente para la estructura de las bases de datos utilizaba punteros físicos (direcciones de disco) para relacionar registros de distintos ficheros. Si, por ejemplo, se quería relacionar un registro con un registro , se debía añadir al registro un campo conteniendo la dirección en disco del registro . Este campo añadido, un puntero físico, siempre señalaría desde el registro al registro. 
Codd demostró que estas bases de datos limitaban en gran medida los tipos de operaciones que los usuarios podían realizar sobre los datos. Además, estas bases de datos eran muy vulnerables a cambios en el entorno físico. 

Si se añadían los controladores de un nuevo disco al sistema y los datos se movían de una localización física a otra, se requería una conversión de los ficheros de datos. 

Estos sistemas se basaban en el modelo de red y el modelo jerárquico, los dos modelos lógicos que constituyeron la primera generación de los DBMS. El modelo relacional representa la segunda generación de los DBMS. En él, todos los datos están estructurados a nivel lógico como tablas formadas por filas y columnas, aunque a nivel físico pueden tener una estructura completamente distinta. 

Un punto fuerte del modelo relacional es la sencillez de su estructura lógica. Pero detrás de esa simple estructura hay un fundamento teórico importante del que carecen los DBMS de la primera generación, lo que constituye otro punto a su favor. BASES DE DATOS MIS 308 3 Dada la popularidad del modelo relacional, muchos sistemas de la primera generación se han modificado para proporcionar una interfaz de usuario relacional, con independencia del modelo lógico que soportan (de red o jerárquico). 

Por ejemplo, el sistema de red IDMS ha evolucionado a IDMS/R e IDMS/SQL, ofreciendo una visión relacional de los datos. En los últimos años, se han propuesto algunas extensiones al modelo relacional para capturar mejor el significado de los datos, para disponer de los conceptos de la orientación a objetos y para disponer de capacidad deductiva. El modelo relacional, como todo modelo de datos, tiene que ver con tres aspectos de los datos: o Estructura de datos. o Integridad de datos. o Manejo de datos. 

Definición del problema 

La definición del problema es el proceso por el que se determina la organización de una base de datos, incluidos su estructura, contenido y las aplicaciones que se han de desarrollar. 

Durante mucho tiempo, el diseño de bases de datos fue considerado una tarea para expertos: más un arte que una ciencia. Sin embargo, se ha progresado mucho en el diseño de bases de datos y éste se considera ahora una disciplina estable, con métodos y técnicas propios. Debido a la creciente aceptación de las bases de datos por parte de la industria y el gobierno en el plano comercial, y a una variedad de aplicaciones científicas y técnicas, el diseño de bases de datos desempeña un papel central en el empleo de los recursos de información en la mayoría de las organizaciones. 

El diseño de bases de datos ha pasado a constituir parte de la formación general de los informáticos, en el mismo nivel que la capacidad de construir algoritmos usando un lenguaje de programación convencional Para definir correctamente al Problema lo primero es realizar diseño conceptual, que parte de las especificaciones de los requisitos del usuario y su resultado es el esquema conceptual de la base de datos que corresponderá a un Modelo Entidad – Relación (E / R). 

Un esquema conceptual es una descripción de alto nivel de la estructura de la base de datos, independientemente del DBMS que se vaya a utilizar para manipularla. Un modelo conceptual es un lenguaje que se utiliza para describir esquemas conceptuales. 

El objetivo del diseño conceptual es describir el contenido de los Datos de la base de datos (DB) y no las BASES DE DATOS MIS 308 4 estructuras de almacenamiento que se necesitarán para manejar esta información. El modelo relacional representa un sistema de bases de datos en un nivel de abstracción un tanto alejado de los detalles de la máquina subyacente, de la misma manera como, por ejemplo, un lenguaje del tipo de PL/1 representa un sistema de programación con un nivel de abstracción un tanto alejado de los detalles de la máquina subyacente. 

De hecho, el modelo relacional puede considerarse como un lenguaje de programación mas bien abstracto, orientado de manera específica hacia las aplicaciones de bases de datos [Date, 1993] En términos tradicionales una relación se asemeja a un archivo, una tupla a un registro, y un atributo a un campo. Pero estas correspondencias son aproximadas, en el mejor de los casos. Una relación no debe considerase como ``solo un archivo'', sino mas bien como un archivo disciplinado, siendo el resultado de esta disciplina una simplificación considerable de las estructuras de datos con las cuales debe interactuar el usuario, lo cual a su vez simplifica los operadores requeridos para manejar esas estructuras. 

Características principales de los ``archivos'' relacionales: 

• Cada ``archivo'' contiene solo un tipo de registros 

• Los campos no tienen un orden específico, de izquierda a derecha

• Los registros no tienen un orden específico, de arriba hacia abajo 

• Cada campo tiene un solo valor 

• Los registros poseen un campo identificador único (o combinación de campos) llamado clave primaria Así, todos los datos en una base de datos relacional se representan de una y solo una manera, a saber, por su valor explícito (esta se denomina en ocasiones ``principio básico del modelo relacional''). 

En particular, las conexiones lógicas dentro de una relación y entre las relaciones se representan mediante esos valores; no existen ``ligas'' o apuntadores visibles para el usuario, ni ordenamientos visibles para el usuario, ni grupos repetitivos visibles para el usuario, etc. Actualmente algunos de los manejadores de bases de datos, utilizan un sistema de búsqueda con algoritmos de árboles b. 

Pero las búsquedas que se pueden realizar con estos algoritmos son sólo para memoria principal. Los algoritmos implementados para realizar búsquedas con listas salteadas o por bloques (skip lists) son eficientes para realizar búsquedas en memoria secundaria. 

Como tienen varios niveles en cada BASES DE DATOS MIS 308 5 nodo de la lista, nos permite dar saltos mas largos al realizar las búsquedas, esto provoca que las sean mas rápidas. El primer paso para la definición del Problema l diseño de una base de datos es la producción del esquema conceptual.
Normalmente, se construyen varios esquemas conceptuales, cada uno para representar las distintas visiones que los usuarios tienen de la información.

Cada una de estas visiones suelen corresponder a las diferentes áreas funcionales de la empresa como, por ejemplo, producción, ventas, recursos humanos, etc. A los esquemas conceptuales correspondientes a cada vista de usuario se les denomina esquemas conceptuales locales. Cada uno de estos esquemas se compone de entidades, relaciones, atributos, dominios de atributos e identificadores. 

El esquema conceptual también tendrá una documentación, que se irá produciendo durante su desarrollo. Las tareas a realizar en el diseño conceptual son las siguientes: 

1. Identificar las entidades. 
2. Identificar las relaciones. 
3. Identificar los atributos y asociarlos a entidades y relaciones. 
4. Determinar los dominios de los atributos. 
5. Determinar los identificadores. 
6. Determinar las jerarquías de generalización (si las hay). 
7. Dibujar el diagrama entidad-relación. 
8. Revisar el esquema conceptual local con el usuario El modelo Entidad-Relación (E/R) se basa en una representación del mundo real en que los datos se describen como entidades, relaciones y atributos. 

El principal concepto del modelo ER es la entidad, que es una "cosa" en el mundo real con existencia independiente. Una entidad puede ser un objeto físico (una persona, un auto, una casa o un empleado) o un objeto conceptual (una compañía, un puesto de trabajo o un curso universitario). 

En nuestro ejemplo de la sección anterior podemos definir dos entidades alumnos y cursos. Cada entidad tiene propiedades específicas, llamadas atributos, que la describen. Por ejemplo, una sala de clases tiene un nombre, una ubicación, un cupo máximo, etc. En nuestro ejemplo, la entidad "alumno" ASES DE DATOS MIS 308 6 posee los atributos nombre y matrícula. Una entidad particular tiene un valor para cada uno de los atributos. 

Cada uno de los atributos de una entidad posee un dominio, el que corresponde al tipo del atributo. Por ejemplo, "matrícula" tiene como dominio al conjunto de los enteros positivos y "nombre" tiene como dominio al conjunto de caracteres. Para todo conjunto de valores de una entidad, debe existir un atributo o combinación de atributos, que identifique a cada entidad en forma única. 

Este atributo o combinación de atributos se denomina llave (primaria). Por ejemplo, el número de matricula es una buena llave para la entidad alumno, no así el nombre, porque pueden existir dos personas con el mismo nombre. Una relación se puede definir como una asociación entre entidades. 

Por ejemplo, la entidad "libro" puede estar relacionada con la entidad "persona" por medio de la relación "está pedido". 

La entidad "alumno" puede estar relacionada con la entidad "curso" por la relación "está inscrito". Una relación también puede tener atributos. Por ejemplo, la relación "está inscrito" puede tener los atributos "semestre" y "nota de aprobación".



Pon el zoom en 150+ Para ver bien la imagen

Ejemplo: 
DIAGRAMA FASES DISENO DB BASES DE DATOS MIS 308 7 
Suponga que estamos modelando los datos de una COMPAÑIA. La base de datos COMPAÑIA debe mantener los Datos sobre los empleados de la compañía, los departamentos y los proyectos. 

La descripción del minimundo (la parte de la compañía a ser representada en la base de datos) es la siguiente: 

1. La compañía está organizada en departamentos. Cada departamento tiene un nombre único. Un número único, y un empleado particular quien lo administra. Se quiere saber la fecha en que el empleado administrador empezó a hacerse cargo del departamento. Un departamento puede tener varios locales. 

2. Cada departamento controla un cierto número de proyectos. Cada proyecto tiene un nombre y número únicos, y un local. 

3. Para cada empleado se desea tener su nombre, rut, dirección, salario, sexo y año de nacimiento. Un empleado es asignado a un departamento, pero puede trabajar en varios proyectos, los que no son necesariamente controlados por el mismo departamento. Se quiere saber el número de horas semanales que un empleado trabaja en cada proyecto. Se quiere además saber cuál es el supervisor directo de cada empleado. 

4. Se desea conocer las personas dependientes de cada empleado para propósitos de seguros. De cada dependiente se desea conocer el nombre, sexo, fecha de nacimiento y relación con el empleado. La siguiente figura muestra el esquema de esta base de datos, a través de una notación gráfica llamada diagrama ER.


Pon el zoom en 150+ Para ver bien la imagen

En este diagrama los rectángulos representan conjuntos de entidades, las elipses representan atributos y los rombos representan conjuntos de relaciones. 

Usando esta notación, podemos ahora hacer el diagrama E-R del ejemplo anterior de los alumnos y los cursos matriculados.

  

BASES DE DATOS RELACIONALES

OBJETIVOS DE UN SGBD

INDEPENDENCIA DE LOS DATOS.


La independencia de los datos consiste en hacer que los programas no dependan de la estructura de los datos que debe utilizar, que se pueda cambiar esa estructura sin tener que cambiar los programas relacionados con ella. Se han definido dos tipos de independencia: la independencia física: consiste en poder modificar parámetros de cómo está almacenada físicamente la información (por ejemplo cambiar el tipo de dato de un campo o cambiar la ubicación de la información de un disco a otro), sin que ello suponga una modificación de los programas existentes. la independencia lógica: consiste en poder cambiar la definición conceptual del sistema de información (por ejemplo añadir un nuevo campo a la información de los clientes) sin que ello suponga una modificación de los programas existentes. 


SEGURIDAD E INTEGRIDAD. 

Otro objetivo a lograr es el de la seguridad, que los usuarios no puedan acceder a datos sin autorización. Si juntamos toda la información de la empresa en un sólo sitio, el SGBD debe tener mecanismos para que cualquier usuario pueda tener acceso únicamente a la información que necesita de cara a la privacidad de esa información, incluso si tiene acceso a una información que se pueda decidir si además de visualizarla puede modificarla. 

Por ejemplo en un sistema en el que los alumnos pueden consultar sus notas, ¡deberá de existir algún mecanismo para que el alumno pueda ver sus notas pero no cambiarlas! 

La integridad se refiere a que la información almacenada en la base de datos esté libre de errores. Esto no siempre es posible ya que existen distintos tipos de errores que tienen diferentes soluciones: * fallos de hardware, estos errores sólo se pueden subsanar mediante copias de seguridad que pueden ser automáticas o manuales.

fallos del programador, puede que aparezcan datos erróneos en la base de datos como consecuencia de errores en el programa que genera estos datos. Para evitar al máximo este tipo de errores el sistema debe ser capaz de detectar automáticamente la mayor cantidad de errores para descargar los programas de comprobaciones rutinarias, el lenguaje de programación debe ser fácil de utilizar y si el sistema ofrece la posibilidad de utilizar juegos de ensayos bien definidos, será más fácil probar los programas.

* fallos del usuario final, el usuario que introduce datos en la base de datos también puede cometer errores, el sistema debe permitir controlar al máximo la información que se introduce para limitar el número de estos errores, para ello se incluyen cláusulas de validación de los datos, validaciones de diferentes tipos que veremos con más detalle más adelante. 

* fallos derivados de la concurrencia, ya que toda la información está centralizada y los distintos usuarios acceden a ella de forma simultánea, pueden ocurrir problemas cuando dos usuarios quieren acceder al mismo dato a la vez. Por ello el SGBD debe tener establecidos mecanismos para evitar este tipo de problema, bloquear registros, abortar automáticamente transacciones etc...

REDUNDANCIA MÍNIMA.

La redundancia consiste en que existan datos idénticos repetidos en varios lugares. Por ejemplo si nos guardamos la dirección del cliente en la factura, en la cta. contable, y en los datos generales del cliente tendremos redundancia, el mismo dato repetido en varios sitios, pues esto nos produce varios problemas:

* la información repetida ocupa espacio innecesario. 

* la variación de un domicilio supone el variar ese domicilio en todos los lugares donde esté almacenado => mayor tiempo de proceso => posibilidad de inconsistencia (el mismo cliente con dos domicilios ¿cuál es el bueno?) Por todo ello hay que intentar eliminar al máximo esa redundancia.

FACILIDAD DE RECUPERACIÓN DE LA INFORMACIÓN. 

Otro objetivo muy importante de un SGBD es el proporcionar al usuario (y al programador) unas herramientas potentes de manejo de datos para que pueda de manera sencilla y rápida, obtener toda la información que desea. 

ARQUITECTURA DE UN SGBD. 

Para lograr los objetivos anteriores las bases de datos tienen una estructura en tres niveles, y el sistema gestor es el encargado de relacionar los niveles entre sí. Los niveles no son más que diferentes formas de ver la información almacenada en la base de datos, permiten ver esa información desde varios puntos de vista. Esta arquitectura es la ANSI PSARC y define tres niveles o tres “visiones distintas de la base de datos, el nivel interno, conceptual y externo.



EL NIVEL INTERNO. 

El nivel interno es el más cercano al almacenamiento de los datos, este nivel es el de la visión del administrador de la BD, ya que es donde tenemos la definición física de los datos, su organización interna, la definición de las reglas de validación, controles de seguridad, etc...


EL NIVEL CONCEPTUAL. 


En este nivel se tiene una visión global de todos los datos que intervienen en la base de datos, pero a nivel de concepto olvidándose de la estructura interna. Podemos decir que en este nivel es donde tenemos la definición de qué datos se guardan en la base de datos y las relaciones que unen los datos entre sí. 

EL NIVEL EXTERNO. 

Este nivel representa la percepción de los datos por cada uno de los usuarios o programadores, digamos que el usuario no ve todos los datos que aparecen en el nivel conceptual, sino sólo los que le hacen falta. 

Cada esquema externo es un subconjunto del esquema conceptual, proporciona una visión parcial del mismo. De esta forma se puede proteger la información reservada a unos pocos usuarios. Para el usuario no habrá más datos en la bd. que los definidos en su esquema externo. 

El SGBD es el encargado de realizar el enlace entre los tres niveles de manera que cuando un usuario pida un datos definido en su esquema externo, el SGBD lo busca en el fichero adecuado y de acuerdo a la definición interna, pero esa transformación será totalmente transparente para el usuario, el usuario sólo pide el nombre de un cliente y el SGBD se encarga de buscar ese datos en la tabla correspondiente almacenada en tal dispositivo. 

Esta estructura permite lograr los objetivos nombrados anteriormente, tenemos independencia de los datos, integridad gracias a las reglas que se pueden definir a nivel interno; seguridad que se consigue por medio de los esquemas externos, ya que el usuario sólo tiene acceso a su esquema externo que le proporciona los datos que el administrador ha considerado incluir en el esquema, para el usuario no hay más datos que éstos. Además los SGBD tienen mecanismos para limitar el acceso a cada usuario según el tipo de operación que quiera realizar. 

Esto lo consigue mediante la definición de autorizaciones que pueden ser de distinto tipo: autorización de lectura, de inserción, de actualización, autorizaciones especiales para poder variar el esquema conceptual etc... Gracias al nivel conceptual tenemos una definición “resumida” de la información almacenada por lo que es más fácil detectar redundancia en los datos. 

EL ADMINISTRADOR DE LA BASE DE DATOS. 

El administrador es el encargado de gestionar y controlar todo el sistema con la ayuda que le proporciona el SGBD. Entre sus responsabilidades se incluye: * Diseñar la base de datos: - definir el esquema conceptual - definir el esquema interno, supone definir soportes, organizaciones, métodos de acceso, factores de bloqueo, índices, tamaño y tipo de los campos etc... y definir los procedimientos de validación a efectuar por el sistema sobre los datos. - definir los esquemas externos, tantos como visiones distintas tengan que tener todos los usuarios de la empresa.

* Definir los usuarios. 
* Conceder autorizaciones a los distintos usuarios. 
* Mantener los esquemas actualizados. 
* Definir estrategias de recuperación adecuada de la información en caso de pérdida o daños sufridos por algún fallo. 
* Realizar estadísticas para evaluar el rendimiento del sistema


EL DICCIONARIO DE DATOS. 

Dentro del SGBD, hay una parte que son datos sobre los datos, es una base de datos en la que se almacena toda la información necesaria para que el sistema funcione. Esta base de datos es el diccionario de datos y contiene:

* las tablas que almacenan las definiciones de los esquemas,
* las tablas que contienen los códigos de autorizaciones,
* la definición de los aliases,
* la relación entre los distintos usuarios y los esquemas externos asociados a los mismos.
Introdución:

Si desea obtener información sobre este curso en términos generales, lea el mensaje de bienvenida e introducción antes de empezar.

Base de datos:

Las bases de datos existen desde que el ser humano empezó a almacenar datos en algún soporte. Si por datos entendemos dibujos, que lo son, entonces las primeras bases de datos fueron las paredes de las cuevas donde nuestros ancestros dibujaron las pinturas rupestres.

Posteriormente los egipcios crearon grandes estructuras arquitectónicas que usaron, entre otras cosas, como soporte para almacenar datos y narrar la historia del antiguo Egipto en sus paredes. El tiempo transcurrió hasta el punto de que el significado de todos esos símbolos se perdió, sin embargo la base de datos perduró lo suficiente para que alguien consiguiera descifrar los jeroglíficos a tiempo, de modo que todos esos datos, esa faraónica base de datos, cobró de nuevo todo su sentido. De hecho el valor de toda esa información es mayor que todos los tesoros que pudiesen esconder tumbas y templos. Los arqueólogos esperan encontrar en los nuevos hallazgos, antes que objetos y tesoros, nuevos jeroglíficos que les permitan conocer algún episodio olvidado de la historia de esta fascinante civilización. En ocasiones es esa misma información la que proporciona las pistas para descubrir nuevos hallazgos.

En la actualidad las bases de datos informáticas han quitado todo el protagonismo a sus antecesoras, los archivos de papel, que aun se siguen usando en algunos ámbitos concretos. De bases de datos informáticas han habido de varios tipos, pero las que más han proliferando son las que se tratarán en este curso, las bases de datos relacionales. Mencionar que antes de estas últimas se usaron las bases de datos jerárquicas y posteriormente las bases de datos en red, actualmente sistemas en desuso.

Para encauzar el aprendizaje del lenguaje de consulta SQL empezaremos por conocer la estructura de almacenamiento que usa una base de datos relacional. En este caso no son paredes, ni montones de papel lo que se usa para almacenar la información, sino que se almacena en soportes informáticos bajo una estructura lógica de almacenamiento, como la tiene un archivo de papel, por ejemplo: edificio, planta, pasillo, ubicación, ficha. De este modo es posible recuperar la información que interesa de un modo ágil, gracias a los incides y la estructura organizada del archivo. A continuación se verá como estructura la información una base de datos relacional, pero antes, establezcamos una pocas definiciones.

Base de datos relacional:
Una base de datos (BD), o mejor dicho, un sistema gestor de bases de datos (SGBD), es un software que gestiona una o más bases de datos y nos permite explotar los datos almacenados en ellas de forma relativamente simple mediante SQL.

Esta es una definición muy simplificada, pero para que el aprendizaje sea distendido lo supondremos así, de ese modo podemos centrarnos en aprender como y con que propósito accedemos a los datos, dejando para el final como creamos, alimentamos o modificamos la BD.

Algunos ejemplos de SGBD son: Oracle, MySQL, MS SQL Server…


En este curso se empleará un SGBD MySQL, de modo que los ejemplos y ejercicios están diseñados para MySQL, y el banco de pruebas accede a una base de datos MySQL. No se debe confundir con un curso para MySQL, no lo es, aplicar lo aprendido a uno u otro SGBD será cuestión únicamente de conocer la sintaxis de cada sistema y sus funcionalidades para interactuar con sus bases de datos.
Por ejemplo, si usted realiza un curso para escritores en castellano, donde aprende técnicas y trucos para escribir un thriller, es de esperar que no tenga que realizar el mismo curso en francés porque desea escribir su thriller en francés, para ello bastará con que sepa usted francés. Afortunadamente el estándar SQL empleado por los distintos SGBD es muy similar y en muchas cosas idéntico, no comparable a las diferencias que encontramos entre dos idiomas como puedan ser el castellano y el francés.



Estructura mínima de almacenamiento:


Tabla:

Objeto de almacenamiento perteneciente a una BD. Es una estructura en forma de cuadrante donde se almacenan registros o filas de datos. Cada tabla tiene un nombre único en la BD.


Registro:

Cada una de las filas de una tabla, esta compuesto por campos o atributos.


Campo:

Cada uno de los “cajoncitos” de un registro donde se guardan los datos. Cada campo tiene un nombre único para la tabla de la cual forma parte, además es de un tipo (naturaleza) determinado, por tanto no podemos guardar limones en el cajón de las naranjas, en términos informáticos y a modo de ejemplo, no encontraremos un dato alfanumérico (letras y números) en un campo diseñado para guardar datos numéricos. Dedicaremos una lección a los tipos de datos más adelante.

Por el momento estas son las definiciones que necesitamos, veamos ahora un ejemplo concreto de tabla.

Ejemplo de tabla:

Tabla EMPLEADOS

Cada registro o fila de datos contiene información de un empleado. En el ejemplo observamos que la tabla tiene un diseño de siete campos y que almacena cuatro registros. El nombre de cada campo viene dado por la fila de encabezado. El dato que contiene el campo ID_EMPLEADO identifica cada registro, pero por ahora no le demos importancia a esto.

Los registros o miembros de una tabla tienen en común sus atributos, no el dato en sí, que lo más probable es que difiera de un registro a otro, pero sí el hecho de que todos ellos poseen esos atributos. En el ejemplo los miembros de la tabla EMPLEADOS tiene en común que todos ellos son personas empleadas en una empresa, que tienen un nombre y un salario, una fecha de nacimiento, etc... Por lo tanto las tablas de una BD guardan información de individuos o unidades de una misma naturaleza con una serie de atributos en común.










Resumen:

Una BD contendrá tablas que a su vez contendrán registros y en estos se encontrarán los datos distribuidos en una serie de campos. Cada registro de la tabla guarda la información particular de una unidad o miembro de un mismo grupo. El SGBD cumple la función de interface entre el usuario y la BD, permitiéndonos interactuar con ella mediante SQL.


Si este fuese un manual de SQL, o alguno de los muchos cursos SQL que se pueden encontrar por la web, ahora tocaría abordar la instalación de un SGBD para posteriormente crear una BD con algunas tablas de ejemplo con las que empezar a trabajar. Pero este curso pretende ser diferente. Si ahora se expusiera lo antes mencionado, corremos el riesgo de que usted pierda el interés por la materia, además, el SQL no incluye la instalación del SGBD ni la creación de tablas. Si usted, por ejemplo, desea aprender electricidad, ¿a caso ha de fabricar bombillas, cables y el generador eléctrico con el que poder trabajar? Obviamente no.

En este curso la BD y las tablas con las que trabajar las tiene accesibles mediante el banco de pruebas, así que empezaremos directamente por lo que será la tónica de este curso: las consultas SQL, que es digamos donde está la miga, y no será hasta el final del curso que se verá la creación de tablas y como modificar la información. A fin de cuentas no tiene demasiado sentido aprender a crear tablas cuando aun no sabe que hacer con ellas.

Consultas SQL

Abordemos las consultas SQL con un caso práctico. Sobre la tabla EMPLEADOS se plantea la siguiente cuestión:

¿Qué empleados tienen un salario mayor a 1350?










La respuesta es simple: José y Carlos tiene un salario mayor a 1350, pero si tuviésemos 500 empleados nos llevaría más tiempo responder, y al final tampoco tendríamos la certeza de no habernos equivocado. El SQL nos permite responder estas preguntas de forma rápida y fiable, salvo error al construir la consulta o errores en los propios datos.

Vamos pues a construir la consulta que nos permita responder a esta cuestión.

Preguntas de Construcción
Para construir una consulta SQL debemos hacernos como mínimo tres preguntas:

Primero hemos de preguntarnos: ¿qué datos nos están pidiendo?
En este caso, el nombre y los apellidos de los empleados.

Lo siguiente que nos preguntamos es: ¿dónde están esos datos?
Obviamente están en la tabla empleados.

Y por último: ¿qué requisitos deben cumplir los registros?
En este caso, que el sueldo del empleado sea superior a 1350.

Vamos a suponer por un momento que el SGBD, que es quien intermedia entre el usuario y la BD, fuese una persona; la BD un archivo de papel, y el jefe pide lo siguiente: "Necesito saber ¿qué empleados cobran más de 1350 euros? Usted, que conoce bien el archivo(tablas) y que datos contiene la ficha de un empleado (campos de la tabla EMPLEADOS), mentalmente se hace las preguntas de construcción y le dice a su ayudante que siempre espera ordenes concretas:

Seleccióname el NOMBRE y los APELLIDOS
del archivo EMPLEADOS
cuyo SALARIO sea mayor a 1350

El ayudante sirve la petición y se la entrega para que finalmente usted se la facilite a su jefe. ¿Que papel ocuparían hoy en una empresa moderna? El jefe sigue siendo el jefe, eso está claro, pero usted ha pasado a ser el informático, y su ayudante el SGBD.

Sintaxis SQL
En SQL la forma de operar es parecida, esta información se obtiene mediante la siguiente consulta:

CÓDIGO: SELECCIONAR TODO
select NOMBRE , APELLIDOS
  from EMPLEADOS
 where SALARIO 
> 1350

Obsérvese que en la consulta los nombres de los objectos de base de datos (tabla y campos) los escribimos en mayúsculas, mientras que para las palabras reservadas de la consulta SQL (select, from, where) lo hacemos en minúsculas; esto tiene únicamente un propósito estético, con intención de hacer el código más ordenado y legible. Puede no ser así siempre, dependiendo del SGBD y/o del sistema operativo(windows, linux, ...) donde trabaje el SGBD, este puede ser sensible a mayúsculas y minúsculas.


Y el resultado que nos devuelve el SGBD es:

Parecido a lo que nos entregaría nuestro ayudante en el archivo, una lista con la respuesta o solución a la cuestión planteada. Como ve, tanto el modo de solicitar la información al SGBD, sea clásico o informatizado, como el modo en que este nos muestra la información, son muy similares, al menos en este caso. No podemos afirmar lo mismo del tiempo en que uno y otro tardan en facilitarnos la información solicitada.

Forma general

En general una consulta SQL simple tendrá la siguiente forma:

CÓDIGO: SELECCIONAR TODO
select CAMPOS(separados por comas)  from TABLA
 where CONDICION


El SQL permite al usuario desentenderse de como el SGBD ejecuta la consulta, al igual que usted se desentiende de como su ayudante en el archivo de papel se las ingenia para facilitarle la información. Usted esperará pacientemente tras el mostrador a que su ayudante prepare su pedido y le entregue los datos. Dicho de otro modo, basta con saber como pedir la información y no como proceder a reunirla.

Resumen
Hemos visto como construir una consulta SQL simple y concreta, que nos da la solución a una cuestión concreta.

Se ha definido la forma general de una consulta SQL simple:

CÓDIGO: SELECCIONAR TODO
select CAMPOS(separados por comas)  from TABLA
 where CONDICION

Destacar también la utilidad de las preguntas de construcción para ayudarnos a construir la consulta.

¿Qué datos nos piden?
¿Dónde están los datos?
¿Qué requisitos debe cumplir los registros?

En una empresa moderna un informático cumple la función de encargado del archivo, y sus ayudantes son hoy los sistemas informatizados.

Sugerencia: si envía el código SQL que sigue a este párrafo desde el banco de pruebas al SGBD, este le reportará la lista de campos de la tabla EMPLEADOS bajo una columna titulada Fied(termino en inglés que significa campo). Esto le puede venir bien para tener presente los nombres de los campos de la tabla EMPLEADOS mientras desarrolla el ejercicio.

CÓDIGO: SELECCIONAR TODO
describe EMPLEADOS

La siguiente sentencia más simplificada es equivalente:

CÓDIGO: SELECCIONAR TODO
desc EMPLEADOS

viernes, 13 de marzo de 2015

Álgebra relacional

El álgebra relacional es un conjunto de operaciones que describen paso a paso cómo computar una respuesta sobre las relaciones, tal y como éstas son definidas en el modelo relacional. Denominada de tipo procedimental, a diferencia del Cálculo relacionalque es de tipo declarativo.

Describe el aspecto de la manipulación de datos. Estas operaciones se usan como una representación intermedia de una consulta a una base de datos y, debido a sus propiedades algebraicas, sirven para obtener una versión más optimizada y eficiente de dicha consulta.


Tuplas
Una tupla se define como una función finita que asocia unívocamente los nombres de los atributos de una relación con los valores de una instanciación de la misma. En términos simplistas, es una fila de una tabla relacional.
Unión compatible

Una unión es compatible entre dos relaciones R, S, si ellas poseen el mismo grado y el dominio del i-ésimo elemento de la relación R es el mismo que el i-ésimo elemento de la relación S.
Grado (Aridad)

Número de atributos.
Las operaciones
Básicas


Cada operador del álgebra acepta una o dos relaciones y retorna una relación como resultado. σ y Π son operadores unarios, el resto de los operadores son binarios. Las operaciones básicas del álgebra relacional son:
Selección (σ)

Permite seleccionar un subconjunto de tuplas de una relación (R), todas aquellas que cumplan la(s) condición(es) P, esto es:


   \sigma_P(R) \!
Ejemplo:

   \sigma_{Apellido=Gomez}(Alumnos) \!


Selecciona todas las tuplas que contengan Gómez como apellido en la relación Alumnos.

Una condición puede ser una combinación booleana, donde se pueden usar operadores como:
 \wedge , \vee, combinándolos con operadores <, >, \le, \ge, =, \ne.

Proyección (Π)

Permite extraer columnas (atributos) de una relación, dando como resultado un subconjunto vertical de atributos de la relación, esto es:


   \Pi_{A_1,A_2,\dots,A_n} \!
donde A_1,A_2,\dots,A_n son atributos de la relación R .
Ejemplo:

   \Pi_{Apellido,Semestre,NumeroControl}(Alumnos) \!
Selecciona los atributos Apellido, Semestre y NumeroControl de la relación Alumnos, mostrados como un subconjunto de la relación Alumnos

Producto cartesiano (x)

El producto cartesiano de dos relaciones se escribe como:


R \times S

y entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de R seguidos por los de S.

Ejemplo:



   Alumnos \times Maestros

Muestra una nueva relación, cuyo esquema contiene cada una de las tuplas de la relación Alumnos junto con las tuplas de la relación Maestros, mostrando primero los atributos de la relación Alumnos seguidos por las tuplas de la relación Maestros.
Unión (∪)

La operación


R \cup S

retorna el conjunto de tuplas que están en R, o en S, o en ambas. R y S deben ser uniones compatibles.
Diferencia (-)

La diferencia de dos relaciones, R y S denotada por:


R - S \!

entrega todas aquellas tuplas que están en R, pero no en S. R y S deben ser uniones compatibles.

Estas operaciones son fundamentales en el sentido en que (1) todas las demás operaciones pueden ser expresadas como una combinación de éstas y (2) ninguna de estas operaciones pueden ser omitidas sin que con ello se pierda información.


No básicas o Derivadas

Entre los operadores no básicos tenemos:
Intersección (∩)

La intersección de dos relaciones se puede especificar en función de otros operadores básicos:


 R \cap S = R - (R - S)

La intersección, como en Teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S uniones compatibles.
Unión natural (⋈) (Natural Join)

La operación unión natural en el álgebra relacional es la que permite reconstruir las tablas originales previas al proceso de normalización. Consiste en combinar las proyección, selección y producto cartesiano en una sola operación, donde la condición es la igualdad Clave Primaria = Clave Externa (o Foránea), y la proyección elimina la columna duplicada (clave externa).

Expresada en las operaciones básicas, queda


 R \bowtie S = \Pi_{A1,A2...An} ( \sigma_\theta (R\times S) )
Una reunión theta ( θ-Join) de dos relaciones es equivalente a:


 R \bowtie_\theta S = \sigma_\theta (R\times S)

donde la condición  \theta  es libre.
Si la condición  \theta  es una igualdad se denomina EquiJoin.
División (/)

Supongamos que tenemos dos relaciones A(x, y) y B(y) donde el dominio de y en A y B, es el mismo.

El operador división A / B retorna todos los distintos valores de x tales que para todo valor y en B existe una tupla
 \langle x,y \rangle en A.

Agrupación (Ģ)

Permite agrupar conjuntos de valores en función de un campo determinado y hacer operaciones con otros campos.

Por ejemplo: Ģ sum(puntos) as Total Equipo (PARTIDOS).
Ejemplos:

Suponga las relaciones o tablas:

Alumno
IDNOMBRECIUDADEDAD
01PedroSantiago14
11JuanBuenos Aires18
21DiegoLima12
31RositaConcepción15
41ManuelLima17
Apoderado
IDNOMBREFONOID_ALUMNO
054Víctor65464421
457José45465411
354María99745531
444Paz74742301
Curso
CODNOMBREFECHA_INICIODURACIÓNVALOR
01142Psicología13-01153.000
02145Biología15-02122.500
03547Matemáticas01-03304.000
04578Música05-04101.500
05478Física20-04153.200
Inscrito
IDID_ALCOD
10105478
20102145
31103547
42102145
54103547


Mostrar los nombres de los alumnos y su apoderado

Primero, realizaremos una combinación entre alumnos y apoderados (pues necesitamos saber a que alumno le corresponde tal apoderado). 

La combinación realizará un producto cartesiano, es decir, para cada tupla de alumnos (todas las filas de alumnos) hará una mezcla con cada una tupla de apoderados y seleccionará aquellas nuevas tuplas en que alumnos.id sea igual a apoderados.id_alumno, esto es:
ID (alumno)NOMBRE (alumno)CIUDADEDADID (apoderado)NOMBRE (apoderado)FONOID_ALUMNO
01PedroSantiago14054Víctor65464421
01PedroSantiago14457José45465411
01PedroSantiago14354María99745531
01PedroSantiago14444Paz74742301
11JuanBuenos Aires18054Víctor65464421
11JuanBuenos Aires18457José45465411
11JuanBuenos Aires18354María99745531
11JuanBuenos Aires18444Paz74742301
21DiegoLima12054Víctor65464421
21DiegoLima12457José45465411
21DiegoLima12354María99745531
21DiegoLima12444Paz74742301
31RositaConcepción15054Víctor65464421
31RositaConcepción15457José45465411
31RositaConcepción15354María99745531
31RositaConcepción15444Paz74742301
41ManuelLima17054Víctor65464421
41ManuelLima17457José45465411
41ManuelLima17354María99745531
41ManuelLima17444Paz74742301
Por tanto, el resultado final de la combinación es:
Alumnos \bowtie{}_{Alumnos.ID \mbox{ } = \mbox{ } Apoderados.ID\_ALUMNO} Apoderados
ID (alumno)NOMBRE (alumno)CIUDADEDADID (apoderado)NOMBRE (apoderado)FONOID_ALUMNO
01PedroSantiago14444Paz74742301
11JuanBuenos Aires18457José45465411
21DiegoLima12054Víctor65464421
31RositaConcepción15354María99745531
Ahora, aquí debemos mostrar solo el nombre del alumno y el nombre del apoderado, esto lo hacemos con un Proyect o Proyección, donde la tabla final sería:
\Pi_{Alumnos.NOMBRE,Apoderados.NOMBRE}
NOMBRE (alumno)NOMBRE (apoderado)
PedroPaz
JuanJosé
DiegoVíctor
RositaMaría
Resumiendo en un solo paso:
\Pi_ {Alumnos.NOMBRE,Apoderados.NOMBRE}\big(Alumnos \bowtie{}_{Alumnos.ID \mbox{ } = \mbox{ } Apoderados.ID\_ALUMNO} Apoderados\big)
Se lee: Proyecta los nombre de alumnos y nombre de apoderados de los alumnos cuyo ID sea el mismo que el ID_ALUMNO de los apoderados.

Mostrar el nombre de los alumnos inscritos y el nombre de los cursos que tomaron

Comenzaremos con una combinación entre los inscritos y los cursos para obtener el nombre de los cursos:

 Inscritos \bowtie_{Inscritos.COD = Cursos.COD} Cursos


Lo que nos da la tabla:
Resultado 1
IDID_ALCOD (inscritos)COD (cursos)NOMBREFECHA_INICIODURACIONVALOR
1010547805478Física20-04153.200
2010214502145Biología15-02122.500
3110354703547Matemáticas01-03304.000
4210214502145Biología15-02122.500
5410354703547Matemáticas01-03304.000


Como podemos observar, la combinación solo nos entrega las combinaciones entre Inscritos y Cursos en que COD sea igual entre los inscritos y el curso correspondiente.

Ahora necesitamos los nombres de los alumnos inscritos. Al resultado anterior (Resultado 1) aplicaremos una nueva combinación comparando los ID de los alumnos para colocar el nombre adecuado con el estudiante adecuado:

Resultado 1 \bowtie{}_{Resultado\mbox{ }1.ID\_AL \mbox{ } = \mbox{ } Alumnos.ID} Alumnos
O escrito todo junto:

\big(Inscritos \bowtie{}_{Inscritos.COD \mbox{ } = \mbox{ } Cursos.COD}Cursos\big) \bowtie{}_{Resultado\mbox{ }1.ID\_AL \mbox{ } = \mbox{ } Alumnos.ID} Alumnos
La tabla de este nuevo resultado sería:
Resultado 2
ID (inscrito)ID_ALCOD (inscritos)COD (cursos)NOMBRE (curso)FECHA_INICIODURACIONVALORID (alumno)NOMBRE (alumno)CIUDADEDAD
1010547805478Física20-04153.20001PedroSantiago14
2010214502145Biología15-02122.50001PedroSantiago14
3110354703547Matemáticas01-03304.00011JuanBuenos Aires18
4210214502145Biología15-02122.50021DiegoLima12
5410354703547Matemáticas01-03304.00041ManuelLima17
Finalmente con una Proyección mostraremos el nombre del alumno y el curso inscrito:
\Pi_{Resultado2.NOMBRE\mbox{ }(alumno), Resultado2.NOMBRE\mbox{ }(curso)}\big(Resultado 2\big)


Donde la tabla final sería:
Tabla final
NOMBRE (alumno)NOMBRE (curso)
PedroFísica
PedroBiología
JuanMatemáticas
DiegoBiología
ManuelMatemáticas
La expresión completa sería:
\Pi_{Resultado2.NOMBRE\mbox{ }(alumno), Resultado2.NOMBRE\mbox{ }(curso)}\Big(\big(Inscritos \big)\bowtie {}_{Inscritos.COD \mbox{ } = \mbox{ } Cursos.COD}Cursos\big)\bowtie {}_{Resultado1.ID\_AL \mbox{ } = \mbox{ } Alumnos.ID} Alumnos\Big)

Mostrar los nombres y precios de los cursos inscritos con valor menor a 3.000[editar]

\Pi_{Resultado1.NOMBRE, \mbox{ }Resultado1.VALOR}\Big(\delta_{Cursos.VALOR < 3000}\big(Resultado 1\big)\Big)
Lo que nos entregaría la tabla:
Resultado final
NOMBREVALOR
Biología2.500
Y la expresión completa sería:
\Pi_{Resultado1.NOMBRE, \mbox{ }Resultado1.VALOR}\Big(\delta_{Resultado1.VALOR < 3000}\big(Curso\bowtie_{Inscriptos.COD = Cursos.COD}Inscrito\big)\Big)