Anda di halaman 1dari 218

Tema 1.

Gestin de datos
Visin general del tema
Histricamente, las primeras aplicaciones de computadora se concentraron en tareas de oficina: procesamiento de entradas o procesamiento de pedidos, o ambos, nminas, planificacin del trabajo, etc. Tales aplicaciones tenan acceso a datos guardados en archivos de computadora. Se solicitaba informacin (cuntos productos se vendieron, por quin y a quin?); y se generaban informes para transformar los datos en informacin til para las decisiones gerenciales. En esta primera unidad veremos cmo se desarrollaron los sistemas de archivos de computadora para dar respuesta a las necesidades de las organizaciones.

Terminologa bsica de archivos Los sistemas de archivos Sistemas de bases de datos P1. Instalacin MySQL

Terminologa bsica de archivos Un poco de la jerga informtica necesaria Como en cualquier otra disciplina del mundo, en este caso, la informtica y, ms concretamente, los archivos, manejan una serie de conceptos cuya comprensin es necesaria para comenzar a aproximarnos a la gestin de datos con archivos. Campo : un carcter o grupo de caracteres (alfabticos o numricos) que tiene un significado especfico. Se utiliza un campo para definir y guardar un dato. Registro : un conjunto de uno o ms campos relacionados que describe una persona, lugar o cosa. Por ejemplo, los campos que constituyen un registro de un alumno podran ser el nombre, el domicilio, el nmero telefnico, la fecha de nacimiento, etc. Archivo : un archivo es un conjunto de registros relacionados. Por ejemplo, un archivo podra contener los registros de los estudiantes actualmente inscritos en este curso.

Los sistemas de archivos


Una revisin del origen de las bases de datos
Histricamente, las primeras aplicaciones de computadora se concentraron en tareas de oficina: procesamiento de entradas o procesamiento de pedidos, o ambos, nminas, planificacin del trabajo, etc. Tales aplicaciones tenan acceso a datos guardados en archivos de computadora. Se solicitaba informacin (cuntos productos fueron vendidos, por quin y a quin?); y se generaban informes para transformar los datos en informacin til para las

decisiones gerenciales. En esta primera unidad veremos cmo se desarrollaron los sistemas de archivos de computadora para dar respuesta a las necesidades de las organizaciones. Aunque los sistemas de archivos ahora son muy obsoletos, existen algunas buenas razones para estudiarlos:

Los sistemas de archivos proporcionan una perspectiva histrica sobre la manera de manejar datos. Algunos de los problemas que presentan los sistemas de archivos podran duplicarse en el software de base de datos si los usuarios del nuevo software no conocieran los peligros latentes de la administracin de datos. Un conocimiento de las caractersticas relativamente simples de los sistemas de archivos hace que la complejidad del diseo de bases de datos sea ms fcil de comprender. Si se pretende convertir un sistema de archivos obsoleto en un sistema de base de datos, el conocimiento de las limitaciones bsicas de aqul ser muy til.

Un sistema de archivos es un conjunto de programas que prestan servicio a los usuarios finales. Cada programa define y maneja sus propios datos. Los sistemas de archivos surgieron al tratar de informatizar el manejo de los archivadores manuales con objeto de proporcionar un acceso ms eficiente a los datos. En lugar de establecer un sistema centralizado en donde almacenar todos los datos de la organizacin o empresa, se escogi un modelo descentralizado en el que cada seccin o departamento almacena y gestiona sus propios datos. Para comprender esto vamos a utilizar como ejemplo una empresa inmobiliaria. En esta inmobiliaria, el departamento de ventas se encarga de alquilar inmuebles. Por ejemplo, cuando un propietario pasa por el departamento de ventas para ofrecer en alquiler su piso, se rellena un formulario en donde se recogen los datos del piso, como la direccin y el nmero de habitaciones, y los datos del propietario. El departamento de ventas tambin se encarga de atender a los clientes que desean alquilar un inmueble. Cuando un cliente (posible inquilino) pasa por este departamento se rellena un formulario con sus datos y sus preferencias: si quiere un piso o una casa, el importe mensual que est dispuesto a pagar por el alquiler, etc. Para gestionar toda esta informacin, el departamento de ventas posee un sistema de informacin . El sistema tiene tres archivos: archivo de inmuebles, archivo de propietarios y archivo de inquilinos. INMUEBLE Inum Calle Area Poblacin Tipo Hab

Alquiler Pnum IA14 Enmedio, 128 Centro Castelln Casa 6 600 P46 IL94 Riu Ebre, 24 Ronda Sur Castelln Piso 4 350 P87 IG4 Sorell, 5 Grao Castelln Piso 3 300 P40 IG36 Alicante,1

Segorbe Piso

3 325 P93 IG21 San Francisco, 10

Vinaroz Casa 5 550 P87 IG16 Capuchinos, 19 Rafalafena Castelln Piso 4 400 P93 PROPIETARIO Pnum Nombre Apellido Direccin Pref Telfono P46 Amparo Felip Asensi 24, Castelln

964 230 680 P87 Manuel Obiol Av.Libertad 15, Vinaroz 964 450 760 P40 Alberto Estrada Av.del Puerto 52, Castelln 964 200 740 P93 Yolanda Robles Pursima 4, Segorbe 964 710 430 INQUILINO Qnum Nombre Apellido Direccin Pref Telfono Tipo Alquiler Q76

Juan Felip Barcel 47, Castelln 964 282 540 Piso 375 Q56 Ana Grangel San Rafael 45, Almazora 964 551 110 Piso 300 Q74 Elena Abaso Navarra 76, Castelln 964 205 560 Casa 700 Q62 Alicia Mori Alloza 45, Castelln 964 229 580 Piso 550

El departamento de contratos se ocupa de gestionar los contratos de alquiler de los inmuebles. Cuando un cliente desea formalizar un contrato, un empleado de la empresa rellena un formulario con los datos del inquilino y los datos del inmueble. Este formulario se pasa al departamento de contratos, que asigna un nmero al contrato y completa la informacin sobre el pago y el perodo del contrato. Para gestionar esta informacin, el departamento de contratos posee un sistema de informacin con tres archivos: el archivo de los contratos, el archivo de los inmuebles alquilados y el archivo de los inquilinos que tienen en vigor un contrato de alquiler. CONTRATO Cnum Inum Qnum Importe Pago Inicio Fin Meses 10024 IA14 Q62 600 Visa 1/6/99 31/5/00 12 10075 IL94 Q76 350 Efectivo 1/1/00 30/6/00 6

10012 IG21 Q74 550 Cheque 1/7/99 30/6/00 12 INMUEBLE Inum Calle Area Poblacin Alquiler IA14 Enmedio, 128 Centro Castelln 600 IL94 Riu Ebre, 24 Ronda Sur Castelln 350 IG21 San Francisco, 10

Vinaroz

550 INQUILINO Qnum Nombre Apellido Direccin Poblacin Telfono Q76 Juan Felip Barcel, 47 Castelln 964 282 540 Q74 Elena Abaso Navarra, 76 Castelln 964 205 560 Q62 Alicia Mori Alloza, 45 Castelln 964 229 580 Cada departamento accede a sus propios archivos mediante una serie de programas de aplicacin escritos especialmente para ellos. Estos programas son totalmente independientes entre un departamento y otro, y se utilizan para introducir datos, mantener los archivos y generar los informes que cada departamento necesita. Es importante destacar que la estructura fsica de los archivos de datos y de sus registros est definida dentro de los programas de aplicacin.

La situacin es muy similar en el resto de departamentos. En el departamento de nminas tienen un archivo con los datos de los salarios de los empleados. Los registros de este archivo tienen los siguientes campos: nmero de empleado, nombre, apellido, direccin, fecha de nacimiento, salario, DNI y nmero de la oficina en la que trabaja. El departamento de personal tiene un archivo con los datos de los empleados. Sus registros tienen los siguientes campos: nmero de empleado, nombre, apellidos, direccin, telfono, puesto, fecha de nacimiento, salario, DNI y nmero de la oficina en la que trabaja. Se puede ver claramente que hay una gran cantidad de datos repetidos en los archivos de estos departamentos, algo que siempre ocurre en los sistemas de archivos. A raz de esto, los sistemas de archivos presentan una serie de inconvenientes:

Separacin y aislamiento de los datos . Cuando los datos se separan en distintos archivos, es ms complicado acceder a ellos, ya que el programador de aplicaciones debe sincronizar el procesamiento de los distintos archivos implicados para asegurar que se extraen los datos correctos. Duplicacin de datos . La redundancia de datos existente en los sistemas de archivos hace que se desperdicie espacio de almacenamiento y lo que es ms importante: puede llevar a que se pierda la consistencia de los datos. Se produce una inconsistencia cuando copias de los mismos datos no coinciden. Dependencia de datos . Ya que la estructura fsica de los datos (la definicin de los archivos y de los registros) se encuentra codificada en los programas de aplicacin, cualquier cambio en dicha estructura es difcil de realizar. El programador debe identificar todos los programas afectados por este cambio, modificarlos y volverlos a probar, lo que cuesta mucho tiempo y est sujeto a que se produzcan errores. A este problema, tan caracterstico de los sistemas de archivos, se le denomina tambin falta de independencia de datos lgica-fsica. Formatos de archivos incompatibles . Ya que la estructura de los archivos se define en los programas de aplicacin, es completamente dependiente del lenguaje de programacin utilizado para desarrollar dichos programas. La incompatibilidad entre archivos generados por distintos lenguajes hace que los archivos sean difciles de procesar de modo conjunto. Consultas fijas y proliferacin de programas de aplicacin . Desde el punto de vista de los usuarios finales, los sistemas de archivos fueron un gran avance comparados a los sistemas manuales. A consecuencia de esto, creci la necesidad de realizar distintos tipos de consultas de datos. Sin embargo, los sistemas de archivos son muy dependientes del programador de aplicaciones: cualquier consulta o informe que se quiera realizar debe ser programado por l. En algunas organizaciones se conformaron con fijar el tipo de consultas e informes, siendo imposible realizar otro tipo de consultas que no se hubieran tenido en cuenta a la hora de escribir los programas de aplicacin. En otras organizaciones hubo una proliferacin de programas de aplicacin para resolver todo tipo de consultas, hasta el punto de desbordar al departamento de proceso de datos, que no daba abasto para validar, mantener y documentar dichos programas

Sistemas de bases de datos


Nociones introductorias
En este apartado se relacionan los conceptos bsicos de los sistemas de bases de datos. Estos sistemas surgieron como alternativa a los sistemas de archivos y por ello muchas de sus caractersticas inciden en los problemas que estos presentaban. Los inconvenientes de los sistemas de archivos se pueden atribuir a dos factores:

La definicin de los datos se encuentra codificada dentro de los programas de aplicacin, en lugar de estar almacenada aparte y de forma independiente. No hay control sobre el acceso y la manipulacin de los datos ms all de lo impuesto por los programas de aplicacin.

Para trabajar de un modo ms efectivo, surgieron las bases de datos y los sistemas gestores de bases de datos (SGBD). Una base de datos es un conjunto de datos almacenados entre los que existen relaciones lgicas y que ha sido diseada para satisfacer los requerimientos de informacin de una empresa u organizacin. En una base de datos, adems de los datos, tambin se almacena su descripcin. La base de datos es un gran almacn de datos que se define una sola vez y que se utiliza al mismo tiempo por muchos departamentos y usuarios. En lugar de trabajar con archivos desconectados e informacin redundante, todos los datos se integran con una mnima cantidad de duplicidad. La base de datos no pertenece a un departamento, se comparte por toda la organizacin. Adems, la base de datos no slo contiene los datos de la organizacin, tambin almacena una descripcin de dichos datos. Esta descripcin, que se denomina metadatos, se almacena en el diccionario de datos o catlogo y es lo que permite que exista independencia de datos lgica-fsica. El modelo seguido con los sistemas de bases de datos, en donde se separa la definicin de los datos de los programas de aplicacin, es muy similar al modelo que se sigue en la actualidad para el desarrollo de programas, en donde se da una definicin interna de un objeto y una definicin externa separada. Los usuarios del objeto slo ven la definicin externa y no se deben preocupar de cmo se define internamente el objeto y cmo funciona. Una ventaja de este modelo, conocido como abstraccin de datos, es que se puede cambiar la definicin interna de un objeto sin afectar a sus usuarios ya que la definicin externa no se ve alterada. Del mismo modo, los sistemas de bases de datos separan la definicin de la estructura de los datos, de los programas de aplicacin y almacenan esta definicin en la base de datos. Si se aaden nuevas estructuras de datos o se modifican las ya existentes, los programas de aplicacin no se ven afectados ya que no dependen directamente de aquello que se ha modificado. El sistema gestor de la base de datos (SGBD) es una aplicacin que permite a los usuarios definir, crear y mantener la base de datos, y proporciona acceso controlado a la misma. El SGBD es la aplicacin que interacciona con los usuarios de los programas de aplicacin y la base de datos. En general, un SGBD proporciona los siguientes servicios:

Permite la definicin de la base de datos mediante el lenguaje de definicin de datos . Este lenguaje permite especificar la estructura y el tipo de los datos, as como las restricciones sobre los datos. Todo esto se almacenar en la base de datos. Permite la insercin, actualizacin, eliminacin y consulta de datos mediante el lenguaje de manejo de datos . El hecho de disponer de un lenguaje para realizar consultas reduce el problema de los sistemas de archivos, en los que el usuario tiene que trabajar con un conjunto fijo de consultas, o bien, dispone de un gran nmero de programas de aplicacin costosos de gestionar. Hay dos tipos de lenguajes de manejo de datos: los procedurales y los no procedurales. Estos dos tipos se distinguen por el modo en que acceden a los datos. Los lenguajes procedurales manipulan la base de datos registro a registro, mientras que los no procedurales operan sobre conjuntos de registros. En los lenguajes procedurales se especifica qu operaciones se deben realizar para obtener los datos resultado, mientras que en los lenguajes no procedurales se especifica qu datos deben obtenerse sin decir cmo hacerlo. El lenguaje no procedural ms utilizado es el SQL (Structured Query Language) que, de hecho, es un estndar y es el lenguaje de los SGBD relacionales.

Proporciona un acceso controlado a la base de datos mediante:


1. Un sistema de seguridad , de modo que los usuarios no autorizados no puedan

acceder a la base de datos.


2. Un sistema de integridad que mantiene la integridad y la consistencia de los

datos.
3. Un sistema de control de concurrencia que permite el acceso compartido a la

base de datos.
4. Un sistema de control de recuperacin que restablece la base de datos despus

de que se produzca un fallo del hardware o del software;


5. Un diccionario de datos o catlogo accesible por el usuario que contiene la

descripcin de los datos de la base de datos. A diferencia de los sistemas de archivos, el SGBD gestiona la estructura fsica de los datos y su almacenamiento. Con esta funcionalidad, el SGBD se convierte en una herramienta de gran utilidad. Sin embargo, desde el punto de vista del usuario, se podra discutir que los SGBD han hecho las cosas ms complicadas, ya que ahora los usuarios ven ms datos de los que realmente quieren o necesitan, puesto que ven la base de datos completa. Conscientes de este problema, los SGBD proporcionan un mecanismo de vistas que permite que cada usuario tenga su propia vista o visin de la base de datos. El lenguaje de definicin de datos permite definir vistas como subconjuntos de la base de datos. Las vistas, adems de reducir la complejidad permitiendo que cada usuario vea slo la parte de la base de datos que necesita, tienen otras ventajas:

Las vistas proporcionan un nivel de seguridad, ya que permiten excluir datos para que ciertos usuarios no los vean. Las vistas proporcionan un mecanismo para que los usuarios vean los datos en el formato que deseen.

Una vista representa una imagen consistente y permanente de la base de datos, incluso si la base de datos cambia su estructura.

Todos los SGBD no presentan la misma funcionalidad, depende de cada producto. En general, los grandes SGBD multiusuario ofrecen todas las funciones que se acaban de citar y muchas ms. Los sistemas modernos son conjuntos de programas extremadamente complejos y sofisticados, con millones de lneas de cdigo y con una documentacin consistente en varios volmenes. Lo que se pretende es proporcionar un sistema que permita gestionar cualquier tipo de requisitos y que tenga un 100% de fiabilidad ante cualquier fallo hardware o software. Los SGBD estn en continua evolucin, tratando de satisfacer los requerimientos de todo tipo de usuarios. Por ejemplo, muchas aplicaciones de hoy en da necesitan almacenar imgenes, vdeo, sonido, etc. Para satisfacer a este mercado, los SGBD deben cambiar. Conforme vaya pasando el tiempo irn surgiendo nuevos requisitos, por lo que los SGBD nunca permanecern estticos.

Prctica 1
Instalacin servidor MySQL 5.0
En esta prctica vamos a intentar instalar la versin 5.0 de MySQL sobre un sistema operativo Microsoft Windows. Y por qu vamos a instalar MySQL si tenemos a nuestra disposicin otras bases de datos como SQL Server, Access u Oracle? Bueno, hay varias razones por las que podemos querer esta base de datos. Veamos unas cuantas:

Es gratis. Bueno, ms o menos. Con el MySQL ocurre como con el Linux: es gratis bajo ciertas circunstancias, pero para usos comerciales no ocurre lo mismo (de todos modos aun para uso comercial es una solucin ms barata que otros sistemas de bases de datos) . Es muy rpido para recuperar informacin . Las versiones anteriores (estamos instalando la versin 5) eran perfectamente estables en Windows, con lo que supones que esta tambin lo ser. Se puede acceder a ella mediante ODBC (perfecto para todos los programadores) y mediante drivers especficos (muy rpidos) si accedemos desde Visual Basic .NET. Podemos utilizar integridad referencial. Podemos utilizar procedimientos almacenados y vistas (nuevo en la versin 5)

Hay ms ventajas, pero creo que con estas vemos un ejemplo de por qu es una opcin a tener en cuenta.

Requisitos
No hace falta gran cosa para instalar MySQL. En cuanto a hardware no creo que tengis ningn problema porque supongo que por lo menos partimos de los equipos del aula, es decir, Pentium II y 128 Mb de RAM. En cuanto a software podemos instalarlo en cualquier versin de Windows de 32 bits, pero obviamente funcionar mucho mejor en un sistema operativo preparado para dar servicios

como puede ser Windows 2000 y 2003 Server (en Windows 98 no os preocupis que tambin sirve). Necesitamos que est instalado la pila de protocolos TCP/IP (si estis viendo esta pgina es que tenis TCP/IP). Podemos descargar el fichero de instalacin bien desde esta misma pgina o bien de la pgina web (www.mysql.com). Recuerda que debemos descargar la versin 5.0 para Win32.

Instalacin
Empezamos conectndonos a Windows 98 como usuario "asi2" y contrasea "asi2" para autenticarnos en la red de manera que cuando accedamos al servidor XP (mi equipo porttil) no tengamos problemas con los permisos de las carpetas compartidas. Descomprimimos el archivo de instalacin en un acrpeta temporal y en la carpeta en cuestin buscamos el archivo setup.exe y hacemos doble clic encima de l para comenzar la instalacin. Aparece la ventana de instalacin, aceptamos los contratos, elegimos como carpeta de instalacin "c:\mysql" y elegimos la instalacin tpica. Esperamos un par de minutos y listo.

Configuracin
Para empezar con la configuracin tenemos que ir hasta la carpeta "C:\mysql\bin" y ejecutamos el archivo winmysqladmin.exe. Nos aparece una ventana en la que tenemos que poner el nombre de usuario y contrasea que queremos utilizar. Eligiremos root de usuario y "root" de contrasea (ya se que no est bien, pero es ms fcil de recordar). Una vez hecho esto nos aparece un icono de un semforo en la parte inferior derecha de la pantalla. Pulsamos sobre l con el botn derecho y del men desplegable escogemos la opcin SHOW ME. Ahora s tenemos la pantalla de configuracin del MySQL. Tiene muchas opciones, pestaas, posibilidades de configuracin, etc., pero no tenemos que preocuparnos porque para que esto eche a andar no hay que hacer mucho ms. Esta herramienta nos ayudar de manera sencilla a modificar el archivo my.ini que es donde se guarda la configuracin del MySQL y cuya ubicacin es "C:\Windows". El ltimo paso es minimizar la ventana y veremos que en el la barra de tarear aparece el icono del MySQL: un semforo en verde. Si no est verde pulsaremos sobre l con el botn derecho y en la opcin Win NT escogemos Start the service.

Utilizacin
Ahora que ya est instalado y funcionando hay que empezar a usarlo. No voy a explicar an como utilizar el MySQL, pero si podemos dar unos primeros pasos, y para hacerlo vamos a utilizar la lnea de comandos (en otro momento veremos alguna de las herramientas grficas para administrar el MySQL, que son muchas). Abrimos una ventana de lnea de comandos y nos vamos a la carpeta C:\MySQL\bin y ejecutamos la siguiente sentencia:
mysql --help

Aparece la ayuda y como veis se parece a administrar cualquier herramienta de Linux. Para conectarnos a un servidor escribimos la siguiente sentencia:

mysql h localhost u root p

pero en nuestro caso como estamos corriendo el cliente en el mismo equipo en el que est instalado el servidor sin ms ponemos
mysql u root

y nos aparece el promt del MySQL:


C:\mysql\bin>mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.0-alpha-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

Ahora estamos dentro y podemos empezar a ejecutar sentencias SQL (recordad que aqu obligatoriamente tenemos que terminar las sentencias con ;)
mysql> select current_date(); +----------------+ | current_date() | +----------------+ | 2004-03-01 | +----------------+ 1 row in set (0.00 sec) mysql>

Vamos a pedir algo ms interesante. Es esta realmente la versin 5 del MySQL?


mysql> select version(); +-----------------+ | version() | +-----------------+ | 5.0.0-alpha-nt | +-----------------+ 1 row in set (0.01 sec) mysql>

Lo es. Bueno, ya sabemos mandar rdenes a la base de datos y ver sus respuestas. Ahora hay que dar un paso ms. Vamos a crear una base de datos, a poblarla y recuperar informacin de ella. Por supuesto seguimos con ejemplos simples as que vamos a crear una nica tabla para almacenar informacin sobre personas. Vamos a ver que bases de datos hay actualmente en el sistema:
mysql> show databases; +------------+ | Database | +------------+ | MySQL | | test | +------------+ 1 row in set (0.00 sec)

Ya existen un par de bases de datos. Una de configuracin del propio MySQL y otra de pruebas. Pero no nos interesa ninguna as que pasemos a crear la nuestra. Para crearla tenemos el comando CREATE DATABASE del SQL.
mysql> create database agenda; Query OK, 1 row affected (0.00 sec)

Ya est creada la base de datos personas (no hace gran cosa, crea una carpeta, un archivo y nada ms). A continuacin hay que decidir utilizar esa base y con el comando USE cambiamos de contexto.
mysql> use agenda Database changed

Y miramos que hay dentro con el comando SHOW


mysql> show tables; Empty set (0.00 sec)

Nada obviamente. Pues vamos a crear nuestra primera tabla. Para hacerlo hay una sentencia de lenguaje de definicin de datos que es CREATE TABLE:
mysql> create table listin( -> nombre varchar(20), -> telefono varchar(12), -> direccion varchar(40)); Query OK, 0 rows affected (0.13 sec)

En este caso hemos escrito la instruccin en varias filas por comodidad. El interfaz para ejecutar comandos permite escribir instrucciones en varias lneas mostrndonos los caracteres ->' para indicar que la instruccin no ha acabado. En cuanto ponemos el ; se ejecuta la sentencia (como el GO del SQL Server). Veamos que funciona:
mysql> show tables; +-----------------------+ | Tables_in_agenda | +-----------------------+ | listin | +-----------------------+ 1 row in set (0.00 sec)

Y para ver las caractersticas de una tabla tenemos la sentencia DESCRIBE


mysql> describe listin; +-------------------+----------------+------+-----+---------+--------+ | Field | Type | Null | Key | Default | Extra | +-------------------+----------------+------+-----+---------+--------+ | nombre | varchar(20) | YES | | NULL | | | telefono | varchar(12) | YES | | NULL | | | direccion | varchar(40) | YES | | NULL | | +-------------------+----------------+------+-----+---------+--------+ 3 rows in set (0.00 sec)

Bueno. Ahora toca insertar datos en la tabla. Y como el MySQL utiliza lenguaje SQL estndar es sencillo.
mysql> insert into listin values ('Luisa','987248822', 'C/la Esperanza n7'); Query OK, 1 row affected, 1 warning (0.00 sec)

Y para ver si ha funcionado.


mysql> select * from personas; +---------+----------+--------------------+ | nombre | telefono | direccion | +---------+----------+--------------------+ | Luisa | 987248822| C/la Esperanza n7 | +---------+----------+--------------------+

1 row in set (0.00 sec)

Bueno, ya tenemos el servidor funcionando. Hay mucho, muchsimo ms que decir del MySQL pero ahora ya podemos empezar a hacer pruebas de lenguaje SQL, tanto DDL como DML que como sabis funciona de igual manera en todos (o debera) los sistemas gestores de bases de datos relacionales.

Tema 2. Sistemas Gestores de Bases de Datos


Vision general del tema
En este tema se presenta un anlisis de los modelos de datos y se definen los conceptos de esquema y estado de una base de datos. Se trata la arquitectura de los Sistemas Gestores de Bases de Datos y la independencia respecto a los datos. Tambin se definen los distintos lenguajes que proporcionan los SGBD y se estudian varias clasificaciones de estos sistemas. Se comentan las funciones de los SGBD y los mdulos de software que los componen.

Bases de datos y SGBD Aplicaciones de las bases de datos Arquitectura de los SGBD Modelos de datos Lenguajes e interfaces de los SGBD Clasificacin de los SGBD Funciones de los SGBD Componentes de un SGBD Panorama de los SGBD actuales

Bases de datos y Sistemas Gestores de Bases de Datos (SGBD) Conceptos generales Es probable que muchas veces hayamos odo en prensa, Internet o en cualquier otro lugar el trmino "base de datos". A continuacin se explica exactamente qu se entiende por "base de datos" y por "sistema gestor de bases de datos". Una base de datos no es ms que un conjunto de datos relacionados entre s, creados para un propsito especfico. Nombr Telfon Direccin e o Juan Luisa 223344 Paseo de la Esperanza n7

224455 Calle de la Pereza n5

Este ejemplo constituye una base de datos de un listn telefnico. Lo ms importante es que los datos han de estar organizados de una forma lgica, no de una forma aleatoria. Es decir, consideramos que no todas las colecciones de datos son bases de datos. El tamao y la complejidad de la bases de datos depende del problema que se est resolviendo, por lo que podemos tener una base de datos personal para guardar las direcciones y telfonos de nuestros mejores amigos, o bien tener una base de datos que almacene todos los datos clnicos de los usuarios de la Seguridad Social. Por tanto, tal cantidad de informacin, tiene que organizarse y controlarse para que la informacin pueda ser accedida y manipulada cuando sea necesario. Adems, su almacenamiento ha de ser eficiente, as como las operaciones de manipulacin que se llevan a cabo sobre los datos. Un SGBD (Sistema de Gestin de Bases de Datos) es un conjunto de programas (en realidad, un sistema software) de propsito general que facilita el proceso de definicin, construccin y manipulacin de bases de datos para usos diversos. Aplicaciones de las bases de datos De la teora a su implementacin prctica Cuando nos enfrentamos al estudio de una nueva materia conviene no perder nunca de vista la materializacin prctica de la misma. En esta seccin se relacionan algunas de las aplicaciones reales de la bases de datos. Podemos distinguir dos grupos de aplicaciones de los Sistemas de Bases de Datos: Aplicaciones tradicionales : En ellas, la mayora de la informacin que se maneja es alfanumrica, y las tareas bsicas son la introduccin y actualizacin de informacin, y la realizacin de consultas. Como ejemplos, podemos citar sistemas bancarios, sistemas de reserva de vuelos y habitaciones de hoteles, catlogos de bibliotecas o sistemas de gestin de supermercados. Nuevas aplicaciones : Los avances tecnolgicos han favorecido la aparicin de aplicaciones que manejan sonidos y grficos, como bases de datos multimedia o sistemas de informacin geogrfica (GIS), y aplicaciones que permiten explotar los datos de un modo no tradicional como los almacenes de datos. Tambin se aplican bases de datos en tiempo real en procesos de control y fabricacin, y se aplican tcnicas de bsqueda en bases de datos en la Web para mejorar la calidad de los resultados de los buscadores.

Arquitectura de los SGBD

Detalle de su estructura
Cuando un arquitecto disea una casa, no empieza decidiendo el tipo de grifera con la que equipar los baos de la misma ni el origen de la madera de las puertas. En su actuacin primeramente se ocupar de ciertas caractersticas mucho ms generales de la casa, sin preocuparse de pequeos aspectos como los mencionados inicialmente, es decir, se abstraer de los detalles. Una vez que estas consideraciones generales hayan sido resueltas ir resolviendo otros problemas, siempre yendo de lo general a lo especfico. Como a continuacin se explica, los SGBD se estructuran de una manera similar. Un objetivo importante de los SGBD es proporcionar a los usuarios una visin abstracta de los datos , es decir, el sistema debe ocultar los detalles sobre cmo se acceden y se manipulan los datos. Esto da origen a la creacin de niveles de abstraccin , que muestran distintas visiones de la complejidad de la representacin de la informacin, es decir, ocultan los detalles de almacenamiento. En 1975, el comit ANSI-SPARC (American National Standard Institute Standards Planning and Requirements Committee) propuso una arquitectura que permite ver una base de datos a tres niveles de abstraccin denominados nivel fsico, nivel conceptual y nivel externo.

Nivel fsico o interno. Es el nivel de abstraccin ms bajo, y describe cmo se almacenan realmente los datos. Nivel conceptual o lgico . Es el nivel que describe qu informacin se almacena en la base de datos, y cmo est relacionada dicha informacin. La definicin de una estructura de datos a nivel conceptual puede suponer la creacin de varias estructuras a nivel fsico (creacin de archivos indexados por varios campos, por ejemplo). Nivel externo o de vistas . Es el nivel de abstraccin ms alto, y en el que slo se describen partes de la base de datos, ya que no todos los usuarios pueden acceder a la misma parte de la base de datos. Para facilitar la interaccin del usuario con el sistema, se definen varios niveles de visin, de forma que cada uno represente lo que cada usuario o grupo de usuarios necesita.

A partir de estos niveles de abstraccin es posible establecer una analoga entre dichos niveles de abstraccin y los tipos de datos de los lenguajes de programacin, como se muestra a continuacin. La mayora de los lenguajes de programacin de alto nivel permiten una declaracin de tipos semejante a esta (hecha en este caso en C):
typedef struct DatosAlumno { char nombre[50]; char apellido1[50]; char apellido2[50]; char dni[8]; char direccion[50]; char localidad[50]; char codigoPostal[50]; }; typedef struct NotasAlumno {

};

char dni[8]; char notas[5][10];

En el nivel fsico, estos registros pueden describirse como un bloque de posiciones de memoria. En el nivel conceptual estos registros quedan descritos mediante la declaracin anterior. Finalmente, en el nivel externo se definen varias vistas de la base de datos, ya que no todos los usuarios tienen acceso a la informacin sobre las notas de los alumnos. En general, al usuario no le interesa saber dnde est cada campo dentro del registro (nivel conceptual), ni en qu posicin de memoria est guardada la informacin que est consultando (nivel fsico), sino que lo que interesa, es que cuando quiera introducir las calificaciones de los alumnos se realice en los campos y registros adecuados, y que cuando haga referencia a la nota de SGBD de 2 del alumno X se devuelva la informacin correcta.

Esquemas y estado
La informacin de la base de datos cambia continuamente a medida que se va modificando la informacin que contiene. Al conjunto de datos de la base de datos en un instante determinado se le denomina estado de la base de datos , y cambia continuamente. Por otro lado, tenemos la propia estructura de la base de datos, denominada esquema de base de datos , la que rara vez cambia, o al menos no lo hace tan a menudo como el contenido de la base de datos. Si volvemos al ejemplo de la seccin anterior, la declaracin del tipo equivaldra al esquema de la base de datos, mientras que el valor de los campos de una variable de ese tipo en un momento dado equivaldra al concepto de estado. La divisin en tres niveles de abstraccin que propone la arquitectura ANSI/SPARC tambin se puede expresar en trminos de esquemas, ofreciendo tres tipos de esquemas, uno para cada nivel. Al nivel fsico le corresponde el esquema interno , al nivel lgico le corresponde el esquema conceptual , y por ltimo, al nivel externo le corresponden los esquemas externos . Hay que destacar que los tres esquemas no son ms que descripciones de los mismos datos pero con distintos niveles de abstraccin. Los nicos datos que existen realmente estn a nivel fsico, almacenados en un dispositivo como puede ser un disco. El SGBD debe transformar cualquier peticin expresada en trminos de un esquema externo a una peticin expresada en trminos del esquema conceptual, y luego, a una peticin en el esquema interno, que se procesar sobre la base de datos almacenada. Si la peticin es de una consulta de datos, ser preciso modificar el formato de la informacin extrada de la base de datos almacenada, para que coincida con la vista externa del usuario. El proceso de transformar peticiones y resultados de un nivel a otro se denomina correspondencia o transformacin . Estas correspondencias pueden requerir bastante tiempo, por lo que algunos SGBD no cuentan con vistas externas. La distincin entre el esquema y el estado de la base de datos es muy importante. Cuando definimos una nueva base de datos, slo especificamos su esquema al SGBD. En ese momento, el estado de la base de datos es el estado vaco", sin datos. Cuando se cargan datos por primera vez, la base datos pasa al estado inicial". De ah en adelante, siempre que se realice una operacin de actualizacin de la base de datos, se tendr un nuevo estado. El SGBD se encarga, en parte, de garantizar que todos los estados de la base de datos sean

estados vlidos que satisfagan la estructura y las restricciones especificadas en el esquema. Por lo tanto, es muy importante que el esquema que se especifique al SGBD sea correcto y se debe tener muchsimo cuidado al disearlo. El SGBD almacena el esquema en su catlogo o diccionario de datos, de modo que se pueda consultar siempre que sea necesario.

Independencia de datos
Es la capacidad de modificar un esquema de un nivel sin afectar a los esquemas de nivel superior. Hay dos niveles de independencia de datos:

Independencia fsica de datos . Es la capacidad de modificar el esquema fsico sin necesidad de modificar los programas de aplicacin. Esto es, por ejemplo, modificar el tamao de un campo o modificar los ndices del archivo. Independencia lgica de datos . Es la capacidad de modificar el esquema conceptual sin necesidad de modificar los programas de aplicacin. Si, por ejemplo, se reduce la base de datos eliminando un tipo de datos, los esquemas externos que no se refieran a esta parte de la base de datos no debern verse afectados. La independencia lgica es ms difcil de conseguir que la independencia fsica, ya que los programas de aplicacin suelen ser muy dependientes de la estructura lgica de los datos a los que acceden (se han creado a partir de ella).

Modelos de datos Distintas formas de representar la misma informacin Una de las caractersticas fundamentales de los sistemas de bases de datos es que proporcionan cierto nivel de abstraccin de datos, al ocultar las caractersticas del almacenamiento fsico (caractersticas que la mayora de usuarios no necesita conocer). Los modelos de datos son el instrumento principal que utilizan para ofrecer dicha abstraccin. En esta seccin se explica el concepto de modelo de datos ys e mencionan los ms utilizados por los SGBD. Un modelo de datos es un conjunto de conceptos que sirven para describir la estructura de una base de datos: los datos, las relaciones entre los datos y las restricciones que deben cumplirse sobre los datos. Los modelos de datos se pueden clasificar en:

Modelos de datos de alto nivel, o modelos conceptuales , disponen de conceptos muy cercanos al modo en que la mayora de los usuarios percibe los datos. Modelos lgicos , cuyos conceptos pueden ser entendidos por los usuarios finales, aunque no estn demasiado alejados de la forma en que los datos se organizan fsicamente. Los modelos lgicos ocultan algunos detalles de cmo se almacenan los datos, pero pueden implementarse de manera directa en un ordenador. Modelos de datos de bajo nivel, o modelos fsicos , proporcionan conceptos que describen los detalles de cmo se almacenan los datos en

el ordenador. Los conceptos de los modelos fsicos estn dirigidos al personal informtico, no a los usuarios finales. Modelos conceptuales Los modelos conceptuales se usan para describir los datos y se caracterizan porque proporcionan una capacidad de estructuracin bastante flexible y permiten especificar restricciones de datos explcitamente. A continuacin describiremos brevemente el modelo ms importante dentro de esta categora, el modelo entidad-relacin. El modelo entidad-relacin El modelo de datos E-R (entidad-relacin) se basa en una percepcin del mundo real que consiste en una coleccin de objetos bsicos denominados entidades y las relaciones entre estos objetos. Una entidad es un objeto que se diferencia de otros objetos mediante una serie de atributos . Por ejemplo, los atributos numeroDeCuenta y saldo describen una cuenta concreta de un banco. De la misma manera, los atributos nombre y dni describen un cliente del banco. Una relacin es una asociacin entre varias entidades. Por ejemplo, una relacin c lienteCuenta asocia a cada cliente todas las cuentas que tiene en el banco. La estructura lgica global de una base de datos puede representarse grficamente mediante un diagrama E-R, que consta de los siguientes componentes:

Rectngulos : Representan entidades Elipses : Representan atributos. Rombos : Representan relaciones entre entidades. Lneas : Conectan atributos con entidades y entidades con relaciones.

Cada una de estas componentes se etiqueta con la entidad, relacin o atributo que representa, de forma que los diagramas obtenidos tienen un aspecto como el de la figura siguiente.

Modelos lgicos Los tres modelos lgicos ms ampliamente extendidos son el modelo relacional, el modelo en red y el modelo jerrquico.

El modelo relacional El modelo relacional representa los datos y las relaciones entre los datos mediante un conjunto de tablas. Cada una de las tablas tiene un nombre nico y una serie de columnas tambin con nombres nicos. En el modelo relacional la base de datos es percibida por el usuario como un conjunto de tablas. Esta percepcin es slo a nivel lgico (en los niveles externo y conceptual de la arquitectura de tres niveles), ya que a nivel fsico puede estar implementada mediante distintas estructuras de almacenamiento.

El modelo en red Se trata de un modelo en el que los datos se representan mediante conjuntos de registros y las relaciones mediante enlaces, los cuales pueden ser vistos como punteros.

El modelo jerrquico El modelo jerrquico es similar al modelo en red, en el sentido en que los datos y las relaciones entre los datos se representan mediante registros y enlaces. La diferencia con el modelo en red es que la organizacin de los registros se representa mediante estructuras jerrquicas (rboles), por lo que los nodos hijo, slo pueden tener un padre, tal y como se muestra a continuacin.

Modelos fsicos Los modelos fsicos describen cmo se almacenan los datos en el ordenador: el formato de los registros, la estructura de los ficheros (desordenados, ordenados, etc.) y los mtodos de acceso utilizados (ndices, etc.).

Lenguajes e interfaces de los SGBD


Comunicacin entre el usuario y el SGBD
Como los usuarios de un SGBD pueden tener distintos privilegios y distintos conocimientos informticos, es necesario disponer de diferentes lenguajes e interfaces para cada tipo de usuarios. En esta seccin vamos a ver los distintos lenguajes e interfaces que emplean los SGBD.

Lenguaje de definicin de datos


Una vez que se ha finalizado la tarea de diseo de la base de datos, y que se ha seleccionado un SGBD para su implementacin, el primer paso consiste en la especificacin del esquema conceptual de la base de datos. El esquema conceptual de la base de datos se especifica mediante una serie de definiciones expresadas en un Lenguaje de definicin de datos ( DDL , Data Definition Language). El SGBD contar con un compilador de DDL cuya funcin ser procesar las sentencias en DDL para identificar las descripciones de los elementos de los esquemas y guardar la descripcin del esquema en el diccionario de datos. El diccionario de datos es un archivo que contiene metadatos , es decir, datos acerca de los datos. Este archivo se consulta cada vez que se leen o modifican los datos del Sistema de base de datos.

Lenguaje de manipulacin de datos


Una vez que se han compilado los esquemas de la base de datos, y que ya se han introducido datos en la base de datos, los usuarios necesitarn algn mecanismo para obtener informacin de la base de datos. Las operaciones ms comunes de manipulacin son la consulta,

insercin, eliminacin y modificacin de datos. Para ello, todos los SGBD ofrecen un Lenguaje de manipulacin de datos ( DML , Data Manipulation Language). En general existen dos tipos de DML:

Procedimentales . Requieren que el usuario (normalmente ser un programador) especifique qu datos desea y cmo hay que obtenerlos. Esto quiere decir que hay que especificar todas las operaciones de acceso a datos llamando a los procedimientos necesarios para obtener la informacin requerida. Estos lenguajes acceden a un registro, lo procesan y basndose en los resultados obtenidos, acceden a otro registro, que tambin deben procesar. As se va accediendo a registros y se van procesando hasta que se obtienen los datos deseados. Las sentencias de un LMD procedimental deben estar embebidas en un lenguaje de alto nivel, ya que se necesitan sus estructuras (bucles, condicionales, etc.) para obtener y procesar cada registro individual. A este lenguaje se le denomina lenguaje anfitrin . Las bases de datos jerrquicas y de red utilizan LMD procedimentales. No procedimentales . Un LMD no procedimental se puede utilizar de manera independiente para especificar operaciones complejas sobre la base de datos de forma concisa. En muchos SGBD se pueden introducir interactivamente instrucciones del LMD desde un terminal o bien embeberlas en un lenguaje de programacin de alto nivel. Los LMD no procedimentales permiten especificar los datos a obtener en una consulta o los datos que se deben actualizar, mediante una sola y sencilla sentencia. El usuario o programador especifica qu datos quiere obtener sin decir cmo se debe acceder a ellos. El SGBD traduce las sentencias del LMD en uno o varios procedimientos que manipulan los conjuntos de registros necesarios. Esto libera al usuario de tener que conocer cul es la estructura fsica de los datos y qu algoritmos se deben utilizar para acceder a ellos. Las bases de datos relacionales utilizan LMD no procedurales, como SQL (Structured Query Language) o QBE (Query-ByExample). Los lenguajes no procedimentales son ms fciles de aprender y de usar que los procedimentales, y el usuario debe realizar menos trabajo, siendo el SGBD quien hace la mayor parte.

Lenguajes de cuarta generacin


No existe consenso sobre lo que es un lenguaje de cuarta generacin ( 4GL ). Lo que en un lenguaje de tercera generacin ( 3GL ) como COBOL, FORTRAN, Pascal o C requiere cientos de lneas de cdigo, tan solo necesita de diez o veinte lneas en un 4GL. Comparado con un 3GL, que es procedimental, un 4GL es un lenguaje no procedimental: el usuario define qu se debe hacer, no cmo debe hacerse. Los 4GL se apoyan en unas herramientas de mucho ms alto nivel denominadas herramientas de cuarta generacin . El usuario no debe definir los pasos a seguir en un programa para realizar una determinada tarea, tan slo debe definir una serie de parmetros que estas herramientas utilizarn para generar un programa de aplicacin. Se dice que los 4GL pueden mejorar la productividad de los programadores en un factor de 10, aunque se limita el tipo de problemas que pueden resolver. Los lenguajes SQL y QBE son ejemplos de 4GL pero hay otro tipos de 4GL incluidos habitualmente en los SGBD:

Un generador de formularios es una herramienta interactiva que permite crear rpidamente formularios de pantalla para introducir o visualizar datos. Los

generadores de formularios permiten que el usuario defina el aspecto de la pantalla, qu informacin se debe visualizar y en qu lugar de la pantalla debe visualizarse.

Un generador de informes es una herramienta para crear informes a partir de los datos almacenados en la base de datos. Se parece a un lenguaje de consultas en que permite al usuario hacer preguntas sobre la base de datos y obtener informacin de ella para un informe. Sin embargo, en el generador de informes se tiene un mayor control sobre el aspecto de la salida. Se puede dejar que el generador determine automticamente el aspecto de la salida o se puede disear sta para que tenga el aspecto que desee el usuario final. Un generador de grficos es una herramienta para obtener datos de la base de datos y visualizarlos en un grfico mostrando tendencias y relaciones entre datos. Normalmente se pueden disear distintos tipos de grficos: barras, lneas, etc.

Interfaces para SGBD


Normalmente, mientras que los programadores utilizan el DML para la creacin de consultas, los usuarios de un SGBD utilizan un lenguaje de consulta de alto nivel. Para la mayora de los usuarios se suelen definir interfaces de usuario amigables para la interaccin con la base de datos. A continuacin vamos a ver los tipos de interfaces que hay:

Interfaces basadas en mens . Presentan al usuario una lista de opciones en forma de mens que guan al usuario en la peticin de consultas. De esta forma no es necesario conocer la sintaxis de un lenguaje de consulta, pues permiten la creacin de la consulta eligiendo las opciones que presenta la interfaz. Interfaces grficas . Suelen presentar al usuario los esquemas en forma de diagrama, y las consultas se especifican manipulando el diagrama con el ratn. Interfaces basadas en formularios . Estas interfaces presentan un formulario al usuario en el que se rellenan los huecos del formulario para la modificacin de los datos, o bien para especificar los parmetros de la consulta. Interfaces de lenguaje natural . Estas interfaces aceptan la especificacin de una consulta descrita en trminos de un idioma concreto y construyen expresiones DML a partir de dicha especificacin.

Clasificacin de los SGBD Distintos criterios para diferenciar los SGBD Conocer las diferentes alternativas que ofrecen los SGBD es importante para realizar, en el caso de que nos tengamos que enfrentar a ello, una buena eleccin como solucin informatizada para una organizacin u empresa. En esta seccin se nombran los distintos tipos existentes junto a una breve explicacin de los mismos. El criterio principal que se utiliza para clasificar los SGBD es el modelo lgico en que se basan. El modelo lgico empleados con mayor frecuencia en los SGBD comerciales actuales es el relacional ; los modelos de red y jerrquico se

utilizaron mucho en productos ms antiguos. ltimamente se est desarrollando productos que tienen como base otro modelo: el modelo orientado a objetos . Un segundo criterio para clasificar los SGBD es el nmero de usuarios a los que da servicio el sistema. Los sistemas monousuario slo atienden a un usuario a la vez, y su principal uso se da en los ordenadores personales. Los sistemas multiusuario , entre los que se encuentran la mayor parte de los SGBD, atienden a varios usuarios al mismo tiempo. Un tercer criterio es el nmero de sitios en los que est distribuida la base de datos . Casi todos los SGBD son centralizados : sus datos se almacenan en un solo computador. Los SGBD centralizados pueden atender a varios usuarios, pero el SGBD y la base de datos en s residen por completo en una sola mquina. En los SGBD distribuidos la base de datos real y el propio software del SGBD pueden estar distribuidos en varios sitios conectados por una red. Los SGBD distribuidos homogneos utilizan el mismo SGBD en mltiples sitios. Una tendencia reciente consiste en crear software para tener acceso a varias bases de datos autnomas preexistentes almacenadas en SGBD distribuidos heterogneos. Esto da lugar a los SGBD federados o sistemas multibase de datos en los que los SGBD participantes tienen cierto grado de autonoma local. Un cuarto criterio es el coste del SGBD. La mayor parte de los paquetes de SGBD cuestan entre 10.000 y 100.000 euros. Los sistemas monousuario ms econmicos para microcomputadores cuestan entre 0 y 3.000 euros. En el otro extremo, los paquetes ms completos cuestan ms de 100.000 euros. Por ltimo, los SGBD pueden ser de propsito general o de propsito especfico . Cuando el rendimiento es fundamental, se puede disear y construir un SGBD de propsito especial para una aplicacin especfica, y este sistema no sirve para otras aplicaciones. Muchos sistemas de reservas de lneas areas son SGBD de propsito especial y pertenecen a la categora de sistemas de procesamiento de transacciones en lnea (OLTP), que deben atender un gran nmero de transacciones concurrentes sin imponer excesivos retrasos.

Funciones de los SGBD


Servicios que deben ofrecer los SGBD
Cuando una empresa u organizacin decide adquirir una licencia de un SGBD para su infraestructura informtica antes ha debido pasar por una fase de anlisis de sus necesidades y de revisin de las posibilidades que cada producto brinda. En una situacin ideal, los SGBD deberan ofrecer las mismas funcionalidades, pero como todo en la vida, esto no sucede as. En esat seccin se describen las principales caractersticas reseables de un SGBD. Codd, el creador del modelo relacional, ha establecido una lista con los ocho servicios que debe ofrecer todo SGBD:

Un SGBD debe proporcionar a los usuarios la capacidad de almacenar datos en la base de datos, acceder a ellos y actualizarlos . Esta es la funcin fundamental de un SGBD y por supuesto, el SGBD debe ocultar al usuario la estructura fsica interna (la organizacin de los ficheros y las estructuras de almacenamiento). Un SGBD debe proporcionar un catlogo en el que se almacenen las descripciones de los datos y que sea accesible por los usuarios. Este catlogo es lo que se denomina diccionario de datos y contiene informacin que describe los datos de la base de datos (metadatos). Normalmente, un diccionario de datos almacena:
o o o o o o

Nombre, tipo y tamao de los datos. Nombre de las relaciones entre los datos. Restricciones de integridad sobre los datos. Nombre de los usuarios autorizados a acceder a la base de datos. Esquemas externos, conceptual e interno, y correspondencia entre los esquemas. Estadsticas de utilizacin. La informacin sobre los datos se puede almacenar de un modo centralizado por lo que las redundancias y las inconsistencias se pueden identificar ms fcilmente. El significado de los datos se puede definir, lo que ayudar a los usuarios a entender el propsito de los mismos. El impacto que puede producir un cambio se puede determinar antes de que sea implementado, ya que el diccionario de datos mantiene informacin sobre cada tipo de dato, todas sus relaciones y todos sus usuarios. Se puede hacer respetar la seguridad y la integridad. Se puede proporcionar informacin para auditoras.

Algunos de los beneficios que reporta el diccionario de datos son los siguientes:
o o o

o o

Un SGBD debe proporcionar un mecanismo que garantice que todas las actualizaciones correspondientes a una determinada transaccin se realicen, o que no se realice ninguna. Una transaccin es un conjunto de acciones que cambian el contenido de la base de datos. Una transaccin en el sistema informtico de la empresa inmobiliaria sera dar de alta a un empleado o eliminar un inmueble. Una transaccin un poco ms complicada sera eliminar un empleado y reasignar sus inmuebles a otro empleado. En este caso hay que realizar varios cambios sobre la base de datos. Si la transaccin falla durante su realizacin, por ejemplo porque falla el hardware, la base de datos quedar en un estado inconsistente. Algunos de los cambios se habrn hecho y otros no, por lo tanto, los cambios realizados debern ser deshechos para devolver la base de datos a un estado consistente. Un SGBD debe proporcionar un mecanismo que asegure que la base de datos se actualice correctamente cuando varios usuarios la estn actualizando concurrentemente. Uno de los principales objetivos de los SGBD es el permitir que varios usuarios tengan acceso concurrente a los datos que comparten. El acceso concurrente es relativamente fcil de gestionar si todos los usuarios se dedican a leer datos, ya que no pueden interferir unos con otros. Sin embargo, cuando dos o ms

usuarios estn accediendo a la base de datos y al menos uno de ellos est actualizando datos, pueden interferir de modo que se produzcan inconsistencias en la base de datos. El SGBD se debe encargar de que estas interferencias no se produzcan en el acceso simultneo.

Un SGBD debe proporcionar un mecanismo capaz de recuperar la base de datos en caso de que ocurra algn suceso que la dae. Como se ha comentado antes, cuando el sistema falla en medio de una transaccin, la base de datos se debe devolver a un estado consistente. Este fallo puede ser a causa de un fallo en algn dispositivo hardware o un error del software, que hagan que el SGBD aborte, o puede ser a causa de que el usuario detecte un error durante la transaccin y la aborte antes de que finalice. En todos estos casos, el SGBD debe proporcionar un mecanismo capaz de recuperar la base de datos llevndola a un estado consistente. Un SGBD debe proporcionar un mecanismo que garantice que slo los usuarios autorizados pueden acceder a la base de datos. La proteccin debe ser contra accesos no autorizados, tanto intencionados como accidentales. Un SGBD debe ser capaz de integrarse con algn software de comunicacin. Muchos usuarios acceden a la base de datos desde terminales. En ocasiones estos terminales se encuentran conectados directamente a la mquina sobre la que funciona el SGBD. En otras ocasiones los terminales estn en lugares remotos, por lo que la comunicacin con la mquina que alberga al SGBD se debe hacer a travs de una red. En cualquiera de los dos casos, el SGBD recibe peticiones en forma de mensajes y responde de modo similar. Todas estas transmisiones de mensajes las maneja el gestor de comunicaciones de datos. Aunque este gestor no forma parte del SGBD, es necesario que el SGBD se pueda integrar con l para que el sistema sea comercialmente viable. Un SGBD debe proporcionar los medios necesarios para garantizar que tanto los datos de la base de datos, como los cambios que se realizan sobre estos datos, sigan ciertas reglas. La integridad de la base de datos requiere la validez y consistencia de los datos almacenados. Se puede considerar como otro modo de proteger la base de datos, pero adems de tener que ver con la seguridad, tiene otras implicaciones. La integridad se ocupa de la calidad de los datos. Normalmente se expresa mediante restricciones, que son una serie de reglas que la base de datos no puede violar. Por ejemplo, se puede establecer la restriccin de que cada empleado no puede tener asignados ms de diez inmuebles. En este caso sera deseable que el SGBD controlara que no se sobrepase este lmite cada vez que se asigne un inmueble a un empleado.

Adems, de estos ocho servicios, es razonable esperar que los SGBD proporcionen un par de servicios ms:

Un SGBD debe permitir que se mantenga la independencia entre los programas y la estructura de la base de datos . La independencia de datos se alcanza mediante las vistas o subesquemas. La independencia de datos fsica es ms fcil de alcanzar, de hecho hay varios tipos de cambios que se pueden realizar sobre la estructura fsica de la base de datos sin afectar a las vistas. Sin embargo, lograr una completa independencia de datos lgica es ms difcil. Aadir una nueva entidad, un atributo o una relacin puede ser sencillo, pero no es tan sencillo eliminarlos.

Un SGBD debe proporcionar una serie de herramientas que permitan administrar la base de datos de modo efectivo. Algunas herramientas trabajan a nivel externo, por lo que habrn sido producidas por el administrador de la base de datos. Las herramientas que trabajan a nivel interno deben ser proporcionadas por el distribuidor del SGBD. Algunas de ellas son:
o o o o o

Herramientas para importar y exportar datos. Herramientas para monitorizar el uso y el funcionamiento de la base de datos. Programas de anlisis estadstico para examinar las prestaciones o las estadsticas de utilizacin. Herramientas para reorganizacin de ndices. Herramientas para aprovechar el espacio dejado en el almacenamiento fsico por los registros borrados y que consoliden el espacio liberado para reutilizarlo cuando sea necesario.

Componentes de un SGBD
Detalle de los mdulos del sistema
Los SGBD son paquetes de software muy complejos y sofisticados que deben proporcionar los servicios comentados en la seccin anterior. No se puede generalizar sobre los elementos que componen un SGBD ya que varan mucho unos de otros. Sin embargo, es muy til conocer sus componentes y cmo se relacionan cuando se trata de comprender lo que es un sistema de bases de datos. Un SGBD tiene varios mdulos, cada uno de los cuales realiza una funcin especfica. El sistema operativo proporciona servicios bsicos al SGBD, que es construido sobre l.

El procesador de consultas es el componente principal de un SGBD. Transforma las consultas en un conjunto de instrucciones de bajo nivel que se dirigen al gestor de la base de datos. El gestor de la base de datos es el interface con los programas de aplicacin y las consultas de los usuarios. El gestor de la base de datos acepta consultas y examina los esquemas externo y conceptual para determinar qu registros se requieren para satisfacer la peticin. Entonces el gestor de la base de datos realiza una llamada al gestor de ficheros para ejecutar la peticin. El gestor de ficheros maneja los ficheros en disco en donde se almacena la base de datos. Este gestor establece y mantiene la lista de estructuras e ndices definidos en el esquema interno. Pero el gestor de ficheros no realiza directamente la entrada y salida de datos. Lo que hace es pasar la peticin a los mtodos de acceso del sistema operativo que se encargan de leer o escribir los datos en el buffer del sistema. El preprocesador del LMD convierte las sentencias del LMD embebidas en los programas de aplicacin, en llamadas a funciones estndar escritas en el lenguaje anfitrin. El preprocesador del LMD debe trabajar con el procesador de consultas para generar el cdigo apropiado.

El compilador del LDD convierte las sentencias del LDD en un conjunto de tablas que contienen metadatos. Estas tablas se almacenan en el diccionario de datos El gestor del diccionario controla los accesos al diccionario de datos y se encarga de mantenerlo. La mayora de los componentes del SGBD acceden al diccionario de datos. Control de autorizacin . Este mdulo comprueba que el usuario tiene los permisos necesarios para llevar a cabo la operacin que solicita. Procesador de comandos . Una vez que el sistema ha comprobado los permisos del usuario, se pasa el control al procesador de comandos. Control de la integridad . Cuando una operacin cambia los datos de la base de datos, este mdulo debe comprobar que la operacin a realizar satisface todas las restricciones de integridad necesarias. Optimizador de consultas . Este mdulo determina la estrategia ptima para la ejecucin de las consultas. Gestor de transacciones . Este mdulo realiza el procesamiento de las transacciones. Planificador (scheduler). Este mdulo es el responsable de asegurar que las operaciones que se realizan concurrentemente sobre la base de datos tienen lugar sin conflictos. Gestor de recuperacin . Este mdulo garantiza que la base de datos permanece en un estado consistente en caso de que se produzca algn fallo.

Los principales componentes del gestor de la base de datos son los siguientes:

Panorama de los SGBD actuales


Un repaso de la situacin actual
La eleccin de la base de datos es una decisin vital en el ciclo de desarrollo de un proyecto. No siempre lo mejor es lo necesario para un proyecto concreto. En funcin del trabajo a realizar, y tomando como parmetros el volumen de carga que tendr soportar la base de datos, el sistema operativo sobre el cual rodar la base de datos, el presupuesto disponible y el plazo de entrega del trabajo, se debe realizar un anlisis y una eleccin. A grandes lneas, podemos diferenciar los productos actuales en cinco grandes grupos:

Gran volumen . Soluciones corporativas que requieran una base de datos muy potente, estable y escalable, capaz de soportar una carga de trabajo muy severa: Oracle, Sybase y DB2. Unix SQL . Bases de datos SQL comerciales (OpenBase SQL, PrimeBase) o de uso libre (mSQL, mySQL, PostgreSQL). Soluciones de bajo coste y rendimiento ptimo. Soluciones Microsoft . SQL Server o MS Access, ya sea en local o en la Web. Bien utilizando las herramientas del fabricante (Visual InterDev) o desde otros lenguajes. Velocidad crtica . Para soluciones locales de cientos de miles de registros, en donde la velocidad en las bsquedas es crtica: PardigmaSoft Valentina.

Desarrollo rpido . Integrando el entorno de programacin y la base de datos: 4th Dimension, FileMaker.

En el campo de las bases de datos, Dataquest (ahora Gartner Group, www.gartner.com) predice en un estudio de 2002 que el mercado de bases de datos seguir creciendo a un ritmo cercano al 25% anual. Se indica que en este ao las ventas de SGBD para la plataforma NT/2000/2003 igualarn las ventas de todas las plataformas Unix. Dataquest tambin afirma que las aplicaciones relacionadas con Internet, el comercio electrnico, la inteligencia de negocio integrada y las nuevas aplicaciones de negocio mviles guiarn el mercado de las bases de datos en los prximos aos. Sobre la situacin de los SGBD comerciales IBM y Oracle han estado codo con codo durante los ltimos aos con cerca del 30% de ingresos por ventas de nuevas licencias en el mercado de SGBD cada uno. No obstante, hay que destacar que la distribucin de estos porcentajes no es uniforme en la gama de aplicaciones. Por ejemplo, IBM sigue siendo lder en el rea de los mainframes, especialmente con su lnea OS/390 y AS/400. Por el contrario, si quitamos los mainframes, Oracle lidera el mercado con una gran ventaja. Segn un ltimo estudio del Gartner Group, la situacin en mayo de 2002 sigue siendo hegemnica para Oracle, IBM y Microsoft. Compaa 2000 2001 2002 2003 Oracle 30.7 31.1 34.1 32.0 IBM 30.0 29.9 30.3 31.7 Microsoft 10.7 13.1 14.0

16.3 Informix 4.8 4.3 3.3 3.0 Sybase 3.6 3.3 3.2 2.6 Otros 20.2 18.3 15.0 14.4 TOTAL 100.0 100.0 100.0 100.0 Considerando slo los sistemas relacionales, mientras sobre sistemas operativos Windows, Microsoft es el lder en 2002 con el 39.9% del mercado (respecto a un 34.0% de Oracle), en sistemas operativos UNIX, Oracle es claramente predominante, con un 63.3%. Finalmente, el predominio del modelo relacional no slo no cede sino que se afianza. La situacin no ha variado significativamente en los ltimos aos, y, en el ejercicio 2001, de los 8.844 millones de dlares de ingresos por nuevas licencias en el campo de los SGBD, 7.107 millones de dlares correspondieron a sistemas relacionales. Esto supone un 80,4% de los nuevos sistemas, con lo que no parece haber ninguna seal clara de que la situacin vaya a cambiar en el futuro. Ms an si tenemos en cuenta que los mercados de los SGBD prerrelacinales y objetuales tuvieron un incremento negativo en 2000, mientras que los relacionales crecieron un 15%. Por ltimo, incluir dentro de este apartado una berve resea sobre la importancia de los distintos SGBD para las nuevas contrataciones en el mercado laboral, extrada contabilizando simplemente las veces que apareca cada uno de los SGBD en las demandas:

En general, se mantiene el liderazgo de Oracle, IBM y Microsoft, aunque debido a que estas dos ltimas compaas tienen ms de un SGBD, el porcentaje aparece mucho ms decantado de parte del SGBD Oracle (por encima del 50%). Tambin se observa un aumento espectacular de SGBD como PostgreSQL o MySQL (encuadrados en la categora de otros sistemas).

Tema 3. El modelo relacional


Visin general del tema
En este tema se presenta el modelo relacional , que es el modelo lgico en el que se basan la mayora de los SGBD comerciales en uso hoy en da. En primer lugar, se trata la descripcin de los principios bsicos del modelo relacional: la estructura de datos relacional y las reglas de integridad. A continuacin, se presenta un tratamiento detallado del lgebra relacional, que es un conjunto de operaciones para manipular la estructura de datos relacional y especificar consultas de datos.

Introduccin El modelo relacional Estructura de los datos Reglas de integridad Lenguajes relacionales EJ1. Empresa de publicidad EJ2. Base de datos de Inditex EJ3. Empresa de transportes EJ4. Empresa de automviles EJ5. Departamento de matemticas

Introduccin Razones para el estudio terico del modelo relacional Es una buena justificacin para estudiar la teora que hay tras el modelo relacional, la que da Hernndez (1997): Muchas disciplinas (y sus metodologas de diseo asociadas) tienen algn tipo de base terica. Los ingenieros industriales disean estructuras utilizando teoras de la fsica. Los compositores crean sinfonas utilizando conceptos de teora de la msica. La industria del automvil utiliza teoras de la aerodinmica para disear automviles con menor consumo. La industria aeronutica utiliza las mismas teoras para disear alas de aviones que reduzcan la resistencia al viento. Estos ejemplos demuestran que la teora es muy importante. La ventaja principal de la teora es que hace que las cosas sean predecibles: nos permite predecir qu ocurrir si realizamos una determinada accin. Por ejemplo, sabemos que si soltamos una piedra, caer al suelo. Si somos rpidos, podemos apartar nuestros

pies del camino de la teora 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 quedarn tal y como las hemos puesto. Esta teora permite disear pirmides, catedrales y casas de ladrillos. Consideremos ahora el ejemplo de una base de datos relacional. Sabemos que si un par de tablas estn relacionadas, podemos extraer datos de las dos a la vez, simplemente por el modo en que funciona la teora de las bases de datos relacionales. Los datos que se saquen de las dos tablas se basarn en los valores coincidentes del campo que ambas tienen en comn. Una vez ms, nuestras acciones tienen un resultado predecible. El modelo relacional se basa en dos ramas de las matemticas: la teora de conjuntos y la lgica de predicados de primer orden . El hecho de que el modelo relacional est basado en la teora de las matemticas es lo que lo hace tan seguro y robusto. Al mismo tiempo, estas ramas de las matemticas proporcionan los elementos bsicos necesarios para crear una base de datos relacional con una buena estructura, y proporcionan las lneas que se utilizan para formular buenas metodologas de diseo. Hay quien ofrece una cierta resistencia a estudiar complicados conceptos matemticos para tan slo llevar a cabo una tarea bastante concreta. Es habitual escuchar quejas sobre que las teoras matemticas en las que se basa el modelo relacional y sus metodologas de diseo, no tienen relevancia en el mundo real o que no son prcticas. No es cierto: las matemticas son bsicas en el modelo relacional. Pero, por fortuna, no hay que aprender teora de conjuntos o lgica de predicados de primer orden para utilizar el modelo relacional. Sera como decir que hay que saber todos los detalles de la aerodinmica para poder conducir un automvil. Las teoras de la aerodinmica ayudan a entender cmo un automvil puede ahorrar combustible, pero desde luego no son necesarias para manejarlo. La teora matemtica proporciona la base para el modelo relacional y, por lo tanto, hace que el modelo sea predecible, fiable y seguro. La teora describe los elementos bsicos que se utilizan para crear una base de datos relacional y proporciona las lneas a seguir para construirla. El organizar estos elementos para conseguir el resultado deseado es lo que se denomina diseo. El modelo relacional Nociones generales En esta seccin se lleva a cabo un primer acercamiento a las nociones ms importantes que rigen el modelo relacional. En 1970, el modo en que se vean 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

fsicos (direcciones de disco) para relacionar registros de distintos ficheros. Si, por ejemplo, se quera relacionar un registro A con un registro B, se deba aadir al registro A un campo conteniendo la direccin en disco del registro B. Este campo aadido, un puntero fsico, siempre sealara desde el registro A al registro B. Codd demostr que estas bases de datos limitaban en gran medida los tipos de operaciones que los usuarios podan realizar sobre los datos. Adems, estas bases de datos eran muy vulnerables a cambios en el entorno fsico. Si se aadan los controladores de un nuevo disco al sistema y los datos se movan de una localizacin fsica a otra, se requera una conversin de los ficheros de datos. Estos sistemas se basaban en el modelo de red y el modelo jerrquico , los dos modelos lgicos que constituyeron la primera generacin de los SGBD. El modelo relacional representa la segunda generacin de los SGBD . En l, todos los datos estn estructurados a nivel lgico como tablas formadas por filas y columnas , aunque a nivel fsico pueden tener una estructura completamente distinta. Un punto fuerte del modelo relacional es la sencillez de su estructura lgica. Pero detrs de esa simple estructura hay un fundamento terico importante del que carecen los SGBD de la primera generacin, lo que constituye otro punto a su favor. En los ltimos aos, se han propuesto algunas extensiones al modelo relacional para capturar mejor el significado de los datos, para disponer de los conceptos de la orientacin 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: estructura de los datos , integridad de los datos y manejo de los datos .

Estructura de los datos


Conceptos clave del modelo relacional
En esta seccin se abordan los conceptos ms importantes del modelo relacional definido por Codd, a saber: relaciones, tipos de relaciones, claves y esquema relacional. Se trata de un apartado fundamental para comprender de la estructura lgica propuesta por Codd.

Relaciones
El modelo relacional se basa en el concepto matemtico de relacin , que grficamente se representa mediante una tabla . Codd, que era un experto matemtico, utiliz una terminologa perteneciente a las matemticas, en concreto de la teora de conjuntos y de la lgica de predicados. Una relacin es una tabla con columnas y filas. Un SGBD slo necesita que el usuario pueda percibir la base de datos como un conjunto de tablas . Esta percepcin slo se aplica a la estructura lgica de la base de datos (en la arquitectura de tres niveles ANSI-SPARC). No se

aplica a la estructura fsica de la base de datos, que se puede implementar con distintas estructuras de almacenamiento. Un atributo es el nombre de una columna de una relacin. En el modelo relacional, las relaciones se utilizan para almacenar informacin sobre los objetos que se representan en la base de datos. Una relacin se representa grficamente como una tabla bidimensional en la que las filas corresponden a registros individuales y las columnas corresponden a los campos o atributos de esos registros. Los atributos pueden aparecer en la relacin en cualquier orden. Por ejemplo, la informacin de las oficinas de la empresa inmobiliaria del tema 1 se podra representar mediante la relacin OFICINA, que tiene columnas para los atributos idOficina, calle, area, poblacin, telefono y fax . La informacin sobre la plantilla se representa mediante la relacin PLANTILLA, que tiene columnas para los atributos idEmpleado, nombre, apellido, direccin, telfono, puesto, fechaNacimiento, salario, dni y idOficina (nmero de la oficina a la que pertenece el empleado). Un dominio es el conjunto de valores legales de uno o varios atributos. Los dominios constituyen una poderosa caracterstica del modelo relacional. Cada atributo de una base de datos relacional se define sobre un dominio, pudiendo haber varios atributos definidos sobre el mismo dominio. La siguiente tabla muestra los dominios de los atributos de la relacin OFICINA . Ntese que en esta relacin hay dos atributos que estn definidos sobre el mismo dominio, telfono y fax. Atributo idOficina calle area Nombre del Dominio ID_OFICINA NOM_CALLE NOM_AREA Descripcin Posibles valores de nmero de oficina Nombres de calles de Espaa Nombres de reas de las poblaciones de Espaa Nombres de las poblaciones de Espaa Nmeros de telfono de Espaa Nmeros de telfono de Espaa Definicin 3 caracteres (rango O1-O99) 25 caracteres 20 caracteres 15 caracteres 9 caracteres 9 caracteres

poblacin NOM_POBLACION telefono fax NUM_TEL_FAX NUM_TEL_FAX

El concepto de dominio es importante porque permite que el usuario defina, en un lugar comn, el significado y la fuente de los valores que los atributos pueden tomar. Esto hace que haya ms informacin disponible para el sistema cuando ste va a ejecutar una operacin relacional, de modo que las operaciones que son semnticamente incorrectas, se pueden evitar. Por ejemplo, no tiene sentido comparar el nombre de una calle con un nmero de telfono, aunque los dos atributos sean cadenas de caracteres. Sin embargo, el importe mensual del alquiler de un inmueble no estar definido sobre el mismo dominio que el nmero de meses que dura el alquiler, pero s tiene sentido multiplicar los valores de ambos dominios para averiguar el importe total al que asciende el alquiler. Los SGBD relacionales

no ofrecen un soporte completo de los dominios ya que su implementacin es extremadamente compleja. Una tupla es una fila de una relacin. Los elementos de una relacin son las tuplas o filas de la tabla. En la relacin OFICINA , cada tupla tiene seis valores, uno para cada atributo. Las tuplas de una relacin no siguen ningn orden. Un esquema de relacin R se denotar por R(A1, A2, ..., An), y se compone de un nombre de relacin R y una lista de atributos A1, A2..., An. Un esquema de relacin sirve para describir una relacin. El grado de una relacin es el nmero de atributos que contiene. La relacin OFICINA es de grado seis porque tiene seis atributos. Esto quiere decir que cada fila de la tabla es una tupla con seis valores. El grado de una relacin no cambia con frecuencia. La cardinalidad de una relacin es el nmero de tuplas que contiene. Ya que en las relaciones se van insertando y borrando tuplas a menudo, la cardinalidad de las mismas vara constantemente. Una base de datos relacional es un conjunto de relaciones normalizadas. Las relaciones tienen las siguientes caractersticas:

Cada relacin tiene un nombre y ste es distinto del nombre de todas las dems. Los valores de los atributos son atmicos : en cada tupla, cada atributo toma un solo valor. Se dice que las relaciones estn normalizadas. No hay dos atributos que se llamen igual. El orden de los atributos no importa: los atributos no estn ordenados. Cada tupla es distinta de las dems: no hay tuplas duplicadas . El orden de las tuplas no importa: las tuplas no estn ordenadas.

Tipos de relaciones
En un SGBD relacional pueden existir varios tipos de relaciones, aunque no todos manejan todos los tipos.

Relaciones base . Son relaciones reales que tienen nombre y forman parte directa de la base de datos almacenada (son autnomas). Vistas . Tambin denominadas relaciones virtuales, son relaciones con nombre y derivadas: se representan mediante su definicin en trminos de otras relaciones con nombre, no poseen datos almacenados propios. Resultados de consultas . Son las relaciones resultantes de alguna consulta especificada. Pueden o no tener nombre y no persisten en la base de datos. Resultados intermedios . Son las relaciones que contienen los resultados de las subconsultas. Normalmente no tienen nombre y tampoco persisten en la base de datos.

Claves

Ya que en una relacin no hay tuplas repetidas, stas se pueden distinguir unas de otras, es decir, se pueden identificar de modo nico. La forma de identificarlas es mediante los valores de sus atributos. Una superclave es un atributo o un conjunto de atributos que identifican de modo nico las tuplas de una relacin. Una clave candidata es una superclave en la que ninguno de sus subconjuntos es una superclave de la relacin. El atributo o conjunto de atributos K de la relacin R es una clave candidata para R si y slo si satisface las siguientes propiedades: unicidad (nunca hay dos tuplas en la relacin R con el mismo valor de K) e irreducibilidad o minimalidad: ningn subconjunto de K tiene la propiedad de unicidad, es decir, no se pueden eliminar componentes de K sin destruir la unicidad Cuando una clave candidata est formada por ms de un atributo, se dice que es una clave compuesta. Una relacin puede tener varias claves candidatas. Por ejemplo, en la relacin OFICINA , el atributo poblacin no es una clave candidata ya que puede haber varias oficinas en una misma poblacin. Sin embargo, ya que la empresa asigna un cdigo nico a cada oficina, el atributo idOficina s es una clave candidata de la relacin OFICINA . Tambin son claves candidatas de esta relacin los atributos telfono y fax . En la base de datos de la inmobiliaria hay una relacin denominada VISITA que contiene informacin sobre las visitas que los clientes han realizado a los inmuebles. Esta relacin contiene el nmero del cliente idCliente , el nmero del inmueble idInmueble , la fecha de la visita fecha y un comentario opcional. Para un determinado nmero de cliente idCliente , se pueden encontrar varias visitas a varios inmuebles. Del mismo modo, dado un nmero de inmueble idInmueble , puede que haya varios clientes que lo hayan visitado. Por lo tanto, el atributo idInmueble no es una clave candidata para la relacin VISITA, como tampoco lo es el atributo idCliente . Sin embargo, la combinacin de los dos atributos s identifica a una sola tupla, por lo que los dos juntos son una clave candidata de VISITA . Si se desea considerar la posibilidad de que un mismo cliente pueda visitar un mismo inmueble en varias ocasiones, habra que incluir el atributo fecha para identificar las tuplas de modo nico (aunque ste no es el caso de la empresa que nos ocupa). Para identificar las claves candidatas de una relacin no hay que fijarse en un estado o instancia de la base de datos. El hecho de que en un momento dado no haya duplicados para un atributo o conjunto de atributos, no garantiza que los duplicados no sean posibles. Sin embargo, la presencia de duplicados en un estado de la base de datos s es til para demostrar que cierta combinacin de atributos no es una clave candidata. El nico modo de identificar las claves candidatas es conociendo el significado real de los atributos, ya que esto permite saber si es posible que aparezcan duplicados. Slo usando esta informacin semntica se puede saber con certeza si un conjunto de atributos forman una clave candidata. Por ejemplo, viendo la instancia anterior de la relacin PLANTILLA se podra pensar que el atributo apellido es una clave candidata. Pero ya que este atributo es el apellido de un empleado y es posible que haya dos empleados con el mismo apellido, el atributo no es una clave candidata. La clave primaria (PRIMARY KEY) de una relacin es aquella clave candidata que se escoge para identificar sus tuplas de modo nico. Ya que una relacin no tiene tuplas duplicadas, siempre hay una clave candidata y, por lo tanto, la relacin siempre tiene clave primaria. En el peor caso, la clave primaria estar formada por todos los atributos de la

relacin, pero normalmente habr un pequeo subconjunto de los atributos que haga esta funcin. Una clave ajena (FOREIGN KEY) es un atributo o un conjunto de atributos de una relacin cuyos valores coinciden con los valores de la clave primaria de alguna otra relacin (que incluso puede ser la misma). Las claves ajenas representan relaciones entre datos. El atributo idOficina de PLANTILLA relaciona a cada empleado con la oficina a la que pertenece. Este atributo es una clave ajena cuyos valores hacen referencia al atributo idOficina , clave primaria de OFICINA . Se dice que un valor de clave ajena representa una referencia a la tupla que contiene el mismo valor en su clave primaria (tupla referenciada).

Esquema de una base de datos relacional


Para representar el esquema de una base de datos relacional se debe dar el nombre de sus ones, los atributos de stas, los dominios sobre los que se definen estos atributos, las claves primarias y las claves ajenas. El esquema de la base de datos de la empresa inmobiliaria es el siguiente:
OFICINA( idOficina , calle, area, poblacion, telefono, fax) PLANTILLA( idEmpleado , nombre, apellido, direccion, telefono, puesto, fechaNacimiento, salario, dni, idOficina) INMUEBLE( idInmueble , calle, area, poblacion, tipo, habitaciones, alquiler, idPropietario, idEmpleado, idOficina) INQUILINO( idCliente , nombre, apellido, direccin, telefono, tipoPreferido, alquilerMaximo) PROPIETARIO( idPropietario , nombre, apellido, direccin, telfono) VISITA( idCliente , idInmueble , fecha, comentario)

En el esquema, los nombres de las relaciones aparecen seguidos de los nombres de los atributos encerrados entre parntesis. Las claves primarias son los atributos subrayados. Las claves ajenas se representan mediante los siguientes diagramas referenciales.
PLANTILLA(idOficina) -> OFICINA(idOficina) INMUEBLE(idPropietario) -> PROPIETARIO(idPropietario) INMUEBLE(idEmpleado) -> PLANTILLA(idEmpleado) INMUEBLE(idOficina) -> OFICINA(idOficina) VISITA(idCliente) -> INQUILINO(idCliente) VISITA(idInmueble) -> INMUEBLE(idInmueble)

Reglas de integridad
En bsqueda de la consistencia de los datos
Una vez definida la estructura de datos del modelo relacional, pasamos a estudiar las reglas de integridad que los datos almacenados en dicha estructura deben cumplir para garantizar que son correctos. Al definir cada atributo sobre un dominio se impone una restriccin sobre el conjunto de valores permitidos para cada atributo. A este tipo de restricciones se les denomina restricciones de dominios . Hay adems dos reglas de integridad muy importantes que son restricciones que se deben cumplir en todas las bases de datos relacionales y en todos sus estados o instancias (las reglas se deben cumplir todo el tiempo). Estas reglas son la regla de integridad de entidades y la regla de integridad referencial . Antes de definirlas, es preciso conocer el concepto de nulo.

Nulos
Cuando en una tupla un atributo es desconocido, se dice que es nulo . Un nulo no representa el valor cero ni la cadena vaca, stos son valores que tienen significado. El nulo implica ausencia de informacin, bien porque al insertar la tupla se desconoca el valor del atributo, o bien porque para dicha tupla el atributo no tiene sentido. Ya que los nulos no son valores, deben tratarse de modo diferente, lo que causa problemas de implementacin. De hecho, no todos los SGBD relacionales soportan los nulos.

Regla de integridad de entidades


La primera regla de integridad se aplica a las claves primarias de las relaciones base e implica que ninguno de los atributos que componen una clave primaria puede ser nulo. Por definicin, una clave primaria es un identificador irreducible que se utiliza para identificar de modo nico las tuplas. Que es irreducible significa que ningn subconjunto de la clave primaria sirve para identificar las tuplas de modo nico. Si se permite que parte de la clave primaria sea nula, se est diciendo que no todos sus atributos son necesarios para distinguir las tuplas, con lo que se contradice la irreducibilidad. Hay que destacar que esta regla slo se aplica a las relaciones base y a las claves primarias.

Regla de integridad referencial


La segunda regla de integridad se aplica a las claves ajenas e implica que si en una relacin hay alguna clave ajena, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos. La regla de integridad referencial se enmarca en trminos de estados de la base de datos: indica lo que es un estado ilegal, pero no dice cmo puede evitarse. La cuestin es qu hacer si estando en un estado legal, llega una peticin para realizar una operacin que conduce a un estado ilegal? Existen dos opciones: rechazar la operacin, o bien aceptar la operacin y realizar operaciones adicionales compensatorias que conduzcan a un estado legal. Por lo tanto, para cada clave ajena de la base de datos habr que contestar a tres preguntas:

Regla de los nulos : Tiene sentido que la clave ajena acepte nulos?
o o o o

Regla de borrado : Qu ocurre si se intenta borrar la tupla referenciada por la clave ajena? Restringir : no se permite borrar la tupla referenciada. Propagar : se borra la tupla referenciada y se propaga el borrado a las tuplas que la referencian mediante la clave ajena. Anular : se borra la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (slo si acepta nulos).

Regla de modificacin : Qu ocurre si se intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena?
o

Restringir : no se permite modificar el valor de la clave primaria de la tupla referenciada.

o o

Propagar : se modifica el valor de la clave primaria de la tupla referenciada y se propaga la modificacin a las tuplas que la referencian mediante la clave ajena. Anular : se modifica la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (slo si acepta nulos).

Reglas de negocio
Adems de las dos reglas de integridad anteriores, los usuarios o los administradores de la base de datos pueden imponer ciertas restricciones especficas sobre los datos, denominadas reglas de negocio . Por ejemplo, si en una oficina de la empresa inmobiliaria slo puede haber hasta veinte empleados, el SGBD debe dar la posibilidad al usuario de definir una regla al respecto y debe hacerla respetar. En este caso, no debera permitir dar de alta un empleado en una oficina que ya tiene los veinte permitidos. Hoy en da an existen SGBD relacionales que no permiten definir este tipo de restricciones ni las hacen respetar.
Lenguajes relacionales Instrumentos para utilizar el modelo relacional Hasta ahora hemos visto los aspectos estticos del modelo relacional. Sabemos como se puede representar la informacin utilizando las indicaciones de Codd y como conseguir que dicha repreentacin sea consistente. En esta seccin se explican los lenguajes relacionales, diseados para poder interactuar precisamente con dicha informacin. La tercera parte de un modelo de datos es la de la manipulacin . Son varios los lenguajes utilizados por los SGBD relacionales para manejar las relaciones. Algunos de ellos son procedurales , lo que quiere decir que el usuario dice al sistema exactamente cmo debe manipular los datos. Otros son no procedurales , que significa que el usuario dice qu datos necesita, en lugar de decir cmo deben obtenerse. En este apartado se presenta el lgebra relacional, definida por Codd como la base de los lenguajes relacionales. Se puede decir que el lgebra es un lenguaje procedural de alto nivel. El lgebra relacional se utiliza para medir la potencia de los lenguajes relacionales (por ejemplo, la potencia del SQL). Si un lenguaje permite obtener cualquier relacin que se pueda obtener mediante el lgebra relacional, se dice que es relacionalmente completo . La mayora de los lenguajes relacionales son relacionalmente completos, pero tienen ms potencia que el lgebra relacional porque se les han aadido operadores especiales. El lgebra relacional es un lenguaje nada amigable pero se debe estudiar porque sirve para ilustrar las operaciones bsicas que todo lenguaje de manejo datos

(LMD) debe ofrecer. Adems, ha sido la base para otros lenguajes relacionales de manejo de datos de ms alto nivel. lgebra relacional El lgebra relacional es un lenguaje formal con una serie de operadores que trabajan sobre una o varias relaciones para obtener otra relacin resultado, sin que cambien las relaciones originales. Tanto los operandos como los resultados son relaciones, por lo que la salida de una operacin puede ser la entrada de otra operacin. Esto permite anidar expresiones del lgebra, del mismo modo que se pueden anidar las expresiones aritmticas. En este apartado se presentan los operadores del lgebra relacional de un modo informal. Primero se describen los ocho operadores originalmente propuestos por Codd y despus se estudian algunos operadores adicionales que aaden potencia al lenguaje. De los ocho operadores, slo hay cinco que son fundamentales : seleccin, proyeccin, producto cartesiano, unin y diferencia, que permiten realizar la mayora de las operaciones de obtencin de datos. Los operadores no fundamentales son la concatenacin (join), la interseccin y la divisin, que se pueden expresar a partir de los cinco operadores fundamentales. La seleccin y la proyeccin son operaciones unarias porque operan sobre una sola relacin. El resto de las operaciones son binarias porque trabajan sobre pares de relaciones. En las definiciones que se presentan a continuacin, se supone que R y S son dos relaciones cuyos atributos son A=(a1, a1, ..., an) y B=(b1, b2, ..., bm) respectivamente. Seleccin (SELECT relacion WHERE condicion) La seleccin opera sobre una sola relacin R y da como resultado otra relacin cuyas tuplas son las tuplas de R que satisfacen la condicin especificada. Esta condicin es una comparacin en la que aparece al menos un atributo de R, o una combinacin booleana de varias de estas comparaciones Un ejemplo sera sobre la relacin EMLEADO de la inmobiliaria obtener todos aquellos empleados con un salario anual superior a 15.000 euros ( SELECT empleado WHERE salario > 15000 ) u obtener todos los inmuebles de Castelln con un alquiler mensual de hasta 350 euros ( SELECT inmueble WHERE poblacin = Castellon' AND alquiler <= 350 ). Proyeccin (PROYECT relacion [a1, a2, an]) La proyeccin opera sobre una sola relacin R y da como resultado otra relacin que contiene un subconjunto vertical de R, extrayendo los valores de los atributos especificados y eliminando duplicados.

Un ejemplo sera obtener un listado de empleados mostrando su nmero, nombre, apellido y salario ( PROYECT empleado [numero, nombre, apellido, salario] ) u obtener los distintos puestos que pueden ocupar los empleados ( PROYECT empelado [puesto] ). Producto cartesiano (relacion PRODUCT relacion ) El producto cartesiano operando sobre R y S obtiene una relacin cuyas tuplas estn formadas por la concatenacin de todas las tuplas de R con todas las tuplas de S. La restriccin y la proyeccin son operaciones que permiten extraer informacin de una sola relacin. Habr casos en que sea necesario combinar la informacin de varias relaciones. El producto cartesiano multiplica" dos relaciones, definiendo una nueva relacin que tiene todos los pares posibles de tuplas de las dos relaciones. Si la relacin R tiene P tuplas y M atributos y la relacin S tiene Q tuplas y N atributos, la relacin resultado tendr (P * Q) tuplas y (M + N) atributos. Ya que es posible que haya atributos con el mismo nombre en las dos relaciones, el nombre de la relacin se antepondr al del atributo en este caso para que los nombres de los atributos sigan siendo nicos en la relacin resultado ( empleado.idOficina , por ejemplo). Un ejemplo sera obtener los nombres de los inquilinos y los comentarios que stos han realizado cuando han visto algn inmueble ( inquilino PRODUCT visita ). Como se puede observar, la relacin resultado contiene ms informacin de la que se necesita. Por ejemplo, la primera tupla tiene distintos nmeros de inquilino: el comentario realizado en la visita no corresponde al inquilino cuyo nombre y apellido se muestra. Para obtener el listado que se pide en el ejemplo, es necesario realizar una restriccin para quedarse solamente con las tuplas en donde inquilino.idInquilino = visita.idInquilino :
SELECT (Inquilino PRODUCT visita) WHERE inquilino.idInquilino = visita.idVisita

La combinacin del producto cartesiano y la seleccin del modo en que se acaba de realizar, se puede reducir a la operacin de concatenacin (join) que se presenta ms adelante. Union (relacion UNION relacion) La unin de dos relaciones R y S, con M y N tuplas respectivamente, es otra relacin que tiene como mucho (M+N) tuplas siendo stas las tuplas que se encuentran en R o en S o en ambas relaciones a la vez. Para poder realizar esta operacin, R y S deben ser compatibles para la unin. Se dice que dos relaciones son compatibles para la unin si ambas tienen la misma cabecera, es decir, si tienen el mismo nmero de atributos y stos se encuentran definidos sobre los mismos dominios. En muchas ocasiones ser

necesario realizar proyecciones para hacer que dos relaciones sean compatibles para la unin Un ejemplo de esta operacin sera obtener un listado de las poblaciones en las que hay oficinas o en las que hay inmuebles para alquilar ( oficina[poblacion] UNION inmueble[poblacion] ). Diferencia (relacion MINUS relacion) La diferencia entre R y S obtiene una relacin que tiene las tuplas que se encuentran en R y no se encuentran en S. Para realizar esta operacin, R y S deben ser compatibles para la unin. Un ejemplo sera obtener un listado de todas las poblaciones en donde hay una oficina y no hay inmuebles para alquilar ( oficina[poblacion] MINUS inmueble[poblacion] ). Concatenacin o join (relacion JOIN relacion) La concatenacin de dos relaciones R y S obtiene como resultado una relacin cuyas tuplas son todas las tuplas de R concatenadas con todas las tuplas de S que en los atributos comunes (que se llaman igual) tienen los mismos valores. Estos atributos comunes aparecen una sola vez en el resultado. Un ejemplo sera obtener los nombres y los comentarios que los inquilinos han realizado cuando han visto algn inmueble ( inquilino JOIN visita ). Interseccin (relacion INTERSECT relacion) La interseccin entre R y S obtiene como resultado una relacin que contiene las tuplas de R que tambin se encuentran en S. Para realizar esta operacin, R y S deben ser compatibles para la unin. Un ejemplo sera obtener un listado de las poblaciones en las que hay oficinasy adems tienen inmuebles para alquilar ( oficina[poblacion] INTERSECT inmueble[poblacion] ). Divisin (relacion DIVIDE relacion) Suponiendo que la cabecera de R es el conjunto de atributos A y que la cabecera de S es el conjunto de atributos B, tales que B es un subconjunto de A, y si C = A - B (los atributos de R que no estn en S), la divisin obtiene una relacin cuya cabecera es el conjunto de atributos C y que contiene las tuplas de R que estn acompaadas de todas las tuplas de S.

Ejercicio 1
Empresa de publicidad

Este ejercicio tiene como objetivo ayudar a la asimilacin de los conceptos relativos al modelo relacional (explicado en el apartado "Estructura de los datos ") y recordar las instrucciones empleadas en la "Practica 1" del tema 1 de esta asignatura. El siguiente esquema lgico representa una base de datos que contiene informacin acerca de departamentos y empleados de una empresa de publicidad:
EMPLEADO(idEmpleado, nombre, apellido, idDepartamento) DEPARTAMENTO(idDepartamento, nombre, edificio, despacho, gerente)

Todo departamento tiene un gerente y todo empleado trabaja en un nico departamento. Se pide:
1. Completar el esquema lgico de la base de datos con la informacin relativa a claves

ajenas.
2. Escribir las sentencias necesarias para la definicin de la base de datos en MySQL.

Ejercicio 2
Base de datos de Inditex
Este ejercicio tiene como objetivo ayudar a la asimilacin fundamentalmente de los conceptos relativos a la integridad referencial explicados en el apartado "Reglas de integridad". A continuacin se muestra el esquema lgico de una hipottica base de datos que maneja el grupo Inditex en Madrid. Est formada por cuatro tablas:
PROVEEDOR(idProveedor, proveedor, numeroTrabajadores, ciudad) ARTICULO(idArticulo, articulo, color, precio) TIENDA(idTienda, tienda, ciudad) ENVIO(idProveedor, idArticulo, idTienda, cantidad)

Los valores de las tablas a da de hoy son: PROVEEDOR idProveedor p1 p2 p3 p4 p5 ARTICULO idArticulo a1 articulo Camisa hombre manga larga color Rojo precio 35,00 proveedor Costuras San Javier Textiles Alonso Confecciones Pelayo Telares Rodriguez Peleteria Fernandez numeroTrabajadores 20 10 30 20 30 ciudad Madrid Guadalajara Oviedo Barcelona Sevilla

a2 a3 a4 a5 TIENDA idTienda t1 t2 t3 t4 t5 t6 ENVIO idProveedor p1 p1 p2 p2 p2 p3 p4 p4 p4 p5 p5 p5

Jersey hombre de cuello alto Cazadora hombre piel vuelta Camiseta mujer Pantalones vaqueros mujer

Blanco Marrn Amarilla Azul

56,95 96,95 16,90 66,50

tienda Zara Pull&Bear Massimo Dutti Pull&Bear Bershka Stradivarius

ciudad Madrid Barcelona Valencia Madrid Oviedo Barcelona

idArticulo a1 a1 a3 a3 a2 a5 a2 a4 a1 a1 a4 a4

idTienda t1 t3 t5 t3 t3 t3 t1 t3 t1 t4 t2 t4

cantidad 200 70 35 150 120 220 65 80 22 108 32 12

Utilizando los datos de este ejemplo, se pide indicar el efecto de cada una de las siguientes operaciones:
1. Actualizar PROVEEDOR p5, estableciendo Cordoba como ciudad. 2. Actualizar ARTICULO a4, estableciendo a3 para idArticulo. 3. Actualizar PROVEEDOR p5, estableciendo p8 para idProveedor si la accin

referencial aplicable es "Restringir".


4. Borrar PROVEEDOR p3, si la accin referencial aplicable es "Propagar". 5. Borrar ARTICULO a2, si la accin referencial aplicable es "Restringir". 6. Borrar TIENDA t4, si la accin referencial aplicable es "Propagar". 7. Actualizar ENVIO p1-a1-t1, estableciendo p2 para idProveedor. 8. Actualizar ENVIO p5-a4-t4, estableciendo t2 para idTienda. 9. Actualizar ENVIO p5-a4-t4, estableciando t7 para idTienda. 10. Insertar en ENVIO p5-a4-t5. 11. Insertar en ENVIO p5-a8-t2. Solucin Ejercicio 2 Base de datos Inditex Se detalla a continuacin la solucin comentada del ejercicio. 1. Actualizar PROVEEDOR p5, estableciendo Crdoba como ciudad: Actualizacin aceptada por el SGBD sin ningn problema. 2. Actualizar ARTICULO a4, estableciendo a3 para idArticulo: Actualizacin rechazada por el SGBD ya que idArticulo es clave primaria y dicha actualizacin provocara claves primarias duplicadas. 3. Actualizar PROVEEDOR p5, estableciendo p8 para idProveedor si la accin referencial aplicable es "Restringir": Actualizacin rechazada por el SGBD debido a que existen tuplas en la tabla ENVIO que referencian al proveedor p5 y la accin referencial es "restringir". 4. Borrar PROVEEDOR p3, si la accin referencial aplicable es "Propagar": Eliminacin aceptada por el SGBD. Adems de eliminarse el proveedor p3 se elimina tambin la fila de la tabla ENVIO que hace referencia a dicho proveedor debido a que la accin referencial es "propagar".

5. Borrar ARTICULO a2, si la accin referencial aplicable es "Restringir": Eliminacin rechazada por el SGBD debido a que la tabla ENVIO contiene una tupla que hace referencia a dicho articulo y la accin referencial establecida es "restringir". Para poder borrar el artculo es necesario primero eliminar esta fila de la tabla ENVIO. 6. Borrar TIENDA t4, si la accin referencial aplicable es "Propagar": Eliminacin aceptada por el SGBD. Se borra la tienda t4 y con ella 2 filas de la tabla ENVIO que hacen referencia a dicha tienda (debido a aque la accin referencial es "propagar"). 7. Actualizar ENVIO p1-a1-t1, estableciendo p2 para idProveedor: Actualizacin aceptada por el SGBD sin ningn problema. 8. Actualizar ENVIO p5-a4-t4, estableciendo t2 para idTienda: Actualizacin rechazada por el SGBD ya que se viola la unicidad de la clave primaria de la tabla ENVIO (ya existe un clave primaria p5-a4-t4). 9. Actualizar ENVIO p5-a4-t4, estableciando t7 para idTienda: Actualizacin rechazada por el SGBD ya que viola la regla de integridad referencial. No es posible introducir una tupla que haga referencia a una tienda (t7) que no existe en la tabla TIENDA. 10.Insertar en ENVIO p5-a4-t5: Insercin aceptada por el SGBD sin ningn problema. 11.Insertar en ENVIO p5-a8-t2: Insercin rechazada por el SGBD ya que viola la regla de integridad referencial. No existe ningn artculo en la tabla ARTICULO con idArticulo = 8.

Ejercicio 3
Empresa de transportes
Este ejercicio tiene como objetivo facilitar la asimiliacin de los contenidos referidos al apartado "Lenguajes relacionales" de este mismo tema. A continuacin se muestra el esquema de una base de datos de una empresa de transportes de mercancias por carretera sita en Madrid. La empresa guarda informacin acerca de su

clientes, de sus camiones y de todos los viajes que realizan sus camiones, as como de las ciudades a las que realiza viajes.
CLIENTE(idCliente, nombre, rentaAnual) VIAJE(idViaje, idCliente, peso, idCamion, destino) CAMION(idCamion, nombreCoductor) CIUDAD(nombre, kmDesdeMadrid)

Las claves ajenas de esta base de datos son las siguientes:


VIAJE(idCliente) -> CLIENTE (idCliente) VIAJE(idCamion) -> CAMION(idCamion) VIAJE(destino) -> CIUDAD(nombre)

Se pide, utilizando el lgebra relacional, obtener los siguientes datos:


1. Cules son los nombres de las ciudades que contiene la base de datos? 2. Mostrar las ciudades que estn a ms de 300 km. de Madrid. 3. Cules son los nombres de los clientes que han enviado camiones a Zaragoza o a

Barcelona?
4. Cules son los nombres de los clientes que han enviado camiones a Oviedo y

Bilbao?
5. A qu destinos han enviado camiones los clientes con una renta inferior a un milln? 6. Cules son los nombres de las ciudades que han recibido camiones con un peso

superior a 500 kg.?


7. Qu ciudades han recibido camiones de clientes con una renta anual por encima de

los 15 millones?
8. Qu clientes han enviado toso sus camiones a una nica ciudad? 9. Qu clientes han tenido envos conducidos por todos los conductores? Ejercicio 4 Empresa de seguridad de automviles Este ejercicio tiene como objetivo facilitar la asimiliacin de los contenidos referidos al apartado "Lenguajes relacionales" de este mismo tema. El siguiente ejercicio se basa en la base de datos de un empresa de desarrollo tecnolgico para innovacion en materia de seguridad del automvil, cuyo esquema lgico se detalla a continuacin:
PROVEEDOR (idProveedor, nombreProveedor, facturacionAnual, ciudadProveedor) PIEZA (idPieza, nombrePieza, color, peso, ciudadFabricacion) PROYECTO(idProyecto, nombreProyecto, ciudadProyecto) CONTRATO(idProveedor, idPieza, idProyecto, cantidad)

Las claves ajenas de esta base de datos son:

CONTRATO(idProveedor) -> PROVEEDOR(idProveedor) CONTRATO(idParte) -> PARTE(idParte) CONTRATO(idProyecto) -> PROYECTO(idProyecto)

Como se observa, la empresa esta involucrada en una serie de proyectos. Cada uno de los cuales tiene un nombre ("Sistema de ayuda a la frenada", por ejemplo) y una ciudad donde se est desarrollando dicho proyecto. La empresa cuenta con una serie de proveedores de los que almacena su nombre, su facturacin anual y la ciudad donde tiene las oficinas dicho proveedor. Estos proveedores surten a la empresa de todas aquellas piezas que necesitan los proyectos. De las piezas almacenamos su nombre ("pastillas de freno", por ejemplo), color, peso y la ciudad donde la pieza ha sido fabricada. Por ltimo, se almacena en una ltima tabla los contratos que la empresa tiene con los proveedores: se ha firmado un contrato para cada pieza que un proveedor surte a un proyecto (por ejemplo, el proveedor "Zapatas Smith S.A" surte "pastillas de freno" al proyecto "Sistema de ayuda a la frenada" en un cantidad de 500 piezas anuales), y en ese contrato se ha especificado la cantidad de piezas anuales que el proveedor surtir al proyecto. Teniendo en cuenta todos estos datos, se pide escribir una expresin del lgebra relacional para la consulta indicada: 1. Obtener un listado con todos los detalles de los proyectos que se llevan a cabo en Londres. 2. Obtener los ids de los proveedores que suministran al proyecto "Faros anti-deslumbramiento" (idProyecto = 45). 3. Obtener todos aquellos ids de proyectos que tienen contratos con una cantidad de piezas anuales entre 300 y 750, ambos valores exclusive. 4. Obtener un listado con todas las combinaciones PIEZA.color PIEZA.ciudadFabricacion que figuran actualmente en la base de datos. 5. Obtener todos los detalles de las piezas suministradas por proveedores ubicados en Londres. 6. Obtener un listado con los ids de las piezas que suministran proveedores de Londres a proyectos que se llevan a cabo en Londres. 7. Obtener un listado con pares de nombres de ciudades tales que hay un proveedor ubicado en la primera ciudad que suministra piezas a un proyecto ubicado en la segunda ciudad. 8. Obtener los ids de las piezas suministradas por un proveedor a proyectos de su misma ciudad. 9. Obtener los nombres de proyectos a los que suministra el proveedor "Electronics United".

10.Obtener los colores de las piezas suministradas por el proveedor "Iron Stechx". 11.Obtener los ids de las piezas suministradas a cualquier proyecto de Londres. 12.Obtener los ids de los proveedores con una facturacin anual menor que el proveedor "Iron Stechx". 13.Obtener los ids de los proyectos a los que ningn proveedor de Londres suministra una pieza roja. 14.Obtener los ids de los proyectos suministrados en su totalidad por el proveedor con idProveedor 6. 15.Obtener los ids de todas las piezas suministradas a proyectos desarrollados en Londres. 16.Obtener los nombres de todas las ciudades en las que est ubicado al menos un proveedor, fabricada una pieza o desarrollado un proyecto. Solucin Ejercicio 4 Empresa de seguridad de automviles A continuacin se detalla la solucin comentada del ejercicio. 1. Obtener un listado con todos los detalles de los proyectos que se llevan a cabo en Londres. 2. Obtener los ids de los proveedores que suministran al proyecto "Faros anti-deslumbramiento" (idProyecto = 45).
3. a := SELECT contrato WHERE idProyecto = 45 r := PROYECT a [idProyecto] r := SELECT proyecto WHERE ciudadProyecto = "Londres"

4. Obtener todos aquellos ids de proyectos que tienen contratos con una cantidad de piezas anuales entre 300 y 750, ambos valores exclusive.
5. a := SELECT contrato WHERE cantidad > 300 AND cantidad < 750 r := PROYECT a [idProyecto]

6. Obtener un listado con todas las combinaciones PIEZA.color PIEZA.ciudadFabricacion que figuran actualmente en la base de datos. 7. Obtener todos los detalles de las piezas suministradas por proveedores ubicados en Londres.
8. a := SELECT proveedor WHERE ciudadProveedor = "Londres" 9. b := contrato JOIN a 10. c := pieza JOIN b r := PROYECT pieza [colorPieza, ciudadFabricacion]

11. r := PROYECT c [idPieza, nombrePieza, color, peso, ciudadFabricacion]

12.Obtener un listado con los ids de las piezas que suministran proveedores de Londres a proyectos que se llevan a cabo en Londres.
13. 14. 15. 16. 17. SELECT proveedor WHERE ciudadProveedor = "Londres" contrato JOIN a proyecto PRODUCT b SELECT c WHERE ciudadProyecto = "Londres" AND ciudadProveedor = "Londres" r := PROYECT d [idPieza] a b c d := := := :=

18.Obtener un listado con pares de nombres de ciudades tales que hay un proveedor ubicado en la primera ciudad que suministra piezas a un proyecto ubicado en la segunda ciudad.
19. a := proveedor JOIN contrato 20. 21. b := a JOIN proyecto r := PROYECT b [ciudadProveedor, ciudadProyecto]

22.Obtener los ids de las piezas suministradas por un proveedor a proyectos de su misma ciudad.
23. a := proveedor JOIN contrato 24. b := a JOIN proyecto 25. c := SELECT b WHERE ciudadProveedor = ciudadProyecto r := PROYECT c [idPieza]

26.Obtener los nombres de proyectos a los que suministra el proveedor "Electronics United".
27. a := proyecto JOIN contrato 28. b := a JOIN proveedor 29. c := SELECT b WHERE proveedor = "Electronics United" r := PROYECT c [nombreProyecto]

30.Obtener los colores de las piezas suministradas por el proveedor "Iron Stechx".
31. a := pieza JOIN contrato 32. b := a JOIN proveedor 33. c := SELECT b WHERE nombreProveedor = "Iron Stechx" r := PROYECT c [color]

34.Obtener los ids de las piezas suministradas a cualquier proyecto de Londres.


35. a := contrato JOIN proyecto 36. b := SELECT a WHERE ciudadProyecto = "Londres" r := PROYECT b [idPieza]

37.Obtener los ids de los proveedores con una facturacin anual menor que el proveedor "Iron Stechx".
38. 39. 40. 41. a b c d := := := := proveedor PRODUCT proveedor SELECT a WHERE proveedor(2).nombre = "Iron Stechx" SELECT b WHERE proveedor(1).nombre <> "Iron Stechx" SELECT c WHERE proveedor(1).facturacionAnual <

42.

43.Obtener los ids de los proyectos a los que ningn proveedor de Londres suministra una pieza roja.
44. 45. 46. 47. 48. 49. 50. a := b := c := d := e := f := g := r := a PROYECT proyecto [idProyecto] proyecto JOIN contrato b JOIN pieza c JOIN proveedor SELECT d WHERE ciudadProveedor = "Londres" SELECT e WHERE color = "rojo" PROYECT e [idProyecto] MINUS g

proveedor(2).facturacionAnual r := PROYECT d [idProveedor]

51.Obtener los ids de los proyectos suministrados en su totalidad por el proveedor con idProveedor 6.
52. a := PROYECT proyecto [idProyecto] 53. b := SELECT contrato WHERE idProveedor <> 6 54. c := PROYECT b [idProyecto] r := a MINUS c

55.Obtener los ids de todas las piezas suministradas a proyectos desarrollados en Londres.
56. a := contrato JOIN proyecto 57. b := SELECT a WHERE ciudadProyecto = "Londres" r := PROYECT b [idPieza]

58.Obtener los nombres de todas las ciudades en las que est ubicado al menos un proveedor, fabricada una pieza o desarrollado un proyecto.
59. 60. 61. 62. a := b := c := d := r := d PROYECT PROYECT PROYECT a UNION UNION c proveedor [ciudadProveedor] pieza [ciudadPieza] proyecto [ciudadProyecto] b

Ejercicio 5

Departamento de matemticas Este ejercicio tiene como objetivo facilitar la asimiliacin de los contenidos referidos al apartado "Lenguajes relacionales" de este mismo tema. Se dispone de una base de datos que est formada por las siguientes tablas:
EXAMEN(idExamen, fecha, descripcion, materia) EJERCICIO(idEjercicio, enunciado, solucion, dificultad, idExamen) PROFESOR(idProfesor, nombre, sueldo) CORRIGE(idProfesor, idExamen, idEjercicio)

Esta es una base de datos utilizada por un departamento de matemticas en la que se almacenan los datos de los exmenes que se van realizando (la fecha, una brve descripcin y la materia sobre la que se examina) y de los ejercicios que cada examen contiene. De estos ejercicios se guarda su enunciado, su solucin, la dificultad y el examen en el que fueron incluidos. Tambin se

almacenan los profesores del departamento y qu profesor ha corregido qu ejercicio de qu examen (debido a que se reparten entre los profesores los ejercicios de los examenes realizados para su correccin ms objetiva). Las claves ajenas son, pues:
EJERCICIO(idExamen) -> EXAMEN(idExamen) CORRIGE(idProfesor) -> PROFESOR(idProfesor) CORRIGE(idExamen) -> EXAMEN(idExamen) CORRIGE(idEjercicio) -> EJERCICIO(idEjercicio)

Se pide, utilizando lgebra relacional, resolver las siguientes consultas: 1. Obtener un listado con los nombres y los sueldos de los profesores del departamento. 2. Obtener un listado con las fechas de los examenes llevados a cabo en la materia "Estadistica". 3. Obtener un listado con los nombres de profesores que han corregido ejercicios alguna vez. 4. Obtener un listado con los nombres de profesores que no han corregido nunca ningun ejercicio. 5. Obtener los enunciados de los ejercicios del examen hecho el dia "10-112004". 6. Obtener la dificultades de los ejercicios corregidos por el profesor "Manuel Gil". 7. Obtener un listado con el nombre de los profesores que han corregido ejercicios en el examen realizado en fecha "10-11-2004". 8. Obtener un listado con el nombre de los profesores que han corregido ejercicios en el examen realizado con fecha "5-5-2003". 9. Obtener un listado con el nombre de los profesores que han corregido ejercicios tanto en el examen realizado el "10-11-2004" como en el examen del "5-5-2003". 10.Obtener un listado con los nombres de los profesores que corrigen examenes de "Estadistica" con fecha posterior al "1-1-2000". 11.Obtener un listado con las fechas de los examenes en cuya correccin han intervenido todos los profesores del departamento. Solucin Ejercicio 5 Departamento de matemticas Se detalla a continuacin la solucin comentada del ejercicio.

1. Obtener un listado con los nombres y los sueldos de los profesores del departamento. 2. Obtener un listado con las fechas de los examenes llevados a cabo en la materia "Estadistica".
3. a := SELECT examen WHERE materia = "Estadstica" r := PROYECT a [fecha] r := PROYECT profesor [nombre, sueldo]

4. Obtener un listado con los nombres de profesores que han corregido ejercicios alguna vez.
5. a := profesor JOIN corrige r := PROYECT a [nombre]

6. Obtener un listado con los nombres de profesores que no han corregido nunca ningun ejercicio.
7. a := PROYECT profesor [nombre] 8. b := profesor JOIN corrige 9. c := PROYECT b [nombre] r := a MINUS c

10.Obtener los enunciados de los ejercicios del examen hecho el dia "10-112004".
11. a := examen JOIN ejercicio 12. b := SELECT a WHERE fecha = '10-11-2004' r := PROYECT b [enunciado]

13.Obtener la dificultades de los ejercicios corregidos por el profesor "Manuel Gil".


14. a := profesor JOIN corrige 15. b := a JOIN ejercicio 16. c := SELECT b WHERE profesor = 'Manuel Gil' r := PROYECT c [dificultad]

17.Obtener un listado con el nombre de los profesores que han corregido ejercicios en el examen realizado en fecha "10-11-2004".
18. a := profesor JOIN corrige 19. b := a JOIN examen 20. c := SELECT b WHERE fecha = '10-11-2004' r := PROYECT c [nombre]

21.Obtener un listado con el nombre de los profesores que han corregido ejercicios en el examen realizado con fecha "5-5-2003".
22. a := profesor JOIN corrige 23. b := a JOIN examen 24. c := SELECT b WHERE fecha = '5-5-2003' r := PROYECT c [nombre]

25.Obtener un listado con el nombre de los profesores que han corregido ejercicios tanto en el examen realizado el "10-11-2004" como en el examen del "5-5-2003".

26. 27. 28. 29. 30. 31. 32. 33.

34.Obtener un listado con los nombres de los profesores que corrigen examenes de "Estadistica" con fecha posterior al "1-1-2000".
35. 36. 37. 38. a := profesor JOIN corrige b := a JOIN examen c := SELECT b WHERE materia = 'Estadistica' d := SELECT c WHERE fecha > '1-1-2000' r := PROYECT d [nombre]

a := b := c := d := e := f := g := e := r := d

profesor JOIN corrige a JOIN examen SELECT b WHERE fecha = '10-11-2004' PROYECT c [nombre] profesor JOIN corrige e JOIN examen SELECT f WHERE fecha = '10-11-2004' PROYECT g [nombre] INTERSECT e

39.Obtener un listado con las fechas de los examenes en cuya correccin han intervenido todos los profesores del departamento.
40. 41. 42. 43. a := PROYECT profesor [idProfesor] b := PROYECT corrige [idExamen, idProfesor] c := b DIVIDE BY a d := c JOIN examen r := PROYECT d [fecha]

Tema 4. Diseo de Bases de Datos


Visin general del tema
La base de datos es uno de los componentes principales de un sistema de informacin, por lo que el ciclo de vida de un sistema de informacin est inherentemente ligado al ciclo de vida de la base de datos sobre la que se apoya. Las etapas de este ciclo de vida son: planificacin de la base de datos, definicin del sistema, recoleccin y anlisis de los requisitos, diseo de la base de datos, seleccin del SGBD, diseo de aplicaciones, elaboracin de prototipos, implementacin, conversin y carga de datos, prueba y mantenimiento. En el diseo de una base de datos se debe realizar un modelo de datos que ayude a entender el significado de los datos y que facilite la comunicacin en cuanto a los requisitos de informacin. La primera etapa es el diseo conceptual, en donde se construye un esquema de la informacin que maneja la empresa, independientemente de todas las consideraciones fsicas. Despus viene el diseo lgico, en el que el esquema anterior se transforma segn el modelo de base de datos que se vaya a utilizar para implementar el sistema. Por ltimo, en la etapa del diseo fsico, se produce una descripcin de la implementacin de la base de datos en memoria secundaria.

Introduccin Ciclo de vida de los SI Diseo de la base de datos Herramientas CASE

Diseo conceptual Diccionario de datos conceptual Diseo lgico (1) Diseo lgico (2) Diseo lgico (3) Diseo lgico (4) Diccionario de datos lgico Diseo fsico EJ1. Municipios, viviendas y personas EJ2. Campeonato de ajedrez EJ3. Empleados y departamentos EJ4. Compaa de seguros EJ5. Empresa de acero Aceralium EJ6. Ros de Espaa EJ7. Parque mvil de Len EJ8. Conflictos blicos EJ9. IES.San Andrs del Rabanedo EJ10. Cocinas EJ11. Casos variados EJ12. Empresa de informtica EJ13. Solucin alumno ASI EJ14. Solucin alumno ASI (2) EJ15. Calificaciones de alumnos EJ16. Base de datos Microsoft Espaa P1. Diseo fsico con Access

Introduccin Razones para estudiar el diseo de bases de datos En esta seccin se desarrolla un argumento a favor del estudio en profundidad de la fase de diseo de bases de datos como requisito bsico para llevar a cabo bases de datos eficientes y consistentes. Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqu deberan preocuparse del diseo de las bases de datos que utilizan. Despus de todo, una gran mayora de los SGBD vienen con bases de datos de ejemplo que se pueden copiar y despus modificar, para que se

adecuen a cada caso particular, e incluso las tablas de esas bases de datos de ejemplo se pueden cortar y pegar en una nueva base de datos. Algunos SGBD tienen asistentes', herramientas que guan al usuario a travs del proceso de definicin y creacin de tablas. Sin embargo, esas herramientas no sirven para disear una base de datos, tan solo ayudan a crear las tablas fsicas que se incluirn en la base de datos. Lo que la mayora de la gente no parece entender es que esas herramientas se deben utilizar despus de que se haya realizado el diseo lgico de la base de datos . Los asistentes y las bases de datos de ejemplo se suministran para minimizar el tiempo que lleva implementar la estructura fsica de la base de datos. La idea es que si se ahorra tiempo en la implementacin de la estructura de la base de datos una vez se ha realizado el diseo lgico, habr ms tiempo para centrarse en la creacin y construccin de las aplicaciones que se utilizarn para trabajar con los datos de la base de datos. Por lo tanto, la razn para preocuparse por el diseo de las bases de datos es que es crucial para la consistencia, integridad y precisin de los datos . Si una base de datos est mal diseada, los usuarios tendrn dificultades a la hora de acceder a ciertos tipos de informacin y existe el riesgo aadido de que ciertas bsquedas puedan producir informacin errnea. La informacin errnea es, probablemente, el peor de los resultados de un mal diseo de la base de datos. Puede repercutir muy negativamente a la empresa u organizacin propietaria de los datos. De hecho, si los datos de una base de datos van a influir en la gestin del negocio, si van a servir para decidir las actuaciones de la empresa, la base de datos debe ser una preocupacin. Vindolo desde una perspectiva diferente, la base de datos es como una casa que queremos que nos construyan. Qu es lo primero que hay que hacer? Desde luego, lo que no vamos a hacer es buscar a un constructor que haga la casa sobre la marcha y como l quiera. Seguramente, buscaremos primero a un arquitecto que disee nuestra nueva casa y despus haremos que el constructor la edifique. El arquitecto expresar nuestras necesidades en una serie de planos, anotando todos los requisitos de los diversos sistemas (estructural, mecnico y elctrico). Despus, el constructor pondr los materiales necesarios, tal y como se indica en los planos y en las especificaciones. Volviendo a la perspectiva de las bases de datos, el diseo lgico corresponde con la fase de elaboracin de los planos arquitectnicos, y la implementacin fsica de la base de datos es la casa ya construida. El diseo lgico describe el tamao, la forma y los sistemas necesarios para la base de datos: contiene las necesidades en cuanto a informacin y modo de operacin del negocio. Despus, se construye la implementacin fsica del diseo lgico de la base de datos mediante el SGBD. Si pensamos en un sistema relacional , una vez creadas las tablas , establecidas las relaciones y los niveles de integridad

necesarios , la base de datos est finalizada. Ahora ya se pueden crear las aplicaciones que permiten interactuar con los datos de la base de datos, y podemos estar seguros de que estas aplicaciones proporcionarn la informacin oportuna y, sobre todo, la informacin correcta. Se pueden hacer malos diseos, pero una base de datos bien diseada contendr informacin correcta, almacenar los datos ms eficientemente y ser ms fcil de gestionar y de mantener.

Ciclo de vida de los sistemas de informacin


Pasos a seguir en la implantacin de una base de datos
En este apartado se recoge una descripcin detallada del ciclo de vida de un sistema de informacin y de como encaja en l el ciclo de vida de un sistema de bases de datos. Un sistema de informacin es el conjunto de recursos que permiten recoger, gestionar, controlar y difundir la informacin de toda una empresa u organizacin. Desde los aos setenta, los sistemas de bases de datos han ido reemplazando a los sistemas de ficheros en los sistemas de informacin de las empresas. Al mismo tiempo, se ha ido reconociendo la gran importancia que tienen los datos que stas manejan, convirtindose en uno de sus recursos ms importantes. Esto ha hecho que muchas empresas tengan departamentos que se encarguen de gestionar toda su informacin, que estar almacenada en una base de datos. Aparecen los papeles de administrador de datos y administrador de la base de datos , que son las personas encargadas de supervisar y controlar todas las actividades relacionadas con los datos de la empresa y con el ciclo de vida de las aplicaciones de bases de datos, respectivamente. Un sistema de informacin est formado por los siguientes componentes:

La base de datos. El SGBD. Los programas de aplicacin. Los dispositivos fsicos (ordenadores, dispositivos de almacenamiento, etc.). El personal que utiliza (los empleados) y que desarrolla el sistema (el departamento de informtica).

La base de datos es un componente fundamental de un sistema de informacin. El ciclo de vida de un sistema de informacin est ligado al ciclo de vida del sistema de base de datos sobre el que se apoya. Las etapas del ciclo de vida de una aplicacin de bases de datos son las siguientes:

1. Planificacin del proyecto


Esta etapa conlleva la planificacin de cmo se pueden llevar a cabo el resto de etapas del ciclo de vida de la manera ms eficiente . Hay tres componentes principales: el trabajo que se ha de realizar, los recursos para llevarlo a cabo y el dinero para pagar todo ello. Como apoyo a esta etapa, se necesitar un modelo de datos en donde se muestren las entidades

principales de la empresa y sus relaciones. Nomalmente, este modelo de datos se representa mediante un diagrama entidad-relacin . La planificacin de la base de datos tambin incluye el desarrollo de estndares que especifiquen cmo realizar la recoleccin de datos, cmo especificar su formato, qu documentacin ser necesaria y cmo se va a llevar a cabo el diseo y la implementacin. El desarrollo y el mantenimiento de los estndares puede llevar bastante tiempo, pero si estn bien diseados, son una base para el personal informtico en formacin y para medir la calidad, adems, garantizan que el trabajo se ajusta a unos patrones, independientemente de las habilidades y la experiencia del diseador. Por ejemplo, se pueden establecer reglas sobre cmo dar nombres a los datos, lo que evitar redundancias e inconsistencias. Se deben documentar todos los aspectos legales sobre los datos y los establecidos por la empresa como, por ejemplo, qu datos deben tratarse de modo confidencial.

2. Definicin del sistema


En esta etapa se especifica el mbito y los lmites de la aplicacin de bases de datos , as como con qu otros sistemas interacta. Tambin hay que determinar quienes son los usuarios y las reas de aplicacin.

3. Recoleccin y anlisis de los requisitos


En esta etapa se recogen y analizan los requerimientos de los usuarios y de las reas de aplicacin . Esta informacin se puede recoger de varias formas:

Entrevistando al personal de la empresa, concretamente, a aquellos que son considerados expertos en las reas de inters. Observando el funcionamiento de la empresa. Examinando documentos, sobre todo aquellos que se utilizan para recoger o visualizar informacin. Utilizando cuestionarios para recoger informacin de grandes grupos de usuarios. Utilizando la experiencia adquirida en el diseo de sistemas similares.

Esta etapa tiene como resultado un conjunto de documentos con las especificaciones de requisitos de los usuarios, en donde se describen las operaciones que se realizan en la empresa desde distintos puntos de vista.

4. Diseo de la base de datos


Esta etapa consta de tres fases: diseo conceptual , diseo lgico y diseo fsico de la base de datos. La primera fase consiste en la produccin de un esquema conceptual, que es independiente de todas las consideraciones fsicas. Este modelo se refina despus en un esquema lgico eliminando las construcciones que no se pueden representar en el modelo de base de datos escogido (relacional, orientado a objetos, etc.). En la tercera fase, el esquema lgico se traduce en un esquema fsico para el SGBD escogido. La fase de diseo fsico considera las estructuras de almacenamiento y los mtodos de acceso necesarios para proporcionar un acceso eficiente a la base de datos en memoria secundaria. Los objetivos del diseo de la base de datos son:

Representar los datos que requieren las principales reas de aplicacin y los grupos de usuarios, y representar las relaciones entre dichos datos. Proporcionar un modelo de datos que soporte las operaciones que se vayan a realizar sobre los datos. Especificar un esquema que alcance las prestaciones requeridas para el sistema.

Hay dos estrategias fundamentales a seguir para realizar el diseo: de abajo a arriba o de arriba abajo. La estrategia de abajo a arriba parte de todos los atributos y los va agrupando en entidades y relaciones. Es apropiada cuando la base de datos es simple, con pocos atributos. La estrategia de arriba a abajo es ms apropiada cuando se trata de bases de datos complejas. Se comienza con un esquema con entidades de alto nivel, que se van refinando para obtener entidades de bajo nivel, atributos y relaciones.

5. Seleccin del SGBD


Si no se dispone de un SGBD, o el que hay se encuentra obsoleto, se debe escoger un SGBD que sea adecuado para el sistema de informacin. Esta eleccin se debe hacer en cualquier momento antes del diseo lgico.

6. Diseo de la aplicacin
En esta etapa se disean los programas de aplicacin que usarn y procesarn la base de datos . Esta etapa y el diseo de la base de datos, son paralelas. En la mayor parte de los casos no se puede finalizar el diseo de las aplicaciones hasta que se ha terminado con el diseo de la base de datos. Por otro lado, la base de datos existe para dar soporte a las aplicaciones, por lo que habr una realimentacin desde el diseo de las aplicaciones al diseo de la base de datos. En esta etapa hay que asegurarse de que toda la funcionalidad especificada en los requisitos de usuario se encuentra en el diseo de la aplicacin. Habr algunos programas que utilicen y procesen los datos de la base de datos. Adems, habr que disear las interfaces de usuario , aspecto muy importante que se suele ignorar. El sistema debe ser fcil de aprender, fcil de usar, ser directo y estar dispuesto a perdonar''. Si la interface no tiene estas caractersticas, el sistema dar problemas, sin lugar a dudas.

7. Prototipado
Esta etapa, que es opcional, es para construir prototipos de la aplicacin que permitan a los diseadores y a los usuarios probar y mostrar el sistema . Un prototipo es un modelo de trabajo de las aplicaciones del sistema. El prototipo no tiene toda la funcionalidad del sistema final, pero es suficiente para que los usuarios puedan utilizar el sistema e identificar qu aspectos estn bien y cules no son adecuados, adems de poder sugerir mejoras o la inclusin de nuevos elementos. Este proceso permite que quienes disean e implementan el sistema sepan si han interpretado correctamente los requisitos de los usuarios. Otra ventaja de los prototipos es que se construyen rpidamente. Esta etapa es imprescindible cuando el sistema que se va a implementar tiene un gran coste, alto riesgo o utiliza nuevas tecnologas.

8. Implementacin
En esta etapa se crean las definiciones de la base de datos a nivel conceptual, externo e interno, as como los programas de aplicacin . La implementacin de la base de datos se realiza mediante las sentencias del lenguaje de definicin de datos (LDD) del SGBD escogido. Estas sentencias se encargan de crear el esquema de la base de datos, los ficheros en donde se almacenarn los datos y las vistas de los usuarios. Los programas de aplicacin se implementan utilizando lenguajes de tercera o cuarta generacin. Partes de estas aplicaciones son transacciones sobre la base de datos, que se implementan mediante el lenguaje de manejo de datos (LMD) del SGBD. Las sentencias de este lenguaje se pueden embeber en un lenguaje de programacin anfitrin como Visual Basic, Delphi, C, C++, Java, COBOL, Fortran, Ada o Pascal. En esta etapa, tambin se implementan los mens, los formularios para la introduccin de datos y los informes de visualizacin de datos. Para ello, el SGBD puede disponer de lenguajes de cuarta generacin que permiten el desarrollo rpido de aplicaciones mediante lenguajes de consultas no procedurales, generadores de informes, generadores de formularios, generadores de grficos y generadores de aplicaciones. Tambin se implementan en esta etapa todos los controles de seguridad e integridad . Algunos de estos controles se pueden implementar mediante el LDD y otros puede que haya que implementarlos mediante utilidades del SGBD o mediante programas de aplicacin.

9. Conversin y carga de datos


Esta etapa es necesaria cuando se est reemplazando un sistema antiguo por uno nuevo. Los datos se cargan desde el sistema viejo al nuevo directamente o, si es necesario, se convierten al formato que requiera el nuevo SGBD y luego se cargan . Si es posible, los programas de aplicacin del sistema antiguo tambin se convierten para que se puedan utilizar en el sistema nuevo.

10. Prueba
En esta etapa se prueba y valida el sistema con los requisitos especificados por los usuarios. Para ello, se debe disear una batera de tests con datos reales, que se deben llevar a cabo de manera metdica y rigurosa. Es importante darse cuenta de que la fase de prueba no sirve para demostrar que no hay fallos, sirve para encontrarlos. Si la fase de prueba se lleva a cabo correctamente, descubrir los errores en los programas de aplicacin y en la estructura de la base de datos. Adems, demostrar que los programas parecen'' trabajar tal y como se especificaba en los requisitos y que las prestaciones deseadas parecen'' obtenerse. Por ltimo, en las pruebas se podr hacer una medida de la fiabilidad y la calidad del software desarrollado.

11. Puesta en marcha y mantenimiento


Una vez que el sistema est completamente implementado y probado, se pone en marcha . El sistema est ahora en la fase de mantenimiento en la que se llevan a cabo las siguientes tareas:

Monitorizacin de las prestaciones del sistema . Si las prestaciones caen por debajo de un determinado nivel, puede ser necesario reorganizar la base de datos.

Mantenimiento y actualizacin del sistema . Cuando sea necesario, los nuevos requisitos que vayan surgiendo se incorporarn al sistema, siguiendo de nuevo las etapas del ciclo de vida que se acaban de presentar

Diseo de bases de datos


Fases fundamentales del diseo
En este apartado se describen con ms detalle los objetivos de cada una de las etapas del diseo de bases de datos: diseo conceptual, diseo lgico y diseo fsico.

Diseo conceptual
En esta etapa se debe construir un esquema de la informacin que se usa en la empresa, independientemente del hecho de que lo estemos haciendo con fines a su implementacin en un sistema informtico. A este esquema se le denomina esquema conceptual . Al construir el esquema, los diseadores descubren la semntica (significado) de los datos de la empresa: encuentran entidades, atributos y relaciones. El objetivo es comprender:

La perspectiva que cada usuario tiene de los datos. La naturaleza de los datos, independientemente de su representacin fsica. El uso de los datos a travs de las reas de aplicacin.

El esquema conceptual se puede utilizar para que el diseador transmita a la empresa lo que ha entendido sobre la informacin que sta maneja. Para ello, ambas partes deben estar familiarizadas con la notacin utilizada en el esquema. La ms popular es la notacin del modelo entidad-relacin, que se describir ms adelante. El esquema conceptual se construye utilizando la informacin que se encuentra en la especificacin de los requisitos de usuario. El diseo conceptual es completamente independiente de los aspectos de implementacin , como puede ser el SGBD que se vaya a usar, los programas de aplicacin, los lenguajes de programacin, el hardware disponible o cualquier otra consideracin fsica. Durante todo el proceso de desarrollo del esquema conceptual ste se prueba y se valida con los requisitos de los usuarios. El esquema conceptual es una fuente de informacin para el diseo lgico de la base de datos.

Diseo lgico
El diseo lgico es el proceso de construir un esquema de la informacin que utiliza la empresa, basndose en un modelo de base de datos especfico , independiente del SGBD concreto que se vaya a utilizar y de cualquier otra consideracin fsica. En esta etapa, se transforma el esquema conceptual en un esquema lgico que utilizar las estructuras de datos del modelo de base de datos en el que se basa el SGBD que se vaya a utilizar, como puede ser el modelo relacional, el modelo de red, el modelo jerrquico o el modelo orientado a objetos. La normalizacin es una tcnica que se utiliza para comprobar la validez de los esquemas lgicos basados en el modelo relacional, ya que asegura que las tablas obtenidas no tienen datos redundantes. Esta tcnica se ver ms adelante.

El esquema lgico es una fuente de informacin para el diseo fsico. Adems, juega un papel importante durante la etapa de mantenimiento del sistema, ya que permite que los futuros cambios que se realicen sobre los programas de aplicacin o sobre los datos, se representen correctamente en la base de datos. Tanto el diseo conceptual, como el diseo lgico, son procesos iterativos, tienen un punto de inicio y se van refinando continuamente. Ambos se deben ver como un proceso de aprendizaje en el que el diseador va comprendiendo el funcionamiento de la empresa y el significado de los datos que maneja. El diseo conceptual y el diseo lgico son etapas clave para conseguir un sistema que funcione correctamente. Si el esquema no es una representacin fiel de la empresa, ser difcil, sino imposible, definir todas las vistas de usuario (esquemas externos), o mantener la integridad de la base de datos. Tambin puede ser difcil definir la implementacin fsica o el mantener unas prestaciones aceptables del sistema. Adems, hay que tener en cuenta que la capacidad de ajustarse a futuros cambios es un sello que identifica a los buenos diseos de bases de datos. Por todo esto, es fundamental dedicar el tiempo y las energas necesarias para producir el mejor esquema lgico que sea posible.

Diseo fsico
El diseo fsico es el proceso de producir la descripcin de la implementacin de la base de datos en memoria secundaria : estructuras de almacenamiento y mtodos de acceso que garanticen un acceso eficiente a los datos. Para llevar a cabo esta etapa, se debe haber decidido cul es el SGBD que se va a utilizar, ya que el esquema fsico se adapta a l. Entre el diseo fsico y el diseo lgico hay una realimentacin, ya que algunas de las decisiones que se tomen durante el diseo fsico para mejorar las prestaciones, pueden afectar a la estructura del esquema lgico. En general, el propsito del diseo fsico es describir cmo se va a implementar fsicamente el esquema lgico obtenido en la fase anterior. Concretamente, en el modelo relacional, esto consiste en:

Obtener un conjunto de relaciones (tablas) y las restricciones que se deben cumplir sobre ellas. Determinar las estructuras de almacenamiento y los mtodos de acceso que se van a utilizar para conseguir unas prestaciones ptimas. Disear el modelo de seguridad del sistema.

Herramientas CASE
Medios informatizados para aumento de la productividad
En esta apartado se comenta brevemente en qu consiste una herramienta CASE y las caractersticas de las que deriva su importancia en el desarrollo de sistemas de bases de datos. Cuando se hace la planificacin de la base de datos, la primera etapa del ciclo de vida de las aplicaciones de bases de datos, tambin se puede escoger una herramienta CASE

(Computer-Aided Software Engineering) que permita llevar a cabo el resto de tareas del modo ms eficiente y efectivo posible. Una herramienta CASE suele incluir:

Un diccionario de datos para almacenar informacin sobre los datos de la aplicacin de bases de datos. Herramientas de diseo para dar apoyo al anlisis de datos. Herramientas que permitan desarrollar el modelo de datos corporativo, as como los esquemas conceptual y lgico. Herramientas para desarrollar los prototipos de las aplicaciones.

El uso de las herramientas CASE puede mejorar la productividad en el desarrollo de una aplicacin de bases de datos. Y por productividad se entiende tanto la eficiencia en el desarrollo, como la efectividad del sistema desarrollado. La eficiencia se refiere al coste, tanto en tiempo como en dinero, de desarrollar la aplicacin. La efectividad se refiere al grado en que el sistema satisface las necesidades de los usuarios. Para obtener una buena productividad, subir el nivel de efectividad puede ser ms importante que aumentar la eficiencia.
Diseo conceptual de la base de datos Modelo entidad-relacin (E-R) En este apartado se hace una descripcin detallada de los elementos del modelo relacional que nos permiten representar conceptualmente la informacin a almacenar en una base de datos. El modelo E-R (Entidad-Relacin) fue ideado por Chen en 1976 y es un modelo de datos conceptual de alto nivel que se suele utilizar bastante en el diseo de bases de datos. Se basa en una percepcin del mundo real que consiste en un conjunto de objetos bsicos denominados entidades y relaciones, y se desarroll para facilitar el diseo de bases de datos. El modelo E-R crea un modelo de la realidad que se corresponde con la parcela de la realidad que queremos modelar, y lo hace de forma que es independiente de la implementacin posterior, ofreciendo un alto nivel de abstraccin, y siendo una herramienta grfica fcil de comprender. El resultado del modelado E-R es un diagrama E-R que representa una estructura lgica general de la base de datos. SEAT diagrama se puede representar utilizando dos notaciones diferentes: la notacin de Chen o la notacin pata de Gallo. Entidades Una entidad es un objeto que existe y que se puede distinguir de otros objetos, es decir, una "cosa" del mundo real con existencia independiente. (Por ejemplo, Juan Lpez, con DNI 37465748 es una identidad, ya que identifica de forma nica a una persona en la realidad que vayamos a modelar).

Las entidades pueden ser concretas (como una persona o un libro), o pueden ser abstractas (como un da festivo) o un concepto (un puesto de trabajo o un curso universitario). En el modelo entidad-relacin, una entidad se refiere realmente a un conjunto de entidades y no a la ocurrencia de una nica entidad. En otras palabras, la palabra entidad en el modelo entidad-relacin se corresponde en el modelo relacional a una tabla y no a una fila. En modelo entidad-relacin para referirse a una tabla utiliza el trmino instancia de entidad u ocurrencia de entidad. Por ejemplo, el conjunto de entidades CLIENTE estara formado por todas las personas que son clientes de un banco. Los conjuntos de entidades no tiene por que ser disjuntos, es decir, una entidad puede pertenecer a ms de un conjunto de entidades (una persona que fuese empleado pertenecera al conjunto de entidades EMPLEADOS - y que a su vez tuviese una cuenta en el banco pertenecera al conjunto de entidades CLIENTES ). El concepto de conjunto de entidades se asemeja a la definicin de tipos de los lenguajes de programacin, mientras que el concepto de entidad se correspondera con las variables. Por tanto, una base de datos incluye una serie de conjuntos de entidades, y cada uno de ellos puede contener un nmero arbitrario de entidades. En las notaciones de Chen y de Pata de Gallo, una entidad est representada por un rectngulo, que contiene el nombre de la entidad. El nombre de la entidad es un sustantivo que se escribe en maysculas y en singular. Atributos y dominios Una entidad est representada por un conjunto de atributos , por tanto, cada entidad tiene una serie de propiedades especficas (atributos) que la describen. (Por ejemplo, nombreCliente , seguridadSocial y ciudadCliente podran ser atributos del conjunto de entidades EMPLEADOS). Para cada atributo hay un conjunto de valores permitidos , al que se denomina dominio . (Por ejemplo el dominio de nombreCliente sera el conjunto de todas las cadenas de texto con una longitud determinada). En la notacin de Chen, los atributos se representan por valos unidos al rectngulo de la entidad por una lnea. Cada valo contiene el nombre del atributo que representa. En la notacin de Pata de Gallo, los atributos se escriben simplemente en la caja del atributo que se encuentra debajo del rectngulo de entidad. Los atributos pueden ser simples o compuestos. Un atributo simple es un atributo que tiene un solo componente, que no se puede dividir en partes ms

pequeas que tengan un significado propio. Un atributo compuesto es un atributo con varios componentes, cada uno con un significado por s mismo. Es recomendable transformar todos los atributos compuestos en un conjunto de atributos simples, para facilitar consultas detalladas. Los atributos tambin pueden clasificarse en monovalentes o polivalentes . Un atributo monovalente es aquel que tiene un solo valor para cada ocurrencia de la entidad o relacin a la que pertenece. Un atributo polivalente es aquel que tiene varios valores para cada ocurrencia de la entidad o relacin a la que pertenece. A estos atributos tambin se les denomina multivaluados . En el modelod e Chen, los atributos multivaluados se muestran mediante una linea doble mientras que el modelo de Pata de Gallo no los identifica de ninguna forma especial. Por ltimo, los atributos pueden ser derivados . Un atributo derivado es aquel que representa un valor que se puede obtener a partir del valor de uno o varios atributos, que no necesariamente deben pertenecer a la misma entidad o relacin.

Relaciones Una relacin es una asociacin entre varias entidades. (Por ejemplo, podemos definir una relacin que asocia al cliente Juan Prez la cuenta numero 254). Cada relacin tiene un nombre que describe su funcin. Por ejemplo, un ESTUDIANTE TOMA una CLASE , un PROFESOR IMPARTE una CLASE , un EMPLEADO TRABAJA PARA un DEPARTAMENTO , un PILOTO PILOTA un AVION , etc.

Las entidades que estn involucradas en una determinada relacin se denominan entidades participantes . Si en una relacin participan dos entidades se trata de una relacin binaria ; si son tres las entidades participantes, la relacin es ternaria ; etc. Todas las relaciones anteriormente sealadas son relaciones binarias. Los nombres de relacin son verbos activos o pasivos y se escriben en maysculas. Ejemplos de ello son PINTA , ESTA ASIGNADO A , CONTROLA , TRABAJA PARA , PRODUCE , etc. En el modelo de Chen se colocan los nombres de relacin dentro de un diamante, que est conectado a los rectngulos de entidad mediante lineas. El modelo de Pata de Gallo, por su parte, simplemente escribe el nombre de la relacin arriba, debajo o junto a la lnea de relacin que conecta a los rectngulos de entidad.

El nmero de entidades participantes en una relacin es lo que se denomina grado de la relacin . El grado de una relacin puede ser:

Uno a uno (1:1). Una entidad de A est relacionada con a lo sumo una entidad de B, y una entidad de B est asociada con a lo sumo una entidad de A. Uno a muchos (1:M). Una entidad de A est asociada con cualquier nmero de entidades de B, pero una entidad de B, slo puede estar relacionada con a lo sumo una entidad de A. Muchos a muchos (M:N). Una entidad de A est relacionada con un nmero cualquiera de entidades de B, y una entidad de B puede estar relacionado con un nmero cualquiera de entidades de A.

En un ejemplo bancario podramos decir que una persona puede tener varias cuentas y que una misma cuenta puede ser de varias personas; por tanto la relacin que hay entre los conjuntos de entidades CUENTAS y CLIENTES es de muchos a muchos. En cambio, si consideramos a los empleados de una sucursal, observamos que en una sucursal trabajan varios empleados, pero que un empleado slo puede trabajar en una sucursal; por tanto entre los conjuntos de entidades SUCURSALES y EMPLEADOS hay una relacin uno a muchos.

El nmero 1 se utiliza para representar el lado 1 de la relacin en el modelo de Chen. El modelo de Pata de Gallo utiliza una raya que cruza la lnea de relacin. La letra M se utiliza para representar el lado muchos de la relacin en el modelo Chen y si se tiene que indicar una relacin muchos a muchos se utilizan las letras M y N. En el modelo Pata de Gallo se utiliza una Pata de Gallo de 3 dedos (de ah su nombre) para indicar el lado muchos de la relacin. Una relacin muchos a muchos en el modelo de Pata de Gallo utiliza la pata de gallo de 3 dedos en ambos lados de la lnea que une las entidades.

Cardinalidad de las relaciones La cardinalidad expresa el nmero mximo y mnimo de ocurrencias de entidad asociadas con una ocurrencia de la entidad relacionada. La cardinalidad se indica con el formato ( min,max ), en la que el primer valor representa el valor mnimo y el segundo representa el valor mximo. Un valor N indica que no hay lmite en el nmero de ocurrencias relacionadas. Las posibles cardinalidades son (0,1), (1,1), (0,N), (1,N) y (M,N). En el modelo de Chen, la cardinalidad se indica colocando la pareja de nmeros adecuados al lado de las entidades, con el formato (x, y). El modelo Pata de Gallo no exhibe un intervalo numrico de valores de cardinalidad en el diagrama entidad-relacin, tan solo se indica la cardinalidad mnima poniendo el smbolo 0 en la lnea de la relacin cuando se quiere representar un cero y el smbolo | cuando quiere representar un uno.

Relaciones recursivas y rol de una entidad en una relacin Una relacin recursiva es una relacin donde la misma entidad participa ms de una vez en la relacin con distintos papeles. El nombre de estos papeles se denomina rol y es importante para determinar la funcin de cada participacin.

Atributos de una relacin Una relacin puede tener atributos similares a los de los conjuntos de entidades (por ejemplo, si estuvisemos en un problema en que los empleados pudiesen trabajar en varias empresas, y en cada una de ellas pudieran desempear un cargo diferente, el atributo correspondiente al cargo sera un atributo de la relacin entre los empleados y las empresas).

Claves Los conjuntos de entidades deben tener un atributo cuyo valor es nico para cada una de las entidades del conjunto. A este tipo de atributos se les denomina atributos clave e identifican de forma nica a cada entidad.

Superclave: Conjunto de atributos que considerados conjuntamente permiten identificar de forma nica a una entidad en el conjunto de

entidades (por ejemplo, un atributo dniEmp permite distinguir a una entidad Empleado de otra. Asimismo, el conjunto de atributos { dniEmp , nombreEmp } tambin permitira distinguir a una entidad EMPLEADO de otra. Por tanto, ambos ejemplos seran dos ejemplos de superclaves). El problema es que las superclaves pueden tener atributos innecesarios, es decir, si K es una superclave, tambin lo es cualquier superconjunto de atributos que incluya a K.

Clave candidata: Una superclave mnima, es decir, una superclave a la que si le quita un atributo deja de ser superclave (por ejemplo, el atributo dniEmp y el conjunto de atributos nombreEmp y telfono podran ser dos ejemplos de claves candidatas). Clave primaria: Clave que elige el diseador de la base de datos.

Tipos de entidades Los tipos de entidad pueden clasificarse en entidades fuertes y entidades dbiles. Son entidades fuertes aquellas cuyas ocurrencias no dependen, para poder existir, de la presencia de ocurrencias de ninguna otra entidad. Son entidades dbiles aquellas cuyas ocurrencias solo pueden aparecer cuando existen ocurrencias de una entidad fuerte de la que dependen. Puede ocurrir que las entidades dbiles no tengan un conjunto de atributos suficiente para crear una clave primaria. Por ejemplo, en el caso de un banco, podramos hablar del conjunto de entidades TRANSACCION como un conjunto de entidades con tres atributos: numeroTrans , Fecha e Importe . Aunque cada transaccin es diferente, las transacciones de cuentas diferentes pueden tener el mismo nmero de transaccin. En este ejemplo, el conjunto de entidades TRANSACCIONES depende de la existencia de la entidad CUENTAS , ya que si se elimina una entidad CUENTA , tambin se eliminarn todas las transacciones relacionadas con dicha cuenta. Al conjunto de atributos que permite identificar a las entidades dbiles relacionadas con una entidad fuerte se le denomina discriminador (por

ejemplo, el discriminador del conjunto de entidades dbil TRANSACCIONES sera numeroTrans ). El atributo o conjunto de atributos que forma el discriminador se representa por un valo con el nombre del atributo subrayado con lnea discontnua. Las entidades dbiles se representan con doble lnea. Por ltimo, las relaciones entre una entidad fuerte y una entidad dbil se representan con un rombo con doble lnea.

Entidades tipo y subtipo Cuando se modela la realidad es posible que sea necesario descomponer un tipo de entidad en varios subtipos. Por ejemplo, si en una empresa de desarrollo web hay empleados (entidad EMPLEADO ) unos pueden ser programadores (entidad PROGRAMADOR ) y otros diseadores grficos (entidad DISEADOR ). Entonces se dice que el tipo de entidad PROGRAMADOR es un subtipo del tipo de entidad EMPLEADO . Con este esquema, todos los atributos de EMPLEADO se aplican a PROGRAMADOR y a DISEADOR ; sin embargo, no sucede lo contrario, es decir, los atributos propios de PROGRAMADOR no se aplican a EMPLEADO (supngase que de los programadores interesa conocer su lenguaje de programacin favorito; este atributo solo es aplicable a aquellos empleados programadores, y no a los empleados en general). De manera similar, los programadores participan automticamente en todas las relaciones en las que participan los empleados pero lo contrario no se cumple (por ejemplo, los programadores podran tener relacin con asociaciones de programadores en las que no participaran los empleados en general). Este tipo de jerarquas se representan utilizando un tringulo invertido con la base paralela al rectngulo que representa el tipo general y conectado a los subtipos tal y como se indica a continuacin. Que una ocurrencia del tipo general pertenezca a un subtipo vendr determinado por el cumplimiento del alguna condicin (por ejemplo, si los empleados tienen un cdigo de identificacin, el de los programadores puede empezar por P y el de los diseadores por D). En muchas ocasiones est condicin no est clara, por lo que se utiliza un atributo extra para recoger y hacer clara la diferencia. Este atributo tambin recibe el

nombre de discriminante y se representa asociado al icono que simboliza la relacin.

Podemos considerar los siguientes casos:

Con o sin solapamiento : si una entidad del tipo general puede pertenecer a ms de una entidad subtipo diremos que hay solapamiento. A las relaciones sin solapamiento se las denomina exclusivas y se representan con una lnea curva que atraviesa los arcos hacia las entidades subtipo tal y como aparece en la figura. Si hay solapamiento, se omite la lnea curva. Total o parcial : cuando una ocurrencia de la entidad del tipo general este obligatoriamente relacionada con una ocurrencia de las entidades del subtipo se habla de que esta especializacin es total. Habr especializacin parcial cuando se de el caso de que puedan existir entidades del tipo general sin relacionarse con ninguna entidad de los subtipos. En el primer caso se representa con el crculo que esta encima del tringulo y en el segundo sin l.

Pasos a seguir para la obtencin del modelo entidad-relacin Las etapas que habr que realizar para conseguir el modelo completo sern las siguientes: Identificar las entidades En primer lugar hay que definir los principales objetos que interesan al cliente. Estos objetos sern las entidades. Una forma de identificar las entidades es examinar las especificaciones de requisitos del cliente. En estas especificaciones se buscan los nombres que se mencionan (por ejemplo: nmero de empleado, nombre de empleado, nmero de inmueble, direccin del inmueble, alquiler, nmero de habitaciones). Tambin se buscan objetos importantes como personas, lugares o conceptos de inters, excluyendo aquellos nombres que slo son propiedades de otros objetos. Por ejemplo, se puede agrupar el nmero de empleado y el nombre de empleado en una entidad denominada empleado, y agrupar nmero de inmueble, direccin del inmueble, alquiler y nmero de habitaciones en otra entidad denominada inmueble.

Otra forma de identificar las entidades es buscar aquellos objetos que existen por s mismos. Por ejemplo, EMPLEADO es una entidad porque los empleados existen, sepamos o no sus nombres, direcciones y telfonos. Siempre que sea posible, el cliente debe colaborar en la identificacin de las entidades. A veces, es difcil identificar las entidades por la forma en que aparecen en las especificaciones de requisitos. Los clientes, a veces, hablan utilizando ejemplos o analogas. En lugar de hablar de empleados en general, hablan de personas concretas, o bien, hablan de los puestos que ocupan esas personas. No siempre es obvio saber si un objeto es una entidad, una relacin o un atributo. Por ejemplo cmo se podra clasificar matrimonio? Pues de cualquiera de las tres formas. El anlisis es subjetivo, por lo que distintos diseadores pueden hacer distintas interpretaciones, aunque todas igualmente vlidas. Todo depende de la opinin y la experiencia de cada uno. Los diseadores de bases de datos deben tener una visin selectiva y clasificar las cosas que observan dentro del contexto de la empresa u organizacin cliente. Conforme se van identificando las entidades, se les dan nombres que tengan un significado y que sean obvias para el usuario. Los nombres de las entidades y sus descripciones se anotan en el diccionario de datos . Cuando sea posible, se debe anotar tambin el nmero aproximado de ocurrencias de cada entidad que se vayan a presentar en esa organizacin o empresa. Identificar las relaciones Una vez definidas las entidades, se deben definir las relaciones existentes entre ellas. Del mismo modo que para identificar las entidades se buscaban nombres en las especificaciones de requisitos, para identificar las relaciones se suelen buscar las expresiones verbales (por ejemplo: oficina tiene empleados, empleado gestiona inmueble, cliente visita inmueble). Si las especificaciones de requisitos reflejan estas relaciones es porque son importantes para la empresa y, por lo tanto, se deben reflejar en el esquema conceptual. Pero slo interesan las relaciones que son necesarias. En el ejemplo anterior, se han identificado las relaciones empleado gestiona inmueble y cliente visita inmueble. Se podra pensar en incluir una relacin entre empleado y cliente: empleado atiende a cliente, pero observando las especificaciones de requisitos no parece que haya inters en modelar tal relacin. La mayora de las relaciones son binarias (entre dos entidades), pero no hay que olvidar que tambin puede haber relaciones en las que participen ms de dos entidades, as como relaciones recursivas. Es muy importante repasar las especificaciones para comprobar que todas las relaciones, explcitas o implcitas, se han encontrado. Si se tienen pocas entidades, se puede comprobar por parejas si hay alguna relacin entre ellas.

Una vez identificadas todas las relaciones, hay que determinar el tipo de la relacin (uno a muchos, uno a uno, muchos a muchos) y la cardinalidad mnima y mxima con la que participa cada entidad en cada una de ellas. De este modo, el esquema representa de un modo ms explcito la realidad. La cardinalidad es un tipo de restriccin que se utiliza para comprobar y mantener la calidad de los datos. Estas restricciones son aserciones sobre las entidades que se pueden aplicar cuando se actualiza la base de datos para determinar si las actualizaciones violan o no las reglas establecidas sobre la semntica de los datos. Conforme se van identificando las relaciones, se les van asignando nombres que tengan significado para el usuario. En el diccionario de datos se anotan los nombres de las relaciones, su descripcin y las cardinalidades con las que participan las entidades en ellas Identificar los atributos y asociarlos a entidades y relaciones Al igual que con las entidades, se buscan nombres en las especificaciones de requisitos. Son atributos los nombres que identifican propiedades, cualidades, identificadores o caractersticas de entidades o relaciones. Lo ms sencillo es preguntarse, para cada entidad y cada relacin, qu informacin se quiere saber de dicha entidad o de dicha relacin? La respuesta a esta pregunta se debe encontrar en las especificaciones de requisitos. Pero, en ocasiones, ser necesario preguntar al cliente para que aclaren los requisitos. Al identificar los atributos, hay que tener en cuenta si son simples o compuestos. Por ejemplo, el atributo direccin puede ser simple, teniendo la direccin completa como un solo valor: `San Rafael 45, Almazora'; o puede ser un atributo compuesto, formado por la calle (`San Rafael'), el nmero (`45') y la poblacin (`Almazora'). El escoger entre atributo simple o compuesto depende de los requisitos del usuario. Si el usuario no necesita acceder a cada uno de los componentes de la direccin por separado, se puede representar como un atributo simple. Pero si el usuario quiere acceder a los componentes de forma individual, entonces se deben representar como varios atributos. Tambin se deben identificar los atributos derivados o calculados, que son aquellos cuyo valor se puede calcular a partir de los valores de otros atributos. Por ejemplo, el nmero de empleados de cada oficina, la edad de los empleados o el nmero de inmuebles que gestiona cada empleado. Es muy til elaborar una lista de atributos e ir eliminndolos de la lista conforme se vayan asociando a una entidad o relacin. De este modo, uno se puede asegurar de que cada atributo se asocia a una sola entidad o relacin, y que cuando la lista se ha acabado, se han asociado todos los atributos.

Hay que tener mucho cuidado cuando parece que un mismo atributo se debe asociar a varias entidades. Esto puede ser por una de las siguientes causas:

Se han identificado varias entidades, como director, supervisor y administrativo, cuando, de hecho, pueden representarse como una sola entidad denominada empleado. En este caso, se puede escoger entre introducir una jerarqua de especializacin, o dejar las entidades que representan cada uno de los puestos de empleado. Se ha identificado una relacin entre entidades. En este caso, se debe asociar el atributo a una sola de las entidades y hay que asegurarse de que la relacin ya se haba identificado previamente. Si no es as, se debe actualizar la documentacin para recoger la nueva relacin.

Conforme se van identificando los atributos, se les asignan nombres que tengan significado para el usuario. De cada atributo se debe anotar la siguiente informacin:

Nombre y descripcin del atributo. Tipo de dato y longitud. Valores por defecto del atributo (si se especifican). Si el atributo siempre va a tener un valor (si admite o no nulos). Si el atributo es derivado y, en su caso, cmo se calcula su valor.

Determinar los dominios de los atributos El dominio de un atributo es el conjunto de valores que puede tomar el atributo. Por ejemplo el dominio de los nmeros de oficina puede ser las tiras de hasta tres caracteres en donde el primero es una letra y el siguiente o los dos siguientes son dgitos en el rango de 1 a 99; el dominio de los nmeros de telfono y los nmeros de fax son las tiras de 9 dgitos. Un esquema conceptual est completo si incluye los dominios de cada atributo: los valores permitidos para cada atributo, su tamao y su formato. Toda la informacin sobre los dominios se debe anotar tambin en el diccionario de datos. Determinar las claves primarias Cada entidad tiene al menos una clave primaria (excepto las entidades dbiles, que tienen un discriminador). En este paso, se trata de encontrar todas las posibles claves primarias de cada una de las entidades. Las claves primarias pueden ser simples (un solo atributo) o compuestas (varios atributos). De cada entidad se escoger uno de ellas como clave primaria. Para ello se debe:

Escoger la clave candidata que tenga menos atributos. Escoger la clave candidata cuyos valores no tengan probabilidad de cambiar en el futuro.

Escoger la clave candidata cuyos valores no tengan probabilidad de perder la unicidad en el futuro. Escoger la clave candidata con el mnimo nmero de caracteres (si es de tipo texto).

Cuando se determinan las claves primarias es fcil darse cuenta de si una entidad es fuerte o dbil. Si una entidad tiene al menos una clave primaria es siempre una entidad fuerte. Si una entidad no tiene atributos que le sirvan de clave primaria probablemente ser dbil. Tambin puede suceder que una entidad, aun siendo fuerte, no tenga una clave primaria a partir de los atributos obtenidos de los requerimientos del cliente. En ese caso debemos comprobar nuevamente si realmente no es una entidad dbil (existe alguna otra entidad en el diagrama relacionada con ella cuya clave primaria aadida al discriminador nos ayudara a identificar unvocamente las ocurrencias de la entidad que estamos considerando?) y en caso de que realmente se trate de una entidad fuerte, deberemos aadirle un atributo para que haga la funcin de clave primaria. Determinar las jerarquas de generalizacin En este paso hay que observar las entidades que se han identificado hasta el momento. Hay que ver si es necesario reflejar las diferencias entre distintas ocurrencias de una entidad, con lo que surgirn nuevas subentidades de esta entidad genrica; o bien, si hay entidades que tienen caractersticas en comn y que realmente son subentidades de una nueva entidad genrica. En cada jerarqua hay que determinar si es total o parcial y exclusiva o superpuesta. Dibujar el diagrama entidad-relacin Una vez identificados todos los conceptos, se puede dibujar el diagrama entidadrelacin correspondiente. Se obtiene as el esquema conceptual. Revisar el esquema conceptual con el cliente Antes de dar por finalizada la fase del diseo conceptual, se debe revisar el esquema conceptual con el cliente. Este esquema est formado por el diagrama entidad-relacin y toda la documentacin que describe el esquema. Si se encuentra alguna anomala, hay que corregirla haciendo los cambios oportunos, por lo que posiblemente haya que repetir alguno de los pasos anteriores. Este proceso debe repetirse hasta que se est seguro de que el esquema conceptual es una fiel representacin de la parte de la empresa que se est tratando de modelar.

Diccionario de datos conceptual


Modelo de formato

A continuacin se presenta un modelo para rellenar el diccionario de datos que produce la fase de modelado conceptual. Se trata de una tabla (generalmente se presenta en formato apaisado debido a su tamao) que relaciona todos los atributos encontrados en el diagrama Entidad-Relacin. El diccionario de datos conceptual consta de los siguientes campos:

Entidad o relacin: donde indicamos el nombre de la entidad o relacin que estamos considerando en ese momento. Es importante seguir unas normas para dar nombres a entidades o relaciones. En general, debern escribirse siempre en maysculas, con las palabras internas separadas por el signo de subrayado ("_"). Nombre atributo: donde indicamos el nombre dado al atributo que estamos describiendo. Es importante seguir unas normas para dar dichos nombres a los atributos. Aunque en principio cualquier convencin para nombrar los atributos sera correcta, vamos a seguir la siguiente convencin: los nombre de los atributos deben estar constituidos por palabras (cuando un nombre conste de varias palabras, se escribirn una tras otra) con la primera letra de la primera palabra en minscula y la primera letra de las palabras internas en mayscula. Los nombres de atributos deben ser cortos y significativos. La eleccin de un nombre de atributo debe ser mnemotcnico, es decir, pensado para que un lector casual al verla comprenda su uso. Clave: si el atributo forma parte de la clave primaria de la entidad, lo indicamos en este campo con el smbolo "PK" (primary key). Si el atributo es un discriminador lo indicamos escribiendo "DSC". Descripcin del atributo: donde inclumos una breve descripcin del atributo si el nombre elegido para dicho atributo no es lo suficientemente autoexplicativo. Tipo de dato y longitud: en este apartado indicamos si se trata de un atributo de tipo CARACTER (valores posibles seran "Y", "N", etc.), TEXTO (valores posible seran "Maria", "Juan", etc.), NMERO (valores posible seran "13", "210234", etc), DECIMAL (valores posibles seran "3,1416", "0,983634", etc.), FECHA (valores posibles seran "10-12-2003", "10-12-2003-23:02:00", etc.), etc. Para aquellos tipos en los que tenga sentido, incluimos la longitud mxima esperada para dicho atributo. Dominio: en esta columna indicamos una descripcin del dominio del atributo que estemos considerando. Un dominio es el conjunto de valores que puede tomar un atributo. Por ejemplo el dominio de los nmeros de oficina puede ser las tiras de hasta tres caracteres en donde el primero es una letra y el siguiente o los dos siguientes son dgitos en el rango de 1 a 99; el dominio de los nmeros de telfono y los nmeros de fax son las tiras de 9 dgitos. nico: en este campo se indica si el valor del atributo es nico para dicha entidad (es decir, un atributo ser nico si cada uno de los ejemplares de esa entidad tienen en ese atributo un valor diferente) o si no lo es. Si un atributo es clave primaria de una entidad entonces este siempre es nico. Esto no significa, por otra parte, que no existan otros atributos nicos aparte de la clave primaria. Admite nulos: en esta columna se indica si para algn ejemplar de la entidad o relacin que estamos considerando el valor del atributo puede ser desconocido o no aplicable. Por ejemplo, si una entidad "CHICO" tiene un atributo "dniNovia" este

atributo evidentemente admite que su valor sea nulo, mientras que el atributo "dni" de la misma entidad no lo admite.

Tipo de atributo: aqu se indica si el atributo es compuesto, multivaluado o derivado. Ejemplo: en este apartado se incluye un ejemplo de una valor que pueda tomar el atributo, ya que, a veces, es la mejor manera de entender el significado de dicho atributo.

Diseo lgico de la base de datos (1) Preparacin de los diagramas E-R El objetivo del diseo lgico es convertir los esquemas conceptuales obtenidos en un esquema lgico que se ajuste al modelo de SGBD sobre el que se vaya a implementar el sistema . El objetivo del diseo lgico es obtener una representacin que use, del modo ms eficiente posible los recursos que el modelo de SGBD elegido posee para estructurar los datos y para modelar las restricciones . Como hemos visto, los modelos de bases de datos que los SGBD pueden utilizar son el modelo relacional, el modelo de red, el modelo jerrquico y el modelo orientado a objetos. En este primer apartado veremos como preparar los diagramas E-R. Vamos a describir brevemente unas reglas preliminares que nos permitirn preparar los modelos conceptuales basados en el modelo Entidad-Relacin para poder traducirlos posteriormente a modelos lgicos basados en el modelo relacional. El seguimiento de estas reglas facilitar y garantizar la fiabilidad del proceso de transformacin. Transformacin de atributos compuestos Los atributos compuestos de una entidad han de ser descompuestos en los atributos simples por los que estn formados. De esta forma, un atributo denominado nombreCompleto habra que descomponerlo en sus atributos simples, es decir, nombre , apellido1 y apellido2 . Transformacin de atributos multivaluados Si nuestro diagrama incluye la existencia de un atributo multivaluado, este se ha de convertir en una entidad relacionada con la entidad de la que procede. Para esta nueva entidad se elegir un nombre adecuado y tendr un nico atributo (el correspondiente al antiguo atributo mltiple). Este atributo es posible que funcione correctamente como clave primaria de la entidad pero a veces es posible que no. En este caso, la entidad que hemos creado es posible que sea dbil. Deberemos ajustar en cualquier caso correctamente las claves primarias o los discriminadores tal y como se ha visto anteriormente.

Diseo lgico de la base de datos (2)


Paso del diagrama E-R al modelo relacional
El objetivo del diseo lgico es convertir los esquemas conceptuales obtenidos en un esquema lgico que se ajuste al modelo de SGBD sobre el que se vaya a implementar el sistema . El objetivo del diseo lgico es obtener una representacin que use, del modo ms eficiente posible los recursos que el modelo de SGBD elegido posee para estructurar los datos y para modelar las restricciones . Como hemos visto, los modelos de bases de datos que los SGBD pueden utilizar son el modelo relacional, el modelo de red, el modelo jerrquico y el modelo orientado a objetos. En este segundo apartado veremos como transformar los diagramas E-R al modelo relacional.. Una vez que se hayan realizado, si fuera necesario, las dos adaptaciones anteriores del diagrama Entidad-Relacin pasaremos a traducir las entidades y las relaciones en tablas que, como sabemos, es el nico objeto que manejan los SGBD relacionales. Cada tabla de la base de datos tendr un nombre, y el nombre de sus atributos aparecer, a continuacin, entre parntesis. El atributo o atributos que forman la clave primaria se subrayarn. Las claves ajenas se especifican aparte indicando la tabla a la que hacen referencia con la notacin tabla1(a1) -> tabla2(a2).

Traducir entidades
Se crea una tabla para cada entidad que debe incluir tantas columnas como atributos tenga la entidad. Evidentemente, el nombre la tabla ser el nombre de la entidad y los nombres de estas columnas sern los atributos de la entidad.

Traducir entidades dbiles


Se crea una tabla para cada entidad dbil que incluir todos sus atributos. Adems, los atributos que son clave primaria de la entidad fuerte con la que se relaciona tambin se incluyen en la nueva tabla creada para la entidad dbil. Estos atributos harn el papel de claves ajenas referenciado a la entidad fuerte. A continuacin, se determina la clave primaria de la tabla creada.

Traducir relaciones uno a uno


Lo primero es revisar las relaciones uno a uno ya que es posible que se hayan identificado dos entidades que representen el mismo objeto. Si as fuera, ambas entidades deben integrarse en una sola. Una vez hecho este paso, para cada relacin uno a uno aadiremos los atributos que forman la clave primaria de la entidad padre en la tabla que representa a la entidad hijo (estos atributos actuarn como clave ajena). La entidad hijo es la entidad que participa de forma total (su cardinalidad mnima es 1)) en la relacin, mientras que la entidad padre es la entidad que participa de forma parcial (su cardinalidad mnima es 0). Si las dos entidades participan de forma total o las dos participan de forma parcial en la relacin, la eleccin de padre e hijo es arbitraria.

Si la relacin uno a uno tiene atributos, estos tambin se incluyen en la tabla que representa la entidad hijo .

Traducir relaciones uno a muchos


Como en las relaciones uno a uno, se incluyen los atributos de la clave primaria de la entidad padre en la tabla que representa a la entidad hijo (estos atributos actuarn como clave ajena). Pero ahora, la entidad padre es la de la parte del uno" mientras que la entidad hijo es la de la parte del muchos". Si la relacin tiene atributos estos migran junto con la clave primaria a la tabla de la entidad hijo.

Traducir relaciones muchos a muchos


Se crea una tabla adicional para representar esta relacin. El nombre de la tabla ser el nombre de la relacin y tendr tantas columnas como atributos tenga la relacin. Una vez creada esta tabla se le aadirn tantas columnas como atributos forman la clave primaria de las dos entidades con las que se relaciona la relacin muchos a muchos (estos atributos sern claves ajenas). La clave primaria de esta tabla estar formada entonces por todos estos atributos aadidos.

Traducir relaciones que involucren a ms de dos entidades


Se crea una tabla adicional para la relacin como en el caso anterior. La clave primaria de la tabla ser la unin de las claves primarias de todas las entidades que participan en la relacin, siempre que lo hagan con una cardinalidad mxima M. Si alguna entidad participa en la relacin con cardinalidad mxima 1, su clave primaria no forma parte de la clave primaria de la tabla creada.

Traducir tipos y subtipos


En las jerarquas de tipos y subtipos, se denomina entidad padre a la entidad genrica y entidades hijo a las entidades subtipo. Hay tres opciones distintas para representar estas jerarquas. La eleccin de la ms adecuada se har en funcin de su tipo (total/parcial, con solapamiento/exclusiva).

Crear una tabla por cada entidad . Las tablas de las entidades hijo aaden como clave primaria la de la entidad padre. Por lo tanto, las claves primarias de las tablas que representan a las entidades hijo son tambin clave ajena haciendo referencia al padre. Esta opcin sirve para cualquier tipo de jerarqua, total o parcial y exclusiva o superpuesta. Crear nicamente una tabla para cada entidad hijo , heredando los atributos de la entidad padre. Esta opcin slo sirve para jerarquas totales y exclusivas. Integrar todas las entidades en una tabla, incluyendo en ella los atributos de la entidad padre, los atributos de todos los hijos y un atributo discriminador para indicar el caso al cual pertenece la entidad en consideracin. Esta opcin sirve para cualquier tipo de jerarqua.

Diseo lgico de la base de datos (3)


Normalizacin
El objetivo del diseo lgico es convertir los esquemas conceptuales obtenidos en un esquema lgico que se ajuste al modelo de SGBD sobre el que se vaya a implementar el sistema . El objetivo del diseo lgico es obtener una representacin que use, del modo ms eficiente posible los recursos que el modelo de SGBD elegido posee para estructurar los datos y para modelar las restricciones . Como hemos visto, los modelos de bases de datos que los SGBD pueden utilizar son el modelo relacional, el modelo de red, el modelo jerrquico y el modelo orientado a objetos. En este tercer apartado veremos las nociones bsicas de la teora de normalizacin. La normalizacin es una tcnica para disear la estructura lgica de los datos que se representan utilizando el modelo relacional que desarrollada por Codd en 1972. Generalmente no se utiliza como una tcnica para disear la base de datos, sino como una etapa posterior a la traduccin del esquema conceptual al esquema lgico, que elimine las dependencias entre atributos no deseadas. Las ventajas de la normalizacin son las siguientes:

Evita anomalas en inserciones, modificaciones y borrados. Mejora la independencia de datos.

Uno de los conceptos fundamentales en la normalizacin es el de dependencia funcional . Una dependencia funcional es una relacin entre atributos de una misma tabla. Si x e y son atributos de la tabla R , se dice que y es funcionalmente dependiente de x (se denota por x -> y ) si cada valor de x tiene asociado un solo valor de y (donde x e y pueden constar de uno o varios atributos). A x se le denomina determinante, ya que x determina el valor de y . Se dice que el atributo y es completamente dependiente de x si depende funcionalmente de x y no depende de ningn subconjunto de x . La dependencia funcional es una nocin semntica . Si hay o no dependencias funcionales entre atributos no lo determina una serie abstracta de reglas, sino, ms bien, los modelos mentales del usuario y las reglas de negocio de la organizacin o empresa para la que se desarrolla el sistema de informacin. En el proceso de normalizacin se debe ir comprobando que cada tabla cumple una serie de reglas que se basan en la clave primaria y las dependencias funcionales. Cada regla que se cumple aumenta el grado de normalizacin. La normalizacin se lleva a cabo en una serie pasos. Cada paso corresponde a una forma normal que tiene unas propiedades. Conforme se va avanzando en la normalizacin, las relaciones tienen un formato ms estricto (ms fuerte) y, por lo tanto, son menos vulnerables a las anomalas de actualizacin. El modelo relacional slo requiere un conjunto de relaciones en primera forma normal. Las restantes formas normales son opcionales. Sin embargo, para evitar las anomalas de actualizacin, es recomendable llegar al menos a la tercera forma normal.

Primera forma normal (1FN)


Una tabla est en primera forma normal si, y slo si, todos los atributos de la misma contienen valores atmicos, es decir, no hay grupos repetitivos . Si se ve la tabla

grficamente, estar en 1FN si tiene un solo valor en la interseccin de cada fila con cada columna. Si una tabla no est en 1FN, hay que eliminar de ella los grupos repetitivos. Un grupo repetitivo ser el atributo o grupo de atributos que tiene mltiples valores para cada tupla de la relacin. La forma de eliminar los grupos repetitivos consiste en poner cada uno de ellos en una tabla aparte, heredando la clave primaria de la tabla en la que se encontraban. Un conjunto de tablas se encuentra en 1FN si ninguna de ellas tiene grupos repetitivos.

Segunda forma normal (2FN)


Una tabla est en segunda forma normal si, y slo si, est en 1FN y, adems, cada atributo que no est en la clave primaria es completamente dependiente de la clave primaria . La 2FN se aplica a las tablas que tienen claves primarias compuestas por dos o ms atributos. Si una relacin est en 1FN y su clave primaria es simple (tiene un solo atributo), entonces tambin est en 2FN. Las relaciones que no estn en 2FN pueden sufrir anomalas cuando se realizan actualizaciones. Para pasar una relacin en 1FN a 2FN hay que eliminar las dependencias parciales de la clave primaria. Para ello, se eliminan de la tabla los atributos que son funcionalmente dependientes y se ponen en una nueva relacin con una copia de los atributos de la clave primaria de los que dependen.

Tercera forma normal (3FN)


Una relacin est en tercera forma normal si, y slo si, est en 2FN y, adems, cada atributo que no est en la clave primaria no depende transitivamente de la clave primaria . La dependencia x -> z es transitiva si existen las dependencias x -> y , y -> z , siendo x , y , z atributos o conjuntos de atributos de una misma relacin. Aunque las relaciones en 2FN tienen menos redundancias que las relaciones en 1FN, todava pueden sufrir anomalas frente a las actualizaciones. Para pasar una relacin de 2FN a 3FN hay que eliminar las dependencias transitivas. Para ello, se eliminan de la tabla los atributos que dependen transitivamente y se ponen en una nueva relacin con una copia de el atributo o atributos no clave de los que dependen.

Forma normal de Boyce-Codd


Una relacin est en la forma normal de Boyce-Codd si, y slo si, todo determinante es una clave candidata . La 2FN y la 3FN eliminan las dependencias parciales y las dependencias transitivas de la clave primaria. Pero este tipo de dependencias todava pueden existir sobre otras claves candidatas, si stas existen. La BCFN es ms fuerte que la 3FN, por lo tanto, toda relacin en BCFN est en 3FN. La violacin de la BCFN es poco frecuente ya que se da bajo ciertas condiciones que raramente se presentan.

Diseo lgico de la base de datos (4)

Pasos finales
El objetivo del diseo lgico es convertir los esquemas conceptuales obtenidos en un esquema lgico que se ajuste al modelo de SGBD sobre el que se vaya a implementar el sistema . El objetivo del diseo lgico es obtener una representacin que use, del modo ms eficiente posible los recursos que el modelo de SGBD elegido posee para estructurar los datos y para modelar las restricciones . Como hemos visto, los modelos de bases de datos que los SGBD pueden utilizar son el modelo relacional, el modelo de red, el modelo jerrquico y el modelo orientado a objetos. En este cuarto apartado los pasos finales del diseo lgico.

Definir las restricciones de integridad


Las restricciones de integridad son reglas que se quieren imponer para proteger la base de datos, de modo que no pueda llegar a un estado inconsistente. Hay cinco tipos de restricciones de integridad que debemos estudiar para nuestra base de datos:

Datos requeridos . Algunos atributos deben contener valores en todo momento, es decir, no admiten nulos. Debemos meditar si en nuestra base de datos existen atributos de este tipo. Restricciones de dominios . Todos los atributos tienen un dominio asociado, que es el conjunto los valores que cada atributo puede tomar, por lo que debemos definir estos dominios para cada atributo. Integridad de entidades . El identificador de una entidad no puede ser nulo, por lo tanto, las claves primarias de las relaciones (tablas) no admiten nulos. Integridad referencial . Una clave ajena enlaza cada tupla de la relacin hijo con la tupla de la relacin padre que tiene el mismo valor en su clave primaria. La integridad referencial dice que si una clave ajena tiene un valor (si es no nula), ese valor debe ser uno de los valores de la clave primaria a la que referencia. Hay tres aspectos que se deben estudiar y contemplar sobre las claves ajenas de nuestra base de datos:
o

Admite nulos la clave ajena? Cada clave ajena expresa una relacin entre entidades. Si la participacin de la entidad hijo en la relacin es total, entonces la clave ajena no admite nulos; si es parcial, la clave ajena debe aceptar nulos. Qu hacer cuando se quiere borrar una tupla que est siendo referenciada por otra tupla a travs de una clave ajena? Hay varias respuestas posibles: restringir, propagar, y anular. Qu hacer cuando se quiere modificar la clave primaria de una tupla que est siendo referenciada por otra tupla a travs de una clave ajena? Las respuestas posibles son las mismas que en el caso anterior.

Reglas de negocio . Cualquier operacin que se realice sobre los datos debe cumplir las restricciones que impone el funcionamiento de la empresa (por ejemplo, la empresa no puede tener ms de 10 empleados).

Todas las restricciones de integridad establecidas en este paso se deben reflejar en el diccionario de datos para que puedan ser tenidas en cuenta durante la fase del diseo fsico.

Validar el esquema lgico frente a las transacciones de usuario


El objetivo de este paso es validar el esquema lgico para garantizar que puede soportar las transacciones requeridas por los correspondientes usuarios . Estas transacciones se encontrarn en las especificaciones de requisitos de usuario. Lo que se debe hacer es tratar de realizar las transacciones de forma manual utilizando el diagrama entidad-relacin, el diccionario de datos y las conexiones que establecen las claves ajenas de las tablas. Si todas las transacciones se pueden realizar, el esquema queda validado. Pero si alguna transaccin no se puede realizar, seguramente ser porque alguna entidad, relacin o atributo no se ha incluido en el esquema y deberemos volver sobre nuestros pasos.

Estudiar el crecimiento futuro


En este paso, se trata de comprobar que el esquema obtenido puede acomodar los futuros cambios en los requisitos con un impacto mnimo. Si el esquema lgico se puede extender fcilmente, cualquiera de los cambios previstos se podr incorporar al mismo con un efecto mnimo sobre los usuarios existentes.

Diccionario de datos lgico


Modelo de formato
A continuacin se presenta un modelo para completar el diccionario de datos que produce la fase de modelado lgico, posterior a la fase del modelado conceptual. Se trata de una tabla (generalmente se presenta en formato apaisado, debido a su tamao) que relaciona todos y cada uno de los atributos de las distintas tablas derivadas del diagrama Entidad-Relacin. Para su elaboracin nos basamos en el diccionario de datos conceptual definido previamente. Dicha tabla consta de los siguientes campos:

Nombre de tabla: donde indicamos el nombre de la tabla que estamos considerando en ese momento. Seguiremos las mismas normas de nomenclatura referidas a las entidades o relaciones en el diccionario de datos conceptual. Nombre atributo : donde indicamos el nombre dado al atributo o columna que estamos describiendo. En este caso tambin se aconseja encarecidamente mantener las convenciones relacionadas con los atributos en el apartado referido al diccionario de datos conceptual. Clave: si el atributo forma parte de la clave primaria de la entidad, lo indicamos en este campo con el smbolo "PK" (primary key). Si el atributo forma parte de una clave ajena, lo indicamos con el smbolo "FK" (foreign key). Referida a: en el caso de que el atributo sea o forme parte de una clave ajena indicamos aqu la tabla a la que hace referencia. Si actualizacin: en el caso de que el atributo considerado sea clave ajena, aqu indicamos la accin referencial aplicable si se actualiza una fila de la tabla referenciada. Como sabemos, estas acciones referenciales son "propagar", "anular" o "restringir".

Si borrado: en el caso de que el atributo considerado sea clave ajena, aqu indicamos la accin referencial aplicable si se elimina una fila de la tabla referenciada. Como sabemos, estas acciones referenciales son "propagar", "anular" o "restringir". Descripcin del atributo: donde inclumos una breve descripcin del atributo si el nombre elegido para dicho atributo no es lo suficientemente autoexplicativo. Tipo de dato y longitud: en este apartado indicamos si se trata de un atributo de tipo CARACTER (valores posibles seran "Y", "N", etc.), TEXTO (valores posible seran "Maria", "Juan", etc.), NMERO (valores posible seran "13", "210234", etc), DECIMAL (valores posibles seran "3,1416", "0,983634", etc.), FECHA (valores posibles seran "10-12-2003", "10-12-2003-23:02:00", etc.), BOOLEANO (valores posibles serian SI o NO), etc. Para aquellos tipos en los que tenga sentido, incluimos la longitud mxima esperada para dicho atributo. Dominio: en esta columna indicamos una descripcin del dominio del atributo que estemos considerando. Un dominio es el conjunto de valores que puede tomar un atributo. Por ejemplo el dominio de los nmeros de oficina puede ser las tiras de hasta tres caracteres en donde el primero es una letra y el siguiente o los dos siguientes son dgitos en el rango de 1 a 99; el dominio de los nmeros de telfono y los nmeros de fax son las tiras de 9 dgitos. Admite nulos: en este apartado se indica si alguna fila de la tabla que estamos considerando puede tener estye atributo con valor NULL. Valor por defecto: en este apartado indicamos el posible valor por defecto que ha de tomar el atributo si al insertar una fila en la tabla que lo contiene omitimos el valor para dicho atributo. Este mecanismo tiene sentido en casos particulares, como cuando insertamos en la tabla "EQUIPO" los nombres de los equipos de primera divisin al comienzo de la temporada y no especificamos el valor del atributo "Partidos jugados" ya que, evidentemente, ha de ser 0. nico: en este campo se indica si el valor del atributo es nico para toda la tabla (es decir, un atributo ser nico si cada una de las filas de la tabla considerada tienen en esa columna un valor diferente) o si no lo es. Si un atributo es clave primaria de una entidad entonces este siempre es nico. Esto no significa, por otra parte, que no existan otros atributos nicos aparte de la clave primaria. Ejemplo: en este apartado se incluye un ejemplo de una valor que pueda tomar el atributo, ya que, a veces, es la mejor manera de entender el significado de dicho atributo.

Diseo fsico de la base de datos ltimo paso en el diseo de una base de datos En esta seccin se resumen los aspectos ms importantes referidos a la ltima etapa del diseo de bases de datos. En la ltima etapa del diseo de bases de datos, la etapa del diseo fsico, se parte del esquema lgico obtenido durante el diseo lgico y se obtiene una descripcin de la base de datos almacenada en memoria secundaria. Esta

descripcin es completamente dependiente del SGBD especfico que se vaya a utilizar. Por esta razn, es necesario que el diseador conozca en profundidad toda la funcionalidad que el SGBD elegido le puede ofrecer y todas aquellas caractersticas no presentes en el sistema utilizado. Dado que la seguridad de la base de datos es fundamental, por lo que el siguiente paso una vez construida la base de datos consiste en disear las medidas de seguridad necesarias mediante la creacin de vistas y el establecimiento de permisos para los usuarios. El ltimo paso del diseo fsico consiste en monitorizar y afinar el sistema para obtener las mejores prestaciones y satisfacer los cambios que se puedan producir en los requisitos.

Ejercicio 1
Municipios, viviendas y personas
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Supongamos el siguiente caso sobre municipios, viviendas y personas. Los municipios tienen un nombre (por ejemplo, "Len"), una altura (por ejemplo, "800" metros), y una categoria (por ejemplo, "ciudad", "villa" o "aldea"). Cada persona tiene un nombre (por ejemplo, "Miguel"), unos apellidos (por ejemplo, "Bayn Alonso") y una fecha de nacimiento ("29-11945"). Cada persona vive en una nica vivienda y esta empadronada en un municipio, pero puede ser propietaria de varias viviendas. De las personas nos interesa saber por tanto, adems de sus datos, en que vivienda habitan, en que municipio estn empadronadas y de que viviendas son propietarias; tambin quien es el padre y la madre de cada una de ellas. Por ltimo, de las viviendas nos interesa guardar el municipio donde se encuentra, la direccion (por ejemplo, "C/Gran Via de San Marcos 2, 7B") y el cdigo postal (por ejemplo, "24002"). Hay que tener en cuenta que una vivienda puede tener ms de un propietario. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 2
Campeonato de ajedrez

Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. El club de Ajedrez de Villatortas de Arriba, ha sido encargado por la Federacin Internacional de Ajedrez de la organizacin de los prximos campeonatos mundiales que se celebrarn en la mencionada localidad. Por este motivo, desea llevar a una base de datos toda la gestin relativa a participantes, alojamientos y partidas. Teniendo en cuenta que: En el campeonato participan jugadores de los que se requiere conocer el nmero de asociado, nombre, direccin, telfono de contracto y campeonatos en los que han participado. Adems tambin se precisa almacenar el nivel de juego en una escala de 1 a 10. Los pases envan al campeonato un conjunto de jugadores, aunque no todos los pases envan participantes. Todo jugador es enviado por un nico pas. Un pas puede ser representado por otro pas. Cada pas se identifica por un nmero e interesa conocer adems de su nombre, el nmero de clubes de ajedrez existentes en el mismo. Cada partida se identifica por un nmero, y la juegan dos jugadores. Interesa registrar las partidas que juega cada jugador y el color con el que juega. Los jugadores se alojan en uno de los hoteles en los que se desarrollan las partidas. Se desea conocer en qu hotel y en qu fechas (fecha de entrada y fecha de salida) se ha alojado cada uno de los participantes. De cada hotel, se desea conocer el nombre, la direccin y el nmero de telfono. El campeonato se desarrolla a lo largo de una serie de jornadas (ao, mes, da) y cada partida tiene lugar en una de las jornadas. Cada partida se celebra en una de las salas de las que pueden disponer los hoteles, se desea conocer el nmero de entradas vendidas en la sala para cada partida. De cada sala, se desea conocer la capacidad y el medio del que dispone (radio, televisin, vdeo) para facilitar la retransmisin de los encuentros. Decada partida se pretende registrar todos los movimientos que la componen, la identificacin de movimiento se establece en base a un nmero de orden dentro de cada partida, para cada movimiento se guarda la jugada en n otacion algebrica (por ejemplo "g8=D") y un breve comentario realizado por un experto. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 3

Empleados y departamentos
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Realizar el diseo conceptual (diagrama Entidad-Relacin) de una base de datos para gestionar la informacin sobre los empleados de una empresa, a partir de las siguientes condiciones: para cada empleado dispondremos de su DNI, nombre, fecha de nacimiento, salario y Departamento en el que trabaja. De cada Departamento sabremos su nombre, el n del despacho en el que se ubica y conoceremos cul es el Jefe de dicho Departamento. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 4
Compaa de seguros
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Una Compaa de Seguros desea construir una base de datos para almacenar la informacin de sus empleados. De cada empleado conocemos su DNI, su nombre y su salario. Los empleados de la empresa pueden ser vendedores de seguros o administrativos. De los primeros conocemos su n de vendedor y la zona en la que opera. Estos empleados se encargan de vender plizas de seguros. De cada pliza nos interesa concoer la fecha en la que fue contratada, el n de pliza, el importe y la persona beneficiaria de la misma. De los administrativos nos interesa conocer su edad y los aos de servicio para la empresa. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 5
Empresa de acero Aceralium
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. La empresa de componentes de acero Aceralium est ubicada en distintos edificios de distintos polgonos industriales. Desea hacer una base de datos para registrar la distribucin de sus departamentos. Un departamento de la misma puede estar distribuido en varios edificios. Del departamento interesa registrar su nombre y el nmero de empleados que lo integran. De los edificios sabemos su nombre y el nmero de despachos que tienen. En cada edificio (que est localizado en un polgono industrial, los cuales tienen un nombre y una ciudad en la que est situado) pueden ubicarse distintos departamentos. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 6
Ros de Espaa
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Nos han encargado realizar el diseo conceptual de una parte de la BD que almacenar informacin sobre ros de Espaa. En esta base de datos vamos a almacenar el nombre y el nmero de habitantes de todas las comunidades autnomas, el nombre y el nmero de habitantes de algunas ciudades, as como la autonoma a la que pertenecen. Se desea conocer el nombre, longitud y caudal de algunos ros, registrando las ciudades (de entre las que tenemos almacenadas) por las que pasan, as como las comunidades que baan. Adems, se guardar el nmero de kilmetros que de cada ro discurren por cada comunidad autnoma. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.

3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 7
Parque mvil de Len
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. El Ayuntamiento de Len desea tener informatizada cierta informacin acerca del parque de vehculos que circulan habitualmente por la ciudad de Len. Los datos que se quieren conocer sobre los conductores son: nombre, primer apellido, DNI y nmero de aos con carnet de conducir. Se distinguen tres tipos de vehculos: coches, motos y camiones. De todos ellos se desea conocer marca y matrcula. Adems, para el caso de los coches, el nmero de puertas; para el caso de los camiones, la tara; para el caso de las motos, su cilindrada. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual de dicho diagrama. 3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 8
Conflictos blicos
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Una organizacin internacional pretende realizar un seguimiento de los conflictos blicos que se producen en todo el mundo. Para ello crear una base de datos que responder al siguiente anlisis: Se entiende por conflicto cualquier lucha armada que afecte a uno o varios pases y en el cual se produzcan muertos y/o heridos. Todo conflicto se identificar por un nombre que habitualmente har referencia a la zona o causa que provoca el conflicto, aunque dado que este nombre puede cambiar con el paso del tiempo, dentro de la BBDD cada conflicto se identificar mediante un cdigo numrico sin significado alguno. Para cada conflicto se desea recoger los pases a que afecta, as como el nmero de muertos y heridos contabilizados hasta el momento.

Los conflictos pueden ser de distintos tipos segn la causa que lo ha originado, clasificndose, a lo sumo, en cuatro grupos: territoriales, religiosos, econmicos o raciales, en cada uno de estos grupos se recogern diversos datos. En los conflictos territoriales se recogern las regiones afectadas, en los religiosos las religiones afectadas, en los econmicos las materias primas disputadas y en los raciales las etnias enfrentadas. En los conflictos intervienen diversos grupos armados (al menos dos) y diversas organizaciones mediadoras (podra no haber ninguna). Los mismos grupos armados y organizaciones mediadoras pueden intervenir en diferentes conflictos. Tanto los grupos armados como las organizaciones mediadoras podrn entrar y salir del conflicto, en ambos casos se recoger tanto la ficha de incorporacin como la fecha de salida. Temporalmente, tanto un grupo armado como una organizacin mediadora podran no intervenir en conflicto alguno. De cada grupo armado se recoge el cdigo que se le asigna y un nombre. Cada grupo armado dispone de al menos una divisin y es liderado por al menos un lder poltico. Las divisiones de que dispone un grupo armado se numeran consecutivamente y se registra el nmero de barcos, tanques, aviones y hombres de que dispone, asimismo se recoge el nmero de bajas que ha tenido. Para los grupos armados se recoge el nmero de bajas producidas en todas sus divisiones. Los traficantes de armas suministran diferentes tipos de arma a los grupos armados. De cada tipo de armas se recoge un nombre y un indicador de su capacidad destructiva. De cada traficante se recoge un nombre, los diferentes tipos de arma que puede suministrar y cantidad de armas de cada uno de los tipos de arma que podra suministrar. Se mantiene el nmero total de armas de cada uno de los diferentes tipos de armas suministrado por cada traficante a cada grupo armado. Los lderes polticos se identifican por su nombre y por el cdigo de grupo armado que lideran. Adems se recoge una descripcin textual de los apoyos que ste posee. Cada divisin la pueden dirigir conjuntamente un mximo de tres jefes militares, aunque cada jefe militar no dirige ms de una divisin. A cada jefe militar se le identifica por un cdigo, adems se recoge el rango que ste posee, y dado que un jefe militar no acta por iniciativa propia sino que siempre obedece las rdenes de un nico lder poltico de entre aquellos que lideran al grupo armado al que el jefe pertenece, se registrar el lder poltico al que obedece. De las organizaciones mediadoras se recoger su cdigo, su nombre, su tipo (gubernamental, no gubernamental o internacional), la organizacin de que depende (una como mximo), el nmero de personas que mantiene desplegadas en cada conflicto y el tipo de ayuda que presta en cada conflicto que ser de uno y slo uno de los tres tipos siguientes, mdica, diplomtica o presencial. Con diversos fines, los lderes polticos dialogan con las organizaciones. As para cada lder se recogern aquellas organizaciones con que dialoga y viceversa. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.

3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 9
I.E.S.San Andrs del Rabanedo
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Antes de comenzar el curso, los encargados de realizar los horarios del instituto San Andrs del Rabanedo han decidido automatizar el proceso, en un intento de racionalizar el reparto de horas y aulas. Para ello, se cuenta con una relacin de las asignaturas a impartir (con su nombre y curso correspondiente) y de los profesores (con su nombre y departamento al que pertenecen) responsables de cada una de ellas. Cada asignatura se imparte en una sola aula. De cada aula se conoce su nmero (de aula), capacidad y si es un aula de informtica o no. Las aulas de informtica contienen un nmero de ordenadores nunca superior a 15. De los ordenadores interesa saber la velocidad del procesador y la memoria RAM con la que cuentan. Las aulas, sean o no de informtica, pueden tener o no tener pizarra. Si la tienen, slo tienen una, y de ella se conoce su tamao (ancho x alto) Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 10
Cocinas
Este ejercicio tiene como objetivo familiarizar al alumno con todo el proceso de diseo de base de datos y permitirle asimiliar con mayor precisin los conceptos enunciados en este tema. Una empresa dedicada a comercializar cocinas desea aumentar su control sobre aquellos elementos que le afectan. Del resultado del anlisis que realiza obtiene las siguientes informaciones: Hay una serie de fabricantes de muebles de cocina. De cada fabricante se dispone de un nombre, una direccin y una relacin de nmeros de telfono. Cada uno de ellos fabrica varios muebles de cocina. Un mueble de cocina tiene una determinada lnea, un determinado

color, unas dimensiones dadas (ancho*alto*largo). Existen tres tipos de muebles de cocina: muebles altos, muebles bajos y encimeras. De los muebles bajos y de los muebles altos interesa saber la altura sobre el suelo y de las encimeras interesa saber su tipo (mrmol o aglomerado). Cada fabricante puede trabajar con varios distribuidores y dada distribuidor trabaja al menos con un fabricante. De un distribuidor se dispone del nombre, direccin y una relacin de nmeros de telfono. Una cocina la componen una serie de muebles de cocina de distinto tipo, cada mueble de cocina slo podr formar parte de una nica cocina. De una cocina nos interesa saber el nmero de muebles que la componen, as como cuntos de ellos hay de cada tipo. Cada cocina la puede vender un nico distribuidor en una determinada fecha de venta, aunque cada distribuidor puede vender varias cocinas. Un distribuidos puede ceder una cocina a otro, para que ste pueda venderla. Cada cocina la debe montar al menos un montador, y el mismo montador puede montar varias cocinas. De un montador nos interesa su NIF, nombre, direccin, nmero de telfono y al nmero de cocinas que ha montado. Cada cocina pueden comprarla uno o varios clientes, y el mismo cliente puede comprar varias cocinas. De un cliente nos interesa su NIF, nombre, direccin y nmero de telfono. Se pide:
1. Realizar el diagrama Entidad-Relacin que describa la informacin relacionada

anteriormente.
2. Obtener el diccionario de datos conceptual correspondiente al diagrama del apartado

1.
3. Transformar el diagrama Entidad-Relacin a esquema lgico relacional. 4. Obtener el diccionario de datos lgico de dicho esquema lgico relacional. 5. Implementar en Access la base de datos obtenida.

Ejercicio 11
Casos variados
Este ejercicio tiene como objetivo familiarizar al alumno con el modelo Entidad-Relacin y permitirle asimilar los conceptos de manera prctica.

Caso 1
Supn que deseamos realizar una base de datos sobre los Reyes Magos. De un Rey Mago slo nos interesa guardar su nombre. los Reyes Magos realizan regalos a los nios. De un regalo nos interesa saber su nombre. De los nios nos interesa guardar su nombre y un cdigo numrico que los identifica. Cada Rey Mago realiza un slo regalo a cada nio, pero como no estn muy bien organizados, es posible que dos de ellos o incluso los tres le hagan el mismo regalo al mismo nio.

Caso 2

Supn que deseamos realizar una base de datos sobre los espaoles. De cada espaol se guarda su nombre, su dni y su fecha de nacimiento. De los espaoles que son catalanes nos interesa saber el dinero que tienen ahorrado; de los espaoles que son gallegos, nos interesa saber si son independentistas; y de los espaoles que son vascos nos interesa saber si apoyan la lucha armada.

Caso 3
Nos asignan realizar una base de datos sobre los jugadores de tenis de un campeonato. Concretamente de cada jugador tenemos que guardar su nombre, su dni y su altura. Un jugador puede ser diestro, en cuyo caso tenemos que guardar la velocidad a la que saca con la derecha o puede ser zurdo, en cuyo caso tenemos que guardar la velociad a la que resta los saques con la zurda. En el campeonato hay jugadores que son ambidiestros, en cuyo caso debemos guardar ambos datos.

Caso 4
Debemos realizar una base de datos sobre las personas que han habitado en Espaa en este ltimo siglo. De las personas nos interesa saber su nombre, su dni y su ciudad de nacimiento. De las personas muertas nos interesa saber el ao en qu murieron; de las personas vivas, su edad. Se pide
1. Realizar los diagramas Entidad-Relacin de los casos planteados y convertirlos al

modelo relacional

Ejercicio 12
Empresa informtica
Este ejercicio est concebido para realizar una aproximacin a la normalizacin desde un punto de prctico. Una empresa informtica requiere nuestros servicios para realizarles una base de datos. Nos informan que dentro de la empresa los trabajadores se ocupan de varios proyectos. De cada proyecto les interesa guardar un cdigo numrico nico para cada uno de ellos y el nombre de dicho proyecto. De los trabajadores de la empresa les interesa almacenar un cdigo numrico nico para cada trabajador, el nombre completo del trabajador, el puesto que ocupa en un proyecto (este puesto solo puede ser jefe de proyecto, analista, programador o diseador grfico), el dinero que se paga por hora en ese puesto (independiente del proyecto, es decir, todos los programadores cobran lo mismo por hora, todos los analistas cobran lo mismo, etc.) y el nmero de horas que lleva trabajadas en el proyecto. Se pide:
1. Realizar el diseo conceptual y lgico de la base de datos. 2. Mediante normalizacin, comprobar si el resultado de nuestra base de datos es

"correcto" (est en 3FN).

Ejercicio 13

Solucin alumno ASI


Este ejercicio est concebido para realizar una aproximacin a la normalizacin desde un punto de prctico. Intentando resolver un ejercicio de diseo de base de datos, una alumno de ASI sin muchos conocimientos ha creado un diagrama Entidad-Relacin y de ah ha derivado las siguientes tablas:
PERSONA(idPersona, nombrePersona, fechaNac, idPadre, idMadre, idViviendaHabita, idMunicipio, nombreMunicipio, altura, categoria) VIVIENDA(idVivienda, idMunicipio, direccion, codigoPostal) PROPIETARIO(idVivienda, idPersona) PERSONA(idViviendaHabita) -> VIVIENDA(idVivienda) PERSONA(idPadre) -> PERSONA(idPersona) PERSONA(idMadre) -> PERSONA(idPersona) VIVIENDA(idMunicipio) -> PERSONA(idMunicipio) PROPIETARIO(idVivienda) -> VIVIENDA(idVivienda) PROPIETARIO(idPersona) -> PERSONA(idPersona)

Se pide:
1. Indicar todas las dependencias funcionales encontradas en las 3 tablas. 2. Indicar si las 3 tablas estn en segunda forma normal. Si no lo estn, indicar por qu

no lo estn y tranformarlas para que se encuentren en segunda forma normal.


3. Indicar todas las dependencias funcionales encontradas en las trablas transformadas. 4. Indicar si las tablas transformadas estn o no en tercera forma normal.

Ejercicio 13
Solucin alumno ASI (2)
Este ejercicio est concebido para realizar una aproximacin a la normalizacin desde un punto de prctico. Intentando resolver un ejercicio de diseo de base de datos, la misma persona del ejercicio 02 ha creado un diagrama Entidad-Relacin y de ah ha derivado las siguientes tablas:
EMPLEADO(dni, nombre, fechaNac, salario, departamento, numeroDespacho, dniJefe) EMPLEADO(dniJefe) -> EMPLEADO(dni)

Se pide:
1. Indicar todas las dependencias funcionales encontradas en la tabla. 2. Indicar si la tabla est en segunda forma normal. Si no lo est, indicar por qu no lo

est y tranformarla para que se encuentre en segunda forma normal.


3. Indicar todas las dependencias funcionales encontradas en las tabla transformada. 4. Indicar si las tablas transformadas estn o no en tercera forma normal.

Ejercicio 14
Calificaciones de alumnos
Este ejercicio est concebido para realizar una aproximacin a la normalizacin desde un punto de prctico. El instituto I.E.S. San Andres del Rabanedo ha desarrollado una base de datos para llevar las calificaciones de los alumnos de Formacin Profesional. El esquema lgico de la base de datos que van a utilizar est formado por una sola tabla:
NOTAS_CICLOS (dniAlumno, nombreCompleto, idCiclo, nombreCiclo, idAsignatura, nombreAsignatura, calificacion, nota)

Han creado el siguiente diccionario de datos simplificado: NOMBRE DESCRIPCIN TIPO DOMINIO EJEMPLO dniAlumno DNI de un alumno NUMERO(8) 8 dgitos sin letra 71427420 nombreCompleto Nombre completo de un alumno TEXTO(30) Mara Lera Losa idCiclo Cdigo nico de cada ciclo NUMERO(1)

Un valor del siguiente conjunto: (1, 2) 1 nombreCiclo Abreviatura del ciclo TEXTO(3) Un valor del siguiente conjunto: ("DAI", "ASI") "ASI" idAsignatura Cdigo nico de cada asignatura NUMERO(3) Entero positivo 12 nombreAsignatura Nombre abreviado de la asignatura TEXTO (10) "SGBD" calificacion Calificacin de un alumno en una asignatura expresada sin decimales NUMERO(2) Entero positivo 6 nota Nota en palabra de un alumno en una asignatura. Se obtiene de la siguiente manera en funcin de la calificacin: 0, 1, 2, 3 o 4: "Suspenso"

5 o 6: "Aprobado" 7 u 8: "Notable" 9 o 10: "Sobresaliente" TEXTO(10) Un valor del siguiente conjunto: ("Suspenso", "Aprobado", "Notable", "Sobresaliente") "Notable" Hay que mencionar que ningn alumno tiene permitido estar matriculado en dos ciclos a la vez. Las administrativas han comenzado a introducir en el sistema los datos que antes estaban en papel. Lo primero que han querido hacer es meter solo los datos de todas las asignaturas (idAsignatura y nombreAsignatura) pero no han podido porque al insertar una fila con valor NULL en el atributo dniAlumno el SGBD que utilizaban les daba error. Evidentemente esto es lgico, como sabemos, debido a que la clave primaria no puede tener valores nulos. Luego han querido grabar solo el nombre de los ciclos y su correspondiente idCiclo, pero el sistema tampoco las ha dejado porque los atributos dniAlumno e idAsignatura se intentaban otra vez meter a NULL, lo que nuevamente violaba la regla de integridad de entidades del modelo relacional mencionada antes. El equipo directivo concluye que la base de datos no funciona bien y nos requiere para que echemos un vistazo y veamos que es lo que est fallando. A primera vista parece un problema de diseo. Se pide:
1. Indicar si la tabla est en 1FN y si lo est explicar por qu. 2. Obtener todas las dependencias funcionales presentes en la tabla de dicha base de

datos.
3. Indicar si la tabla est en 2FN y si lo est explicar por qu. Si no lo est, transformar

la tabla para que las nuevas tablas estn todas en 2FN.


4. Obtener de nuevo las dependencias funcionales presentes en las nuevas tablas. 5. Indicar si las nuevas tablas estn en 3FN y si lo estn explicar por qu. Si no lo estn,

transformar las tablas para que estn todas en 3FN.


6. Comprobar si ahora las administrativas pueden meter primero los datos de las

asignatura, luego los datos de los ciclos y por ltimo los datos de los alumnos.

Ejercicio 16
Base de datos Microsoft Espaa
Este ejercicio est concebido para realizar una aproximacin a la normalizacin desde un punto de prctico. Conforme a la nueva ley LSSI de proteccin de datos personales, a Microsoft Espaa se le obliga llevar un auditora de todas las sesiones que sus usuarios inicien en el servicio

Messenger de mensajera instantnea. Esta control incluye registrar la hora de inicio de sesin, la direccin IP desde donde se realiz la sesin y otros datos de caracter personal. Microsoft Espaa desarrolla una base de datos para almacenar esta informacin y para ello utiliza una tabla como la mostrada a continuacin:
REGISTRO_SESIONES(idSesion, horaInicio, email, nombreCompleto, fechaAlta, direccionIP)

El diccionario de datos simplificado correspondiente a dicha tabla es: NOMBRE DESCRIPCIN TIPO DOMINIO EJEMPLO idSesion Cdigo nico que identifica a cada sesin NUMERO(10) Nmeros enteros positivos 2435063565 horaInicio Fecha y hora en la que un usuario comienza una sesin FECHA Fechas y horas con formato DD-MM-AA,HH:MM 03-12-04,23:45 email Direccin de email que identifica a cada usuario de manera nica. TEXTO(40) Direcciones de email con formato: *@*.* "juan@hotmail.com" nombreCompleto

Nombre completo de un usuario TEXTO(30) Sin restricciones Juan Perez Gil fechaAlta Fecha de alta de un usuario en el servicio Messenger (momento en que se registro por primera vez en Hotmail) FECHA Fechas 12-06-2003 direccionIP Direccin IP desde la que se realiza la conexin. TEXTO(15) Direcciones IP en formato: ***.***.***.*** 108.229.004.021 El sistema, segn un usuario inicia sesin, inserta una lnea en la tabla. As, en los 25 primeros minutos de servicio del sistema, la tabla tiene estos valores: idSesio n 0 1 2 horaInici o 12-1204,18:02 12-1204,18:03 12-1204,18:20 email juan@hotmail.com luis34@hotmail.co m juan@hotmail.com nombreComplet o Juan Prez Gil Luis Garcia Sanz Juan Prez Gil fechaAlt a 04-08-03 02-01-01 04-08-03 direccionIP 124.223.010.22 1 137.220.200.20 0 215.097.002.00 2

Se pide:
1. Indicar si la tabla est en 1FN y si lo est explicar por qu. 2. Obtener todas las dependencias funcionales presentes en la tabla de dicha base de

datos.

3. Indicar si la tabla est en 2FN y si lo est explicar por qu. Si no lo est, transformar

la tabla para que las nuevas tablas estn todas en 2FN.


4. Obtener de nuevo las dependencias funcionales presentes en las nuevas tablas. 5. Indicar si las nuevas tablas estn en 3FN y si lo estn explicar por qu. Si no lo estn,

transformar las tablas para que estn todas en 3FN.


6. Juan se da cuenta de que introdujo mal su nombre al registrarse y en vez de Prez

escribi Prez. Comunicado este hecho al servicio de atencin al cliente, Microsoft intenta actualizar los datos. Si el sistema descrito en este ejercicio lleva operativo 365 dias y Juan ha iniciado sesin 2 veces cada da en cuntas lnea de la tabla inicial que usaba Microsoft se tiene que corregir el dato? Si hubieran utilizado las tablas que has creado tu, en cuntas lneas tiene que corregir el dato?
7. Dentro de 10 aos (a razn de 365 das por ao) y teniendo en cuenta que Juan inicia

sesin 2 veces al dia todos los dias y que para almacenar el campo fechaAlta el SGBD utiliza 0,001 MB por cada fila, cantos MB usar el sistema para guardar la fecha de alta de Juan? Cuntos MB utiliza el sistema con tus nuevas tablas despus de todo ese tiempo?
Diseo fsico de bases de datos con Access Prctica 1 El objetivo de esta prctica es el aprendizaje del manejo del S.G.B.D. Microsoft Access. Para ello, lo primero que haremos ser conocer el entorno de trabajo que ofrece Access: los objetos que permite utilizar, su manejo y posibilidades. Access es un programa comercial de la empresa Microsoft Corporation. Se trata de un sistema gestor de bases de datos diseado para ser utilizado en computadoras personales tipo PC. Aunque nunca estuvo considerado como un sistema serio, en la actualidad sus ltimas versiones ya permiten realizar las mismas tareas que los tradicionalmente considerados sistemas serios, como puede ser Oracle, DB2, etc. A diferencia de estos, Access puede funcionar en sistemas de bajo coste, y es mucho ms asequible. Adems, dispone de un entorno muy amigable (al estilo Windows). Por esta razn, cada vez ms empresas apuestan por este sistema. Tanto es as que los fabricantes de los sistemas serios, incluido Oracle, tienden a hacer que sus productos se parezcan, en cuanto a interfaz de usuario se refiere, a lo que el usuario pide, que no es otra cosa que el entorno visual (es el caso del Developer de Oracle) Por todas estas razones, estudiar un sistema como Access es una buena apuesta, ya que abre las puertas a un mercado cada vez ms importante, sin que ello suponga dejar de conocer otros sistemas muy extendidos. Qu es una base de datos para Access? En Access una base de datos es un archivo que contiene datos (estructurados e interrelacionados) y los objetos que definen y manejan esos datos: tablas,

consultas, formularios, informes, pginas, macros y mdulos. Adems, se pueden definir estrategias de seguridad y de integridad. Pueden coexistir en un mismo disco duro varias bases de datos, en varios ficheros, absolutamente independientes entre s (aunque es posible referenciar desde una base de datos objetos presentes en otras bases de datos, es decir, en otros ficheros). En algunos otros sistemas, como dBase o mySQL, una base de datos es un directorio del disco en el que se encuentran multitud de archivos que contienen los datos y los objetos.

Tablas: son los almacenes de datos. Se trata de listas de registros. Consultas: operaciones que pueden realizase sobre los datos de las tablas: seleccin de datos, insercin, modificacin y borrado, clculos... Formularios: pantallas que se presentan a los usuarios de una base de datos para que tengan un acceso amigable a los datos y operaciones. Informes: formatos de presentacin de los datos para generar copias impresas de la informacin registrada en la base de datos. Macros y mdulos: segmentos de cdigo en lenguaje de alto nivel (Access Basic, Visual Basic, lenguaje de macros,...) que permiten realizar operaciones complejas con los datos y objetos de la base de datos.

Los objetos en Access deben estar identificados mediante un nombre. Referencias posteriores a esos objetos se harn a travs de su nombre identificativo. Creacin de una base de datos Vamos a comenzar a trabajar con Access. El primer paso va a ser crear una base de datos vaca. Una base de datos vaca no se trata de un fichero vaco: al crear una base de datos vaca se almacenan en ella algunos datos administrativos y objetos del sistema, inicialmente ocultos al usuario y programador. Por tanto, antes de tener acceso a una base de datos vaca, debemos elegir un nombre de fichero para almacenarla en disco. Llegados a este punto es importante advertir que, al contrario de lo que ocurre en la mayora de los programas de aplicacin del mercado como Word, Excel, etc., los datos de una base de datos no necesitan ser explcitamente guardados. Estamos acostumbrados al hecho de tener que seleccionar la opcin de guardado del men archivo para que nuestros documentos y programas se almacenen en disco, mientras que el resto del tiempo trabajamos con una copia en RAM. En las bases de datos esto no es as. Los datos estn siempre almacenados en disco. nicamente se trabaja con una copia en RAM durante el tiempo en que un registro de una tabla est siendo accedido, y no es necesario utilizar una opcin de guardado para hacer permanentes los cambios en el registro. Por lo tanto, cuando se introduzcan o se borren datos de las tablas de una base de datos, Access (ni ninguna base de datos) no preguntar si se

desean guardar los cambios antes de cerrar, porque ya estarn guardados. Esto tiene como ventaja que no se perdern los datos en caso de que ocurra algn problema; como contrapartida sabemos que no ser posible deshacer el borrado accidental de datos. No obstante, Access tiene un entorno suficientemente amigable como para advertir al usuario de que puede realizar operaciones destructivas irreversibles antes de realizarlas. Esto es nicamente aplicable a los datos. El resto de objetos en Access (definiciones de tablas, definiciones de consultas, formularios, informes,...) deben ser almacenados en disco dentro del fichero de la base de datos de forma explcita. Por estas razones, Access requiere crear el fichero de una base de datos vaca antes de permitir trabajar con ella. El fichero de una base de datos Access tiene extensin MDB (Microsoft Data Base). Adems de este fichero, puede existir un fichero con extensin LDB. Este fichero contiene informacin de bloqueo de registros, que permite el acceso seguro de mltiples usuarios de forma concurrente. El fichero de la base de datos permanece abierto mientras se trabaja con los datos, y nicamente se cierra cuando se cierra la base de datos de forma explcita, con la opcin correspondiente. Si por cualquier problema, no se realiza un cierre ordenado, la base de datos puede daarse. Cuando queramos volver a trabajar con una base de datos, lo nico que hay que hacer es abrir de nuevo el fichero correspondiente, como si se tratara de un documento de un procesador de texto. Creacin de las tablas Definicin de campos Una vez decididos los campos que necesitamos almacenar en la tabla, pasaremos a crear la tabla. Para ello seleccionaremos en la seccin "Tablas" la opcin "Crear una nueva tabla en vista Diseo". Access nos mostrar un formulario para la definicin de los campos. Esta ventana se denomina de diseo de tabla frente a la de vista de tabla que permitir ms adelante introducir los datos. Para cada campo que definamos debemos asignarle un nombre, un tipo y una descripcin. Adems, para cada tipo existen una serie de atributos de tipo que permiten describir con precisin el dominio de valores aceptados por el campo. Los tipos disponibles son los siguientes:

Texto: Una cadena de caracteres de longitud limitada. La longitud mxima se define como uno de los atributos, y no puede ser mayor de 255 caracteres. El espacio ocupado en disco por este campo corresponde a la longitud mxima definida. Un atributo importante del tipo texto es si se permite la longitud cero. Memo: Una cadena de caracteres de longitud ilimitada. El espacio ocupado en disco depende del texto almacenado. Tiene como desventaja respecto al tipo Texto que no permite algunas operaciones (orden, agrupacin...). Numrico: Un nmero entero o real. Existen diversos tamaos y precisiones: byte, entero, entero largo, real de precisin simple, real de precisin doble, identificador global. Dentro de cada uno de estos subtipos se pueden definir atributos de rango y precisin decimal. Fecha/hora: Fecha, hora o ambos a la vez. Existen diversos formatos de fecha y hora que pueden ser definidos como atributo. Moneda: Un nmero con formato monetario. Se trata de un valor numrico real con formato especializado para la manipulacin de valores monetarios: abreviatura de la moneda local, separacin con puntos y comas al estilo local, etc. Autonumrico: Un contador autoincrementado. Se trata de un valor numrico que el sistema genera automticamente para cada registro de manera que nunca existirn dos registros en la misma tabla con el mismo valor en el campo autonumrico. Si/no: Un valor lgico. Objeto OLE: Un objeto de otra aplicacin, vinculado mediante OLE: sonido, imagen, vdeo, grfico, etc. Hipervnculo: Un vnculo a un documento de Internet.

Cada uno de estos tipos dispone de atributos propios, por ejemplo, la precisin decimal y el rango de valores en los campos numricos, frente a la longitud de cadena de los campos de tipo texto. Pero adems existen una serie de atributos comunes, que se describen a continuacin:

Formato de presentacin: define mediante una expresin la forma en que los nmeros, las fechas, las horas y el texto se muestran y se imprimen.. Por ejemplo en campos numricos define si se presentan al usuario separadores de miles o unidades de medida; en campos de texto puede forzar a que los caracteres se presenten en maysculas; en campos lgicos si se muestran los valores SI/NO o en cambio se utilizan los valores VERDADERO/FALSO, etc. Para una explicacin mas detallada de esta propiedad consulta el anexo 1. Mscara de entrada: Fuerza a que el usuario introduzca los datos en un formato adecuado. Por ejemplo para un telfono puede ser interesante mostrar al usuario algo como (__) ___-__-__, de manera que no pueda introducir caracteres extraos. La mscara de entrada es un conjunto de tres datos que definen los caracteres admitidos, el formato presentado al usuario y el formato almacenado. A la hora de mostrar el valor de los

campos, el atributo Formato prevalece sobre la mscara de entrada, de manera que si este ha sido definido, una vez introducidos los datos siguiendo una determinada mscara, el contenido del campo se mostrar con el aspecto definido en el Formato y no con el de la mscara. Para una explicacin ms a fondo sobre las mscaras consulta el anexo 2.

Ttulo: Es el nombre que aparecer como ttulo del campo en el modo de ver datos (al editar los datos almacenados) o cuando creamos un formulario o un informe. Tiene su utilidad debido a que, en ocasiones, el nombre de los campos puede resultar demasiado crptico y sin sentido para personas ajenas al diseo de la base de datos. Valor predeterminado: Un valor que automticamente introducir Access en el campo si el usuario no indica otro. Regla de validacin: Una condicin que debe cumplir el dato introducido para que sea aceptado. Por ejemplo, para un campo Edad de tipo Numero se puede forzar a que el valor introducido est comprendido entre 18 y 65 aos con una expresin como >=18 AND <=65. Las diferentes reglas de validacin que se pueden especificar dependen del tipo de dato (la comparacin anterior no tendra sentido para un dato de tipo Texto). Texto de validacin: Un mensaje que Access mostrar al usuario cuando intente introducir un valor no permitido por la regla de validacin de ese campo. Para el ejemplo anterior podra ser algo como ERROR: la edad debe estar comprendida entre 18 y 65 aos.. Requerido: Indica si el campo debe tener algn valor o sie st permitido dejarlo en blanco. Por defecto un campo no contiene ningn valor. No hay que confundir un campo vaco con un campo de texto de longitud cero. De ah la importancia del atributo de permitir longitud cero de los campos de tipo texto. Indexado: Establece si sobre el campo debe construirse un ndice. Un ndice es una estructura manejada por Access que hace que determinadas operaciones con el campo sean ms rpidas (ordenaciones y bsquedas), a costa de un mayor espacio en disco y memoria (para almacenar el ndice) y de que otras operaciones sean ms lentas y costosas (inserciones y borrados). Existen dos formas de hacer ndices: con y sin duplicados; esto permite configurar la posibilidad o no de que se repitan valores a lo largo de la tabla para un campo.

A la hora de editar los datos en el modo de ver datos, Access, por defecto, utiliza un editor de texto en el que se pueden escribir los datos. A veces es til proporcionar al usuario la posibilidad de elegir elementos de una lista, en vez de tener que escribirlos de nuevo. Para ello, Access permite seleccionar el tipo de editor que se va a utilizar para un campo (atributo mostrar control de la pestaa Bsqueda):

Cuadro de texto: un editor normal. Cuadro de lista: una lista de valores permitidos. Cuadro combinado: igual que el anterior, pero con ms opciones.

Casilla de verificacin (slo campos s/no): un recuadro para activar y desactivar.

En el caso del cuadro de lista y del cuadro combinado, el conjunto de valores propuestos puede obtenerse de tres formas:

Indicando explcitamente una lista de valores separados por smbolos de punto y coma. A travs de una tabla/consulta, y entonces los valores propuestos se obtienen de los almacenados en una tabla (esta forma la estudiaremos ms adelante). Indicando una tabla, y entonces los valores propuestos son el conjunto de campos de esa tabla (esto slo es til en tablas muy especializadas y no lo estudiaremos).

Clave primaria En toda tabla debe existir una clave primaria (tambin llamada clave principal o clave maestra). Como sabemos, una clave primaria es un campo o conjunto de campos cuyos valores no se repiten y a travs de los cuales se identifica de forma nica al registro completo. Es decir, que no hay dos registros en una tabla con la misma clave. Sobre un campo que se emplee como clave primaria, forzosamente debe generarse un ndice sin duplicados, y no se admitirn valores nulos para el campo. Guardar el diseo Despus de introducir todos los campos y definir sus tipos y atributos, podremos pasar a utilizar la tabla, introduciendo, modificando y utilizando los datos que puede almacenar. Antes deberemos guardar la definicin de la tabla, utilizando por ejemplo el icono "Guardar". Access pedir un nombre para la nueva tabla (tomaremos la convencin de que los nombres de las tablas se escriben en maysculas). Despus de esto podemos pasar al modo de ver datos. Podremos volver a modificar la estructura de la tabla siempre que queramos con el modo de ver diseo. Entonces, antes de volver al modo de ver datos deberemos guardar la definicin. Si ya hay datos introducidos en la tabla, Access no permitir modificar la definicin de la tabla, o impondr restricciones, en el caso de que los cambios produzcan conflictos entre las nuevas definiciones y los datos ya almacenados (por ejemplo si intentamos cambiar el tipo de un campo de texto a tipo numrico y existen registros almacenando cadenas no numricas). Introduccin de datos Aunque el modo ver datos de una tabla permite al usuario la insercin, borrado y modificacin de los datos contenidos en ella, no es la mejor forma de hacerlo. Lo

ms correcto es utilizar un formulario sobre la tabla: un dilogo ms atractivo y cmodo que una simple tabla, y que estudiaremos en su momento. El modo de ver datos de una tabla presenta una tabla formada por filas y columnas. Una fila corresponde a un registro y cada columna a un campo. Inicialmente la tabla estar vaca. Al final de la tabla siempre aparece una fila en blanco, destinada a la insercin de nuevos registros. Parte de los campos de esta fila pueden aparecer rellenos con los valores por defecto programados en la definicin de la tabla. En cualquier caso la modificacin de cualquier campo de esta fila har que automticamente aparezca una nueva fila. Como hemos visto, los cambios en los registros se almacenan en disco automticamente, sin que sea necesario guardarlos explcitamente. Los cambios que se realizan en los campos de un registro no se almacenan hasta que se abandona el registro, es decir hasta que se comienza a editar otro registro o se cierra la tabla. As, podemos cancelar los cambios hechos en un registro siempre y cuando no hayamos cambiado de registro. Basta con pulsar la tecla de escape. Una pulsacin har que se cancele la modificacin en el campo actual (si la hay) al valor anterior. Entonces, una segunda pulsacin recuperar el registro completo (si no se ha modificado el campo actual, bastar con una pulsacin para recuperar el registro completo). Antes de abandonar un campo, se verifican las reglas de validacin de ese campo, de manera que no se acepta el cambio hasta que todas las reglas asociadas al campo se cumplan. Adems, antes de abandonar un registro se comprobarn las reglas asociadas al registro, y no se har la escritura en disco mientras no se cumpla alguna. Es posible utilizar los comandos cortar, copiar y pegar habituales de Windows, as como seleccionar filas y columnas completas, con las siguientes pautas:

Se pueden seleccionar columnas completas, rangos de columnas, filas completas y rangos de filas, as como tablas completas; no se pueden seleccionar rectngulos de varias filas y columnas a la vez ni columnas o filas salteadas. Para seleccionar filas existe un pulsador de seleccin de registro, y para las columnas hay que pulsar sobre el recuadro de ttulo. Cualquier seleccin puede ser copiada al portapapeles, pero no borrada ni cortada: no se pueden borrar columnas completas. Se pueden borrar, cortar, copiar y pegar filas completas. Es posible hacerlo entre tablas distintas con campos diferentes, incluso desde otras aplicaciones. Entonces Access tratar de adaptar el contenido del portapapeles a los campos de destino a travs de la concordancia de nombres de campos y sus tipos. Si no es posible cuadrar todos los datos se crear una tabla Errores de pegado donde irn a parar los datos que no han podido ser alojados.

Si al pegar varias filas se quebranta alguna regla de integridad, las filas prohibidas irn a parar a una tabla Errores de pegado.

Para finalizar la edicin en una tabla debemos cerrarla. No ser necesario guardar los datos modificados, pues ya est almacenados en disco. Pero si hemos modificado el formato de presentacin (tamao de celdas, tipos de letra, orden de presentacin o filtros), ser necesario volver a guardar la tabla, ya que la personalizacin de las opciones de visualizacin se considera como parte de la definicin de la tabla. Si no guardamos estos cambios, la prxima vez que se abra la tabla en modo ver datos, stos se presentarn en el formato anterior. Interrelaciones e integridad Como sabemos, la integridad referencial de una base de datos pretende asegurar que los datos sean siempre consistentes. Para establecer las reglas de integridad referencial en Access debemos indicar qu campos de qu tablas estn relacionados, es decir, debemos indicar qu campos son claves ajenas y a que ccampos estn haciendo referencia. Para ello utilizaremos la opcin Relaciones del men de herramientas. Esta opcin permite disear un esquema de dependencias de forma visual. Disponemos de un escritorio sobre el que situamos las tablas de la base de datos, y mediante lneas, unimos los campos dependientes. En Access slo existen tres opciones para definir la integridad referencial (en otros sistemas se nos permite tomar otras decisiones):

Exigir integridad referencial: activa o desactiva la integridad referencial entre los campos de las tablas seleccionadas. Las dems opciones no pueden activarse si no se activa sta. Actualizar en cascada: si se activa, hace actualizaciones en cascada; si no, no permite las actualizaciones. Eliminar en cascada: si se activa, hace borrados en cascada; si no, no permite los borrados.

Ejercicio prctico Supongamos que queremos disear e implementar una base de datos para gestionar una empresa de venta al pblico. La empresa dispone de varias tiendas distribuidas por distintas ciudades espaolas y se abastece de unos almacenes igualmente ubicados en diferentes ciudades. Adems, necesitamos conocer las existencias de los productos tanto en las tiendas como en los almacenes. Por ltimo, debemos guardar informacin sobre los pedidos que las tiendas realizan a los almacenes. Para ello necesitaremos una serie de tablas que mantengan dicha informacin y que se detallarn en la prctica 2.

Se pide que el alumno cree una base de datos vaca llamada "empresa_XXXX_YYYY .mdb" (donde XXXX e YYYY son los nombres de vosotros) y la almacene en la carpeta "Mis documentos". En esta base de datos se deben crear las siguientes tablas: 1. TIENDAS: Tabla que guardar informacin de las distintas tiendas: Camp o tId Tipo Texto(3) Descripcin Identificador de tienda Otros atributos El primer carcter debe ser una T y los otros dos sern nmeros (T02, T12, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Requerido. Requerido Una lista de 7 ciudades (Barcelona, Bilbao, Madrid, Sevilla, Huelva, Murcia, Granada). Requerido

tDir tLoc

Texto(50 ) Texto(15 )

Direccin de la tienda Ciudad donde est la tienda

2. ALMACENES: Tabla que guardar informacin de los distintos almacenes Camp o aId Tipo Texto(3) Descripcin Identificador de almacn Otros atributos El primer carcter debe ser una A y los otros dos sern nmeros (A05, A18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Requerido. Requerido Una valor elegido de una lista de 7 ciudades (Barcelona, Bilbao, Madrid, Sevilla, Huelva, Murcia, Granada). Requerido

aDir aLoc

Texto(50 ) Texto(15 )

Direccin del almacn Ciudad donde est el almacn

3. PRODUCTOS: Tabla que guardar informacin sobre los productos que se venden. Campo pId Tipo Texto(3) Descripcin Identificador Otros atributos El primer carcter debe ser una P y los

de producto

otros dos sern nmeros (P27, P18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave Primaria. Requerido. Requerido >=0 AND <=1000. Requerido >=0 AND <=1000000. Requerido

descripcio n peso precio

Texto(20 ) Entero Entero largo

Descripcin del producto Peso del producto Precio del producto

4. AEXISTENCIAS: Tabla que guardar informacin sobre las existencias de los productos en los almacenes. Camp o aId Tipo Texto(3 ) Descripcin Identificador de almacn Otros atributos El primer carcter debe ser una A y los otros dos sern nmeros (A05, A18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Clave ajena referenciando a ALMACEN(aId). Requerido. El primer carcter debe ser una P y los otros dos sern nmeros (P27, P18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Clave ajena referenciando a PRODUCTO(pId). Requerido. >=0. Requerido

pId

Texto(3 )

Identificador de producto

aCant

Entero

Nmero de unidades en stock

5. TEXISTENCIAS: Tabla que guardar informacin sobre las existencias de los productos en las tiendas. Camp o tId Tipo Caden a (3) Descripcin Identificador de tienda Otros atributos El primer carcter debe ser una T y los otros dos sern nmeros (T02, T12, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Clave ajena referenciando a TIENDA(tId). Requerido.

pId

Caden a (3)

Identificador de producto

El primer carcter debe ser una P y los otros dos sern nmeros (P27, P18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Clave ajena referenciando a PRODUCTO(pId). Requerido. >=0. Requerido

tCant

Entero

Nmero de unidades en stock

6. PEDIDOS: Tabla que guardar informacin sobre los pedidos que las tiendas realizan a los almacenes. Camp o pedId Tipo Texto(4 ) Descripcin Identificador de pedido Otros atributos Los dos primeros caracteres deben ser PD y los otros dos sern nmeros (PD05, PD18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Clave primaria. Requerido. El primer carcter debe ser una A y los otros dos sern nmeros (A05, A18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Requerido. Clave ajena referenciando a ALMACEN(aId). El primer carcter debe ser una T y los otros dos sern nmeros (T02, T12, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Requerido. Clave ajena referenciando a TIENDA(tId). El primer carcter debe ser una P y los otros dos sern nmeros (P27, P18, etc.). Para introducir un identificador, slo ser necesario teclear el nmero. Requerido. Clave ajena referenciando a PRODUCTO(pId). >=0. Requerido

aId

Texto(3 )

Identificador de almacn

tId

Texto(3 )

Identificador de tienda

pId

Texto(3 )

Identificador de producto

cant

Entero

Nmero de unidades solicitadas Fecha del pedido

fPed

Fecha

<= fecha actual (que se obtiene con la funcin Fecha() ). Valor predeterminado: fecha

actual. Requerido. Introduccin de datos Se pide introducir los datos correspondientes a las tablas creadas en el ejercicio anterior. Comprobar que las reglas de validacin definidas funcionan correctamente intentando introducir valores ilegales, dejar campos vacos, etc. TIENDAS tId T0 1 T0 2 T0 3 T0 4 T0 5 T0 6 tDir Paseo de Gracia, 1 Gran Va, 9 C/ Sagasta, 25 Avda. Repblica Argentina, 25 Paseo Recoletos, 3 Avda. Andaluca, 36 tLoc Barcelon a Bilbao Madrid Sevilla Madrid Huelva

ALMACENES aId A0 2 A0 5 A0 3 aDir Polgono Sur s/n Carretera Murcia, 124 Polgono Alhambra, 322 aLoc Huelva Murcia Granad a

PRODUCTOS pI d P0 descripcion Televisor M1 pes o 27 precio 56.000

3 P0 4 P1 0 P1 2 P1 3 P2 5 P2 6 Televisor M2 Microondas mc1 Secador sx Lavadora m100 Vdeo v33 Vdeo v45 35 12 1 95 8 10

ptas. 95.000 ptas. 17.000 ptas. 2.500 ptas. 46.000 ptas. 45.000 ptas. 37.000 ptas.

PEDIDOS pedI d PD10 PD11 PD12 PD13 PD14 PD15 aId A0 2 A0 2 A0 3 A0 3 A0 2 A0 5 tId T0 1 T0 3 T0 3 T0 3 T0 4 T0 5 pI d P0 3 P0 4 P1 0 P2 5 P0 4 P2 6 can t 100 25 50 10 15 30 fPed 17/02/0 4 17/02/0 4 18/02/0 4 18/02/0 4 20/02/0 4 21/02/0 4

TEXISTENCIAS tId pI d tCan t

T0 1 T0 1 T0 1 T0 1 T0 1 T0 2 T0 2 T0 2 T0 2 T0 3 T0 4 T0 4 T0 5 T0 5 T0 5

P0 3 P0 4 P1 0 P2 5 P2 6 P0 3 P1 0 P2 5 P2 6 P1 0 P0 3 P0 4 P1 0 P2 5 P2 6

17 130 10 22 42 4 80 12 23 125 20 89 9 12 16

AEXISTENCIAS aId A0 pI d P0 aCan t 250

2 A0 2 A0 2 A0 2 A0 2 A0 2 A0 2 A0 3 A0 3 A0 3 A0 5 A0 5 A0 5

3 P0 4 P1 0 P2 5 P2 6 P1 2 P1 3 P0 4 P1 0 P2 5 P0 3 P2 5 P2 6 125 710 25 100 25 75 210 14 50 40 100 12

Formato de presentacin de datos


Anexo 1 de la prctica 1
Resumen de los aspectos ms importantes acerca de los formatos de presentacin de datos disponibles en Access. El atributo Formato define como se muestran al usuario los datos una vez que este los ha introducido. Esto incluye cuando los datos se muestran en la Vista Hoja de Datos o cuando estos se emplean en un formulario o en un informe. Este atributo slo controla la visualizacin de los datos, por lo que no puede ser utilizado para forzar que los datos se

almacenen con un determinado formato (para esto ltimo se emplean las mscaras de entrada). Para cada tipo de datos existen varios formatos predefinidos de uso habitual; adems, si el formato deseado no coincide con ninguno de los predefinidos, es posible especificar un formato personalizado mediante el uso de una serie de smbolos. Se pueden utilizar los siguientes smbolos para construir formatos personalizados sea cual sea el tipo de dato. Smbolo Significado (espacio) Muestra un espacio. "ABC" Muestra todo el contenido entrecomillado como caracteres literales. El mismo efecto se consigue utilizando \ delante del contenido y sin entrecomillarlo. ! El valor se muestra en su celda en vez de alineado a la derecha alineado a la izquierda. * Rellena todo el espacio disponible del campo con el carcter que se escriba despus. Las siguientes tablas muestran los smbolos empleados dependiendo del tipo de dato

Campos de tipo fecha/hora


Valor Descripcin Fecha general (Predeterminado) Si el valor es slo una fecha, no se muestra ninguna hora; si el valor es slo una hora, no se muestra ninguna fecha. Este valor es una combinacin de los valores de Fecha corta y Hora larga. Ejemplos: 3/4/93, 05:34:00 PM y 3/4/93 05:34:00 PM. Fecha larga Igual que el valor de Fecha larga del cuadro de dilogo Propiedades de Configuracin regional del Panel de control de Windows. Ejemplo: Sbado, 3 de Abril de 1993. Fecha mediana Ejemplo: 3-Abr-93. Fecha corta Igual que el valor de Fecha corta del cuadro de dilogo Propiedades de Configuracin regional del Panel de control de Windows. Ejemplo: 3/4/93. Atencin : El formato Fecha

corta asume que las fechas comprendidas entre el 1/1/00 y el 31/12/29 son fechas del siglo XXI (es decir, que los aos estn entre el 2000 y el 2029). Las fechas comprendidas entre el 1/1/30 y el 31/12/99 se asume que son fechas del siglo XX (es decir, que los aos estn entre 1930 y 1999). Hora larga Igual que el valor de la ficha Hora del cuadro de dilogo Propiedades de Configuracin regional del Panel de control de Windows. Ejemplo: 5:34:23 PM. Hora mediana Ejemplo: 5:34 PM. Hora corta Ejemplo: 17:34.

Smbolo Descripcin : (dos puntos) Separador de hora. Los separadores se establecen en el cuadro de dilogo Propiedades de Configuracin regional del Panel de control de Windows. / Separador de fecha. c Igual que el formato predefinido Fecha general. d Da del mes en uno o dos dgitos numricos, segn sea necesario ( 1 a 31). dd Da del mes en dos dgitos numricos ( 01 a 31). ddd Tres primeras letras del da de la semana (Lun a Dom) dddd Nombre completo del da de la semana (Lunes a Dom). ddddd Igual que el formato predefinido Hora corta. dddddd Igual que el formato predefinido Fecha larga. s Da de la semana ( 1 a 7). ss Semana del ao ( 1 a 53). m Mes del ao en uno o dos dgitos numricos, segn sea necesario ( 1 a 12). mm Mes del ao en dos dgitos numricos ( 01 a 12). mmm Tres primeras letras del mes (Ene a Dic).

mmmm Nombre completo del mes (Enero a Diciembre). t Fecha mostrada como trimestre del ao ( 1 a 4). a Nmero de da del ao ( 1 a 366). aa Dos ltimos dgitos del ao ( 01 a 99). aaaa Ao completo ( 0100 a 9999). h Hora en uno o dos dgitos, segn sea necesario ( 0 a 23). hh Hora en dos dgitos ( 00 a 23). n Minuto en uno o dos dgitos, segn sea necesario ( 0 a 59). nn Minuto en dos dgitos ( 00 a 59). s Segundo en uno o dos dgitos, segn sea necesario ( 0 a 59). ss Segundo en dos dgitos ( 00 a 59). ttttt Igual que el formato predefinido Hora larga. AM/PM Reloj de 12 horas con las letras maysculas "AM" o "PM", segn sea apropiado. am/pm Reloj de doce horas con las letras minsculas "am" o "pm", segn sea apropiado. A/P Reloj de doce horas con la letra mayscula "A" o "P", segn sea apropiado. a/p

Reloj de doce horas con la letra minscula "a" o "p", segn sea apropiado. AMPM Reloj de doce horas con el indicador de maana/tarde apropiado establecido en el cuadro de dilogo Propiedades de Configuracin regional del Panel de control de Windows. NOTA : Los formatos personalizados se muestran segn el valor especificado en el cuadro de dilogo Propiedades de Configuracin regional del Panel de control de Windows. Los formatos personalizados incoherentes con los valores especificados en el cuadro de dilogo Propiedades de Configuracin regional se ignoran. Para agregar una coma u otro separador al formato personalizado se debe incluir el separador entre comillas. Por ejemplo: d mmm", "aaaa.

Campos de tipo numrico y moneda


Valor Descripcin Nmero general (Predeterminado) Muestra el nmero tal como se introduce. Moneda Utiliza el separador de miles; muestra los nmeros negativos entre parntesis; el valor predeterminado de la propiedad LugaresDecimales es 2. Fijo Muestra al menos un dgito; el valor predeterminado de la propiedad LugaresDecimales es 2. Estndar Utiliza el separador de miles; el valor predeterminado de la propiedad LugaresDecimales es 2. Porcentaje Multiplica el valor por 100 y anexa un signo de porcentaje; el valor predeterminado de la propiedad LugaresDecimales es 2. Cientfico Utiliza la notacin cientfica estndar. Los formatos numricos personalizados pueden tener entre una y cuatro secciones con signos de punto y coma (;) como separador de lista. Cada seccin contiene la especificacin de formato para un tipo de nmero diferente:

El formato para los nmeros positivos. El formato para los nmeros negativos. El formato para los valores cero. El formato para los valores nulos.

Por ejemplo, el siguiente formato Moneda personalizado contiene cuatro secciones separadas por signos de punto y coma y utiliza un formato diferente para cada seccin:
$#.##0,00[Verde];($#.##0,00)[Rojo];"Cero";"Null"

Si se utilizan varias secciones pero no se especifica un formato para cada seccin, las entradas para las que no hay ningn formato no mostrarn nada o tomarn como valor predeterminado el formato de la primera seccin. Smbolo Descripcin , (coma) Separador decimal. Los separadores se establecen haciendo doble clic en Configuracin regional en el Panel de control de Windows. . (punto) Separador de miles. 0 Marcador de posicin de dgitos. Muestra un dgito 0. # Marcador de posicin de dgitos. Muestra un dgito o nada. $ Muestra el carcter literal "$". % Porcentaje. El valor se multiplica por 100 y se le anexa un signo de porcentaje. E o e Notacin cientfica con un signo menos () junto a los exponentes negativos y nada junto a los exponentes positivos. Este smbolo debe utilizarse con otros smbolos, como en el ejemplo 0,00E00 o 0,00E00. E+ o e+ Notacin cientfica con un signo menos junto a los exponentes negativos y un signo ms (+) junto a los exponentes positivos. Este smbolo debe utilizarse con otros smbolos, como en el ejemplo 0,00E+00.

Campos de tipo texto y memo


Smbolo Descripcin @

Se necesita un carcter de texto (ya sea un carcter o un espacio). & No se necesita un carcter de texto. < Convertir todos los caracteres a minsculas. > Convertir todos los caracteres a maysculas. Los formatos personalizados para los campos Texto y Memo pueden tener hasta dos secciones: la primera contiene el formato para los campos con texto y la segunda el formato para los campos con cadenas de longitud cero y valores nulos. Por ejemplo, para obtener que aparezca la palabra "Ninguno" cuando no exista ninguna cadena en el campo, puede utilizarse el formato personalizado:
@;"Ninguno"

Campos de tipo s/no


En las ltimas versiones de Access, los campos lgicos se muestran al usuario de forma grfica como una casilla de verificacin, aunque tambin puede mostrarse como un texto. En el primer caso, cualquier formato especificado es ignorado. Los formatos predefinidos son S/No, Verdadero/Falso y Activado/Desactivado. S, Verdadero y Activado son equivalentes entre s, al igual que lo son No, Falso y Desactivado. Si se especifica un formato predefinido y, al editar los datos, se introduce un valor equivalente, se mostrar el formato predefinido del valor equivalente. Para formatos personalizados se pueden utilizar expresiones que contengan hasta tres secciones:

Esta seccin no tiene ningn efecto en el tipo de datos S/No. No obstante, se requiere un signo de punto y coma (;) como marcador de posicin. El texto para mostrar en lugar de los valores S, Verdadero o Activado. El texto para mostrar en lugar de los valores No, Falso o Desactivado.

Formato de mscaras de entrada


Anexo 2 de la prctica 1
Resumen de los aspectos ms importantes acerca de las mscaras de entrada que emplea Access para la introduccin de valores en tablas. Las mscaras de entrada se emplean fundamentalmente para dos objetivos:
1. Controlar los valores que el usuario introduce en un campo. 2. Almacenar los datos introducidos por el usuario con un determinado formato.

La expresin para el formato de mscara de entrada puede contener hasta tres secciones separadas por signos de punto y coma (;).

La primera parte especifica la mscara de entrada propiamente dicha, por ejemplo, (999) 999-9999. Los caracteres que se pueden utilizar para definir la mscara de entrada se muestran ms adelante. La segunda parte especifica si Access almacena en la tabla solo los valores introducidos por el usuario o bien almacena estos valores junto con los caracteres de visualizacin literales (los caracteres de visualizacin literales son todos aquellos que le aperecen al usuario justo cuando comienza a editar el campo). Si se utiliza un 0 para esta seccin, todos los caracteres de visualizacin literales (por ejemplo, el parntesis de una mscara de entrada de un nmero de telfono) se almacenan con el valor; si se introduce 1 o se deja esta seccin en blanco, slo se almacenan los caracteres introducidos por el usuario en la celda. La tercera parte especifica el carcter que Access utiliza para indicar al usuario que en esa posicin debe escribir un carcter en la mscara de entrada. Para esta seccin se puede utilizar cualquier carcter. Por ejemplo para mostrar un asterisco en los lugares donde el usuario debe introducir valores se escribe "*".

Se pueden definir mscaras de entrada mediante los siguientes caracteres: Carcter Descripcin 0 Obliga a introducir en esa posicin un dgito del 0 al 9. No se permite introducir ni el smbolo + ni el smbolo -. 9 Permite introducir en esa posicin un dgito del 0 al 9, o bien no introducir nada. Se permite tambin escribir un smbolo + o un smbolo -. # Obliga a introducir un dgito o un espacio en esa posicin (los espacios se eliminan al guardar los datos). Se permite tambin escribir un smbolo + o un smbolo -. L Obliga a introducir en esa posicin una letra de la A a la Z. ? Permite introducir en esa posicin una letra de la A a la Z, o bien no introducir nada. A Obliga a introducir en esa posicin una letra o un dgito. a Permite introducir en esa posicin una letra o un dgito, o bien no introducir nada.

& Obliga a introducir en esa posicin un caracter o un espacio. C Permite introducir en esa posicin un caracter o un espacio, o bien no introducir nada. .,:;-/ Marcador de posicin decimal y separadores de miles, hora y fecha (el carcter depende del valor del cuadro de dilogo Propiedades de Configuracin regional en el Panel de control de Windows). < Hace que todos los caracteres se conviertan a minsculas. > Hace que todos los caracteres se conviertan a maysculas. ! Hace que la mscara de entrada se muestre de derecha a izquierda, en lugar de mostrarse de izquierda a derecha. Los caracteres introducidos en la mscara siempre se rellenan de izquierda a derecha. Puede incluir el signo de exclamacin en cualquier lugar de la mscara de entrada. \ Hace que el carcter siguiente se muestre como un carcter literal (por ejemplo, \A se muestra slo como A).

Tema 5. Lenguaje SQL


Visin general del tema
En el tema 3 hemos estudiado las operaciones del lgebra relacional, imprescindibles para entender las consultas que podemos realizar en una base de datos relacional. En general, el lgebra relacional est clasificada como un lenguaje de consulta formal procedimental, en el que el usuario indica cmo (en qu orden) se deben especificar las operaciones de la consulta para obtener el resultado deseado. En este tema vamos a estudiar el lenguaje de consulta ms comercial, el SQL, basado en el lgebra relacional y en el clculo relacional de tuplas. Los SGBDRs comerciales cuentan con una interfaz de lenguaje declarativo de alto nivel en el que se especifica la consulta en SQL (Lenguaje de Consulta Estructurado, del ingls Structured Query Language) y el propio SGBD es el que se encarga de realizar las optimizaciones necesarias para ejecutar la consulta.

Introduccin Consultas simples

EJ. Repaso consultas simples Consultas multitabla EJ. Repaso consultas multitabla Consultas resumen EJ. Repaso consultas resumen Subconsultas EJ. Repaso consultas subconsultas Manipulacin de datos Definicin de datos

Introduccin
Qu es el SQL?
El SQL (Structured query language), lenguaje de consulta estructurado, es un lenguaje surgido de un proyecto de investigacin de IBM para el acceso a bases de datos relacionales. Actualmente se ha convertido en el lenguaje estndar de las bases de datos, y la mayora de los sistemas de bases de datos lo soportan, desde sistemas para ordenadores personales, hasta grandes ordenadores. Como suele suceder en la industria informtica, a partir del estndar cada sistema ha desarrollado su propio SQL que puede variar de un sistema a otro, pero con cambios que no suponen ninguna complicacin para alguien que conozca un SQL concreto, como el que vamos a ver aqu corespondiente a Access. Como su nombre indica, el SQL nos permite realizar consultas a la base de datos. Pero el nombre se queda corto ya que SQL adems realiza funciones de definicin, control y gestin de la base de datos. Las sentencias SQL se clasifican segn su finalidad dando origen a tres lenguajes o mejor dicho tres sublenguajes:

DDL (Data Description Language): lenguaje de definicin de datos, incluye rdenes para definir, modificar o borrar las tablas en las que se almacenan los datos y de las relaciones entre estas. (Es el que ms varia de un sistema a otro) DCL (Data Control Language): lenguaje de control de datos, contiene elementos tiles para trabajar en un entorno multiusuario, en el que es importante la proteccin de los datos, la seguridad de las tablas y el establecimiento de restricciones en el acceso, as como elementos para coordinar la comparticin de datos por parte de usuarios concurrentes, asegurando que no interfieren unos con otros. DML (Data Manipulation Language): lenguaje de manipulacin de datos, nos permite recuperar los datos almacenados en la base de datos y tambin incluye rdenes para permitir al usuario actualizar la base de datos aadiendo nuevos datos, suprimiendo datos antiguos o modificando datos previamente almacenados.

Una sentencia de SQL es como una frase (escrita en ingls) con la que decimos lo que queremos obtener y de donde obtenerlo.

Todas las sentencias empiezan con un verbo (palabra reservada que indica la accin a realizar), seguido del resto de clusulas, algunas obligatorias y otras opcionales que completan la frase. Todas las sentencias siguen una sintaxis para que se puedan ejecutar correctamente..

Cmo se crea una sentencia SQL en Access


Para practicar con SQL utilizaremos el SQL del motor de base de datos que utiliza Access (Microsoft Jet 4.x). Para crear y despus ejecutar una sentencia SQL en Access, lo fcil es utilizar la ventana SQL de las consultas.
1. Para crear una consulta en SQL desde Access deberemos seguir los siguientes pasos: 2. Abrir la base de datos donde se encuentra la consulta a crear. 3. Hacer clic sobre el objeto Consulta que se encuentra a la izquierda de la ventana de

la base de datos.
4. Hacer clic sobre el botn Nuevo de la ventana de la base de datos. 5. En el cuadro de dilogo que aparece, seleccionar Vista Diseo. 6. Hacer clic sobre el botn Aceptar. 7. Aparecer un cuadro de dilogo. Como no queremos utilizar el generador grfico de

consultas que trae incorporado Access sino escribir nuestras propias sentencias SQL, no agregamos ninguna tabla.
8. Hacer clic sobre el botn Cerrar. 9. Aparecer la ventana de diseo de consultas. Hacer clic sobre el botn SQL en la

parte superior izquierda de la ventana.


10. Se abre una ventana donde introducimos la sentencia SQL. 11. Una vez escrita slo nos queda ejecutarla. Para ello hacer clic sobre el icono Ejecutar

(caracterizado por una admiracin en rojo) de la barra de herramientas.


12. Si nos hemos equivocado a la hora de escribir la sintaxis, Access nos saca un mensaje

de error y muchas veces el cursor se queda posicionado en la palabra donde ha saltado el error. Hay que ser observador porque a veces el error est antes o despus de donde se ha quedado el cursor.
13. Si no saca ningn mensaje de error, esto quiere decir que la sentencia respeta la

sintaxis de SQL. Sin embargo, esto no quiere decir que la sentencia est bien, puesto que puede que no obtenga los resultados que nosotros queremos; en este caso habr que rectificar la sentencia.
14. Guardar la consulta haciendo clic sobre el botn Guardar de la barra de

herramientas.

Consultas simples
Introduccin

Empezaremos por estudiar la sentencia SELECT, que permite recuperar datos de una o varias tablas. La sentencia SELECT es con mucho la ms compleja y potente de las sentencias SQL. Empezaremos por ver las consultas ms simples, basadas en una sola tabla. la sentencia SELECT forma parte del DML (lenguaje de manipulacin de datos) y en esta seccin veremos cmo seleccionar columnas de una tabla, cmo seleccionar filas y cmo obtener las filas ordenadas por el criterio que queramos. El resultado de la consulta es una tabla lgica, porque no se guarda en el disco sino que est en memoria y cada vez que ejecutamos la consulta se vuelve a calcular. Cuando ejecutamos la consulta se visualiza el resultado en forma de tabla con columnas y filas. En la sentencia SELECT tenemos que indicar qu columnas queremos que tenga el resultado y qu filas queremos seleccionar de la tabla origen.

SELECT Parte FROM Columnas calculadas Parte ORDER BY Control de los registros devueltos Seleccin de filas

SELECT Consultas simples La sentencia SELECT permite recuperar datos de una o de varias tablas. La sentencia SELECT es, con mucho, la ms compleja y potente de las sentencias de SQL. Empezaremos por ver las consultas ms simples, basadas en una sola tabla.. Detrs del SELECT indicamos las columnas que deseamos mostrar. Despus del FROM especificamos las tablas de donde han de recuperarse dichas columnas (para un mayor detalle consultar el apartado siguiente). En la parte WHERE podemos incluir las condiciones que han de cumplir las filas seleccionadas. Por ultimo, la parte ORDER BY nos permite obtener las filas de forma ordenada.

Notas 1. Se utiliza el asterisco para representar que queremos recuperar todas las columnas de la tabla. Esto tiene dos ventajas: es ms corto y adems, si aadimos una columna nueva en la tabla, esta nueva columna saldr sin tener que modificar la consulta. Se puede combinar el asterisco con el nombre de una tabla. Por ejemplo, EMPLEADO.*. 2. Las columnas se pueden especificar mediante su nombre simple (nbcol) o su nombre cualificado (nbtabla.nbcol, es decir, el nombre de la columna precedido del nombre de la tabla que contiene la columna y separados por un punto). El nombre cualificado se puede emplear siempre que queramos y es obligatorio en algunos casos que veremos ms adelante. Cuando el nombre de la columna o de la tabla contiene espacios en blanco, hay que poner el nombre entre corchetes [ ] y adems el nmero de espacios en blanco debe coincidir. Por ejemplo [codigo de cliente] no es lo mismo que [ codigo de cliente] (el segundo lleva un espacio en blanco delante de cdigo). 3. Cuando se visualiza el resultado de la consulta, normalmente las columnas toman el ttulo que se haya definido para la columna en la tabla. Si la columna no tiene ttulo, el encabezado ser el nombre del campo. Si queremos cambiar ese nombre lo podemos hacer definiendo un alias de columna mediante la clusula AS. Este alias ser el nombre que aparecer como ttulo de la columna.

Ejemplos 1. Lista todos los datos de las oficinas:


2. SELECT * FROM oficinas;

3. Lista el nombre, oficina y fecha de contrato de todos los empleados: 4. Lista fabricante, identificador de producto, descripcin y precio de todos los productos: 5. Lista el fabricante (con titulo "Fabricante"), el identificador de producto y la descripcin de todos los productos (antes de ejecutar esta consulta hay que eliminar el ttulo del campo "idFab"): Ejercicios
SELECT idFab AS Fabricante, idProducto, descripcion FROM productos SELECT idFab, idProducto, descripcion, precio FROM productos; SELECT nombre, oficina, contrato FROM empleados;

Base de datos "Empresa" 1. Lista las descripciones y los pesos de todos los productos. Guarda la consulta como "00SELECT01". 2. Lista todos los datos de todas las tiendas. Guarda la consulta como "00SELECT02". 3. Lista el identificador de almacen (poniendo como nombre de columna "ID almacn" y la direccin de todos los almacenes. Guarda la consulta como "00SELECT03". Parte FROM Consultas simples: SELECT Con la clusula FROM indicamos en qu tabla tiene que buscar la informacin. Una especificacin de tabla puede ser el nombre de una consulta guardada (las que aparecen en la ventana de base de datos), o el nombre de una tabla que a su vez puede tener el siguiente formato:

Notas 1. Aliastabla es un nombre de alias (es como un segundo nombre que asignamos a la tabla). Si en una consulta definimos un alias para la tabla, esta se deber nombrar en cualquier otro sitio utilizando ese nombre y no su nombre real (adems ese nombre slo es vlido en la consulta donde se define). El alias se suele emplear en consultas basadas en ms de una tabla que veremos en el tema siguiente. La palabra AS que se puede poner delante del nombre de alias es opcional y es el valor por defecto por lo que no tienen ningn efecto. 2. En una SELECT podemos utilizar tablas que no estn definidas en la base de datos (siempre que tengamos los permisos adecuados). Si la tabla no est en la base de datos activa, debemos indicar en qu base de datos se encuentra con la clusula IN. En la clusula IN el nombre de la base de datos debe incluir el camino completo, la extensin (.mdb), y estar entre comillas simples. Ejemplos 1. Lista todos los datos de las oficinas renombrando la tabla OFICINAS a "ofi":
2. SELECT * FROM oficinas AS ofi;

3. Lista el nombre, oficina y fecha de contrato de todos los empleados renombrando la tabla EMPLEADOS a "emple1": 4. Lista todos los aId de la tabla ALMACENES de la base de datos "empresa.mdb" (que se encuentra en "E:\Administrador\Mis documentos"):
SELECT aID FROM almacenes IN "E:\Administrador\Mis documentos\empresa.mdb"; SELECT nombre, oficina, contrato FROM empleados emple1;

Ejercicios

Base de datos "Empresa" 1. Lista las descripciones y los precios de todos los productos renombrando la tabla PRODUCTOS a "produ". Guarda la consulta como "01FROM01". 2. Lista todos los datos de todos los empleados de la base de datos "distribuidorFerreteria" (hazlo desde la base de datos "Empresa"). Guarda la consulta como "01FROM02". 3. Lista todos los precios de la consulta 1 de este mismo apartado (sin usar la tabla PRODUCTOS!). Guarda la consulta como "01FROM03". Columnas calculadas Consultas simples: SELECT Adems de las columnas que provienen directamente de la tabla origen, una consulta SQL puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de los datos almacenados. Para solicitar una columna calculada, se especifica en la lista de seleccin de columnas en vez de un nombre de columna una expresin . La expresin puede contener sumas, restas, multiplicaciones y divisiones, concatenacin, parntesis y tambin funciones predefinidas. Una expresin se forma combinando un operador con uno o generalmente dos operandos. Operadores Un operando puede ser un nombre de columna, una expresin, un valor concreto o una funcin predefinida. Un operador puede ser cualquiera de los siguientes:

Operador +, se utiliza para sumar dos nmeros. Operador -, se utiliza para hallar la diferencia entre dos nmeros. Operador *, se utiliza para multiplicar dos nmeros. Operador ^, se utiliza para elevar un nmero a la potencia del exponente (nmero ^ exponente)

Operador / , se utiliza para dividir dos nmeros y obtener un resultado de signo flotante. Operador \, se utiliza para dividir dos nmeros y obtener un resultado entero. Operador Mod, divide dos nmeros y devuelve slo el resto. El operador &, se utiliza para concatenar dos expresiones de tipo texto. Los operadores lgicos AND, OR y NOT.

Valores concretos

Los valores numricos se indican poniendo el nmero sin ms. Siempre se tiene que utilizar el punto para separar la parte entera de los decimales, aunque nuestra configuracin utilice la coma; adems los valores numricos no se pueden escribir formateados, no podemos escribirlos con separadores de miles. Por ejemplo en una expresin correcta no se puede escribir (ventas + 1.000.000) ni tampoco (ventas + 1,000,000), sino que lo correcto es (ventas +1000000) Los valores de tipo texto deben ir siempre entre comillas simples ' o dobles ". Los literales de fecha se escriben entre # y deben estar en el formato de EE.UU., incluso si no estamos utilizando la versin norteamericana del motor de base de datos Microsoft Jet. Por ejemplo, el 10 de mayo de 1996, se escribe 10/5/96 en Espaa y Latinoamrica, y 5/10/96 en Estados Unidos de Amrica. Para indicar la fecha 10 de mayo de 1996 en cualquier base de datos sea espaola, latinoamericana o de EE.UU., debemos escribirla #5/10/96#; con el formato #mes/dia/ao# Tambin se puede utilizar la funcin DateValue, que reconoce las configuraciones internacionales establecidas por Microsoft Windows. Por ejemplo, DateValue('10/5/96') es equivalente a #05/10/96# si nuestra configuracin de Windows define las fechas con el formato dia/mes/ao.

Funciones predefinidas. Access tiene muchas funciones predefinidas que se pueden utilizar, enumerarlas y explicarlas sera demasiado largo. Lo mejor es saber que tenemos a nuestra disposicin muchas funciones y cuando queramos obtener algo diferente consutar la ayuda de access para ver si existe una funcin para lo que queremos hacer. A ttulo de ejemplo tenemos unas que se utilizan ms a menudo:

DATE() devuelve el da en que estamos. NOW() devuelve el da y la hora actual. YEAR(fecha) devuelve el ao de la fecha especificada. MONTH(fecha) devuelve el mes de la fecha especificada. DATEVALUE(literal) convierte el literal en un valor de fecha.

Uso del parntesis.

Cuando combinamos varias expresiones podemos utilizar los parntesis para delimitar cada expresin. Siempre se tiene que utilizar un parntesis de apertura ( y uno de cierre ). El uso del parntesis sirve para que la expresin quede ms clara sobre todo cuando combinamos muchas expresiones, y para que los operadores actuen en el orden que nosotros queramos para as olvidarnos de la prioridad de los operadores. Ejemplo 1. Lista la ciudad, regin y el superavit de cada oficina:
SELECT ciudad, region, (ventas - objetivo) AS superavit FROM oficinas;

Ejercicios

Base de datos "distribuidorFerreteria" 1. Lista por cada producto su fabricante, su idproducto, su descripcin y el valor total existente en pesetas en funcin de su precio y existencias. Guarda la consulta como "02COLUMNAS01". 2. Lista el nombre, mes y ao del contrato de cada vendedor en tres columnas diferentes. Guarda la consulta como "02COLUMNAS02". 3. Lista la ventas de cada oficina en tres columnas con el formato: 22 tiene ventas de 186.042 pts. Guarda la consulta como "02COLUMNAS03". Base de datos "Empresa" 1. Lista los identificadores de almacenes, direciones y localidades de todos los almacenes con el formato: "El almacen A02 se encuentra en Huelva en la direccion Polgono Sur s/n" en una sola columna de ttulo "Situacion". Guarda la consulta como "02COLUMNAS04". 2. Lista para cada pedido el identificador de pedido y los das que han transcurrido desde que se realiz el pedido hasta el dia 1 de Diciembre de 2004. Guarda la consulta como "02COLUMNAS05". 3. Lista de cada producto la descripcin del producto, el precio sin decimales al que sale el kilogramo de producto y el precio con decimales al que sale el kilo de producto. Guarda la consulta como "02COLUMNAS06". Parte ORDER BY Consultas simples: SELECT En esta pgina se describe la capacidad de SQL de realizar ordenaciones al devolve resultados y las distintas opciones disponibles.

Para ordenar las filas del resultado de la consulta, tenemos la clusula ORDER BY. Con esta clusula se altera el orden de visualizacin de las filas de la tabla devuelta por la consulta pero en ningn caso se modifica el orden de las filas dentro de la tabla. Notas

Podemos indicar la columna por la que queremos ordenar utilizando su nombre de columna (nbcolumna) o utilizando su nmero de orden que ocupa en la lista de seleccin (Ncolumna). En algunos sistemas (caso de Access) tambien podemos incluir una expresin en vez de un nombre de columna. Por defecto el orden ser ascendente (ASC) (de menor a mayor si el campo es numrico, por orden alfabtico si el campo es de tipo texto, de anterior a posterior si el campo es de tipo fecha/hora, etc. Si queremos podemos alterar ese orden utilizando la clusula DESC (DESCendente), en este caso el orden ser el inverso al ASC. Tambin podemos ordenar por varias columnas. En este caso se indican las columnas separadas por comas. Se ordenan las filas por la primera columna de ordenacin, y para un mismo valor de la primera columna, se ordenan por la segunda columna, y as sucesivamente. La clusula DESC o ASC se puede indicar para cada columna y as utilizar una ordenacin distinta para cada columna. Por ejemplo ascendente por la primera

columna y dentro de la primera columna, descendente por la segunda columna Ejemplo 1. Lista el nombre, la oficina y la fecha de contrato de todos los empleados ordenados por su oficina: Ejercicios
SELECT nombre, oficina, contrato FROM empleados ORDER BY oficina;

Base de datos "distribuidorFerreteria" 1. Obtener un listado alfabtico de los empleados incluyendo nombre, numero de empleado y oficina donde trabaja. Guarda la consulta como "03ORDER01". 2. Obtener un listado de los empleados por orden de antiguedad en la empresa (los de ms antiguedad primero) incluyendo su nombre y su nmero de empleado. Guarda la consulta como "03ORDER02". 3. Obtener un listado de los nombres de los empleados y de su ventas ordenados por el volumen de sus ventas sacando los de menores ventas primero. Guardar la consulta como "03ORDER03". 4. Obtener un listado de los empleados por orden de antiguedad en la empresa (los ms recientemente incorporados primero) incluyendo su nombre y su nmero de empleado. Guarda la consulta como "03ORDER04". 5. Mostrar las ventas, regin y ciudad de cada oficina ordenadas por orden alfabtico de regin y dentro de cada regin por ciudad. Guardar la consulta como "03ORDER05". 6. Listar la regin, la ciudad y el superavit de las oficinas clasificadas por regin y dentro de cada regin por superavit de modo que las de mayor superavit aparezcan las primeras. Guardar la consulta como "03ORDER06". 7. Listar la regin y la ciudad de las oficinas clasificadas por regin y dentro de cada regin por superavit de modo que las de mayor superavit aparezcan las primeras. Guardar la consulta como "03ORDER07". Control de los registros devueltos Consultas simples: SELECT En esta pgina se describen los mecanismos que incorpora SQL para indicar qu filas queremos visualizar.

Notas

Al incluir la clusula DISTINCT en la SELECT, se eliminan del resultado las repeticiones de filas. Si por el contrario queremos que aparezcan todas las filas incluidas las duplicadas , podemos incluir la clusula ALL o nada, ya que ALL es el valor que SQL asume por defecto. La clusula TOP permite sacar las n primeras filas de la tabla origen. No elige entre valores iguales, si pido los 25 primeros valores pero el que hace 26 es el mismo valor que el 25, entonces devolver 26 registros en vez de 25 (o los que sea). Siempre se guia por la columna de ordenacin, la que aparece en la clusula ORDER BY o en su defecto la clave principal de la tabla. El nmero de filas que queremos visualizar se puede expresar con un nmero entero o como un porcentaje sobre el nmero total de filas.. En este ltimo caso utilizaremos la clusula TOP n PERCENT (porcentaje en ingls).

Ejemplo 1. Lista todos los lmites de crdito de los clientes de la empresa:


2. SELECT ALL limiteCredito FROM clientes;

3. Lista los distintos lmites de crdito de los clientes de la empresa:


4. SELECT DISTINCT limiteCredito FROM clientes;

5. Lista los nombres de los primeros 3 clientes ordenados alfabticamente:

SELECT TOP 3 nombre FROM clientes ORDER BY nombre;

6. Lista los nombres de los clientes ordenados alfabticamente mostrando solo el 30% del total de clientes: Ejercicios
SELECT TOP 30 PERCENT nombre FROM clientes ORDER BY nombre;

Base de datos "distribuidorFerreteria" 1. Obtener un listado de todos los cdigos de los directores de oficina (con duplicados). Guarda la consulta como "04CONTROLFILAS01". 2. Obtener un listado con todos los cdigos de los directores de oficina (sin duplicados). Guarda la consulta como "05CONTROLFILAS02". 3. Obtener un listado de los distintos cargos que tienen los empleados (sin duplicados). Guarda la consulta como "'05CONTROLFILAS03". 4. Obtener un listado con los nombres, la edad y la edad con la que entraron en la empresa los 3 empleados que ms ventas han hecho. Guardar la consulta como "05CONTROLFILAS04". 5. Lista el cdigo y el nombre de los empleados ordenndolos por fecha de contrato y sacando nicamente los dos ms antiguos. Guarda la consulta como "05CONTROLFILAS05". 6. Lista el cdigo y el nombre de los empleados ordenndolos por fecha de contrato y sacando nicamente los tres ms antiguos. Guarda la consulta como "05CONTROLFILAS06". 7. Lista el nombre de los empleados y sus cuotas en euros ordenndolos por fecha de contrato y sacando nicamente un 20% del total de empleados. Guardar la consulta como "05CONTROLFILAS07". Seleccin de filas Consultas simples: SELECT En esta pgina se describe la utilizacin de la clasula WHERE para especificar que filas nos interesa que devuelva la consulta. La clusula WHERE selecciona unicamente las filas que cumplan la condicin de seleccin especificada. La consulta slo devolver las filas para las cuales la condicin es verdadera (TRUE). La condicin de seleccin puede ser cualquier condicin vlida o combinacin de condiciones utilizando los operadores NOT (no) AND (y) y OR ().

Notas

Un test de comparacin compara el valor de una expresin con el valor de otra.. La sintaxis es:

Un test de rango examina si el valor de la expresin esta comprendido entre dos valores definidos por exp1 y exp2.Su sintaxis es:

Un test de pertenencia a conjunto examina si el valor de la expresin es uno de los valores incluidos en la lista de valores. Tiene la siguiente sintaxis.

Cuando una columna que interviene en una condicin de seleccin contiene el valor nulo, el resultado de la condicin no es verdadero ni

falso, sino nulo , sea cual sea el test que se haya utilizado. Por eso si queremos listar las filas que tienen valor en una determinada columna, no podemos utilizar el test de comparacin, la condicin oficina = null devuelve el valor nulo sea cual sea el valor contenido en oficina. Si queremos preguntar si una columna contiene el valor nulo debemos utilizar un test especial , el test de valor nulo. Tiene la siguiente sintaxis:

Un test de comparacin con patrn se utiliza cuando queremos utilizar caracteres comodines para formar el valor con el que comparar. Los comodines ms usado son ? (representa un caracter cualquiera), * (representa cero o ms caracteres) y # (representa un dgito cualquiera). La sintaxis es:

Ejemplo 1. Lista los nombres de los clientes cuyo nmero de representante sea 101 o 102:
SELECT nombre FROM clientes WHERE repClie = 101 OR repClie = 102;

2. Lista de los nombres de empleado cuyas ventas superan su cuota:


SELECT nombre FROM empleados WHERE ventas > cuota;

3. Lista los nombres de los empleados cuyas ventas estn comprendidas entre 100.000 y 500.000 pesetas:
4. SELECT nombre FROM empleados WHERE ventas BETWEEN 100000 AND 500000;

5. Lista los nombres de los empleados que trabajan en la oficina 12 y 14:


SELECT nombre FROM empleado WHERE oficina IN (12, 14);

6. Lista las ciudades que tienen alguna oficina sin director:


7. SELECT ciudad FROM oficinas WHERE dir IS NULL;

8. Lista los empleados cuyo nombre empieze por Luis: Ejercicios


SELECT nombre FROM empleados WHERE nombre LIKE 'Luis*';

Base de datos "distribuidorFerreteria" 1. Lista los nombres y la edad de los empleados contratados antes del ao 88. Guarda la consulta como "05WHERE01". 2. Lista todos los datos de las oficinas cuyas ventas estn por debajo del 80% de su objetivo. Guarda la consulta como "05WHERE02". 3. Lista las distintas ciudades donde hay oficinas dirigidas por el empleado 108. Guarda la consulta como "05WHERE03".

4. Listar las descripciones y los precios de los productos cuyo precio est comprendido entre 1.000 y 1.500 pesetas. Guarda la consulta como "05WHERE04". 5. Lista los nombres de los empleados cuya edad este entre 20 y 40 aos y cuya incorporacin a la empresa haya sido entre el 31 de Diciembre del 88 al 1 de Diciembre del 99. Guarda la consulta como "'05WHERE05". 6. Obtener el nemro de cliente y el importe de los pedidos con cdigo de pedido 112992, 113057 y 113069. Guarda la consulta como "05WHERE06". 7. Obtener un listado con el nombre y el lmite de crdito de los clientes Mara Silva, Salomon Bueno y Jaime Llorens. Guarda la consulta como "05WHERE07". 8. Lista el nombre y el cargo de todos aquellos empleados que no tienen jefe. Guarda la consulta como "05WHERE08". 9. Lista el cdigo de la oficina y la ciudad de todas aquellas oficinas que tengan asignado un objetivo de ventas. Guarda la consulta como "05WHERE09". 10.Lista los nombres y lso cdigos de cliente de todos aquellos clientes con algn apellido Garca. Guarda la consulta como "05WHERE10". 11.Lista los nombres de los empleados cuyo nombre contenga una a como tercera letra. Guarda la consulta como "05WHERE11". 12.Lista los nombres de los empleados en cuyo cargo aparezca la palabra "Dir" o que no tengan oficina asignada an. Guarda la consulta como "05WHERE12". Ejercicios de repaso 1 Consultas simples En esta pgina se incluyen una relacin de ejercicios para afianzar los conceptos de SQL vistos hasta el momento. Base de datos "distribuidorFerreteria" 1. Obtener una lista de todos los productos indicando el identificativo del fabricante, el identificativo del producto, la descripcin, el precio, el precio con IVA incluido (el precio anterior aumentado en un 16%) de aquellos productos cuyas existencias estn por debajo de 20 unidades o por encima de 200 unidades y que adems su precio no supere las 300 pesetas. Guardar la consulta como "06REPASO01". 2. De cada pedido queremos saber su nmero de pedido, el cdigo del fabricante, el cdigo del producto, la cantidad solicitada, el importe total y el importe por unidad, todo ello ordenado primero los pedidos con importe por unidad ms caro. Guardar la consulta como "06REPASO02". 3. Listar de cada empleado su nombre, el nmero de empleado, su ao de nacimiento (suponiendo que este ao ya han cumplido aos) y el finiquito que cobraran a razn de 360 euros por ao trabajado en la empresa de

todos aquellos trabajadores que son representantes y trabajan en la oficina 12. Guardar la consulta como "06REPASO03". 4. Obtener la lista de todos los clientes ordenados por cdigo de representante asignado mostrando todas las columnas de la tabla. Guardar la consulta como "06REPASO04". 5. Obtener la ciudad , regin y cdigo de oficina de todas las oficinas ordenadas por orden alfabtico de regin y dentro de cada regin por ciudad (si hay ms de una oficina en la misma ciudad, aparecer priemro la que tenga el nmero de oficina mayor). Guardar la consulta como "06REPASO05". 6. Listar todos los datos de las 4 lneas de pedido ms caras (las de mayor importe) y que pertenezcan al fabricante "aci". Guardar la consulta como "06REPASO06". 7. Obtener las mismas lneas del ejercicio 2 de este mismo apartado pero sacando nicamente las 5 lneas de pedido de mayor precio unitario. Guardar la consulta como "06REPASO07". 8. Listar toda la informacin que contiene la base de datos sobre los pedidos realizados hace 5405 dias (suponiendo que hoy fuera 17 de Enero de 2005) ms el precio por unidad del producto del que se trate. Guardar la consulta como "06REPASO08". 9. Listar los objetivos de venta, la ciudades y las regiones de las oficinas situadas en el norte o en el este (apareciendo primero las del norte y despus las del este). Guardar la consulta como "06REPASO09". 10.Listar el identificador de producto y la descripcin de aquellos productos que empiecen por 8 y acaben por x. Guardar la consulta como "06REPASO10". 11.Listar el nombre y la fecha de contrato de aquellos empleados apellidados Rovira o con nombre Juan ordenador por la diferencia entre objetivo y ventas actuales. Guardar la consulta como "06REPASO11".

Consultas multitabla
Introduccin
En esta seccin vamos a estudiar las consultas multitabla, llamadas as porque estn basadas en ms de una tabla. El SQL de Microsoft Jet 4.x soporta dos grupos de consultas multitabla:

La unin de tablas La composicin de tablas

UNION Producto cartesiano INNER JOIN

LEFT JOIN & RIGHT JOIN

UNION Consultas multitabla En esta seccin se describe la funcionalidad de la instruccin UNION para poder operar con diversas tablas.. El operador UNION sirve para obtener a partir de dos tablas con las mismas columnas , una nueva tabla con las filas de la primera y las filas de la segunda. La sintaxis es la siguiente:

Notas 1. Consulta puede ser un nombre de tabla , un nombre de consulta (en estos dos casos el nombre debe estar precedido de la palabra TABLE ), o una sentencia SELECT completa (en este caso no se puede poner TABLE). La sentencia SELECT puede ser cualquier sentencia SELECT con la nica restriccin de que no puede contener la clusula ORDER BY . Despus de la primera consulta viene la palabra UNION y a continuacin la segunda consulta. La segunda consulta sigue las mismas reglas que la primera consulta. 2. Las dos consultas deben tener el mismo nmero de columnas pero las columnas pueden llamarse de diferente forma y ser de tipos de datos distintos . 3. Las columnas del resultado se llaman como las de la primera consulta . 4. Por defecto la unin no incluye filas repetidas , si alguna fila est en las dos tablas, slo aparece una vez en el resultado. Si queremos que aparezcan todas las filas incluimos la palabra ALL. El empleo de ALL tienen una ventaja: la consulta se ejecutar ms rapidamente . Puede que la diferencia no se note con tablas pequeas, pero si tenemos tablas con muchos registros (filas) la diferencia puede ser notable. 5. Se puede unir ms de dos tablas, para ello despus de la segunda consulta repetimos la palabra UNION y as sucesivamente. 6. Tambin podemos indicar que queremos el resultado ordenado por algn criterio, en este caso se incluye la clusula ORDER BY que ya vimos

en el tema anterior. La clusula ORDER BY se escribe despus de la ltima consulta , al final de la sentencia; para indicar las columnas de ordenacin podemos utilizar su nmero de orden o el nombre de la columna. En este ltimo caso se deben de utilizar los nombres de columna de la primera consulta ya que son los que se van a utilizar para nombrar las columnas del resultado. Ejemplos 1. Lista todos los cdigos de fabricante y de producto de aquellos productos que tienen existencias igual a cero o que su precio sea menor que 80 pesetas ordenado por cdigo de producto.:
2. 3. 4. 5. (SELECT idFab, idProducto FROM productos WHERE existencias = 0) UNION (SELECT idFab, idProducto FROM productos WHERE precio < 80) ORDER BY 2;

Ejercicios

Base de datos "distribuidorFerreteria " 1. Lista todos los datos de los productos cuyo cdigo de producto empiece por 41 o bien su descripcin est formada por dos o ms palabras (es obligatorio usar la instruccin UNION). Guarda la consulta como "07UNION01". 2. Lista el cdigo de fabricante y el codigo de producto de aquellos productos que tengas existencias igual a cero o que aparezcan en pedidos del ao 90. Guarda la consulta como "07UNION02". 3. Lista el cdigo de empleado de aquellos empleados que tienen como jefe al empleado 106 o bien que representan a clientes cuyo apellido acaba en s. Guarda la consulta como "07UNION03". 4. Lista los cdigos de oficina de aquellas oficinas cuyas ventas superan a su objetivo de ventas o bien en las que haya empleados con el cargo de director. Guarda la consulta como "07UNION04". Base de datos "Empresa" 1. Lista las direcciones y las ciudades donde hay almacenes o tiendas. Guarda la consulta como "07UNION05". 2. Lista todos los datos que contiene la base de datos acerca de existencias. En concreto, se quiere un listado con el id de tienda o el id de almacen, el id de producto y el nmero de existencias (una lnea para las existencias de ese producto en almacen y otra en tienda). Se prohibe usar la sentencia SELECT y es obligatorio usar la sentencia UNION. Guarda la consulta como "07UNION06". 3. Se pide una lista con los identificadores de producto de aquellos productos que pesan entre 10 y 35 kilos (ambos valores incluidos) o bien se dispone de ms de 80 unidades de ellos en alguna tienda o bien se pidieron el da 18 de Febrero de 2004. Guardar la consulta como "07UNION07". Producto cartesiano

Consultas multitabla En esta seccin se describen las caractersticas de la realizacin del producto cartesiano de dos o ms tablas mediante SQL. Como sabemos de cuando estudiamos el lgebra relacional, el producto cartesiano es un tipo de composicin de tablas. Aplicando el producto cartesiano a dos tablas se obtiene una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla , y las filas de la tabla resultante son todas las posibles concatenaciones de filas de la primera tabla con filas de la segunda tabla .

Notas 1. El producto cartesiano se indica poniendo en la FROM las tablas que queremos componer separadas por comas , podemos obtener as el producto cartesiano de dos, tres, o ms tablas. nbtabla puede ser un nombre de tabla o un nombre de consulta.

2. Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles combinaciones de filas por lo tanto si tenemos dos tablas de 100 registros cada una, el resultado tendr 100x100 filas, si el producto lo hacemos de estas dos tablas con una tercera de 20 filas, el resultado tendr 200.000 filas (100x100x20) y estamos hablando de tablas pequeas. Se ve claramente que el producto cartesiano es una operacin costosa sobre todo si operamos con ms de dos tablas o con tablas voluminosas. 3. Se puede componer una tabla consigo misma (en este caso es obligatorio utilizar un nombre de alias por lo menos para una de las dos). 4. Esta operacin por s sola no es muy utilizada y normalmente slo se usa cuando queremos componer dos tablas para aadir a las filas de una tabla, una fila de la otra tabla. Para realizar esto se aade en la parte WHERE una condicin para emparejar las filas tal y como se ve en el ejemplo 2. En este ejemplo, las columnas que aparecen en la clusula WHERE se denominan columnas de emparejamiento ya que permiten emparejar las filas de las dos tablas. Las columnas de emparejamiento no tienen por qu estar incluidas en la lista de seleccin. Ejemplos 1. Realiza el producto cartesiano de las tablas de clientes y de empleados: 2. Lista el nombre de los empleados y la ciudad donde se encuentra la oficina donde trabajan:
3. SELECT nombre, ciudad 4. FROM empleados, oficinas WHERE empleados.oficina = oficinas.oficina; SELECT empleados.*, clientes.* FROM empleados, clientes;

5. Lista el nombre de los empleados y para cada uno, el nombre de su jefe:


6. SELECT empleados.nombre, empJefe.nombre 7. FROM empleados, empleados AS emJefe WHERE empleados.jefe = empJefe.numEmp;

Ejercicios

Base de datos "distribuidorFerreteria " 1. Lista los nombres de cliente y, para cada uno de ellos, el nombre de su representante. Guarda la consulta como "08CARTESIANO01". 2. Lista el cdigo de producto, el nmero de pedido, la cantidad y la descripcin del producto para aquellos pedidos que hayan sido gestionados por el representante 108. Guarda la consulta como "08CARTESIANO02". 3. Lista el cdigo de producto, el nmero de pedido, la cantidad y la descripcin del producto para aquellos pedidos que hayan sido gestionados por representantes cuyo nombre empiece por A. Guarda la consulta como "08CARTESIANO03".

4. Lista el nombre de empleado y el nombre de su jefe de aquellos empleados que tienen un jefe que, a su vez, tiene un jefe de nombre Luis. Guarda la consulta como "08CARTESIANO04". Base de datos "Empresa" 1. Lista las direcciones de las tiendas donde hay existencias del producto P25. Guarda la consulta como "08CARTESIANO04". 2. Lista las direcciones de las tiendas donde hay existencias de alguno de los televisores disponibles en la empresa. Guarda la consulta como "08CARTESIANO05". INNER JOIN Consultas multitabla En esta seccin se describen la sintaxis y utilizacin de la clasula INNER JOIN de SQL como medio para realiza consultas en ms de una tabla.

La sintaxis de la instruccin INNER JOIN es la siguiente:

Notas 1. El INNER JOIN es un tipo de composicin que permite emparejar filas de distintas tablas de forma ms eficiente que con el producto

cartesiano (siempre y cuando al menos una de las columnas de emparejamiento tenga ndice) . En vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condicin de emparejamiento, el INNER JOIN para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con lo cual se emparejan slo las filas que luego aparecen en el resultado. 2. Si se compone un tabla consigo misma, es obligatorio definir al menos un alias de tabla en la especificacin de tabla. Dentro de la clusula ON los nombres de columna deben ser siempre nombres cualificados (llevar delante el nombre de la tabla y un punto). Como es evidente, las columnas de emparejamiento deben contener la misma clase de datos (o al menos similares). 3. Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condicin entre parntesis. Ejemplos 1. Lista el nombre de los empleados y la ciudad donde se encuentra la oficina donde trabajan:
2. SELECT nombre, ciudad 3. FROM empleados INNER JOIN oficinas 4. ON (empleados.oficina = oficinas.oficina);

5. Lista el nombre de los empleados y para cada uno, el nombre de su jefe:


6. SELECT empleados.nombre, empJefe.nombre 7. FROM empleados INNER JOIN empleados AS jefes 8. ON (empleados.jefe = jefes.numEmp);

9. Lista el cdigo de todos los pedidos y la descripcin del producto pedido:


10. SELECT pedidos.codigo, productos.descripcion FROM pedidos INNER JOIN productos 11. ON (pedidos.fab = productos.idFab) AND (pedidos.producto = productos.idProducto);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Lista el nombre de cliente, el lmte de crdito y el nombre de su representante de todos los clientes (utilizando INNER JOIN). Guarda la consulta como "09INNER01". 2. Lista el nombre de los empleados y el nmero de aos que le saca el jefe para todos los empleados que tengan jefe (utilizando INNER JOIN). Guarda la consulta como "09INNER02". 3. Lista el nombre de cliente, el nombre de su representante y el nombre del jefe de su representante (utilizando INNER JOIN). Guarda la consulta como "09INNER03". 4. Lista el cdigo de pedido, el nombre del empleado que tramito el pedido y el nombre del cliente que lo solicit de los aquellos pedidos cuyos productos en la actualidad superan las 100 unidades de existencias (utilizando INNER JOIN). Guarda la consulta como "09INNER05".

5. Lista el nombre de empleado y el nombre de su jefe para todos los empleados (utilizando INNER JOIN y algo ms). Guarda la consulta como "09INNER04". LEFT JOIN & RIGHT JOIN Consultas multitabla En esta seccin se describen la sintaxis y utilizacin de las clasulas LEFT JOIN y RIGHT JOIN de SQL como medio para realiza consultas en ms de una tabla. La sintaxis de la instruccin LEFT JOIN es la misma que la de la instruccin INNER JOIN cambiando la palabra INNER por la palabra LEFT. De la misma forma, la sintaxis de la instruccin RIGHT JOIN es la misma que la de la instruccin INNER JOIN cambiando la palabra INNER por la palabra RIGHT. Notas 1. Las composiciones vistas hasta ahora (el producto cartesiano y el INNER JOIN ) son composiciones internas ya que todos los valores de las filas del resultado son valores que estn en las tablas que se combinan. En los casos en los que queramos que tambin aparezcan las filas que no tienen una fila coincidente en la otra tabla, utilizaremos el LEFT o RIGHT JOIN. 2. El LEFT JOIN operacin consiste en aadir al resultado del INNER JOIN las filas de la tabla de la izquierda que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la derecha con valores nulos. 3. El RIGHT JOIN consiste en aadir al resultado del INNER JOIN las filas de la tabla de la derecha que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la izquierda con valores nulos . 4. En teora, una operacin LEFT JOIN o RIGHT JOIN se puede anidar dentro de una operacin INNER JOIN, pero una operacin INNER JOIN no se puede anidar dentro de LEFT JOIN o RIGHT JOIN. Sin embargo, cuandos e entremezclan INNER JOIN y LEFT/RIGHT JOIN suele producirse un error. En estas situaciones una solucin es recurrir a crear una consulta independiente que realice la primera combinacin e incluya esa consulta en otra instruccin SQL Ejemplos 1. Lista el nombre de todos los empleados (an si el empleado no tienen oficina adscrita) y la ciudad donde trabajan:
2. SELECT empleados.nombre, oficinas.ciudad 3. FROM empleados LEFT JOIN oficinas 4. ON (empleados.oficina = oficinas.oficina);

5. Lista el nombre de todos los empleados (an si el empleado no tienen oficina adscrita) y la ciudad donde trabajan (otra solucin):
6. SELECT empleados.nombre, oficinas.ciudad 7. FROM oficinas RIGHT JOIN empleados ON (oficinas.oficina = oficinas.oficina);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Lista el cdigo de oficina, la ciudad y el nombre del director si lo hay de todas las oficinas. Guarda la consulta como "10RIGHT01". 2. Lista el nombre de empleado y el nombre de su jefe para todos los empleados (sin utilizar INNER JOIN). Guarda la consulta como "10RIGHT02". 3. Lista el nombre de empleado y la ciudad de la oficina donde trabaja en caso de que trabaje en alguna de los empleados de nombre Juan. Guarda la consulta como "10RIGHT03". 4. Lista para aquellos clientes de nombre Salomn, Julian y Julia, su nombre completo, el nombre de su representante y el nombre de la ciudad donde est la oficina donde trabaja su representante en caso de que este trabaje en alguna. Guarda la consulta como "10RIGHT04". 5. Lista para todas las oficinas el cdigo de oficina, la ciudad donde esta la oficina, el nombre de su director si lo hubiera y el nombre del jefe de dicho director si lo hay. Guarda la consulta como "10RIGHT05". Ejercicios de repaso 2 Consultas multitabla En esta pgina se incluyen una relacin de ejercicios para afianzar los conceptos de SQL vistos hasta el momento Base de datos "distribuidorFerreteria" 1. Listar las oficinas del este indicando para cada una de ellas su cdigo, su ciudad, su supervit (objetivos de venta menos ventas) y los nombres de sus empleados. Ordenar el listado por el supervit (de menor a mayor). Guardar la consulta como "11REPASO01". 2. Listar el nombre de los empleados que realizaron un pedido el mismo da en que fueron contratados. Guardar la consulta como "11REPASO02". 3. Listar los empleados con una cuota superior a la de su jefe; para cada empleado sacar su nombre su cuota y la cuota de su jefe, todo ello ordenado por la diferencia entre la cuota del empleado y la de su jefe (de mayor a menor). Guardar la consulta como "11REPASO03". 4. Listar los cdigos y nombres de los empleados que tienen una lnea de pedido superior a 10.000 ptas o que tengan una cuota inferior a 10.000 pts, ordenados por sus ventas. Guardar la consulta como "11REPASO04". 5. Listar todos los datos de los pedidos superiores a 25.000 pts, incluyendo el nombre del empleado que tom el pedido y el nombre del cliente que lo

solicit, ordenado por precio unitario del producto pedido (de mayor a menor). Guardar la consulta como "11REPASO05". 6. Listar todas las oficinas cuyo objetivo de ventas sea superior a 500.000 pts. Incluir el cdigo de la oficina, la ciudad y el nombre de su director. Ordenar el listado por el cdigo de la oficina. Guardar la consulta como "11REPASO06". 7. Lista el nombre de todos los clientes cuyo lmite de crdito multiplicado por cuatro sea superior a las ventas del empleado que lo representa. Ordenar el listado por la ciudad donde trabaja el empleado que representa al cliente. Guardar la consulta como "11REPASO07". 8. Listar los cdigos de oficina y la ciudad de las oficinas con objetivo superior a 600.000 pts indicando para cada una de ellas el nombre de su director. Si alguna no tuviera director, en su campo director del listado mostrar el texto &quotSin director&quot. Guardar la consulta como &quot11REPASO08" 9. Listar el cdigo de oficina, la ciudad y el supervit de aquellas oficinas que tienen empleados. Guardar la consulta como "11REPASO09". 10.Mostrar los nombres de los jefes de empleados que hayan tramitado algn pedido de cualquier tipo de reostato ordenados alfabticamente. Guardar la consulta como "11REPASO10". 11.Listar el nombre de todos los empleados y de todos los clientes que tienen como jefe o representante a Luis Antonio. Ordenar el listado alfabticamente. Guardar la consulta como "11REPASO11".

Consultas resumen
Introduccin
En el SQL de Microsoft Access y en el de la mayora de los motores de bases de datos relacionales, podemos definir un tipo de consultas cuyas filas resultantes son un resumen de las filas de la tabla origen. Por esta razn, las denominamos consultas de resumen. Es importante entender que las filas del resultado de una consulta de resumen tienen una naturaleza distinta a las filas de las dems tablas resultantes de consultas, ya que corresponden a varias filas de la tabla orgen. Para simplificar, veamos el caso de una consulta basada en una sola tabla: en ellas, una fila de una consulta 'no resumen' corresponde a una fila de la tabla origen y contiene datos que se encuentran en una sola fila del origen. Sin embargo, una fila de una consulta de resumen se corresponde a un resumen de varias filas de la tabla origen. Esta diferencia es lo que va a originar una serie de restricciones que sufren las consultas de resumen y que veremos a lo largo de esta seccin.

Funciones de columna GROUP BY HAVING

Funciones de columna

Consultas resumen En esta seccin se describen las funciones de columna que intervienen en la consultas resumen. Una funcin de columna se aplica a una columna y obtiene un valor que resume el contenido de la columna. El argumento de la funcin indica con qu valores se tiene que operar y suele ser el nombre de una columna o una expresin que devuelva una lista de valores. Las funciones de columna se especifican en la parte SELECT de una cosulta. Es interesante destacar que el valor nulo no equivale al valor 0. Las funciones de columna no consideran los valores nulos mientras que consideran el valor 0 como un valor. Adems; las funciones de columna no se pueden anidar (aunque si se pueden combinar). Funciones 1. SUM(expresion) La funcin SUM() calcula la suma de los valores indicados en el argumento. Los datos que se suman deben ser de tipo numrico (entero, decimal, coma flotante o monetario). El resultado ser del mismo tipo aunque puede tener una precisin mayor. 2. AVG(expresion) La funcin AVG() calcula el promedio (la media arimtica) de los valores indicados en el argumento. Tambin se aplica a datos numricos, y en este caso el tipo de dato del resultado puede cambiar segn las necesidades del sistema para representar el valor del resultado. 3. MIN(expresion) y MAX(expresion) Las funciones MIN() y MAX() determinan los valores menores y mayores respectivamente. Los valores de la columna pueden ser de tipo numrico, texto o fecha. El resultado de la funcin tendr el mismo tipo de dato que la columna. Si la columna es de tipo numrico MIN() devuelve el valor menor contenido en la columna. Si la columna es de tipo texto MIN() devuelve el primer valor en orden alfabtico, y si la columna es de tipo fecha, MIN() devuelve la fecha ms antigua y MAX() la fecha ms reciente. 4. COUNT(nbcolumna) La funcin COUNT(nb columna) cuenta el nmero de valores que hay en la columna, los datos de la columna pueden ser de cualquier tipo, y la funcin siempre devuelve un nmero entero. Si la columna contiene valores nulos esos valores no se cuentan. Si en la columna aparece un valor repetido, lo cuenta varias veces. 5. COUNT(*)
COUNT(*)permite contar filas en vez de valores. Si la columna no contiene ningn valor nulo, COUNT(nbcolumna) y COUNT(*) devuelven el mismo

resultado, mientras que si hay valores nulos en la columna,

COUNT(*)cuenta tambin esos valores mientras que COUNT(nb columna) no

los cuenta. Ejemplos

1. Lista el nmero de empleados que tiene la empresa:


2. SELECT COUNT(*) 3. FROM empleados;

4. Lista el nmero de oficinas que tiene la empresa y el mnimo de sus ventas:


5. SELECT COUNT(*), MIN(ventas) 6. FROM oficinas;

Ejercicios

Base de datos "distribuidorFerreteria " 1. Obtn la suma de las ventas de los empleados.. Guarda la consulta como "12FUNCIONES01". 2. Obtn la media de los supervit de cada empleado (ventas menos cuota) de manera que adems el encabezado de la columna sea "Media de supervits" y el resultado venga acompaado de "Pts." Guarda la consulta como "12FUNCIONES02". 3. Obtn el mximo de lmite de crdito de los clientes que representa el empleado nmero 102. Guarda la consulta como "12FUNCIONES03".. 4. Obtn el nmero de clientes que representa el empleado de nombre Alvaro y el mnimo de crdito de dichos clientes. Guarda la consulta como "12FUNCIONES04". 5. Obtn el nmero de oficinas que estn en las regiones Centro, Oeste y Este y que tienen datos sobre ventas. Guarda la consulta como "12FUNCIONES05". 6. Obtn la suma total de objetivos de ventas de todas las oficinas y la media de ventas de los directores de todas las oficinas. Guarda la consulta como "12FUNCIONES06". 7. Obtn el nmero de empleados diferentes que han realizado pedidos. Guarda la consulta como "12FUNCIONES07". 8. Obtener el importe total de ventas de todos lo empleados y el mayor objetivo de las oficinas asignadas a los empleados. Guardar la consulta como "12FUNCIONES08". GROUP BY Consultas resumen En esta seccin se describe el funcionamiento de la clusula GROUP BY y sus efectos al introducirla en una consulta SELECT. En una consulta se pueden obtener subtotales con la clusula GROUP BY. Una consulta con una clusula GROUP BY se denomina consulta agrupada, ya que

agrupa los datos de la tabla origen y produce una nica fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupacin. El diagrama sintctico de la clusula GROUP BY es:

Notas 1. La columna de agrupacin se puede indicar mediante un nombre de columna o cualquier expresin vlida basada en una columna pero no se pueden utilizar los alias de campo. Tampoco puede ser una columna de tipo memo u OLE. 2. Se pueden agrupar las filas por varias columnas. En este caso se indican las columnas separadas por una coma y en el orden de mayor a menor agrupacin. 3. Todas las filas que tienen valor nulo en el campo de agrupacin, pasan a formar un nico grupo. Es decir, SQL considera el valor nulo como un valor cualquiera a efectos de agrupacin. 4. En la lista de seleccin slo pueden aparecer (cualquier otra cosa que se incluya en la lista de la parte SELECT producir un error): 1. Constantes (nmeros, cadenas literales, etc.) 2. Funciones de columna (actuando sobre cualquier columna). 3. Columnas o expresiones que aparezcan en la clusula GROUP BY.

4. Cualquier cosa que combine lo anterior. Ejemplos 1. Obtn la suma de ventas de cada regin:
2. SELECT region, SUM(ventas) 3. FROM oficinas 4. GROUP BY region;

5. Obtn la suma de ventas de cada ciudad, indicando a qu region pertenece:


6. SELECT region, ciudad, SUM(ventas) 7. FROM oficinas GROUP BY region, ciudad;

8. Obtn la suma de ventas de cada ciudad, indicando a qu region pertenece, pero slo para las ciudades de Madrid y Valencia:
9. SELECT region, ciudad, SUM(ventas) 10. FROM oficinas 11. WHERE (ciudad = "Madrid") OR (ciudad = "Valencia") GROUP BY region, ciudad;

Ejercicios

Base de datos "distribuidorFerreteria " 1. Obtn un resumen del nombre de cada fabricante y del precio medio de sus productos expresado junto a la unidad "Pts.". Guardar la consulta como "13GROUPBY01". 2. Obtn un resumen del nombre de cada fabricante y del precio medio de sus productos (sin contar para acada fabricante aquellos productos de los que no hay existencias) expresado junto a la unidad "Pts.". Guardar la consulta como "13GROUPBY02". 3. Obtn un resumen de los clientes que han hecho pedidos incluyendo el nombre de cliente y el dinero que ha gastado en pedidos. Guarda la consulta como "13GROUPBY03". 4. Obtn un resumen de todos los clientes incluyendo el nombre de cliente y el dinero que ha gastado en pedidos. Guarda la consulta como "13GROUPBY04". 5. Obtn un resumen de los directores de oficinas incluyendo su nombre, la media de objetivos de ventas de todas las oficinas que dirige, el mximo de dichos objetivos de ventas y el mnimo. Los encabezados de columna deben ser los suficientemente aclarativos. Guarda la consulta como "13GROUPBY05". 6. Obtn un resumen en el que se especifiquen los distintos cargos que existen en la empresa y la media de ventas que consiguen los empleados encuadrados en cada cargo. Solo nos interesa para calcular la media los empleados mayores de 40 aos. Guarda la consulta como "13GROUPBY06". 7. Obtn un listado en el que se especifique nombre de fabricante, nmero de empleados que han tramitado pedidos de ese fabricante y la media de

ventas de los empleados que han tramitado pedidos de ese fabricante. El listado debe estar ordenado con las medias de ventas ms altas primero. Guarda la consulta como "13GROUPBY07". HAVING Consultas resumen En esta seccin se describe el funcionamiento de la clusula HAVING y sus efectos al introducirla en una consulta SELECT con GROUP BY. La clasula HAVING nos permite seleccionar filas de la tabla resultante de una consulta de resumen.

Notas 1. Para la condicin de seleccin se pueden utilizar los mismos test de comparacin descritos en la clusula WHERE, pudiendose tambin incluir condiciones compuestas utilizando los operadores OR, AND y NOT.

2. En la condicin de seleccin de HAVING slo podemos incluir (cualquier otra cosa que se incluya producir un error): 1. Constantes (nmeros, cadenas literales, etc.). 2. Funciones de columna (actuando sobre cualquier columna). 3. Columnas o expresiones que aparezcan en la clusula GROUP BY. 4. Cualquier cosa que combine lo anterior. 3. El orden en el que SQL ejecuta una consulta resumen es: 1. Primero se toma la tabla origen (o se forma, si hay JOINs), atendiendo a la clusula FROM. 2. Se seleccionan de la tabla origen las filas que cumplen la parte WHERE. 3. Se agrupan las filas segn la clusula GROUP BY. 4. De cada grupo se obtiene una fila que contiene: las columnas especificadas en la parte GROUP BY, en la parte HAVING y en la lista de seleccin. 5. De las filas anteriores se seleccionan las que cumplen la parte HAVING. 6. Se seleccionan las columnas de la parte SELECT. 7. Se ordenan las filas segn la parte ORDER BY. Ejemplos 1. Obtener las regiones cuya suma total de ventas sea menor a 200.000 pesetas:
2. SELECT region, SUM(ventas) 3. FROM oficinas 4. GROUP BY region HAVING SUM(ventas) > 200000;

5. Obtn la suma de ventas de cada ciudad, indicando a qu region pertenece, para aquellas ciudades con sumas de ventas superiores a 600.000 pesetas:
6. 7. 8. 9. SELECT region, ciudad, SUM(ventas) FROM oficinas GROUP BY region, ciudad HAVING SUM(ventas) > 600000;

10.Teniendo en cuenta solo la soficinas con cdigo mayor que 20, obtn la suma de ventas de cada ciudad, indicando la ciudad y a qu region pertenece siempre que la suma de las ventas sea mayor que la suma de los objetivos:
11. 12. 13. 14. SELECT region, ciudad, SUM(ventas) AS [Suma ventas] FROM oficinas WHERE oficina > 20 GROUP BY region, ciudad HAVING SUM(ventas) > SUM(objetivo);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Obtn la media del lmite de crdito de los clientes agrupados lso clientes por su representante (incluye slo en el listado dos columnas: nmero de representante y media de lmite de crdito de sus clientes), pero solo de aquellos cuyas media de lmite de crdito sea mayor o igual a 50.000 . Guardar la consulta como "14HAVING01". 2. Obtn un listado con nombre de fabricante y el importe menor de entre los pedidos referidos a sus productos siempre que dicho mnimo supere las 655 pesetas. Guardar la consulta como "14HAVING02". 3. Considerando solo a los empleados de la empresa con cuota mayor que 300.000 pesetas, se pide obtener un listado de los mismos agrupados por jefe mostrando el nmero de dicho jefe y el mximo de ventas de sus empleados. De este listado no nos interesa si el jefe es el 106 o si el mximo de ventas de los empleados a su cargo es mayor que 400.000 pesetas. Guardar la consulta como "14HAVING03". 4. Obtener las oficinas con un promedio de ventas de sus empleados mayor que 500.000 pesetas (mostrar en el listado el promedio de dichas oficinas). Guarda la consulta como "14HAVING04". 5. Obtener el nmero de oficinas que gestiona cada empleado (mostrando en el listado el nombre del empleado y el nmero de oficinas que gestiona) siempre que la suma de las ventas de las oficinas que gestiona est entre 600.000 y 2.000.000 de pesetas. Guardar la consulta como "14HAVING05". 6. Mostrar una lista con los nombres de los clientes que hayan realizado ms de 1 pedido. Guardar la consulta como "14HAVING06". Ejercicios de repaso 3 Consultas resumen En esta pgina se incluyen una relacin de ejercicios para afianzar los conceptos de SQL vistos hasta el momento Base de datos "distribuidorFerreteria" 1. Cul es la cuota media y las ventas medias de todos los empleados?. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO01". 2. Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de venta (el precio de venta es el precio unitario en cada pedido). Es obligatorio poner el indicativo "Pts." en los importes obtenidos. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO02". 3. Hallar el precio medio de los productos del fabricante ACI en euros. Es obligatorio poner el indicativo "EUR." en los importes obtenidos. Es obligatorio conseguir que los encabezados de las columnas presenten

informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO03". 4. Cul es el nombre de aquellos clientes que han gastado ms de 30.000 pesetas en pedidos? Incluir junto al nombre el nmero de pedidos y el importe total de los pedidos realizados por dichos clientes. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO04". 5. Obtener un listado con el nombre de los productos de los que no se han hecho pedidos o cuyo primer pedido fue hecho despus de 1992. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO05". 6. Hallar cuntos pedidos hay de ms de 25000 pesetas. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO06". 7. Listar cuantos empleados trabajan en cada ciudad. Indicar en el listado el nombre de la ciudad y cuantos hay asignados. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO07". 8. Para cada empleado obtener su nmero de empleado, su nombre y el importe vendido por ese empleado a cada cliente indicando el nmero de cliente. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO08". 9. Para cada empleado cuyos pedidos sumen ms de 30.000 pesetas, hallar la fecha de su ltimo pedido. En el resultado indicar el nmero de empleado y la fecha de su ltimo pedido. Es obligatorio conseguir que los encabezados de las columnas presenten informacin aclarativa sobre el contenido de la columna. Guardar la consulta como "15REPASO09". 10.Conseguir el nmero de oficinas que tienen empleados con cuotas superiores a sus ventas. Se debe hacer con una subconsulta previa. Guardar la consulta como "15REPASO10". 11.Listar de cada producto su descripcin, su precio y la cantidad total pedida considerando todos sus pedidos. Incluir solo los productos cuya cantidad total pedida sea superior al 75% del stock. Guardar la consulta como "15REPASO11".

Subconsultas
Introduccin
Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamamos consulta principal.

Las subconsultas se utilizan cuando necesitamos ms de una consulta para resolver un problema de recuperacin de datos. Cierto es que se podra hacer un programa que usara primero una consulta y despus otra que utilizara los resultados de la primera, pero aqu trataremos de resolver el reto usando una nica consulta, por muy compleja que sea, para demostrar la potencia del lenguaje SQL. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que debe aparecer encerrada entre parntesis, no puede contener la clusula ORDER BY ni puede ser la UNION de varias sentencias SELECT. Adems, existen una serie de restricciones en cuanto al nmero de columnas y filas que puede devolver la subconsulta que iremos viendo a lo largo de esta seccin. Una subconsulta se puede incluir bien en la clusula FROM, bien en la clusula WHERE o bien en la clusula HAVING. Adems, una subconsulta se puede anidar en otra subconsulta.

Subconsultas en la parte FROM Subconsultas mono-registro Subconsultas multi-registro Subconsultas sincronizadas Subconsultas de existencia

Subconsultas en la parte FROM Subconsultas En esta seccin se describe la utilizacin de subconsultas en la clusula FROM de una sentencia SELECT. Podemos usar una subconsulta como parte de la clusula FROM de una SELECT como si fuera una tabla o vista ms. Esta subconsulta se ejecuta una sola vez al principio de la ejecucin de la consulta principal y su resultado se combina con el resto de tablas de la parte FROM de la SELECT principal (si las hubiera) para formar la tabla origen sobre la que la consulta principal opera. Notas 1. En el caso de usar una subconsulta en la parte FROM es absolutamente aconsejable renombrar la tabla producida para poder nombrarla. Esto se consigue utilizando AS seguido del alias escogido (tal y como habamos estudiado con anterioridad). Ejemplos 1. Lista el nmero de clientes cuyo nombre empieza por la letra "A":
2. SELECT COUNT(*) 3. FROM (SELECT clientes.nombre 4. FROM clientes WHERE clientes.nombre LIKE "A*")

5. Lista el nmero de empleados que representan a clientes que empiezan por la letra "A" y la suma de sus ventas:
SELECT COUNT(empleados.nombre), SUM(empleados.ventas) FROM (SELECT clientes.nombre, clientes.repClie FROM clientes WHERE clientes.nombre LIKE "A*") AS clientesA INNER JOIN empleados ON clientesA.repClie = empleados.numEmp

Ejercicios

Base de datos "distribuidorFerreteria " 1. Obtn el nmero de lineas de pedido cuyo importe es superior a 20.000 pesetas. Guarda la consulta como "16SUBFROM01". 2. Obtn el nmero de cargos que hay en la empresa. Guarda la consulta como "16SUBFROM02". 3. Obtn el nmero de fabricantes diferentes que hay e indica de entre todas las sumas de existencias de todos los productos de cada fabricante, cual es la menor. Guarda la consulta como "16SUBFROM03". 4. Considerando las ventas que ha conseguido cada region, obtn el mximo de esas ventas. Guarda la consulta como "16SUBFROM04". 5. Se pide hallar cual es la ms baja de las medias de los importes de los pedidos de cada fabricante. Guardar la consulta como "16SUBFROM05". 6. Conseguir el nmero de oficinas que tienen empleados con cuotas superiores a sus ventas. Guardar la consulta como "16SUBFROM06". Subconsultas mono-registro Subconsultas En esta seccin se describen las subconsultas que devuelven un nico registro y su utilizacin en las clusulas WHERE y HAVING de una instruccin SQL. Las subconsultas pueden ser utilizadas en el interior de las clusulas WHERE y HAVING. Hasta ahora, las condiciones estudiadas tenan como operandos valores simples (el valor contenido en una columna de una fila de la tabla, el resultado de una operacin aritmtica, etc.). Ahora, uno de los operandos de una comparacin puede tratarse del resultado de una subconsulta. Para ello, evidentemente, la subconsulta debe devolver un nico registro, es decir, debe devolver una tabla compuesta por una fila y una columna. La sintaxis a utilizar en la comparacin es la siguiente (en la que expresin puede ser cualquier nombre de columna de la consulta principal o una expresin valida de las que se han venido utilizando hasta el momento):

Notas 1. Uno de los errores ms comunes utilizando estas subconsultas es construir una subconsulta que devuelve ms de una fila. Esto siempre producir un error. 2. El otro error comn utilizando subconsultas es que la subconsulta creada no devuelva ninguna fila. Debemos asegurarnos que la consulta va a devolver un registro con el fin de obtener el resultado deseado. En casos en los que no devuelva ningn registro, la consulta principal tampoco devolver ningn registro pero no informar de ningn tipo de error. Ejemplos 1. Listar las oficinas cuyo objetivo sea mayor que la media de los objetivos de las oficinas:
2. SELECT oficinas.oficina 3. FROM oficinas WHERE oficinas.objetivo > (SELECT AVG(objetivo) FROM oficinas);

4. Listar las regiones cuya media de ventas sea superior a la media de ventas de todas las oficinas:
5. SELECT oficinas.region, AVG(oficinas.ventas) 6. FROM oficinas 7. GROUP BY oficinas.region HAVING AVG(oficinas.ventas) > (SELECT AVG(ventas) FROM oficinas);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Listar las sumas del lmite de credito de todos los clientes de cada empleado y el nombre de dicho empleado siempre que dichas sumas sean superiores a la media del limite de credito de todos los empleados multiplicada por 4. Guardar la consulta como "17SUBMONO01". 2. Listar los nmeros de pedidos, el nombre del producto y la fecha de aquellos pedidos que se hicieron el mismo ao que se hizo el pedido con nmero de pedido 113055. Guardar la consulta como "17SUBMONO02". 3. Listar aquellos nombres de producto cuyas existencias sean superiores a la cantidad de producto que se solicit en el pedido de nmero 113027. Guardar la consulta como "17SUBMONO03". 4. Listar los codigos de oficina y ciudad de aquellas oficinas cuyas ventas superan las ventas del empleado que se apellida Pantalla y que adems

su director de oficina no tiene el ttulo de director general de la empresa. Guardar la consulta como "17SUBMONO04". 5. Listar los numeros de pedido y producto solicitado de aquellos pedidos cuya cantidad es igual que el numero de fabricantes que fabrican ms de 8 productos en la lista de productos. Guardar la consulta como "17SUBMONO05". 6. Listar el nombre de los empleados cuya edad supera por ms de 4 aos la media de edad del grupo de empleados formado por aquellos empleados contratados el 10 de Diciembre de 1986 o que tienen a su cargo la oficina numero 11. Guardar la consulta como "17SUBMONO06". 7. Listar las ciudades que tienen un nmero de empleados asignados (considerando todas sus oficinas) menor al numero de empleados asignados a la ciudad de Alicante. Guardar la consulta como "17SUBMONO07". Subconsultas multi-registro Subconsultas En esta seccin se describen las subconsultas que devuelven varios registros y su utilizacin en las clusulas WHERE y HAVING de una instruccin SQL. Cuando se utiliza una subconsulta en la parte WHERE o en la parte HAVING que devuelve una tabla con una columna y puede que ms de una fila se deben utilizar unos operadores de comparacin de fila mltiple que no hemos visto hasta ahora. Los operadores ANY, ALL, IN y NOT IN esperan como segundo operando uno o ms registros. La sintaxis a utilizar en la comparacin es la siguiente (en la que expresin puede ser cualquier nombre de columna de la consulta principal o una expresin valida de las que se han venido utilizando hasta el momento):

Operadores de comparacin de fila mltiple 1. ANY La parte expresin se compara con cada uno de los valores devueltos por la subconsulta.Si alguna de esas comparaciones es verdadera, el test ANY

devuelve verdadero. Si todas las comparaciones son falsas o la subconsulta no devuelve nada, ANY devuelve falso. Si no hay ningn valor en la subconsulta que haga verdadera alguna comparacin y el resultado de la subconsulta contiene nulos, ANY devuelve nulo. 2. ALL La parte expresin se compara con todos los valores devueltos por la subconsulta.Si todas de esas comparaciones son verdaderas o la subconsulta no devuelve nada, el test ALL devuelve verdadero. Si alguna comparacion es falsa ALL devuelve falso. Si todas las comparaciones son verdaderas pero la subconsulta devolvi algun valor nulo, ALL devuelve nulo. 3. IN y NOT IN IN devuelve verdadero si expresin est en algn registro del resultado de la subconsulta. NOT IN devuelve verdadero sin expresion no esta en ningun registro del resultado de la subconsulta. Ejemplos 1. Listar los productos cuyo precio sea inferior al precio de alguno de los productos del fabricante "ACI":
2. SELECT productos.idProducto, productos.descripcion 3. FROM productos 4. WHERE productos.precio < ANY (SELECT productos.precio 5. FROM productos 6. WHERE productos.idFab = "ACI");

7. Listar los productos cuyo precio sea inferior al precio de todos los productos del fabricante "ACI":
8. SELECT productos.idProducto, productos.descripcion 9. FROM productos 10. WHERE productos.precio < ALL (SELECT productos.precio 11. FROM productos 12. WHERE productos.idFab = "ACI");

13.Listar los nombres de empleado que han tramitado pedidos del fabricante "ACI":
14. SELECT empleados.nombre 15. FROM empleados 16. WHERE empleados.numEmp IN (SELECT pedidos.rep 17. FROM pedidos WHERE pedidos.fab = "ACI");

18.Listar los nombres de fabricante cuyo precio medio de productos no coincida con el precio de ningun producto:
19. 20. 21. 22. SELECT productos.idFab FROM productos GROUP BY productos.idFab HAVING AVG(productos.precio) NOT IN (SELECT productos.precio FROM productos);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Listar los nombres de los empleados que tienen ventas por encima de las conseguidas por alguna de las oficinas de la empresa (siempre que dichas oficinas no estn dirigidas por el empleado nmero 108). Guardar la consulta como "18SUBMULTI01". 2. Listar el nmero de pedido y el nombre de producto de aquellos pedidos realizados por clientes con un lmite de credito mayor que 50.000 pesetas. Guardar la consulta como "18SUBMULTI02". 3. Listar los nombres de fabricantes cuya suma total de importes de sus productos pedidos sea igual o superior a cualquiera de las ventas de las oficinas de la region Este divididas entre 8. Guardar la consulta como "18SUBMULTI03". 4. Lista los nombre de los empleados que son Representantes y que tienen una cuota mayor o igual que la de cualquier empleado que no tenga el cargo de Representante. Guarda la consulta como "18SUBMULTI04". 5. Lista el nombre de los empleados que fueron contratados en un ao en el que no se produjeron pedidos. Guarda la consulta como "18SUBMULTI05". 6. Lista el nombre de la regiones y la suma de sus ventas siempre que dicha suma sea inferior a las ventas de alguno de los empleados que trabajan en la oficina . Guarda la consulta como "18SUBMULTI06". 7. Listar el nombre de los empleados Luis Antonio y Ana Bustamante y la suma de ventas obtenida por su subordinados siempre que dicha suma de ventas menos 50.000 pesetas coincida con las ventas de algn empleado multiplicadas por 2. Guardar la consulta como "18SUBMULTI07". 8. Listar las regiones cuyo empleado con cdigo de empleado menor no es un empleado modlico indicando tambien el cdigo de dicho empleado. Los empleados modlicos son los 3 empleados que tienen mayor diferencia de ventas con respecto a su cuota. Guardar la consulta como "18SUBMULTI08". 9. Listar las regiones cuyo empleado con cdigo de empleado menor no es un empleado modlico indicando tambien el codigo y el nombre de dicho empleado. Los empleados modlicos son los 3 empleados que tienen mayor diferencia de ventas con respecto a su cuota. Guardar la consulta como "18SUBMULTI09". Subconsultas multi-registro Subconsultas En esta seccin se describen las subconsultas que devuelven varios registros y su utilizacin en las clusulas WHERE y HAVING de una instruccin SQL. Cuando se utiliza una subconsulta en la parte WHERE o en la parte HAVING que devuelve una tabla con una columna y puede que ms de una fila se deben utilizar unos operadores de comparacin de fila mltiple que no hemos visto hasta ahora. Los operadores ANY, ALL, IN y NOT IN esperan como segundo operando uno o ms registros.

La sintaxis a utilizar en la comparacin es la siguiente (en la que expresin puede ser cualquier nombre de columna de la consulta principal o una expresin valida de las que se han venido utilizando hasta el momento):

Operadores de comparacin de fila mltiple 1. ANY La parte expresin se compara con cada uno de los valores devueltos por la subconsulta.Si alguna de esas comparaciones es verdadera, el test ANY devuelve verdadero. Si todas las comparaciones son falsas o la subconsulta no devuelve nada, ANY devuelve falso. Si no hay ningn valor en la subconsulta que haga verdadera alguna comparacin y el resultado de la subconsulta contiene nulos, ANY devuelve nulo. 2. ALL La parte expresin se compara con todos los valores devueltos por la subconsulta.Si todas de esas comparaciones son verdaderas o la subconsulta no devuelve nada, el test ALL devuelve verdadero. Si alguna comparacion es falsa ALL devuelve falso. Si todas las comparaciones son verdaderas pero la subconsulta devolvi algun valor nulo, ALL devuelve nulo. 3. IN y NOT IN IN devuelve verdadero si expresin est en algn registro del resultado de la subconsulta. NOT IN devuelve verdadero sin expresion no esta en ningun registro del resultado de la subconsulta. Ejemplos 1. Listar los productos cuyo precio sea inferior al precio de alguno de los productos del fabricante "ACI":
2. SELECT productos.idProducto, productos.descripcion 3. FROM productos 4. WHERE productos.precio < ANY (SELECT productos.precio 5. FROM productos 6. WHERE productos.idFab = "ACI");

7. Listar los productos cuyo precio sea inferior al precio de todos los productos del fabricante "ACI":
8. SELECT productos.idProducto, productos.descripcion 9. FROM productos

10. WHERE productos.precio < ALL (SELECT productos.precio 11. FROM productos 12. WHERE productos.idFab = "ACI");

13.Listar los nombres de empleado que han tramitado pedidos del fabricante "ACI":
14. SELECT empleados.nombre 15. FROM empleados 16. WHERE empleados.numEmp IN (SELECT pedidos.rep 17. FROM pedidos WHERE pedidos.fab = "ACI");

18.Listar los nombres de fabricante cuyo precio medio de productos no coincida con el precio de ningun producto:
19. 20. 21. 22. SELECT productos.idFab FROM productos GROUP BY productos.idFab HAVING AVG(productos.precio) NOT IN (SELECT productos.precio FROM productos);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Listar los nombres de los empleados que tienen ventas por encima de las conseguidas por alguna de las oficinas de la empresa (siempre que dichas oficinas no estn dirigidas por el empleado nmero 108). Guardar la consulta como "18SUBMULTI01". 2. Listar el nmero de pedido y el nombre de producto de aquellos pedidos realizados por clientes con un lmite de credito mayor que 50.000 pesetas. Guardar la consulta como "18SUBMULTI02". 3. Listar los nombres de fabricantes cuya suma total de importes de sus productos pedidos sea igual o superior a cualquiera de las ventas de las oficinas de la region Este divididas entre 8. Guardar la consulta como "18SUBMULTI03". 4. Lista los nombre de los empleados que son Representantes y que tienen una cuota mayor o igual que la de cualquier empleado que no tenga el cargo de Representante. Guarda la consulta como "18SUBMULTI04". 5. Lista el nombre de los empleados que fueron contratados en un ao en el que no se produjeron pedidos. Guarda la consulta como "18SUBMULTI05". 6. Lista el nombre de la regiones y la suma de sus ventas siempre que dicha suma sea inferior a las ventas de alguno de los empleados que trabajan en la oficina . Guarda la consulta como "18SUBMULTI06". 7. Listar el nombre de los empleados Luis Antonio y Ana Bustamante y la suma de ventas obtenida por su subordinados siempre que dicha suma de ventas menos 50.000 pesetas coincida con las ventas de algn empleado multiplicadas por 2. Guardar la consulta como "18SUBMULTI07". 8. Listar las regiones cuyo empleado con cdigo de empleado menor no es un empleado modlico indicando tambien el cdigo de dicho empleado. Los empleados modlicos son los 3 empleados que tienen mayor

diferencia de ventas con respecto a su cuota. Guardar la consulta como "18SUBMULTI08". 9. Listar las regiones cuyo empleado con cdigo de empleado menor no es un empleado modlico indicando tambien el codigo y el nombre de dicho empleado. Los empleados modlicos son los 3 empleados que tienen mayor diferencia de ventas con respecto a su cuota. Guardar la consulta como "18SUBMULTI09". Subconsultas de existencia Subconsultas En esta seccin se describe el funcionamiento de las subconsultas en conjuncin con el operador EXISTS y su utilizacin en las clusulas WHERE y HAVING de una instruccin SQL. Cuando comenzamos el estudio de las subconsultas vimos que era importante que en unos casos la subconsulta devolviera un nico registro y que en otros casos era posible que devolviera ms de uno. En cualquier caso, es muy peligroso que una subconsulta no devolviera ningn registro. Estos casos los podemos controlar con el operador EXISTS.
EXISTS examina si una subconsulta produce alguna fila. Si la subconsulta

devuelve una o ms filas, EXISTS devuelve verdadero. Si la subconsulta no devuelve filas, EXISTS devuelve falso. La sintaxis a utilizar es la siguiente:

Notas 1. Cuando se utiliza el test de existencia, en la mayora de los casos se utiliza una referencia externa. Si no se utiliza una referencia externa la subconsulta devuelve siempre lo mismo por lo que EXIST siempre devolver el mismo valor y o bien se seleccionarn todas las filas de la consulta principal (si la subconsulta genera filas) o bien ninguna (si la subconsulta no devuelve ninguna fila). 2. Delante de EXIST no se utiliza ningn nombre de columna. Ejemplos 1. Listar los nombre de los productos de los que se haya hecho algn pedido:
2. SELECT productos.descripcion FROM productos WHERE EXISTS (SELECT * 3. FROM pedidos 4. WHERE pedidos.producto = productos.idProducto AND pedidos.fab = productos.idFab)

5. Listarel nombre de los empleados que no han tramitado ningun pedido:

Ejercicios

6. SELECT empleados.nombre FROM empleados WHERE NOT EXISTS (SELECT * 7. FROM pedidos WHERE pedidos.rep = empleados.numEmp)

Base de datos "distribuidorFerreteria " 1. Listar el cdigo de oficina y la ciudad de las oficinas que tengan como jefe empleados con el cargo "Representante". Es obligatorio utilizar el operador EXISTS. Guardar la consulta como "20EXISTS01". 2. Listar el nombre de todos los empleados que no son jefes de ningun oficina. Es obligatorio utilizar el operador EXISTS. Guardar la consulta como "20EXISTS02". 3. Listar los nombres de los clientes cuyo representante no haya hecho ningn pedido. Es obligatorio utilizar el operador EXISTS. Guardar la consulta como "20EXISTS03". 4. Listar los nmeros de pedidos y la descripcin del producto solicitado siempre que dicho pedido haya sido tramitado por algn director de oficina de la regin Este. Es obligatorio utilizar el operador EXISTS. Guardar la consulta como "20EXISTS04". Ejercicios de repaso 4 Subconsultas En esta pgina se incluyen una relacin de ejercicios para afianzar los conceptos de SQL vistos hasta el momento Base de datos "distribuidorFerreteria" 1. Listar los nombres de los empleados (sin repeticiones) que han tramitado pedidos del cliente apellidado Antequera. Guardar la consulta como "21REPASO01". 2. Listar los nombres y edades de los directores que trabajan en oficinas "mediocres". Una oficina es "mediocre" si no consigue que la diferencia entre ventas y objetivo sea positiva. Guardar la consulta como "21REPASO02". 3. Listar los nombres de los empleados que no trabajan en oficinas dirigidas por el empleado numero 108. Guardar la consulta como "21REPASO03". 4. Listar el fabricante, nmero de producto y descripcin de los productos para los que no se han tramitado pedidos de ms de 1.000 pesetas. Guardar la consulta como "21REPASO04". 5. Listar el nombre de los empleados cuyo 25% de su cuota sea inferior a la suma de los lmites de crdito de sus clientes. Guardar la consulta como "21REPASO05".

6. Listar los nmeros de oficina de aquellas en las que haya un empleado cuyas ventas representen ms del 55% del objetivo de la misma. Guardar la consulta como "21REPASO06". 7. Listar los nmeros de oficina de aquellas en las que haya un empleado cuyas ventas representen ms del 50% de la suma de ventas de los empleados de esa oficina. Guardar la consulta como "21REPASO07". 8. Listar los numeros de oficina que no tienen empleados asignados. Guardar la consulta como "21REPASO08". 9. Listar de entre aquellas oficinas que tienen asignados empleados los nmeros de oficina de aquellas en las que todos sus empleados tengan ventas que representen ms del 55% del objetivo de la misma. Guardar la consulta como "21REPASO06".

Manipulacin de datos
Introduccin
El lenguaje de manipulacin de datos (DML) es parte esencial del SQL. Si queremos actualizar, insertar o eliminar datos de la base de datos, tenemos que ejecutar una sentencia DML. Las sentencias DML son tres: INSERT, UPDATE y DELETE. Como es de esperar, INSERT anaade un nuevo registro a una tabla, UPDATE modifica registros existentes y DELETE elimina registros ya existentes en una tabla.

INSERT INTO INSERT INTO mediante subconsulta UPDATE DELETE

INSERT INTO Manipulacin de datos En esta seccin se describe el uso de la sentencia INSERT INTO para introducir nuevos valores en una tabla. La insercin de nuevos datos en una tabla se realiza aadiendo filas enteras a la tabla y la sentencia SQL que lo permite es la orden INSERT INTO. La insercin se puede realizar de fila a fila o varias filas a la vez, como veremos ms adelante. La sintaxis es la siguiente:

Notas 1. dest es el nombre de la tabla donde vamos a insertar la fila. 2. A continuacin de la palabra VALUES se escriben entre parntesis los valores que queremos aadir. Estos valores se tienen que escribir de acuerdo al tipo de dato de la columna donde se van a insertar (encerrados entre comillas para valores de texto, entre # para valores de fecha, etc.). 3. La asignacin de valores se realiza por posicin, es decir, el primer valor lo asigna a la primera columna, el segundo valor a la segunda columna y as sucesivamente. Si no se indica ninguna lista de columnas, los avlores se tienen que especificar en el mismo orden en el que aparecen las columnas en la ventana diseo de dicha tabla, utilizando el valor NULL para aquellas columnas para las cuales no tenemos valores. 4. Cuando incluimos una lista de columnas esta no tiene por qu estar en orden y podemos omitir columnas. Las columnas omitidas tendran para esa fila el valor NULL o el especificado como valor predeterminado. Ejemplos 1. Introduce en la base de datos los datos de un nuevo empleado con ttulo representante y llamado Juan Lpez. Su cuota es de 350.000 pesetas y su contrato ha sido firmado el 23 de Junio de 2005. La oficina del empleado es la 28 y su nmero el 200. No sabemos la edad del empleado y de momento no tiene asignado ningn jefe.
2. INSERT INTO empleados VALUES (200, 'Juan Lpez', 28, NULL, 3. 'Representante', #06/23/01#, NULL, 350000, 0);

4. Introduce en la base de datos los datos de un nuevo empleado con ttulo representante y llamado Juan Lpez. Su cuota es de 350.000 pesetas y su contrato ha sido firmado el 23 de Junio de 2005. La oficina del empleado es la 28 y su nmero el 200. No sabemos la edad del empleado y de momento no tiene asignado ningn jefe.
5. INSERT INTO empleados (titulo, nombre, cuota, contrato, oficina, 6. numEmp, edad, jefe) 7. VALUES ('Representante', 'Juan Lpez', 350000, #06/23/01#, 28, 200, NULL, NULL);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Introducir en la base de datos los datos de un nuevo producto del que de momento no hay existencias. Se trata de un tornillo de estrella y su precio es de 22 pesetas. El identificativo del fabricante del producto es "tty". El identificativo que utiliza el fabricante para codificar el producto es "78rio". Guarda la consulta como "22INSERT01". 2. Introducir en la base de datos los datos de un nuevo cliente. Su nombre es Ramon Estbanez y su nmero de cliente 2660. Su lmite de crdito es de

-10.000 pesetas y su representante es el empleado nmero 101. Guarda la consulta como "22INSERT02". 3. Introducir en la base de datos los datos de un nuevo cliente. Su nombre es Ramon Estbanez y su nmero de cliente 2660. Su lmite de crdito es de 210.000 pesetas y su representante es el empleado nmero 111. Guarda la consulta como "22INSERT03". 4. Introducir en la base de datos los datos de un nuevo cliente. Su nombre es Ramon Estbanez y su nmero de cliente 2660. Su lmite de crdito es de 210.000 pesetas y su representante es el empleado nmero 101. Guarda la consulta como "22INSERT04". 5. Introducir en la base de datos un nuevo empleado. Su nombre es Antonio Azcrate y su nmero de empleado es el 201. No sabemos su edad ni la oficina donde va a trabajar, ni el cargo que va a desempear. El contrato se firmo hace 400 dias desde la fecha actual, el jefe ser el nmero 106 y la cuota actual es del 74,3% de 105.678 pesetas. Guardar la consulta como "22INSERT05". INSERT INTO mediante subconsulta Manipulacin de datos En esta seccin se describe el uso de la sentencia INSERT INTO combinndola con una subconsulta con el objetivo de insertar varios registros a la vez en una tabla. Podemos insertar en una tabla varias filas con una sola sentencia INSERT INTO si los valores a insertar se pueden obtener como resultado de una consulta. Cada fila resultado de la SELECT forma una lista de valores que son los que se insertan en una nueva fila de la tabla destino. La sintaxis es la siguiente:

Notas 1. El SQL estndar especifica que la subconsulta utilizada no puede ser una consulta UNION,no puede tener ORDER BY y, adems, la tabla donde se insertan los valores no puede aparecer ni en la parte FROM de la subconsulta ni en ninguna subconsulta que esta tenga anidadas. 2. El SQL de Microsoft Jet (el motor de Access) elimina las dos ltimas restricciones. Ejemplos 1. Se crean 3 nuevas oficinas en Madrid para que sean dirigidas por los empleados con el ttulo de "Representante" cuyas ventas sean superiores a 300.000 pesetas. La ventas inciales de la oficina sern las de dicho

empleado y el objetivo de la oficina las ventas del empleado multiplicado por 4. El numero de oficina ser igual al numero del empleado menos 70.
2. INSERT INTO oficinas (oficina, ciudad, region, dir, objetivo, ventas) 3. SELECT numEmp - 70, 'Madrid', 'Centro', 4. numEmp, ventas * 4, ventas 5. FROM empleados WHERE titulo = "Representante" AND ventas > 300000;

Ejercicios

Base de datos "distribuidorFerreteria " 1. El fabricante "aci" ha sacado al mercado una nueva versin de sus dos productos ms caros. El identificativo del producto es como el identificativo anterior aadiendole la coletilla "-v2". La descripcin del producto tambin es la misma aadiendole la coletilla " (nueva version)". Su precio se eleva un 15% respecto al precio del producto en el que estn basados y la partida de existencias inicial es de 35 unidades. Guardar la consulta como 23INSERTSELECT01". 2. Los empleados cuyas ventas no llegan a su cuota se han convertido en clientes de la empresa para maquillar sus resultados. Su nmero de cliente es el nmero que tienen de empleado ms 2500 y se representan a s mismos. Su lmite de crdito son sus ventas divididas por los aos que lleva en la empresa. Se pide introducir esa informacin en la base de datos con una sola sentencia INSERT INTO. Guarda la consulta como "23INSERTSELECT02". 3. Los "nuevos" clientes del ejercicio anterior (los localizamos porque son empleados con ventas menores que su cuota) realizan un pedido cada uno solicitando del producto cuyo fabricante es "rei" y su ID de producto "2a44r" tantas unidades como sean necesarias para que el importe de dicho pedido sea superior a su diferencia entre ventas y cuota (teniendo en cuenta que el precio de dicho producto es 4.500 pesetas). Los pedidos son tramitados en la fecha de hoy y cada uno tramita su propio pedido. El codigo de pedido viene dado por su numero de cliente menos 2500 y el nemro de pedido por su numero de cliente mas 115000. Se pide introducir esa informacin en la abse de datos con una sola sentencia INSERT INTO (para comprobar que lo has hecho bien, comprueba mentalmente que con el importe de ese pedido las ventas de ese empleado alcanzan su cuota). Guarda la consulta como "23INSERTSELECT03". UPDATE Manipulacin de datos En esta seccin se describe el uso de la sentencia UPDATE para modificar los datos de una tabla. La sentencia UPDATE modifica los valores de una o ms columnas en las filas seleccionadas de una tabla. La sintaxis es la siguiente:

Notas 1. tabla es el nombre de la tabla donde vamos a realizar las modificaciones. 2. La parte WHERE especifica qu filas se actualizan. Si se omite, se actualizan todas las filas. Esta parte puede incluir una subconsulta. 3. El SQL estndar exige nombres de columna sin cualificar en la parte SET y no permite que en la subconsulta de la parte WHERE, si se utiliza, se emplee la tabla que se esta actualizando. El SQL de Microsoft Jet elimina ambas restricciones. 4. expresin debe generar un valor del tipo de dato de la columna a actualizar. Adems, debe ser calculable a partir de los valores de la fila que se est actualizando. Si para calcular expresin se utiliza otra columna que tambin se modifica, el valor que se utiliza es el de antes de la modificacin (lo mismo sucede con los valores que se consideran en la parte WHERE). 5. Cuando se ejecuta una sentencia UPDATE primero se toma la tabla origen y se seleccionan las filas que cumplen la parte WHERE. A continuacin, se actualizan en la primera fila todas las columnas especificadas en la parte SET a la vez (los nombres de columna pueden especificarse en cualquier orden). Despus se pasa a la siguiente fila y as sucesivamente. Ejemplos 1. Poner a cero las ventas de los empleados de la oficina 12:
2. UPDATE empleados SET ventas = 0 WHERE empleados.oficina = 12;

3. Poner a cero las ventas y las cuotas de los empleados cuyo jefe es el director de la oficina nmero 11:
4. UPDATE empleados SET ventas = 0, cuota = 0 5. WHERE empleados.jefe = (SELECT oficinas.dir 6. FROM oficinas WHERE oficinas = 11);

Ejercicios

Base de datos "distribuidorFerreteria " 1. Incrementar el precio que figura en la base de datos de todos los productos con el IPC de este ao, el 3,1%. Guarda la consulta como "24UPDATE01".

2. Introducir el empleado 111 como director de las oficinas que no tienen director. Guarda la consulta como "24UPDATE02". 3. Introducir el empleado 101 como director de las oficinas que no tienen director y que adems tienen las ventas a 0. Guarda la consulta como "24UPDATE03". 4. Actualiza el nombre aadiendole el segundo apellido "del Canto" a aquellos clientes cuyo nombre es anterior por orden alfabtico a "Carlos Zalavilla" y cuyo representante es director de alguna oficina del Este con ventas superiores a las 600.000 pesetas. Guarda la consulta como "24UPDATE04". 5. Lista toda la informacin relativa a pedidos de productos del fabricante "fea". Guarda esta consulta como "24UPDATE05a". Esta semana el fabricante "fea" ha enviado productos al almacn de manera que las existencias de sus productos se han visto incrementadas en un 55% y el precio de los mismos se ha rebajado un 5%. Sus identificativos de producto han cambiado para adaptarse a la normativa europea y ahora llevan el prefijo "EUR". Reflejar el cambio en la base de datos. Guarda la consulta como "24UPDATE05". Ahora, ejecuta la primera consulta guardada de este ejercicio. Qu ha hecho el SGBD por nosotros? DELETE Manipulacin de datos En esta seccin se describe el uso de la sentencia DELETE para eliminar filas de una tabla. La sentencia DELETE elimina filas de una tabla. La sintaxis es la siguiente

Notas 1. origen es el nombre de la tabla de donde vamos a eliminar las filas. 2. La parte WHERE especifica qu filas se borrarn. Si se omite, se borran todas las filas. Esta parte puede incluir una subconsulta. 3. El SQL estndar no permite que en la subconsulta de la parte WHERE, si se utiliza, se emplee la tabla de la que se esta borrando. El SQL de Microsoft Jet elimina ambas restricciones. Ejemplos 1. Eliminar los empleados de la oficina 12:
2. DELETE FROM empleados WHERE empleados.oficina = 12;

3. Eliminar los empleados cuyo jefe es el director de la oficina nmero 11:

Ejercicios

4. DELETE FROM empleados 5. WHERE empleados.jefe = (SELECT oficinas.dir 6. FROM oficinas WHERE oficinas = 11);

Base de datos "distribuidorFerreteria " 1. La empresa ha tomado la decisin de cerrar todas aquellas oficinas en las que las ventas no llegan al 80%. Haz un listado con los empleados que se vern afectados por el cierre de dichas oficinas. Guardala como "25DELETE01a". Luego, refleja los cierres de la oficina en la base de datos. Qu pasa? La empresa toma la decisin de despedir primero a los empleados afectados. Haz una consulta SQL para ello. Qu pasa? La empresa decide que los pedidos de dichos empleados queden como si hubieran sido tramitados por el empleado 106. Haz una consulta para actualizar dichos pedidos. Guardala como "25DELETE01b". Tambin, decide que los clientes que tienen a esos empleados como representantes pasen a estar representados por el empleado 106. Construye la consulta SQL que consigue esto y gurdala como "25DELETEc". Ejecuta y guarda ahora la consulta con la que eliminamos a los empleados afectados como "25DELETEc". Ahora, refleja el cierre de las oficinas. Guarda la consulta como "25DELETE01". 2. Por un error en la base de datos figuran pedidos del ao 1989 cuando en realidad, en ese ao, no se realiz ningn pedido. Con una consulta SQL obtn cuanto suman los importes de los pedidos de ese ao. Guarda la consulta como "25DELETE02a". Ahora vamos a falsear las cuentas para que cuadren: incrementa con una consulta SQL el importe del pedido ms reciente en la cantidad que habas conseguido antes. Guarda la consulta como "25DELETE02b". Por ltimo elimina todos los pedidos del ao 1989. Guarda la ultima consulta como "25DELETE02".

Definicin de datos
Introduccin
El lenguaje de definicin de datos (DDL) es la parte del lenguaje SQL que nos permite definir el esquema lgico de la base de datos. Hasta ahora hemos estudiado las sentencias que forman parte del DML (Data Management Language) lenguaje de manipulacin de datos, todas esas sentencias sirven para recuperar, insertar, borrar, modificar los datos almacenados en la base de datos. Lo que veremos en este tema son las sentencias que afectan a la estructura de los datos. Aunque el DDL (Data Definition Language) es la parte de SQL que ms vara de un sistema a otro (ya que este rea es muy dependiente de cmo se organizan los datos internamente en el sistema), en general siempre nos encontraremos con 5 rdenes bsicas: CREATE TABLE (nos permite definir la estructura de las tablas que conformarn la base de datos), ALTER TABLE (nos permite alterar la estructura de las tablas una vez creadas), DROP TABLE (nos permite eliminar tablas de nuestra base de datos), CREATE INDEX (nos permite crear un ndice

para una columna de una tabla) y DROP INDEX (nos permite eliminar el ndice creado para una columna).

CREATE TABLE Tipos de dato ALTER TABLE DROP TABLE

CREATE TABLE Definicin de datos En esta seccin se describe el uso de la sentencia CREATE TABLE para definir la estructura de una tabla. La sentencia CREATE TABLE nos sirve para crear la estructura de una tabla permitindonos indicar las columnas que esta tiene y ciertas restricciones que deben cumplir dichas columnas. La sintaxis es la siguiente:

Notas 1. nbtabla es el nombre de la tabla que estamos definiendo, nbcol el nombre de la columna que estamos definiendo y tipo el tipo de dato de dicha columna (para una exposicin de los tipos de datos soportados acudir al anexo de este mismo apartado). 2. Una restriccin consiste en la definicin de una caracterstica adicional que afecta a una columna o una combinacin de columnas. Dichas caractersticas indican si la columna no valores nulos (NOT NULL), si se va a definir un ndice sin duplicados para ella (UNIQUE), si se trata de una clave primaria (PRIMARY KEY) o si se trata de umna clave ajena (FOREIGN KEY). En este ltimo caso debemos indicar a qu tabla y a qu campo o campos de dicha tabla hace referencia la clave ajena (REFERENCES)..
o

restriccin1: una restriccin de tipo 1 es una restriccin que aparece dentro de la definicin de la columna despus del tipo de dato y afecta a una sola columna, la que se est definiendo.

restriccin2: una restriccin de tipo 2 es una restriccin que se define despus de definir todas las columnas de la tabla y afecta a una columna o a una combinacin de columnas.

3. La clusula CONSTRAINT sirve para que la restriccin quede nombrada de manera que tengamos un nombre al que hacer referencia en caso de querer borrar dicha restriccin. 4. Una clave ajena solo puede definirse si la columna o las columnas a las que hace referencia tienen un ndice UNIQUE. Ejemplos 1. Crear una nueva tabla de nombre "COCHES_EMPRESA" con los siguientes campos: cdigo del vehiculo (entero), modelo (texto de tamao 30), diesel (si o no), kilometros recorridos (decimal), ao de matriculacin (fecha), conductor habitual (entero) y matrcula (texto de tamao 12). La clave primaria es el primer campo. Se establecer un ndice nico para el campo matrcula. El campo conductor habitual es una clave ajena que hace referencia a la tabla EMPLEADOS y concretamente a su campo "numEmp".
2. CREATE TABLE COCHES_EMPRESA 3. (codigo INTEGER CONSTRAINT pk PRIMARY KEY, 4. modelo CHAR(30), 5. diesel LOGICAL, 6. km FLOAT, 7. matriculacion DATE, 8. conductor INTEGER CONSTRAINT fk1 9. REFERENCES empleados(numEmp), matricula CHAR(12) CONSTRAINT index1 UNIQUE);

10.Crear una tabla de nombre "ETIQUETA" con los siguientes campos: cdigo de etiqueta (entero), texto de la etiqueta (texto sin especifiacin de tamao), cdigo de fabricante (texto de tamao 3) y cdigo del producto (texto de tamao 8). La clave primaria es el primer campo. Los dos ltimos campos forman una clave ajena que hace referencia a la tabla PRODUCTOS y, concretamente, a sus campos "idFab" e "idProducto".
11. CREATE TABLE ETIQUETA 12. (codigo INTEGER CONSTRAINT pk PRIMARY KEY, 13. texto TEXT, 14. idFab CHAR(3), 15. idProducto CHAR(8), 16. CONSTRAINT fk1 17. FOREIGN KEY(idFab, idProducto) REFERENCES productos(idFab, idProducto));

Ejercicios

Base de datos "distribuidorFerreteria " 1. La empresa cuenta con una serie de almacenes en Espaa, cada uno de los cuales se ocupa del almacenaje de un solo producto y en algunos casos tambin de sus distribucin. Para guardar sus datos se crea una nueva tabla llamada "ALMACENES" con los siguientes campos: cdigo del almacn (entero), cdigo catastral del edificio (texto de tamao 12), responsable del almacen (entero), metros cuadrados del edificio (decimal), con capacidad para distribucin (si o no), fecha de construccin (fecha), fecha y hora de la ltima inspeccin (fecha y hora), nmero de plantas

(entero), cdigo del fabricante del producto que almacena (texto de tamao 3) y cdigo del producto que almacena (texto de tamao 8). La clave primaria es el primer campo. El segundo campo requiere de un ndice nico. El tercer campo es clave ajena haciendo referencia a la tabla EMPLEADOS y, concretamente, a su campo "numEmp". Los dos ltimos campos son clave ajena referenciando la tabla PRODUCTOS y, concretamente, a sus campos "idFab" e "idProducto". Es obligatorio nombrar todas las restricciones introducidas. Guarda la consulta como "26CREATETABLE01". Tipos de datos CREATE TABLE En esta seccin se describen los tipos de datos permitidos para su utilizacin en la entencia CREATE TABLE.

Tipo de dato Otros nombres para el mismo tipo de dato en los distintos SGBD Tamao Descripcin BINARY VARBINARY BINARY VARYING BIT VARYING 1 byte por carcter Se puede almacenar cualquier tipo de datos en un campo de este tipo. Los datos no se traducen (por ejemplo, a texto). La forma en que se introducen los datos en un campo binario indica cmo aparecern al mostrarlos. BIT BOOLEAN LOGICAL LOGICAL1 YESNO 1 byte Valores S y No, y campos que contienen solamente uno de dos valores. TINYINT INTEGER1 BYTE 1 byte Un nmero entero entre 0 y 255. COUNTER AUTOINCREMENT Se utiliza para campos contadores cuyo valor se incrementa automticamente al crear un nuevo registro. MONEY CURRENCY 8 bytes Un nmero entero comprendido entre 922.337.203.685.477,5808 y 922.337.203.685.477,5807. DATETIME DATE TIME 8 bytes Una valor de fecha u hora entre los aos 100 y 9999 UNIQUEIDENTIFIER GUID 128 bits Un nmero de identificacin nico utilizado con llamadas a procedimientos remotos. DECIMAL NUMERIC DEC 17 bytes Un tipo de datos numrico exacto con valores comprendidos entre 1028 - 1 y 1028 - 1. Puede definir la precisin (1 - 28) y la escala (0 - precisin definida). La precisin y la escala predeterminadas son 18 y 0, respectivamente.

REAL SINGLE FLOAT4 IEEESINGLE 4 bytes Un valor de coma flotante de precisin simple con un intervalo comprendido entre 3,402823E38 y 1,401298E-45 para valores negativos, y desde 1,401298E-45 a 3,402823E38 para valores positivos, y 0. FLOAT DOUBLE FLOAT8 IEEEDOUBLE NUMBER 8 bytes Un valor de coma flotante de precisin doble con un intervalo comprendido entre 1,79769313486232E308 y 4,94065645841247E-324 para valores negativos, y desde 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos, y 0. SMALLINT SHORT INTEGER2 2 bytes Un entero corto entre 32.768 y 32.767. INTEGER LONG INT INTEGER4 4 bytes Un entero largo entre 2.147.483.648 y 2.147.483.647. IMAGE LONGBINARY GENERAL OLEOBJECT Lo que se requiera Desde cero hasta un mximo de 2.14 gigabytes. Se utiliza para objetos OLE. TEXT LONGTEXT LONGCHAR MEMO NOTE NTEXT 2 bytes por carcter. (Consulte las notas). Desde cero hasta un mximo de 2.14 gigabytes. CHAR TEXT(n) ALPHANUMERIC CHARACTER STRING VARCHAR CHARACTER VARYING NCHAR NATIONAL CHARACTER

NATIONAL CHAR NATIONAL CHARACTER VARYING NATIONAL CHAR VARYING

ALTER TABLE Definicin de datos

En esta seccin se describe el uso de la sentencia ALTER TABLE para modificar la estructura de una tabla. La sentencia ALTER TABLE sirve para modificar la estructura de una tabla que ya existe. Mediante esta instruccin podemos aadir columnas nuevas, eliminar columnas, crear nuevas restricciones o borrar algunas existentes. La sintaxis puede parecer algo complicada a primera vista pero sabiendo el significado de las palabras reservadas la sentencia se aclara bastante: ADD (aade), ALTER (modifica), DROP (elimina), COLUMN (columna), CONSTRAINT (restriccin). La sintaxis es la siguiente:

Notas 1. Cuando eliminamos una columna se pierden todos los datos almacenados en ella. Para pode reliminar una columna primero se deben eliminar todas las restricciones que la afecten. 2. La sintaxis de restriccion1 y de restriccion2 es idntica a la restriccin1 y restriccion2 de la sentencia CREATE TABLE. Ejemplos 1. Aadir una columna a la tabla OFICINAS para almacenar la direccin IP de su servidor principal:
2. ALTER TABLE oficinas ADD COLUMN ipServidor CHAR(15) NOT NULL CONSTRAINT index1 UNIQUE;

3. Borrar la columna introducida anteriormente (se borrarn todos lo datos que contenga):
4. ALTER TABLE oficinas 5. DROP CONSTRAINT index1; 6. 7. 8. ALTER TABLE oficinas DROP COLUMN ipServidor;

9. Cada oficina se ha especializado en la distribucin de un producto. Aadir dos columnas a la tabla OFICINAS de manera que se pueda introducir en qu producto est especializada cada oficina:
10. ALTER TABLE oficinas 11. ADD COLUMN idFab CHAR(3);

12. 13. 14. 15. 16. 17. 18. 19.

ALTER TABLE oficinas ADD COLUMN idProducto CHAR(8); ALTER TABLE oficinas ADD CONSTRAINT fk2 FOREIGN KEY (idFab, idProducto) REFERENCES productos(idFab, idProducto)

Ejercicios

Base de datos "distribuidorFerreteria " 1. A partir de ahora la empresa le asigna un producto a cada empleado para que se encargue de su publicidad. La empresa necesita guardar para cada empleado el producto asignado a dicho empleado (que puede almacenar nulos) y su email (campo que requiere obligatoriamente un valor, que es nico y cuyo tamao debe tener el suficiente espacio para almacenar los email como se describe a continuacin). Se pide modificar la tabla EMPLEADOS para que se pueda almacenar dicha informacin (atencin para no olvidar indicarle al SGBD correctamente las claves ajenas que estamos introduciendo). Guarda la consulta como "27ALTERTABLEXX" donde XX es un nmero correlativo empezando desde el 1 en funcin de las sentencias que necesites realizar. 2. Introducir para cada empleado como valor para su email el nombre del empleado (separando su nombre y apellido por un punto) y seguido de "@distribuidorFerreteria" (la funcin de Visual Basic que se puede usar en Access y que nos puede ayudar a conseguirlo es REPLACE. Intenta saber cmo se utiliza en el men "Ayuda" y luego en la opcin "Recursos de derasarrolladores de Access"; despus bscala en la pgina web que aparece). Inicialmente, los empelados con ventas menores a 300.000 pesetas publicitarn el producto "41001" de "aci". Introducir esa informacin en la base de datos. Los empleados con ventas mayores o iguales a 300.000 pesetas publicitarn el producto "114" de "fea". Introducir con otra sentencia esa informacin. Guarda las dos sentencias como "27UPDATE01", "27UPDATE02" y "27UPDATE03". 3. Eliminar las columnas introducidas en el ejercicio 1. Guardar las consultas como "27ALTERTABLEXX" donde XX es un nmero correlativo continuando la secuencia del ejercicio 1.

DROP TABLE
Definicin de datos
En esta seccin se describe el uso de la sentencia DROP TABLE para eliminar tablas. La sentencia DROP TABLE sirve para eliminar una tabla. No se puede eliminar una tabla si est abierta y tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial. La sintaxis es la siguiente:

Ejemplos
1. Eliminar la tabla PEDIDOS:
DROP TABLE pedidos;

Tema 6. Herramientas para la gestin de datos


Visin general del tema
Una de las caractersticas ms importantes de la gestin de bases de datos es la automatizacin de los procesos mediante la creacin de aplicaciones. Pretendemos en este tema dar una visin global de la filosofa de programacin de Microsoft Access para la gestin de bases de datos. Access fue el primer gestor de bases de datos diseado por Microsoft y uno los primeros que apareci para el entorno Windows. Esas fueron las razones por las que los siguientes sistemas de gestin de bases de datos relacionales (S.G.B.D.R.) siguieron la pauta de Access. Por ello, resulta relativamente sencillo extrapolar la experiencia adquirida en un entorno como Access a cualquier otro S.G.B.D. con soporte para aplicaciones visuales.

Introduccin Formularios

Introduccin Herramientas para la gestin de datos Access est diseado en torno a objetos de base de datos. Estos objetos son las tablas, las consultas, los formularios, los informes, las macros y los mdulos, que se manejan de forma independiente, cada uno con su propio cdigo y a la vez siendo complementarios para formar la aplicacin completa. Access posee un lenguaje de programacin llamado Visual Basic, de tipo estructurado y con las mismas herramientas que otros lenguajes. Se diferencia de stos en que la forma de funcionamiento est orientada a eventos. Es decir, el cdigo introducido en la base de datos responde ante eventos que se produzcan en cualquier lugar de la aplicacin. Normalmente no ser necesario programar cdigo para realizar cualquier tarea por complicada que sea, ya que se podr hacer manualmente o simplemente con las macros. Pero si incluso as no es bastante, mediante Visual Basic podemos ir ms all. Con Visual Basic podemos escribir funciones y procedimientos especiales que nos permitirn no slo automatizar procesos, sino dotar de mayores capacidades y funcionalidad a la aplicacin que se va a desarrollar. Ideas bsicas

La composicin de una base de datos y una aplicacin de base de datos es prcticamente la misma, est formada por los mismos objetos. Lo que diferencia una aplicacin de una base de datos es la forma en la que todos sus objetos se enlazan. La aplicacin facilita que el usuario se concentre en el manejo de los datos a travs de un sistema coherente de gestin. Antes de comenzar hay que tener claro, cul es el propsito y qu objetivos se pretenden alcanzar. Debemos hablar con las personas que realizan esas tareas para ver cmo lo hacen y deberamos obtener copias de los informes y formularios. El siguiente paso consiste en crear las tablas. Hay que tener bien claro el carcter de los distintos datos para diferenciarlos en tablas separadas y las relaciones entre las distintas tablas. Todos estos datos y las relaciones entre las tablas constituye el cimiento sobre el que se va a apoyar nuestra aplicacin, por lo que este cometido ser uno de los ms importantes. Lo primero que hay que hacer es disear la presentacin que va a tener la aplicacin cuando accedamos a ella. Esto se consigue mediante la creacin de formularios que conforman lo que ser la interfaz de usuario. La aplicacin, como norma general, girar en torno a formularios que controlarn el flujo de sta mediante el cdigo asociado a los distintos objetos de los mismos. Se empezar por mostrar una ventana con el ttulo de la aplicacin y luego aparecer la interfaz que dar acceso a la gestin de la base de datos a travs d elos distintos formularios.

Formularios
Herramientas para la gestin de datos
Los formularios son formatos de pantalla destinados a que el usuario los utilice como interfaz para la manipulacin de los datos. Son equivalentes al modo de hoja de datos de las tablas, pero permiten mayor libertad a la hora de personalizar los controles que se muestran en pantalla: colocacin de los controles, aspecto de los mismos y de la pantalla en general, presentaciones anidadas, grficos e imgenes, presentacin de objetos multimedia, etc. En general, un formulario est asociado a una tabla, de la que toma la informacin. Inicialmente el formulario contiene un conjunto de controles, cada uno de ellos asociado a un campo de la tabla subyacente. La modificacin de los datos de estos controles se refleja automticamente en los datos de la tabla. La creacin y definicin de formularios se hace de la misma forma en que se programa sobre un entorno visual. Los controles se sitan sobre el espacio del formulario con ayuda del ratn, y las propiedades de todos los objetos implicados se muestran y modifican mediante dilogos, de manera que el cdigo de programacin del formulario queda oculto. En Access, las propiedades de los objetos se agrupan en 4 conjuntos, segn su funcionalidad. Un dilogo flotante muestra y permite modificar el estado de las propiedades de los controles de un formulario y del propio formulario. Este dilogo se muestra haciendo doble clic sobre cualquier control. Contiene 5 subcarpetas, que permiten acceder a los 4 conjuntos de

propiedades, y un quinto conjunto que enumera todas las propiedades existentes en los 4 conjuntos anteriores. Los cuatro conjuntos son:

Formato: Contiene propiedades referidas al aspecto visual de los controles: posicin, tamao, color, fuentes, formato de presentacin de datos, etc. Datos: Contiene propiedades referidas a la asociacin con los campos de la tabla relacionada: campos asociados, mscaras de entrada, valores predeterminados, reglas de validacin, etc. Eventos: Contiene propiedades referidas a las respuestas que los controles ofrecen ante determinadas situaciones. Otras: Otras propiedades. Destaca el nombre del control, que es un identificador que permite referirse al control para acceder a sus propiedades.

Algunas propiedades de los controles, especialmente las del conjunto de Datos, pueden contradecir las propiedades que se establecieron para los campos a los que asocian dichos controles. Por ejemplo, las reglas de validacin y mscaras de entrada. En tal caso, prevalecen los definidos para el formulario, sin perjuicio de los definidos para los campos de la tabla. Por ejemplo:

Una mscara de entrada definida para el control en un formulario prevalece sobre la definida para el campo, ya que la edicin de los datos se realiza sobre el control del formulario. Una regla de validacin definida para el control en un formulario debe verificarse para que el contenido del control sea aceptado por el control, pero adems debe verificarse la regla definida para el campo de la tabla, porque de los contrario la tabla no aceptar el contenido que le pasa el control (aunque sea vlido para el control).

Por defecto, al asociar un control a un campo de una tabla, el control hereda automticamente ciertas propiedades del campo, como las reglas de validacin, los formatos de entrada y salida, etc.

Creacin de formularios
Herramientas para la gestin de datos
En esta seccin se describe como empezar con la creacin de un formulario y los controles disponibles para ser utilizados en ellos. Los formularios, al igual que las tablas y el resto de objetos en Access, tienen dos modos de operacin: uno para modificar la definicin (vista de diseo) y otro para su utilizacin (vista de formulario). Y al igual que el resto de objetos, los formularios necesitan un nombre identificativo. Existen asistentes que permiten crear algunos tipos habituales de formularios. Sin embargo, raras veces consiguen obtener el formulario tal y como se necesita, por lo cual no los vamos a estudiar aqu. Al crear un nuevo formulario, aparece una ventana vaca (el formulario) sobre la que podemos situar los controles, y una barra de de herramientas, que contiene los controles

disponibles (en caso de que no se mostrara, hacer clic en el men Ver, elegir la opcin Barra de herramientas y finalmente hacer clic en Cuadro de herramientas).

1. Permite seleccionar los controles del formulario para moverlos, cambiarles el

tamao, acceder a sus propiedades, etc...


2. Inicia el asistente para la creacin de controles. No lo estudiamos. 3. Inserta un control de tipo Etiqueta: un texto que aparece en el formulario. 4. Inserta un control de tipo Cuadro de texto: un editor que permite escribir texto. 5. Inserta un control de tipo Grupo de opciones . Todos los controles de tipo Botn de

alternar , Botn de opcin y Casilla de verificacin que queden dentro del mismo Grupo de opciones funcionan de forma autoexcluyente, de forma que slo uno puede estar activado.
6. Inserta un control de tipo Botn de alternar, que puede estar presionado o suelto

(valor lgico).
7. Inserta un control de tipo Botn de opcin, que puede estar activado o desactivado

(valor lgico).
8. Inserta un control de tipo Casilla de verificacin, que puede estar activado o

desactivado (valor lgico).


9. Inserta un control de tipo Cuadro combinado, que consiste en un Cuadro de texto

que puede desplegarse y presentar una lista de valores permitidos.


10. Inserta un control de tipo Cuadro de lista, que consiste en una lista de valores

permitidos.
11. Inserta un control de tipo Botn de comando, que permite ejecutar una macro cuando

es presionado.
12. Inserta un control de tipo Imagen, que permite introducir un dibujo en el formulario.

El origen de la imagen es un archivo grfico.


13. Inserta un control de tipo Marco de objeto independiente, que permite introducir un

objeto multimedia en el formulario, bien desde un archivo, o bien mediante vinculacin OLE.

14. Inserta un control de tipo Marco de objeto dependiente, que permite introducir un

objeto multimedia en el formulario, asociado a un campo de la tabla subyacente de tipo Objeto OLE.
15. Inserta un Salto de pgina (slo til en Informes, no el formularios). 16. Inserta un control de tipo Control ficha, que permite agrupar controles dentro de

subcarpetas. Los controles de tipo Botn de alternar, Botn de opcin y Casilla de verificacin que queden dentro del mismo Control ficha funcionan de forma independiente, aunque queden dentro de la misma subcarpeta.
17. Inserta un control de tipo Subformulario/Subinforme, que permite anidar otros

formularios dentro del actual, vinculando el contenido de algunos campos.


18. Inserta un control de tipo Lnea, consistente en una lnea dibujada en el formulario. 19. Inserta un control de tipo Rectngulo, consistente en una rectngulo dibujado en el

formulario.

El objeto "Formulario"
Formularios
En esta seccin se describe como empezar con la creacin de un formulario y loscontroles disponibles para ser utilizados en ellos. El formulario en s es un objeto que posee propiedades como si fuera un control. Antes de comenzar a aadir controles a un formulario deberan establecerse las propiedades del propio formulario, ya que permitir que Access nos facilite luego la labor de aadir controles. Antes de comenzar a estudiar las propiedades de un formulario, hay que distinguir dos tipos fundamentales de formularios y sealar que el formulario en s est dividido en varias partes. Existen dos tipos de formularios:

Continuos: cada registro ocupa una lnea, como en una tabla; debajo de cada registro hay otro registro. Simples: cada registro de presenta en una pgina completa. Debajo del registro no hay otro registro. La organizacin de las tuplas se asemeja a un libro de fichas: una pgina por registro.

Un tercer tipo, menos importante, llamado Hoja de datos, permite utilizar el formulario como si se tratara de una tabla. Tanto los formularios simples como los continuos estn divididos en varias partes. Estas partes pueden o no estar presentes en un formulario, y funcionan como objetos (controles) en el sentido de que tienen sus propias propiedades. Los controles del formularios pueden estar situados indistintamente en cada una de estas partes, dependiendo de la funcionalidad que se quiera dar al control. Estas partes son:

Encabezado del formulario. Aparece siempre en la parte superior del formulario. Encabezado de pgina. Aparece siempre en la parte superior del formulario, entre el Encabezado del formulario y el Detalle.

Detalle. Contiene los registros. Si el formulario es de tipo continuo, aparecen mltiples lneas, una con cada registro de la tabla subyacente. Si es de tipo simple, slo aparece un registro, que va cambiando al avanzar y retroceder entre las pginas (registros). Si es demasiado grande para el tamao de la ventana, o hay ms registros de los que caben (en modo continuo), el Detalle se desplazar para visualizar las partes que no quepan, mientras que el resto de las partes del formulario no sufrirn cambios. Pie de pgina. Aparece siempre en la parte inferior del formulario, entre el Detalle y el Pie del formulario. Pie del formulario. Aparece siempre en la parte inferior del formulario.

Propiedades de formato

Ttulo: texto que aparece en la parte superior de la ventana. Vista predeterminada: formulario simple, continuo o tabla. Vistas permitidas: se puede entre simple/continuo y tabla durante la ejecucin? Barras de desplazamiento: qu barras de desplazamiento se mostrarn, en caso de que sea necesario. Selectores de registro: indica si debe mostrarse el recuadro que permite seleccionar el registro compelto. Botones de desplazamiento: indica si los botones de la parte inferior del formulario que sirven para navegar entre los registros deben mostrarse o no. Separadores de registros: indica si debe mostrarse una lnea de separacin entre los registros (formularios continuos). Ajuste de tamao automtico: indica si el formulario debe adaptarse a su contenido la prxima vez que se abra. Centrado automtico: indica si el formulario debe centrarse en pantalla la prxima vez que se abra. Estilo de los bordes: indica si se permite cambiar el tamao de la ventana durante la ejecucin. Cuadro de control: indica si debe existir el men de ventana. Botones Minimizar Maximizar, Botn cerrar, Botn qu es esto: indica si debe aparecer los botones de maximizar, minimizar, cerrar y ayuda. Ancho: indica el ancho del formulario. Imagen, Tipo de imagen, Modo de cambiar el tamao de la imagen, Distribucin de la imagen, Mosaico de imgenes: permiten poner una imagen de fondo en el formulario y la forma de colocar la imagen. Lnea X, Lnea Y: tamao de las rejillas horizontal y vertical: nmero de subdivisiones horizontales y verticales por unidad de medida de la cuadrcula de alineacin.

Propiedades de datos

Origen del registro: tabla o consulta de la que se obtienen los datos. Filtro: expresin WHERE que deben cumplir los registros para que sean visualizados. Ordenar por: lista de campos por los que se ordenan los registros. Permitir filtros: indica si se activan las opciones que permiten al usuario aadir filtros durante la ejecucin. Permitir ediciones: indica si se permite modificar el contenido de los registros existentes. Permitir eliminacin: indica si se permite eliminar registros existentes. Permitir agregar: indica si se permite aadir nuevos registros. Entrada de datos: indica si el formulario slo permite aadir datos. Bloqueos de registro: indica la forma en que deben bloquearse los registros utilizados para permitir el acceso concurrente de varios usuarios.

Otras propiedades

Emergente: indica si el formulario debe quedar delante de las dems ventanas de Access. Modal: indica si se permite activar otros formularios mientras el formulario est ejecutndose. Ciclo: indica si despus del ltimo control, la tecla de tabulacin debe saltar al primer control, al primer control visualizado o al siguiente registro. Barra de mens, Barra de herramientas, Men contextual, Barra de mens contextuales: permiten cambiar el men y las barras de herramientas de Access mientras se ejecuta el formulario. Archivo de ayuda, Id. del contexto de ayuda: permiten especificar un archivo de ayuda de Windows y el ndice del tema para el formulario.

En la lista anterior se han omitido las propiedades del conjunto de eventos. Antes de tratarlas debemos estudiar los eventos.
Controles de un formulario Formularios En esta seccin se describen las caractersticas de los controles disponibles para formularios. En un formulario se pueden incluir tantos controles como se desee. Cada control debe ir identificado por un nombre, que puede ser diferente del nombre del campo al que est asociado (aunque a menudo suelen coincidir, por regularidad). Si se ha definido la tabla asociada a un formulario, Access nos permite aadir un control para cada campo de forma fcil, simplemente

arrastrndolos con el ratn desde una ventana que contiene la lista de campos disponibles. Los controles as aadidos adoptan las propiedades que se deriven de los atributos asignados en la definicin de los campos de las tablas de origen. Cuando se agregan controles a un formulario, stos adoptan una determinada apariencia por defecto en cuando color, tamao, fuentes, y otras propiedades. Los valores por defecto de estos atributos pueden ser cambiadas a travs de un control de ejemplo (con la opcin Definir valores predeterminados de los controles en el men Formato). Los controles dependientes, por defecto aaden automticamente una etiqueta al ser aadidos. Esta etiqueta se mueve o borra al mover o borrar el control, pero no al revs. Cada control tiene un nombre. Se puede acceder al contenido de un control a travs de su nombre. Por ejemplo, podemos establecer una regla de validacin que verifique que el valor del control actual no sea superior al de un control cuyo nombre es ValorMaximo. La expresin que habra que introducir en la propiedad Regla de validacin del control sera <=ValorMaximo. Cada control dependiente suele ir asociado a un campo, pero no es necesario. En tal caso el control acta como una mera variable cuyo valor puede se modificado por el usuario. No hay que confundir por lo tanto el nombre de un control con el nombre del campo al que est asociado, aunque a menudo sean iguales. Otra posibilidad es que los controles muestren el resultado de algn clculo (lo veremos ms adelante). Al cambiar de registro activo, los controles asociados a los campos de la tabla se cargan automticamente con los valores del nuevo registro. De la misma forma, las modificaciones que se realicen sobre los datos de los controles se reflejan automticamente en la tabla. Propiedades de formato

Visible: indica si el control debe mostrarse o permanecer oculto. Mostrar cuando: indica si el control es visible en pantalla o en al imprimir el formulario. Izquierda: indica la posicin horizontal, es decir, la distancia desde el borde izquierdo del formulario, en cm.) Superior: indica la posicin vertical, es decir, la distancia desde el borde superior de la seccin actual del formulario (encabezado, detalle, pie...) en cm. Ancho, Alto: dimensiones del control, en cm. Color del fondo, Efecto especial, Estilo de los bordes, Ancho de los bordes,. Color de los bordes, Color del texto, Nombre de la fuente, Tamao de la fuente, Fuente en cursiva: definen el aspecto

general del control. Los colores se definen como color real RGB, codificado como un nmero de 24 bits, 8 para cada color. El efecto especial permite dar un aspecto tridimensional al formulario. Propiedades de datos

Origen del control: campo asociado al control. Valor predeterminado: igual que en la definicin de los campos de las tablas. Regla de validacin: igual que en la definicin de los campos de las tablas. Texto de validacin: igual que en la definicin de los campos de las tablas. Activado: indica si el control se puede utilizar o est desactivado. Bloqueado: indica si el control se puede utilizar o est inutilizado.

Otras propiedades

Nombre: nombre identificativo del control, para referencias desde otros controles. Texto de la barra de estado: texto de ayuda que aparece en la barra de estado de Access cuando el contro recibe el enfoque. Punto de tabulacin: indica si se puede acceder al control pulsado la tecla de tabulacin. ndice de tabulacin: indica en qu nmero de orden se accede al control pulsado la tecla de tabulacin. Texto de ayuda del control: texto flotante que aparece sobre el control al situarse el puntero del ratn sobre el control. Id. del contexto de ayuda: ndice del tema de ayuda relacionado con el control dentro del archivo de ayuda establecido por el formulario. Informacin adicional: un comentario que puede almacenarse sobre el objeto.

Como se ha visto, la asociacin de un control a un campo se hace a travs de la propiedad Origen del control. Si esta propiedad se establece al nombre de un campo, el control queda asociado a ese campo, y las modificaciones en el control se reflejar en los datos del campo. Si la propiedad se deja en blanco, el control es independiente y acta como una variable. Finalmente, si en la propiedad Origen del control se introduce una expresin comenzando por un smbolo igual (=), entonces el control contiene un valor calculado: el resultado de evaluar la expresin. Por ejemplo, si tenemos un campo Precio con su control correspondiente con el mismo nombre, podemos aadir un control llamado PrecioConIva que nos muestre el resultado de aadirle el IVA, sin que necesitemos almacenarlo en ningn campo. Esto lo haramos escribiendo la siguiente expresin en la

propiedad Origen del control de este ltimo control: =Precio * 1,16. Cada vez que cambie el contenido de "Precio" automticamente se recalcula el contenido de "PrecioConIva". Propiedades de los controles de listas Estas propiedades son comunes a los controles de tipo Cuadro combinado y Cuadro de lista. Ambos tienen en comn el hecho de que pueden contener una lista de valores permitidos para seleccionar el valor del control (y por tanto del campo asociado, si lo hubiera). Propiedades de datos:

Tipo de origen de la fila: indica si el contenido de la lista se tomar de los datos contenidos en alguna tabla, de una lista de valores explcitamente especificada, o de una lista de campos pertenecientes a alguna tabla. Origen de la fila: dependiendo del valor de la propiedad anterior, especifica, bien la tabla de origen para obtener los datos o campos a mostrar, o bien la lista de valores permitidos, separados por punto y coma (;). Nmero de columnas: especifica el nmero de columnas que se mostrarn en la lista. Tiene especial significado cuando los valores permitidos se obtienen de una tabla, la cual, puede contener varios campos. Esta propiedad indica cuntos campos de la tabla se mostrarn en la lista. El orden de aparicin de los campos es el mismo en que se encuentren definidos en la tabla. Encabezados de columna: indica si en la parte superior de la lista debe aparecer el ttulo de la columna, indicando el nombre del campos visualizado. Columna dependiente: cuando una lista de valores permitidos se muestra con ms de una columna, slo una de estas columnas es la que proporciona el valor para el campo. Esta propiedad indica cul es el nmero de orden de la columna. Limitar a lista: indica si el valor aceptado por el control debe ser obligatoriamente uno de los visualizados en la lista, o si, por el contrario, se permite que el usuario introduzca uno distinto.

Propiedades de formato

Ancho de columnas: especifica el ancho, medido en centmetros, de cada una de las columnas mostradas con los valores permitidos. Se trata de una lista con el ancho de cada columna, separado por punto y coma (;). Se permite ancho 0. Filas en lista: indica cuntas lneas con valores permitidos deben mostrarse en pantalla como mximo. Si hay ms, se mostrar una barra de desplazamiento.

Ancho de la lista: indica el ancho total de la lista de valores. Por defecto (automtico) el ancho de la lista es el mismo que el tamao en horizontal que tenga el control de lista, y no la suma de los anchos de las columnas mostradas. Si no caben las columnas en el ancho especificado se muestra una barra de desplazamiento horizontal.

Eventos
Formularios
En esta seccin se describen las caractersticas de los eventos aplicables a formularios y controles de formularios. Un evento es una accin determinada que se produce en o con un objeto particular. Access puede responder a una gran variedad de eventos: clics del ratn, cambios en los datos, formularios que se abren o se cierran, y muchos otros. Los eventos son normalmente el resultado de una accin del usuario. Cada objeto o control est preparado para responder a un conjunto de eventos, coherentes con el tipo de control y su utilidad. Se puede establecer una macropara cada evento de cada objeto, de manera que cuando se produce ese evento en ese objeto, se ejecuta el cdigo de la macro. Un ejemplo bsico consiste en asociar una macro que abra un formulario al evento de pulsacin de un botn, de manera que cuando el pulse el botn, se abra el formulario. De esta forma se pueden hacer programas tan complejos como se quiera con los formularios de Access. Para muchas situaciones existen dos eventos: uno denominados Antes de XXX y otro Despus de XXX . Ambos eventos se producen cuando se da la situacin XXX , con la diferencia de que uno de los eventos tiene lugar justo antes de que la situacin XXX haga su efecto, y el otro justo a continuacin.

Eventos para los formularios


Al activar registro: cuando el enfoque pasa a un nuevo registro. Antes de insertar, Despus de insertar: cuando se aade un nuevo registro. Antes de actualizar, Despus de actualizar: cuando se modifica un registro. Al eliminar, Antes de confirmar la eliminacin, Despus de confirmar la eliminacin: al eliminar un registro existente. Al abrir: al abrir el formulario. Al cargar: al cargar el formulario. Al cambiar el tamao: cuando se cambia el tamao de la ventana del formulario. Al descargar: al descargar el formulario. Al cerrar: al cerrar el formulario. Al activar: cuando el formulario es activado, es decir, pasa al frente de la pantalla y comienza a funcionar.

Al desactivar: cuando el formulario es desactivado, es decir, deja de estar al frente de la pantalla y se activa otro. Al recibir enfoque: cuando el enfoque pasa al formulario. Al perder enfoque: cuando el enfoque pasa del formulario a otro objeto. Al hacer clic: cuando se presiona y se suelta el botn izquierdo del ratn sobre la superficie del formulario. Al hacer doble clic: cuando hace doble con el botn izquierdo del ratn sobre la superficie del formulario. Al bajar el mouse: en el momento en que se presiona el botn izquierdo del ratn. Al subir el mouse: en el momento en que se libera el botn izquierdo del ratn. Al mover el mouse: en el momento en que se desplaza el puntero ratn sobre la superficie del formulario. Al bajar una tecla: en el momento en que se presiona una tecla. Al subir una tecla: en el momento en que se libera una tecla. Al presionar una tecla: cuando se produce una pulsacin completa (presionar y liberar) de una tecla. Tecla de vista previa: indica si los eventos de pulsaciones de teclado deben afectar antes a los controles del formulario o al propio formulario. Al ocurrir un error: cuando se produce un error en tiempo de ejecucin. Al filtrar: cuando se modifica el filtro sobre los registros de la tabla asociada. Al aplicarel filtro: cuando se aplica o elimina un filtro sobre los registros de la tabla asociada. Al cronmetro: cada cierto tiempo. Intervalo de cronmetro: nmero de milisegundos entre dos eventos Al cronmetro sonsecutivos.

Eventos para los controles


Para controles independientes (pasivos, no asociados a campos de tablas): textos, dibujos, etc.:

Al hacer clic: cuando se presiona y se suelta el botn izquierdo del ratn sobre la superficie del control. Al hacer doble clic: cuando hace doble con el botn izquierdo del ratn sobre la superficie del control. Al bajar el mouse: en el momento en que se presiona el botn izquierdo del ratn sobre el control. Al subir el mouse: en el momento en que se libera el botn izquierdo del ratn sobre el control.

Al mover el mouse: en el momento en que se desplaza el puntero ratn sobre la superficie del control.

Para controles dependientes (activos, que contienen informacin asociada a campos de tablas): editores, cuadros de lista, pulsadores, etc. (adems de los eventos anteriores):

Antes de actualizar, Despus de actualizar: cuando se modifica el contenido del control (en el momento en que se realiza el cambio definitivo sobre el campo o registro). Al cambiar: al cambiar el contenido del control, sin que sea necesario que se cambie definitivamente sobre el registro o campo. Al entrar, Al recibir el enfoque: cuando el control recibe el enfoque desde otro control. Al salir, Al perder el enfoque: cuando el control pierde el enfoque a favor de otro control. Al bajar una tecla: en el momento en que se presiona una tecla. Al subir una tecla: en el momento en que se libera una tecla. Al presionar una tecla: cuando se produce una pulsacin completa (presionar y liberar) de una tecla.

Prctica 1
El formulario "Splash"
Esta prctica tiene como objetivo introducir al alumno en el trabajo con la vista Diseo de los formularios y en el uso de macros. Para empezar la prctica disearemos un formulario que muestre una imagen con el nombre de nuestra aplicacin unos pocos segundos y despus desaparezca. Para ello:
1. Crea un nuevo formulario en modo de diseo. 2. Cuando aparezca la ventana de diseo debemos especificar el tamao que va a tener

la ventana de formulario. Haz clic con el botn derecho en el fondo del formulario y en el men contextual elige Propiedades. Aparece un cuadro de dilogo en el que se muestran las propiedades del formulario. En su parte superior, existe una lista con la que podemos elegir el objeto del que queremos ver sus propiedades. En las propiedad Ancho del objeto Formulario establece el valor 10,82 cm. En la propiedad Alto del objeto Detalle introduce el valor 5,926 cm.
3. Haz clic aqu para descargar la imagen que debes insertar en el formulario. Gurdala

en una subcarpeta de tu carpeta Mis documentos. En la barra de herramientas Cuadro de controles selecciona la herramienta Imagen y haz clic sobre el formulario. Muvela de manera que ocupe todo el rea visible del formulario.
4. Reduce los bordes del formulario de manera ques e adapta perfectamente a las

dimensiones de la imagen.
5. Si cambia a la Vista Formulario, ver que en nuestro formulario siguen apareciendo

cosas supfluas. Quita los botones de Maximizar y de Minimizar, las barras de

desplazamiento, los selectores de registro y los botones de desplazamiento. Quita los bordes del formulario y establece que aparezca centrado en la pantalla. Debe quedar ms o menos as cuando ests en Vista Formulario.

6. Ahora debemos conseguir que la ventana desaparezca transcurridos unos segundos.

Para ello, debemos acceder al evento Al cronmetro del Formulario. Haciendo clic en los tres puntos que aparecen a la derecha del campo aparece una nueva ventana en la que debemos elegir si la respuesta a ese evento ser una macro o cdigo Visual Basic. Elige Generador de macros. Aparecer una nueva ventana indicndote que introduzcas un nombre para esta nueva macro. Guarda la macro con el nombre cerrarVentanaInicial.
7. En la ventana de especificacin de macro, indica las acciones Cerrar (sin ms

especificaciones) y cierra la ventana. Confirma que deseas guardar la definicin de la macro.


8. Ahora solo falta que en el campo Intervalo de cronmetro del objeto Formulario

especifiques 3000 milisegundos y cierres el formulario. Access preguntar por un nombre para dicho formulario. Guardalo con el nombre "Splash".
9. Haz doble clic para ejecutar el formulario Splash y comprobar que funciona tal y

como deseamos.

Prctica 2
El formulario "Clientes"
Esta prctica tiene como objetivo que el alumno conozca alguna de las distintas opciones que nos brindan los formularios en lo relativo al uso de etiquetas, imgenes, campos de texto dependientes e independientes y macros asociadas a eventos. Vamos a generar un formulario para la tabla "Clientes" que permita aadir, modificar o borrar. Vete cambiando cada poco a Vista Formulario para comprobar que ests haciendo correctamente el formulario.

1. Crea un nuevo formulario en modo de diseo. El objetivo es que quede comos e

observa en la imagen:

2. Cuando aparezca la ventana de diseo debemos especificar el tamao que va a tener

la ventana de formulario. Haz clic con el botn derecho en el fondo del formulario y en el men contextual elige Propiedades. Aparece un cuadro de dilogo en el que se muestran las propiedades del formulario. En su parte superior, existe una lista con la que podemos elegir el objeto del que queremos ver sus propiedades. En las propiedad Ancho del objeto Formulario establece el valor 10,82 cm. En la propiedad Alto del objeto Detalle introduce el valor 5,926 cm.
3. Establece el color del fondo del objeto Detalle al color RGB(228, 234, 247). 4. Establece como ttulo del objeto Formulario el valor CLIENTES. Asegrate que

estas creando un formulario de tipo simple. Establece la propiedad Origen de datos del objeto Formulario a la tabla CLIENTE. Aparecer una ventanita donde figuran todos los campos de dicha tabla, los cuales puedes arrastrar para colocarlos en el formulario.
5. Haz clic aqu para descargar la imagen que debes insertar en el formulario. Gurdala

en una subcarpeta de tu carpeta Mis documentos. En la barra de herramientas Cuadro de controles el control Imagen y haz clic sobre el formulario. Muvela de manera que ocupe la esquina superior izquierda del formulario.
6. En la barra de herramientas Cuadro de controles selecciona el control Etiqueta y

haz clic sobre el formulario. Escribe CLIENTES y pulsa [Enter]. Establece la etiqueta con tipo de letra Arial negrita y tamao del punto 12. Como el texto no cabe en la etiqueta, haz doble clic sobre la esquina inferior derecha de la etiqueta para que la etiqueta autoajuste su tamao. Luego, posicinala debajo del logo como se aprecia en la imagen anterior. Establece para la etiqueta el nombre EtiquetaTitulo.
7. En la barra de herramientas Cuadro de controles selecciona el control Etiqueta y

haz clic sobre el formulario. Escribe ltimo identificador de cliente asignado: y pulsa [Enter]. Posicinalo conforme la imagen. Establece para la etiqueta el nombre EtiquetaUltimoID.
8. En la barra de herramientas Cuadro de controles selecciona el control Campo de

texto y haz clic sobre el formulario. Selecciona la etiqueta que por defecto se agrega siempre que introducimos un campo de texto y elimnala. Luego establace para el campo de texto la propiedad nombre a CampoUltimoID, la propiedad Efecto especial a Sin relieve, la propiedad Activado a No y la propiedad Estilo del fondo a

Transparente. La propiedad Origen de datos del campo de texto establecela a =MAX(numClie).


9. Arrastra el campo numClie de la pequea ventana al formulario. Sitalo ms o menos

conforme a la imagen anterior. Establece la propiedad de Efecto especial a Sin relieve y la propiedad Estilo de bordes a Slido y Alineacin del texto a Izquierda. Luego, haz clic en el men Formato y elige la opcin Definir formato predeterminado para los controles. As, cuando insertemos un nuevo campo de texto, se aadir con los valores de formato correctos. Adems, cambia el nombre de la etiqueta que Access introdujo automticamente a EtiquetaNumClie.
10. Arastra los campos nombre y repClie de la pequea ventana al formulario. Sitalos

tal y como se mostraba en la imagen anterior. Cambia los nombre de las etiquetas correspondientes a EtiquetaNombre y EtiquetaRepClie.
11. Ahora vamos a cambiar el tipo de control con el que se introduce el campo repClie.

Vamos a convertirlo en un Cuadro combinado. Haz clic con el botn secundario sobre el control y elige la opcin Cambiar a en el menu contextual. Luego, selecciona Cuadro combinado. Establece ahora para dicho control la propiedad Nmero de columnas a 2, la propiedad Encabezados de columna a Si y la propiedad Tipo de origen de la fila a Tabla/Consulta.
12. Para el control del paso anterior, haz clic en los puntos suspensivos de la propiedad

Origen de la fila. Especifica entonces una consulta SQL que nos devuelva una lista con los nmeros de todos los empleados y sus nombres. Cierra la consulta SQL y pulsa el botn Aceptar para que Access guarde esa consulta como valor para la propiedad que estamos editando. En la propiedad Columna dependiente escribe un 1. Esto significa que los valores que se van a almacenar para el campo repClie son los de la primera columna. Establece un valor de 1,5 cm en la propiedad Ancho de columna para dicho control.
13. La empresa tiene la poltica de ofrecer un lmite de crdito a sus clientes consistente

en la cuarta parte de su nmina. As que lo primero que vamos a hacer es introducir un campo de texto donde el operador pueda introducir el valor de la nmina. En la barra de herramientas Cuadro de controles selecciona el control Campo de texto y haz clic sobre el formulario. Selecciona la etiqueta que por defecto se agrega siempre que introducimos un campo de texto y cambiala el texto a Nmina:. Luego establace para el campo de texto la propiedad nombre a CampoNomina y para su etiqueta EtiquetaCampoNomina.
14. Ahora arrastra el ltimo campo que nos quedaba, es decir, el campo limiteCredito.

Cambia el nombre de su etiqueta a EtiquetaLimiteCredito y posiciona ambos conforme a la imagen anterior. Establece la propiedad del campo de texto Activado a No y la propiedad Bloqueado a Si. Hasta el momento el valor de este campo se toma de la tabla de Clientes pero haciendolo no editable no podramos cambiarlo. Lo que buscamos es que Access cambie su valor automticamente cuando el usuario establezca o cambie el valor del campo donde se especifica la nmina. Vamos a ver en el siguiente paso cmo hacerlo.
15. Crea, como hicimos en la prctica 1, para la propiedad Antes de actualizar del

campo de texto CampoNomina una macro con nombre ActualizarLimiteCredito.

Esta macro contendr la accin Establecer valor y debers fijarte de incluir en los parmetros Elemento (el campo a cambiar) y Expresin (la expresin que nos da el nuevo valor) de dicha macro los valores [Formularios]![CLIENTES]! [limiteCredito] y [Formularios]![CLIENTES]![campoNomina] * 0,25 respectivamente. Estos parmetro aparecen en la parte inferior izquierda de la ventana de definicin de macros.Con todo esto conseguimos actualizar al 25% de la nmina el campo limiteCredito cuando cambia o se introduce un valor en el CampoNomina. Prueba el formulario. Vers que si modificamos el campo Nmina el campo lmiteCredito se actualiza corretamente pero que si cambiamos de cliente, el campo Nmina no vara. Esto es normal, ya que el campo Nmina no se obtiene de ninguna tabla.
16. Ya solo nos queda conseguir que cuando cambiemos de registro a lo largo del

formulario el CampoNomina se recalcule en funcin del campo limiteCredito. Sabemos que la nmina de un cliente es 4 veces ms grande que el lmite de credito de dicho cliente. Lo que vamos a hacer es que cada vez que el usuario cambie de registro se calcule el campo de texto CampoNomina. Para ello, crea una macro llamada ActualizarCampoNomina para la propiedad Al activar registro del objeto Formulario. Esta macro contendr la accin Establecer valor y debers fijarte de incluir en los parmetros Elemento (el campo a cambiar) y Expresin (la expresin que nos da el nuevo valor) de dicha macro los valores [Formularios]![CLIENTES]! [CampoNomina] y [Formularios]![CLIENTES]![limiteCredito] * 4 respectivamente. Estos parmetro aparecen en la parte inferior izquierda de la ventana de definicin de macros.
17. Consigue que todo quede tal y como aparece en la imagen anterior. 18. Reduce los bordes del formulario de manera que se adapta perfectamente a las

dimensiones del mismo. Asegrate que la propiedad del formulario Barras de desplazamiento tiene como valor Ninguna, la propiedad Botones Maximizar y minimizar el valor Ninguno, la propiedad Estilo de los bordes a Fino
19. Cierra el formulario. Access preguntar por un nombre para dicho formulario.

Guardalo con el nombre "Clientes".


20. Haz doble clic para ejecutar el formulario Clientes y comprobar que funciona tal y

como deseamos. Prueba, en concreto, a modificar un formulario, insertar un nuevo registro y borrar clientes,

Prctica 3
El formulario "Men principal "
Esta prctica tiene como objetivo que el alumno conozca alguna de las distintas opciones que nos brindan los formularios en lo relativo al uso de etiquetas, imgenes, campos de texto dependientes e independientes y macros asociadas a eventos. Vamos a generar un formulario que nos sirva como men principal de la "aplicacin" de ejemplo que estamos desarrollando. Este formulario ser abierto por Access cuando se cierre el formulario Splash que habamos construido previamente en prcticas anteriores. Este nuevo formulario tendr una serie de botones que nos darn acceso a los formularios e

informes con los que contar la aplicacin (de los que, de momento, slo tenemos el formulario Clientes) y la opcin de abandonar la aplicacin.
1. Crea un nuevo formulario en modo de diseo. El objetivo es que al final de la prctica

quede como se observa en la imagen:

2. Cuando aparezca la ventana de diseo debemos especificar el tamao que va a tener

la ventana de formulario. Haz clic con el botn derecho en el fondo del formulario y en el men contextual elige Propiedades. Aparece un cuadro de dilogo en el que se muestran las propiedades del formulario. En su parte superior, existe una lista con la que podemos elegir el objeto del que queremos ver sus propiedades.
3. Establece el color del fondo del objeto Detalle al color RGB(228, 234, 247). 4. Establece como ttulo del objeto Formulario el valor MENU PRINCIPAL.

Asegrate que estas creando un formulario de tipo simple. Establece para la propiedad del formulario Estilo de los bordes el valor Fino, para la propiedad Selectores de registro el valor No, para la propiedad Botones maximizar y minimizar el valor Ninguno, para la propiedad Botones de desplazamiento el valor No y, por ltimo, para la opcin Barras de desplazamiento, el valor Ninguna.
5. Haz clic aqu para descargar la imagen que debes insertar en el formulario. Gurdala

en una subcarpeta de tu carpeta Mis documentos. En la barra de herramientas Cuadro de controles el control Imagen y haz clic sobre el formulario. Muvela de manera que ocupe la esquina superior izquierda del formulario.
6. En la barra de herramientas Cuadro de controles selecciona el control Etiqueta y

haz clic sobre el formulario. Escribe MENU PRINCIPAL y pulsa [Enter]. Establece la etiqueta con tipo de letra Arial negrita y tamao del punto 12. Como el texto no cabe en la etiqueta, haz doble clic sobre la esquina inferior derecha de la etiqueta para que la etiqueta autoajuste su tamao. Luego, posicinala debajo del logo como se aprecia en la imagen anterior. Establece para la etiqueta el nombre EtiquetaTitulo.
7. En la barra de herramientas Cuadro de controles selecciona el control Etiqueta y

haz clic sobre el formulario. Escribe Haga clic en una de las opciones disponibles: y pulsa [Enter]. Posicinalo conforme la imagen. Establece para la etiqueta el nombre EtiquetaInstrucciones.

8. En la barra de herramientas Cuadro de controles selecciona el control Botn de

comando y haz clic sobre el formulario. Luego establace para el control la propiedad nombre a BotonClientes. Haz clic en el interior del control y escribe el texto que figurar en el control: Clientes. Luego, modifica su tamao y posicin paa que coincidan ms o menos con la imagen anterior.
9. Ahora vamos a asignar una macro al evento que se produce cuando el usuario hace

clic en el botn. Haz clic en los puntos suspensivos que aparecen a la derecha de la propiedad Al hacer clic del objeto BotonClientes. En el cuadro de dilogo Elegir generador que aparece, elige la opcin Generador de macros. En el siguiente cuadro de dilogo se nos solicita el nombre con el que vamos a guardar la nueva macro: escribe AbrirFormularioClientes y pulsa el botn Aceptar. Una vez en la ventana de definicin de macro, elige de entre la lista Accin la opcin Abrir formulario. Como parmetros de dicha macro (parte inferior izquierda de la ventana) debemos elegir fundamentalmente el nombre del formualrio a abrir. Selecciona en el desplegable disponible para el campo Nombre del formulario la opcin Clientes. Con esto conseguiremos que al pulsar el botn, aparezca el formulario Clientes. Cierra la ventana y confirma que deseas guardar los cambios.
10. En la barra de herramientas Cuadro de controles selecciona el control Lnea. Haz

clic sobre el formulario y arrastra para crfear una lnea horizontal tal y como se ve en la imagen. Luego establace para el control la propiedad nombre a BotonSalir. Haz clic en el interior del control y escribe el texto que figurar en el control: Salir de la aplicacin . Luego, modifica su tamao y posicin paa que coincidan ms o menos con la imagen anterior.
11. En la barra de herramientas Cuadro de controles selecciona el control Botn de

comando y haz clic sobre el formulario. Luego establace para el control la propiedad nombre a BotonSalir. Haz clic en el interior del control y escribe el texto que figurar en el control: Salir de la aplicacin . Luego, modifica su tamao y posicin para que coincidan ms o menos con la imagen anterior.
12. Ahora vamos a asignar una macro al evento que se produce cuando el usuario hace

clic en el botn. Haz clic en los puntos suspensivos que aparecen a la derecha de la propiedad Al hacer clic del objeto BotonSalir. En el cuadro de dilogo Elegir generador que aparece, elige la opcin Generador de macros. En el siguiente cuadro de dilogo se nos solicita el nombre con el que vamos a guardar la nueva macro: escribe SalirAccess y pulsa el botn Aceptar. Una vez en la ventana de definicin de macro, elige de entre la lista Accin la opcin Salir. Con esto conseguiremos que al pulsar el botn, Access se cierre. Cierra la ventana y confirma que deseas guardar los cambios.
13. Vamos a probar si el formulario funciona. Antes de nada, vamos a guardar el

formulario usando la opcin Guardar del men Archivo. Como nombre para el formulario, escribe MENU y pulsa el botn Aceptar. Una vez guardado el formulario, cambia a Vista Formulario. Haciendo clic en el botn Clientes debera abrirse el formulario Clientes. De la misma manera, haciendo clic en el botn Salir de la aplicacin, Access debera cerrarse (aunque es posible que el programa te pregunte para que guardes los cambios que estuvieran sin salvar de la base de datos actual antes de proceder al cierre).

14. Para ir terminando, vamos a aadir la fecha actual al final del formulario. En la barra

de herramientas Cuadro de controles selecciona el control Campo de texto y haz clic sobre el formulario. Selecciona la etiqueta que por defecto se agrega siempre que introducimos un campo de texto y elimnala. Luego establace para el campo de texto la propiedad nombre a CampoFecha, la propiedad Efecto especial a Sin relieve, la propiedad Activado a No, la propiedad Estilo de los bordes a Transparente, la propiedad Color de los bordes a RGB(228, 234, 247) y la propiedad Estilo del fondo a Transparente. Haz clic en los puntos suspensivos de la derecha de la propiedad Origen de datos. Aparecer el cuadro de dilogo Generador de expresiones de Access. Aber la carpeta de la parte inferior izquierda Expresiones comunes y haz clic en la funcin Fecha actual de la parte central inferior y por fin doble clic en la funcin Fecha() de la parte inferior derecha de la ventana. Luego, haz clic en Aceptar. Vers que se cierra la ventana y Access asigna a la propiedad Origen del control el valor =Fecha().
15. Haz doble clic para ejecutar el formulario Men y comprobar que funciona tal y

como deseamos, es decir, mostrando la fecha en la parte de abajo, abriendo el formulario Clientes y cerrando Access.
16. Para terminar, vamos a modificar el formulario Splash para que cuando se cierre,

abra este nuevo formulario que hemos creado. Abre el formulario Splash en vista de diseo. En la propiedad Al cronmetro del objeto Formulario, tenemos la macro cerrarVentanaInicial. Si hacemos clic sobre los puntos suspensivos que aparecen a la derecha de dicha propiedad, pasamos a editar la macro. En la ventana de definicin de macros figura como primera accin Cerrar. Elige como segunda accin Abrir formulario y selecciona en la lista desplegable del parmetro Nombre del formulario el formulario Menu. Cierra la ventana (aceptando los cambios) y cierra el formulario. Ahora, en la ventana de la base de datos haz doble clic sobre el formulario Splash y comprueba que la aplicacin funciona hasta aqu correctamente.

Prctica 4
El formulario "Productos"
Esta prctica tiene como objetivo que el alumno practique por si slo con todos los conceptos desarrollados hasta el momento en lo relativo a formularios y macros. En esta prctica se pide que generes un nuevo formulario para ver, introducir o borrar informacin de la tabla Productos. Debes basarte en todo lo que has aprendido de las prcticas anteriores y tener especial cuidado con:
1. El objetivo es que al final de la prctica quede como se observa en la imagen:

2. Debe aparecer el ttulo Productos debajo del logo de la compaa. 3. Debe aparecer en la esquina superior derecha el nmero de productos que hay

actualmente en la base de datos.


4. Para introducir el fabricante, lo haremos eligindolo de una lista combinada donde se

nos presenten todos los fabricantes existentes o bien tecleando en dicha lista nosotros un nuevo valor diferente a los existentes.
5. El formato de introduccin de valores en los campos debe ser el heredado de la tabla

de donde se extrae el dato. Esto significa que, por ejemplo, en el campo precio, se motrar el sufijo " Pts.".
6. Debe aparecer al final del formulario el precio sin IVA (el IVA actual es el 16% y se

encuentra ya aadido en los valores de la columna Precio de la tabla Productos). Debe ser un campo bloqueado y no editable. Debe aparecer el sufijo " Pts." tal y como aparece en el campo Precio.
7. El formulario tendr un aspecto y tamao acorde con el resto de la aplicacin. 8. Debers, por ltimo, modificar el formulario Menu introduciendo en el un nuevo

botn para tener acceso a este nuevo formulario tal y como se ve en la imagen de abajo:

Subformularios
Formularios

En esta seccin se describen las caractersticas de los subformularios y su utilizacin en formularios principales. Algunas veces resulta interesante anidar formularios, es decir, incluir formularios dentro de otros formularios. Supongamos como ejemplo una base de datos para almacenar nuestras cintas de msica. Tenemos el siguientes esquema lgico:
CANCIONES(idCancion, titulo, autor, idCinta) CINTAS(idCinta, titulo, duracion, propietario) CANCIONES(idCinta) -> CINTAS(idCinta)

Supongamos que queremos presentar un formulario en el que aparezcan los datos de una cinta, y todas las canciones que contiene. La forma ms adecuada de hacer esto es utilizando subformularios. El proceso es el siguiente:
1. Construccin del subformulario. En nuestro caso, se trata del formulario que

contiene los datos de las canciones.


2. Construccin del formulario principal. En nuestro caso, el de cintas. Debe contener

un control de tipo subformulario, que se refiera al formulario de canciones.


3. Enlace de los formularios. Hay que asociar dos campos, uno en el formulario

principal y otro en el subformulario, de manera que en el subformulario slo se muestran las filas que contengan un campo cuyo valor coincida con el de un determinado campo en el principal. As, no se mostrarn todas las canciones, sino slo aqullas que pertenezcan a la cinta que se muestra en el principal. Se trata de los campos que establecen la relacin entre ambas tablas: Canciones.idCinta y Cintas.IDcinta . Para la construccin del subformulario, debemos tener en cuenta lo siguiente:

Probablemente nos convenga utilizar un formulario de tipo continuo: muchas canciones para la misma cinta; parece lgico que sea un formulario de tipo continuo (como una tabla). Probablemente el campo que enlazar el subformulario con el formulario principal (Canciones.idCinta) no se muestre en el subformulario: parece que no tiene sentido que para todas las canciones de la cinta se muestre en el formulario repetido el mismo valor de la clave externa. Adems, este campo ser llenado por Access de forma automtica al valor adecuado al agregar nuevas filas a la tabla de canciones. No hay que establecer filtros ni condiciones sobre el campo dependiente, ya que Access lo har automticamente al establecer la dependencia. Probablemente sea adecuado no introducir encabezados y pies en el subformulario, ya que al ir integrado dentro de otro formulario, estas partes podemos introducirlas directamente en el formulario principal.

En cuando al formulario principal, hay que tener el cuenta que al introducir el control de subformulario, hay que darle el tamao y forma adecuado para que quepa en l el subformulario completo. Si es de tipo continuo, hay que darle el ancho adecuado para que no sobre ni falte espacio, y el alto adecuado para que quepan el nmero de filas deseado. Por ltimo, hay que establecer las siguientes propiedades del control subformulario:

1. Objeto origen: nombre del formulario utilizado como subformulario. 2. Vincular campos secundarios: nombre del campo dependiente en el subformulario

(que establece la relacin entre el formulario principal y el subformulario: Canciones.idCinta ).


3. Vincular campos principales: nombre del campo o control dependiente en el

formulario principal (que establece la relacin entre el formulario principal y el subformulario: Cintas.idCinta ). En el subformulario slo se mostrarn las filas para las cuales el valor del campo establecido en Vincular campos secundarios coincida con el del control establecido para esta propiedad. Los campos de vinculacin no han de estar incluidos con controles en el formulario principal o en el subformulario. Es suficiente con que estn en las tablas o consultas base de stos.

Prctica 5
El formulario "Oficinas"
Esta prctica tiene como objetivo que el alumno conozca alguna de las distintas opciones referentes a la utilizacin de subformularios en Access. Vamos a construir un formulario para poder ver, modificar e introducir datos referentes a las oficinas de la empresa. Este formulario nos debe permitir ver qu empleados estn asignados a una oficina en concreto. Para ello, primero crearemos un primer formulario con el que mostraremos los empleados y luego dicho formulario lo introduciremos dentro de un formulario que muestra las oficinas convirtindose en un subformulario.
1. Crea un nuevo formulario en modo de diseo. El objetivo es que al final de la prctica

quede como se observa en la imagen:

2. Cuando aparezca la ventana de diseo debemos especificar el tamao que va a tener

la ventana de formulario. Establece este tamao en principio teniendo en cuenta la imagen anterior.

3. Establece el color del fondo del objeto Detalle al color RGB(228, 234, 247). 4. Establece como ttulo del objeto Formulario el valor EMPLEADOS_SUB. En esta

ocasin, lo que vamos a crear va a ser un formulario de tipo continuo. Asegrate que ests creando un formulario de este tipo. Establece la propiedad Origen del registro del objeto Formulario a la tabla EMPLEADOS. Establece la propiedad Separadores de registro a No. Aparecer una ventanita donde figuran todos los campos de dicha tabla, los cuales puedes arrastrar para colocarlos en el formulario.
5. Arrastra el campo numEmp de la pequea ventana al formulario. Sitalo ms o

menos conforme a la imagen anterior. Establece la propiedad de Efecto especial a Sin relieve y la propiedad Estilo de bordes a Slido y Alineacin del texto a Izquierda . Luego, haz clic en el men Formato y elige la opcin Definir formato predeterminado para los controles. As, cuando insertemos un nuevo campo de texto, se aadir con los valores de formato correctos. Adems, elimina la etiqueta que Acces ha aadido automticamente al formulario.
6. Arrastra los campos nombre y titulo de la pequea ventana al formulario. Sitalos

ms o menos conforme a la imagen anterior. Elimina las etiqueta que Access introdujo automticamente.
7. En la barra de herramientas Cuadro de controles selecciona el control Campo de

texto y haz clic sobre el formulario. Selecciona la etiqueta que por defecto se agrega siempre que introducimos un campo de texto y elimnala. Luego establace para el campo de texto la propiedad nombre a CampoVentasAFavor, la propiedad Activado a No y la propiedad Estilo del fondo a Transparente . La propiedad Origen de datos del campo de texto establecela a =[Ventas]-[Cuota].
8. Guarda el formulario con el nombre EMPLEADOS_SUB y cirralo. Ejecuta el

formulario para comprobar que funciona correctamente. El aspecto que debe mostrar debe ser cmo en la siguiente imagen:

9. Vamos ahora a constuir el formulario que nos va a mostrar los datos de las oficinas.

Antes de ello, vamos a crear una nueva columna en la tabla OFICINAS. Esta nueva columna la aadiremos usando la vista de Diseo de dicha tabla. Establece para la propiedad Nombre del campo el valor Fotografia, para la propiedad Tipo de datos el valor Objeto OLE, para la propiedad Comentario el valor Fotografia de la oficina, para la propiedad Ttulo el valor Fotografa y para la propiedad Requerido el valor No. Cierra la tabla y confirma los cambios.

10. Como ya habrs adivinado, en esta nueva columna de la tabla vamos a almacenar una

pequea fotografa del edificio donde est la oficina. Vete a la vista Hoja de datos con el objetivo de ir insertando las fotografas en la tabla. Haz clic sobre el campo Fotografa con el botn derecho del ratn y elige en el men contextual que aparece la opcin Insertar objeto. Luego elige la opcin insertar desde archivo y vete seleccionando las fotografas que se correponden con las distintas oficinas. Estas fotografas las debes obtener de la pgina que constituye el anexo de esta prctica. Si insertas correctamente las fotografas, en la columna correpondiente al campo Fotografa aparecer el valor Imagen de mapa de bits.
11. Crea un nuevo formulario en modo de diseo. 12. Cuando aparezca la ventana de diseo debemos especificar el tamao que va a tener

la ventana de formulario. Establece este tamao en principio teniendo en cuenta la primera imagen de este apartado.
13. Establece el color del fondo del objeto Detalle al color RGB(228, 234, 247). 14. Establece como ttulo del objeto Formulario el valor OFICINAS. En esta ocasin, lo

que vamos a crear va a ser un formulario de tipo simple. Asegrate que ests creando un formulario de este tipo. Establece la propiedad Origen del registro del objeto Formulario a la tabla OFICINAS. Aparecer una ventanita donde figuran todos los campos de dicha tabla, los cuales puedes arrastrar para colocarlos en el formulario.
15. Haz clic aqu para descargar la imagen que debes insertar en el formulario. Gurdala

en una subcarpeta de tu carpeta Mis documentos . En la barra de herramientas Cuadro de controles el control Imagen y haz clic sobre el formulario. Muvela de manera que ocupe la esquina superior izquierda del formulario.
16. En la barra de herramientas Cuadro de controles selecciona el control Etiqueta y

haz clic sobre el formulario. Escribe OFICINAS y pulsa [Enter]. Establece la etiqueta con tipo de letra Arial negrita y tamao del punto 12. Como el texto no cabe en la etiqueta, haz doble clic sobre la esquina inferior derecha de la etiqueta para que la etiqueta autoajuste su tamao. Luego, posicinala debajo del logo como se aprecia en la imagen anterior. Establece para la etiqueta el nombre EtiquetaTitulo.
17. En la barra de herramientas Cuadro de controles selecciona el control Etiqueta y

haz clic sobre el formulario. Escribe ltimo identificador de oficina asignado: y pulsa [Enter]. Posicinalo conforme la imagen. Establece para la etiqueta el nombre EtiquetaUltimoID.
18. En la barra de herramientas Cuadro de controles selecciona el control Campo de

texto y haz clic sobre el formulario. Selecciona la etiqueta que por defecto se agrega siempre que introducimos un campo de texto y elimnala. Luego establace para el campo de texto la propiedad nombre a CampoUltimoID, la propiedad Efecto especial a Sin relieve, la propiedad Activado a No, la propiedad Bloqueado a Si y la propiedad Estilo del fondo a Transparente. La propiedad Origen de datos del campo de texto establecela a =MAX(oficina).
19. Arrastra el campo oficina de la pequea ventana al formulario. Sitalo ms o menos

conforme a la imagen anterior. Establece la propiedad de Efecto especial a Sin relieve y la propiedad Estilo de bordes a Slido, la propiedad Ancho de los bordes a

1 pto. y Alineacin del texto a Izquierda. Luego, haz clic en el men Formato y elige la opcin Definir formato predeterminado para los controles. As, cuando insertemos un nuevo campo de texto, se aadir con los valores de formato correctos. Adems, cambia el nombre de la etiqueta que Access introdujo automticamente a EtiquetaOficina.
20. Arrastra los campos ciudad y regin de la pequea ventana al formulario. Sitalos tal

y como se mostraba en la imagen anterior. Cambia los nombre de las etiquetas correspondientes a EtiquetaCiudad y EtiquetaRegion.
21. Arrastra el campo dir de la pequea ventana al formulario. Sitalo tal y como se

mostraba en la imagen anterior. Cambia el nombre de la etiqueta correspondiente a EtiquetaDirector.


22. Ahora vamos a cambiar el tipo de control con el que se introduce el campo dir.

Vamos a convertirlo en un Cuadro combinado. Haz clic con el botn secundario sobre el control y elige la opcin Cambiar a en el menu contextual. Luego, selecciona Cuadro combinado. Establece ahora para dicho control la propiedad Nmero de columnas a 2 , la propiedad Encabezados de columna a Si y la propiedad Tipo de origen de la fila a Tabla/Consulta.
23. Para el control del paso anterior, haz clic en los puntos suspensivos de la propiedad

Origen de la fila. Especifica entonces una consulta SQL que nos devuelva una lista con los nmeros de todos los empleados y sus nombres. Cierra la consulta SQL y pulsa el botn Aceptar para que Access guarde esa consulta como valor para la propiedad que estamos editando. En la propiedad Columna dependiente escribe un 1. Esto significa que los valores que se van a almacenar para el campo dir son los de la primera columna. Establece un valor de 1,5 cm en la propiedad Ancho de columna para dicho control.
24. Ahora arrastra los ltimos campos que nos quedaban, es decir, el campo objetivo y el

campo ventas. Cambia el nombre de sus etiquetas a EtiquetaObjetivo y a EtiquetaVentas y posiciona ambos conforme a la imagen anterior.
25. Ahora vamos a insertar el campo Fotografa. Arrastra de la ventana el campo hacia el

formulario. Elmina luego la etiqueta que Access aade automticamente. Cambia la propiedad Estilo de bordes a Sin relieve. Establece la propiedad Ancho a 7,06 cm. y la propiedad Alto a 5,22 cm.
26. El punto clave de esta prctica llega ahora. El objetivo es isnertar el formulario que

habamos hecho al principio (EMPLEADOS_SUB) dentro de este formulario, de manera que se muestren los empleados quie trabajan en esa oficina. Elige la herramienta Subformulario de la barra de herramientas Cuadro de controles y haz clic sobre el formulario. Se inserta un control que representa un subformulario. Cambia el valor de la etiqueta que Access ha aadido automticamente y escribe Empleados:. Luego, sita el subformulario acorde a la imagen del principio de la prctica. Establece que los bordes del formulario sean tranasparentes.
27. Selecciona el subformulario que hemos insertado y establece la propiedad Objeto

origen a EMPLEADOS_SUB. Asegrate que en Vincular campos secundarios est establedido Oficina. Este mismo valor debe estar fijado para la propiedad Vincular campos principales.

28. Ahora guarda el formulario con el nombre OFICINAS y cirralo. Comprueba que

funciona correctamente.
29. Vamos a modificar un par de aspectos del formulario EMPLEADOS_SUB. Abre este

formulario y haz que no se muestren los botones de desplazamiento. Haz tambin que slo se muestre la barra de desplazamiento vertical del formulario. Luego, guarda estas modificaciones y vuelve al formulario OFICINAS. Establece los ltimos retoques para que el formulario quede como la imagen (en concreto, elimina las barras de desplazamiento y el estilo de los bordes, que debe ser Fino).
30. Debers, por ltimo, modificar el formulario Menu introduciendo en el un nuevo

botn para tener acceso a este nuevo formulario tal y como se ve en la imagen de abajo:

Anexo Prctica 5
Fotografas de las oficinas
En este apartado se incluyen las fotografas necesarias para completar la prctica 5 de este tema. A continuacin se incluye un listado con los enlaces a las fotografas que debes incluir en la prctica 5 tal y como indica el enunciado de la misma. Recuerda que Access trabaja con el formato grficio nativo de Windows, el formato BMP as que debes asegurarte que las guardas en este formato.

Fotografa oficina nmero 11. Fotografa oficina nmero 12.

Fotografa oficina nmero 13.

Fotografa oficina nmero 21 .

Fotografa oficina nmero 22 .

Fotografa oficina nmero 23 .

Fotografa oficina nmero 24 .

Fotografa oficina nmero 26 .

Fotografa oficina nmero 28 .

Prctica 6

El formulario "Empleados"
Esta prctica tiene como objetivo que el alumno afiance los conceptos y procedimientos referentes a la utilizacin de subformularios en Access. En esta prctica se pide que generes un nuevo formulario de nombre EMPLEADOS que muestre la informacin que se puede ver en la siguiente imagen. Debes basarte en lo que has aprendido en prcticas anteriores y prestar especial atencin a:
1. El objetivo es que al final de la prctica el formulario quede como se observa en la

siguiente imagen:

2. El usuario debe poder elegir en el campo Oficina de entre un desplegable que le

muestre los nmeros de todas las oficinas existentes y las ciudades donde se ubican las mismas.
3. El usuario debe poder elegir en el campo Ttulo de entre un desplegable que le

muestre los distintos ttulos existentes hasta hoy da en la empresa. Adems, el usuario debe poder escribir un titulo diferente si as lo desea.
4. El usuario debe poder elegir en el campo Jefe de entre un depslegable que le muestre

los distintos nemros de los empleados de la empresa junto a sus respectivos nombres.
5. El campo Diferencia entre ventas y cuota no debe ser editable. 6. En el subformulario no se podra editar ningn campo ni aadir ni borrar registros.

Debes mirar en la parte terica qu propiedades controlan estos aspectos.


7. Debers, por ltimo, modificar el formulario Menu introduciendo en el un nuevo

botn para tener acceso a este nuevo formulario tal y como se ve en la imagen de abajo:

Anda mungkin juga menyukai