Está en la página 1de 115

Apuntes de

Bases de Datos
Cartogrficas
Laura Sebasti
Departamento de Sistemas Informticos y Computacin
Objetivos

El objetivo principal de esta asignatura consiste en introducir los conceptos bsicos de los
sistemas gestores de bases de datos actuales, por un lado, y por otro, la utilizacin de las
extensiones para el manejo de datos espaciales que proporcionan estos sistemas como
parte de un sistema de informacin geogrfica. Para ello deberemos ser capaces de:

- entender los conceptos bsicos del diseo de bases de datos


- ser capaces de interpretar y criticar diseos de bases de datos
- entender los conceptos de las bases de datos espaciales y su implantacin e
integracin en sistemas gestores de bases de datos tradicionales
- ser capaces de realizar consultas mediante el lenguaje SQL a una base de datos
general y a una base de datos que integre datos de negocio y datos espaciales

Bibliografa

La bibliografa consultada para elaborar estos apuntes es:


- Bases de datos relacionales. Matilde Celma Gimnez, Juan Carlos Casamayor
Rdenas, Laura Mota Herranz. Servicio de Publicaciones de la Universidad Politcnica
de Valencia, 1997.
- Introduccin a los sistemas de bases de datos. C.J. Date, Addison Wesley, 1998
- Spatial databases : with application to GIS. Philippe Rigaux, Michel Scholl, Agns
Voisard, Morgan Kaufmann, 2002.
- Manual de usuario de Oracle 8i.
Indice

Unidad temtica 1: Bases de datos relacionales


Tema 1. Introduccin a las bases de datos 9
Tema 2. El modelo Entidad-Relacin 17
Tema 3. El modelo relacional 27
Tema 4. Teora de la normalizacin 37

Unidad temtica 2: Gestin de bases de datos relacionales


Tema 5. Introduccin al lenguaje SQL 45
Tema 6. Lenguaje de manipulacin de datos 53
Manual del SQLWorksheet 75
Prctica 1. Consultas alfanumricas 79
Tema 7. Lenguaje de definicin de datos 83

Unidad temtica 3: Bases de datos espaciales


Tema 8. Modelado de datos espaciales 91
Tema 9. Gestin de datos espaciales en Oracle 8i 95
Tema 10. Consultas espaciales en Oracle 8i 101
Prctica 2. Consultas espaciales 107
Prctica 3. Manipulacin de la base de datos 111
UNIDAD TEMTICA 1

Bases de datos relacionales

Objetivos
Comprender el concepto de SGBD
Conocer cmo se organizan los datos alfanumricos en una base de datos
Ser capaces de interpretar un diagrama entidad-relacin
Ser capaces de generar un diseo de base de datos que cumpla los principios bsicos
del modelo relacional

Contenidos
Tema 1. Introduccin a las bases de datos
Tema 2. El modelo Entidad-Relacin
Tema 3. El modelo relacional
Tema 4. Teora de la normalizacin
Tema 1. Introduccin a las Bases de Datos

1 Introduccin

Hace unas dcadas, la principal forma de sintetizar y representar informacin geogrfica


eran los mapas de papel. Desde entonces, el rpido desarrollo de nuevas tecnologas para
recoger y digitalizar datos geogrficos junto con una creciente demanda de manipulacin y
anlisis interactivo de estos datos, ha dado lugar a la necesidad de software dedicado,
concretamente de sistemas de informacin geogrfica (SIG). Un SIG almacena datos
geogrficos, recupera y combina estos datos para crear nuevas representaciones del
espacio, proporciona herramientas para realizar anlisis espacial, etc. Debido al creciente
volumen de los datos geogrficos, una de las tareas principales de los SIG es la
manipulacin eficiente de grandes cantidades de informacin compleja. En sistemas
tradicionales, esta gestin la realizan sistemas gestores de bases de datos (SGBD). La gran
mayora de estos sistemas se basan en el modelo relacional. Actualmente se estn
realizando esfuerzos para extender la tecnologa de los SGBD de manera que sean
capaces de gestionar tambin informacin geogrfica. La principal ventaja de estos
sistemas es que permiten al usuario manipular los datos espaciales y temticos de forma
conjunta, pudiendo construir consultas complejar relacionando ambos tipos de datos.
En este tema, veremos en primer lugar, qu es un SGBD, sus objetivos y funciones.
Tambin comentaremos brevemente los distintos modelos de datos utilizados en SGBD
relacionales y por ltimo, introduciremos las bases de datos espaciales.

2 Definiciones

Una Base de datos consiste en una coleccin de datos persistentes e independientes


usados por una organizacin determinada (Date, 1995).
Un Sistema de base de datos es una coleccin integrada de ficheros relacionados, junto
con los detalles de la interpretacin de los datos que contienen.
El software que gestiona el acceso a los datos contenidos en la base de datos es lo que se
llama sistema de gestin de base de datos, SGBD (DBMS, Database Management
System). La misin de un SGBD es proporcionar mtodos eficientes para definir, almacenar
y recuperar la informacin contenida en la base de datos.
Los SGBD se disean para manejar grandes cantidades de informacin. Esta gestin de
los datos incluye tanto la definicin de las estructuras para el almacenamiento como los
mecanismos de acceso a los datos. Adems debe cuidar la seguridad de la informacin
almacenada en la base de datos, tanto contra las cadas del sistema como contra los
intentos de acceso no autorizado. Programas de distintas aplicaciones interactan con el
SGBD y el sistema debe evitar la posibilidad de obtener resultados anmalos.
Tema 1. Introduccin a las Bases de Datos

3 Objetivos de las Bases de Datos

El objetivo principal de todo sistema de base de datos es proporcionar a la organizacin la


gestin y control centralizado de los datos.
En los sistemas de ficheros tradicionales no exista un modelo normalizado que regulase los
distintos tipos de objetos que se almacenaban as como las relaciones entre ellos y la forma
en que deban ser gestionados; existen por lo general mltiples ficheros y muchas
aplicaciones que los gestionan, dando lugar a mltiples vas para acceder a la informacin.
Los SGBD proporcionan un nico cauce para acceder y gestionar la informacin, que es
precisamente el que posibilita el control centralizado de toda la informacin al servicio de la
organizacin. Este cauce nico, adems est controlado por una de las figuras esenciales
en el SBD que es el administrador de la base de datos (ABD).

Insercin Recuperacin

Actualizacin BD Tratamiento

Los objetivos bsicos de una base de datos son:


! Disminuir la redundancia de datos y evitar la inconsistencia. En los sistemas
tradicionales de almacenamiento de la informacin, debido a la falta de un modelo
normalizado es posible que un objeto se represente en distintos ficheros. Esta
redundancia aumenta los costes de almacenamiento y, lo que es peor, puede provocar
inconsistencia de datos, es decir, que existan dos copias de un dato con valores
diferentes. El control centralizado en los SBD permite eliminar o al menos controlar
cualquier redundancia. Podemos decir que una norma bsica en todo sistema de BD
puede ser: un objeto se almacena una sola vez en un solo lugar.
! Hacer posible la comparticin de datos. Distintos programas de aplicacin pueden
estar accediendo a los mismos datos, que estn almacenados en un slo lugar para
distintos fines.
! Mantener la integridad de los datos. El concepto integridad de los datos significa que
los datos almacenados en la base de datos son correctos. El control centralizado
tambin permite la posibilidad de mantener controles que garanticen la integridad de
todos los datos almacenados en la BD.
! Garantizar la seguridad de los datos. En toda organizacin existen datos que son
confidenciales y no pueden ser accedidos por usuarios no autorizados. El ABD debe
asegurar que se siguen los procedimientos adecuados en el acceso a los datos,
incluyendo esquemas de autentificacin y validaciones adicionales. Los SBD permiten
implantar distintos niveles de seguridad para distintos tipos de usuarios y operaciones.

10
Tema 1. Introduccin a las Bases de Datos
! Proporcionar independencia de datos. Este concepto hace referencia a la necesidad
de establecer una desconexin entre los programas de aplicacin y los datos
almacenados. Los usuarios interactuan con una representacin de los datos
independientemente de la representacin que estos datos tienen en los dispositivos
fsicos, y es el SGBD el encargado de traducir las consultas y modificaciones del
usuario en operaciones eficientes sobre las estructuras de datos fsicas. Esto es muy
diferente del tratamiento de ficheros tradicional, donde la estructura de un fichero junto
con las operaciones sobre l estn embebidas en un programa de acceso.
Este mecanismo es alcanzable a travs del uso de diferentes niveles de abstraccin.
Se distinguen tres niveles de abstraccin:
- El nivel fsico trabaja sobre las estructuras de almacenamiento
- El nivel lgico o conceptual define la representacin de los datos propuesta por el
usuario
- El nivel externo corresponde a una vista parcial de la base de datos proporcionada
por una determinada aplicacin.

Para ilustrar el concepto de abstraccin de datos, consideremos un grupo de programas de


aplicacin que se utilizan en un ayuntamiento. Cada aplicacin puede tener necesidad de
percibir el mundo real de manera diferente. Fijemonos, por ejemplo, en el objeto PARCELA
y en las aplicaciones de IMPUESTOS y AYUDAS_AGRARIAS.
La aplicacin de IMPUESTOS recauda cada trimestre el impuesto correspondiente a la
parcela, por lo que necesita conocer su localizacin y su extensin.
Por otro lado, la aplicacin de AYUDAS_AGRARIAS debe conocer el tipo de cultivo de la
parcela y su extensin para conceder una ayuda u otra.
Un SGBD, a diferencia de los sistemas tradicionales de ficheros, permite que los datos
puedan ser compartidos por ambas aplicaciones; por ello es necesario mantener una
versin de los datos que integre las distintas percepciones de los diferentes usuarios (en
nuestro caso las dos aplicaciones) sobre un mismo objeto (PARCELA).
Esta visin integrada es lo que se llama visin conceptual del objeto PARCELA. Sin
embargo, del mismo objeto PARCELA existen distintas visiones externas, una para cada
aplicacin. Los SGBD permiten la coexistencia de ambas percepciones del mismo objeto
debido a que pueden deducirse a partir de la visin conceptual, sin ms que realizar una
adecuada transformacin, que en nuestro caso no es ms que ocultar los atributos
innecesarios para cada aplicacin. Podemos decir entonces que la visin conceptual de
un objeto es la descripcin global de dicho objeto tal y como se registra en la BD. Ya
que esta descripcin global no incluye detalles tales como mtodos de acceso, estructura
de almacenamiento de los datos, etc, los usuarios no podrn incluir estos detalles en sus
aplicaciones, que es lo que se pretende. Los detalles de almacenamiento a nivel fsico se
describen en un nuevo nivel de abstraccin que es la visin interna del objeto tal y como
se almacena en el sistema de ordenador que soporta la base de datos.
En cada uno de los niveles la visin de los datos se describe mediante lo que se llama
esquema. El objetivo fundamental de esta arquitectura en tres niveles es conseguir que el
esquema conceptual sea una descripcin estable de los datos de la organizacin e
independiente de las vistas y de la forma de almacenamiento de los datos.

11
Tema 1. Introduccin a las Bases de Datos

4 Modelos de Datos

Un modelo de datos se puede definir como un conjunto de herramientas conceptuales tiles


para describir los datos, las relaciones entre ellos y la semntica asociada a los datos.
Dependiendo de la fase de construccin del SBD podemos distinguir dos tipos de modelos:
modelos de diseo y modelos de representacin. Ambos servirn para describir los datos
en los niveles conceptual y externo.

4.1 Modelos de diseo


Los modelos de diseo son herramientas para captar y describir la informacin del mundo
real, pero no nos aportan informacin sobre qu tipo de estructuras se utilizarn para
almacenar los datos, qu tipo de operaciones pueden realizarse sobre los mismos, etc.
Estos modelos no pueden implementarse directamente en los sistemas comerciales
conocidos; deben transformarse previamente en un modelo de representacin. Uno de los
ms conocidos es el modelo entidad/relacin, que veremos en el tema 2.

4.2 Modelos de representacin


Los modelos de representacin adems de permitirnos describir los datos del mundo real
cumplen otra serie de requisitos que hacen que puedan implementarse posteriormente en
alguno de los sistemas comerciales conocidos (describen la implementacin en alto nivel):
- Aportan las estructuras necesarias para almacenar los datos.
- Imponen tipos de operaciones y la forma de llevarlas a cabo.
Diferentes modelos llevan asociados diferentes lenguajes para la definicin de las
estructuras de datos y la manipulacin de los datos. El modelo que ms se utiliza
actualmente es el modelo relacional, que veremos en el tema 3. Los datos y las relaciones
entre ellos se representan por medio de una serie de tablas, cada una de las cuales tiene
un nmero de columnas con nombres nicos. Entre los SGBD relacionales comerciales
podemos destacar: DB2, INGRES, ORACLE, INFORMIX y para ordenadores personales
NOMAD, DBASE IV, FOXBASE, ACCESS. Otros modelos son el modelo en red y el
modelo jerrquico.

5 Facilidades del SGBD

! Proporciona el interfaz entre los datos almacenados y los programas de aplicacin o


las consultas hechas al sistema. Para ello, facilita dos herramientas bsicas: LDD
(DDL) y LMD (DML).
! LDD es el lenguaje de definicin de datos; permite definir el esquema
conceptual y aportar detalles de cmo se implementar el esquema fsicamente.
Esta definicin incluye los objetos, los datos sobre cada objeto, las relaciones
entre ellos, as como tambin restricciones en determinados campos etc. El
resultado de la compilacin de este lenguaje son las estructuras de datos y
adems una informacin sobre el esquema que se almacenar en el diccionario de

12
Tema 1. Introduccin a las Bases de Datos
datos (o catlogo); es decir, el diccionario de datos contiene metadatos, datos
acerca de los datos.
! LMD es el lenguaje de manipulacin de datos; permite realizar la recuperacin y
actualizacin (insercin, actualizacin y borrado) de los datos almacenados en la
base de datos. La primera de estas operaciones es lo que se llama normalmente
query y a la parte del LMD que permite esta operacin lenguaje de query; sin
embargo suelen usarse indistintamente los trmino lenguaje de query y LMD.
Puede ser procedimental, si los usuarios tienen que especificar las operaciones
que desean hacer y la manera de hacerlas (BD jerrquicas y en red) o no
procedimental, si el usuario slo el indica el tipo de operacin que desea hacer
pero no cmo hacerla. Los comandos para hacer estas operaciones pueden
usarse interactivamente o embebidos en un lenguaje de programacin
convencional (lenguaje husped).
Veremos el LDD y LMD que proporciona el lenguaje SQL en la unidad temtica 2.
! Interacta con el gestor de ficheros del S.O para almacenar los datos de forma
segura y eficiente. Las diferentes sentencias LMD son traducidas a comandos de bajo
nivel para gestionar ficheros; as el SGBD se encarga realmente del almacenamiento,
la recuperacin y actualizacin de la BD.
! Implanta el control de seguridad e integridad. El ABD puede haber establecido
determinadas restricciones para algunos datos (rangos, controles de seguridad, etc) y
el SGBD verifica si, en algn caso, los accesos a la BD violan estas restricciones y
realiza las acciones apropiadas.
! Lleva a cabo copias de seguridad y recuperacin de datos. Cualquier sistema est
sujeto a fallos o errores; si se pierde la informacin de la BD por algn motivo, es
responsabilidad del SGBD detectar estos fallos y arrancar los procedimientos de
recuperacin.
! Realiza el control de concurrencia. En un entorno de multiprogramacin, varios
usuarios pueden estar accediendo a los datos concurrentemente; el SGBD controla las
acciones de los distintos usuarios para preservar la consistencia de los datos.
Algunos SGBD, diseados para ejecutarse en ordenadores personales pequeos, no
cuentan con parte de las funciones mencionadas: por ejemplo, son monousuario, con lo que
no tienen que realizar el control de concurrencia, o dejan al usuario las tareas de respaldo,
recuperacin y seguridad. Aunque esto puede ser aceptable para las bases de datos
personales, no es de ninguna manera adecuado para cumplir con los requerimientos de
una empresa de tamao mediano o grande.

6 Ventajas y desventajas de un SGBD

Sobre las ventajas ya hemos hablado suficientemente a lo largo de este tema. Resumiendo
podemos decir que un SGBD proporciona:
! Gestin y control centralizado de los datos.
! Reduccin de redundancias.
! Comparticin de datos.

13
Tema 1. Introduccin a las Bases de Datos
! Integridad.
! Seguridad.
! Control de concurrencia.
! Independencia de datos, permitiendo cambios y crecimiento.

Con respecto a las desventajas (relacionadas sobre todo con SGBD grandes), debemos
citar las siguientes:
! Coste de software y hardware: Adems del coste de comprar el software,
probablemente haya que ampliar o subir de versin el hardware (upgrade) para que el
programa pueda almacenarse y funcione correctamente; adems, si no, el sistema
podra degradarse y los tiempos de respuesta subir drsticamente por la sobrecarga
que aade el SGBD al tener que implementar la seguridad, integridad y datos
compartidos. Recordemos que estamos hablando de SGBD grandes, no por supuesto
de los de ordenadores personales.
! Coste de migracin de aplicaciones: Un coste adicional, tambin, es la migracin de
las aplicaciones para pasar a un entorno integrado.
! Las operaciones de respaldo y recuperacin de los datos en caso de fallo son
complejas, debido al acceso concurrente de mltiples usuarios.
! Criticidad del SGBD: La centralizacin tambin significa que los datos de la
organizacin, estn almacenados en un nico lugar, en la base de datos, con lo que
cualquier fallo de seguridad u operacin del SGBD puede afectar a toda la organizacin
(sistemas distribuidos y compartidos) .

7 Introduccin a las bases de datos espaciales

Un objeto geogrfico tiene dos componentes:


! La componente espacial o geomtrica, que describe la localizacin, forma, orientacin
y tamao del objeto en el espacio 2D o 3D.
! La componente no espacial, es decir, los atributos temticos o descriptivos.
Tradicionalmente, los datos espaciales o geodatos, han sido almacenados en bases de
datos especializadas, es decir, los datos se almacenan y gestionan en una base de datos
totalmente especfica y dedicada a ello, donde slo se almacenan datos espaciales para su
posterior gestin y manipulacin. Los datos temticos son tratados de una manera
totalmente independiente a los datos espaciales, sin existir ningn tipo de relacin entre
ambos tipos de datos en cuanto a su almacenamiento y gestin, por lo que se pierden las
capacidades de anlisis de consultas espaciales, se infrautiliza la BD, se derrocha espacio
de almacenamiento, y lo que es peor, tiempo y dinero en la mala gestin de la informacin.
Actualmente, la tecnologa ha evolucionado, y con ella, ha aparecido la posibilidad del
almacenamiento y la gestin conjunta de cualquier tipo de datos dentro de una misma BD,
gracias a la incorporacin de extensiones espaciales a los propios motores de la BD. Con
ello, datos temticos y datos espaciales pueden ser combinados en una misma consulta,
aumentando as de una forma hasta ahora inimaginable, las posibilidades de nuevas

14
Tema 1. Introduccin a las Bases de Datos
consultas y aplicaciones, lo que supone una autntica revolucin en el mundo de las
tecnologas SIG. Estos sistemas cambian la orientacin de los SIG desde SIG cntricos a
Sistemas Gestores de la Base de Datos cntricos, en los cuales, los datos espaciales son
simplemente otro tipo de datos dentro del entorno del Sistema Gestor de la Base de Datos.
Ejemplos de SGBD que actualmente permiten el anlisis espacial integrado en la misma BD
son DB2 (IBM), Informix, Oracle 8i, Sybase, etc.
El objetivo es una completa integracin de los datos espaciales dentro de la BD. Para llegar
a este tipo de estructuras es necesario un sistema gestor de la base de datos as como
extensiones S.Q.L estandar que soporten la definicin, almacenamiento, gestin y
actualizacin de datos que poseen tanto atributos espaciales como atributos no espaciales.
Un SGBD debe tener la capacidad de entender los datos y operadores espaciales y de
acceder eficientemente a la base de datos espacial. Para ello necesitamos, un soporte para
un tipo de datos abstractos, as como funciones e ndices definidos por el usuario. De esta
forma se consigue que los usuarios puedan ejecutar consultas integradas sobre cualquier
tipo de datos (tanto espaciales como datos de negocio) usando el lenguaje S.Q.L.
El tratamiento de datos espaciales requiere una extensin de las funcionalidades del SGBD.
Entre ellas podemos destacar la extensin de los mtodos de almacenamiento de datos y
de bsqueda de los datos implicados en una determinada consulta, del tipo de operadores
utilizables en una consulta (operadores espaciales y operadores de anlisis avanzado que
permiten la creacin de nuevas geometras).
Ante esta revolucin, como es lgico, ha surgido la necesidad del establecimiento de una
normativa, para que los usuarios puedan acceder y procesar los datos desde una gran
variedad de fuentes. Para ello, se crea el OGC (Open Gis Consortium) que especifica el
camino que deben seguir las BD espaciales para la consecucin de unos objetivos
comunes con el fin de obtener la mxima eficacia en la gestin de la informacin.

15
Tema 2. El modelo Entidad-Relacin

1 Introduccin

El modelo Entidad-Relacin fue propuesto por Chen a mediados de los aos setenta como
medio de representacin conceptual de los problemas y para representar la visin de un
sistema de forma global. Fsicamente adopta la forma de un grfico escrito en papel al que
se denomina diagrama Entidad-Relacin. Sus elementos fundamentales son las
entidades y las relaciones.

2 Entidades

Entidad: Una entidad es una cosa u objeto distinguible de todos los dems, y tiene un
conjunto de propiedades que identifican la identidad. Ejemplo: PARCELA
Atributo: Los atributos describen propiedades que posee cada entidad, y cada atributo
tiene un conjunto de valores permitidos, llamados dominio o conjunto de valores.
Ejemplo: tipo_cultivo, cuyo dominio puede ser (ctricos, via, olivo, ...).
Los atributos se distinguen en:
- Simples y compuestos: los simples no estn subdivididos en subpartes mientras que
los compuestos se pueden dividir en otros atributos. Ejemplo: el atributo direccin se
puede subdividir en (calle, nmero, piso, puerta,...)
- Univalorados y multivalorados: los univalorados tienen un solo valor para una entidad
concreta y los multivalorados tienen un conjunto de valores para una entidad
especfica. Ejemplo: al atributo telfono se le pueden asignar varios valores
correspondiendo al telfono particular, al del trabajo, al mvil, ...
- Nulos: se usa cuando una entidad no tiene un valor para un atributo, o el valor es
desconocido.
- Derivado: el valor del atributo se puede derivar de los valores de otros atributos.
Ejemplo: el atributo edad se puede derivar del atributo fecha_nacimiento.

3 Relaciones

Relacin: Una relacin es una asociacin entre diferentes entidades. Ejemplo: las
entidades parcela y propietario se asocian a travs de la relacin pertenece.
Una relacin puede tener tambin atributos descriptivos. Ejemplo: en la relacin
pertenece puede aparecer como atributo la fecha de adquisicin.
Tema 2. El modelo Entidad-Relacin
El grado de la relacin es el nmero de entidades que participan en una relacin;
normalmente son relaciones binarias aunque tambin podemos encontrar relaciones
ternarias.
Depende de la estructura del desarrollo del mundo real que se est modelando la decisin
de qu cosas consideramos como entidades y qu cosas como atributos, y tampoco hay
una norma exacta para decidir si es mejor expresar un objeto mediante una entidad o
mediante una relacin. Una posible gua es designar una relacin para describir una accin
que ocurre entre entidades.

3.1 Cardinalidad de una relacin

Cada entidad interviene en una relacin con una determinada cardinalidad. Es decir, la
cardinalidad es el nmero de instancias o elementos de una entidad que pueden asociarse
a un elemento de la otra entidad relacionada. La cardinalidad se representa mediante una
pareja de datos de la forma (cardinalidad mnima, cardinalidad mxima). Son posibles las
siguientes cardinalidades: (0,1), (1,1), (0,n), (1,n) y (n,m).
Ejemplos:
! Las entidades nacion y ciudad participan en la relacin es_capital. La entidad nacion
tiene una cardinalidad (1,1) al igual que la entidad ciudad.
! Las entidades cliente y pedidos participan en la relacin realiza_pedido. La entidad
cliente tiene una cardinalidad (1,n) mientras que la entidad pedidos tiene una
cardinalidad (1,1).
! Las entidades persona y vivienda participan en la relacin vive. Ambas entidades
tienen una cardinalidad (0,n).
El tipo de relacin se define tomando los mximos de las cardinalidades que intervienen
en la relacin. Hay tres tipos posibles:
- Una a una (1:1). En este tipo de relacin, una vez fijado un elemento de una entidad se
conoce el elemento de la otra entidad con el que est relacionado. Por ejemplo, nacin
y ciudad a travs de la relacin es_capital.
- Una a muchas (1:N). Por ejemplo, cliente y pedidos en la relacin realiza_pedido.
- Muchas a muchas (N:N). Por ejemplo, personas y viviendas en la relacin vive.

4 Claves

El concepto de clave permite diferenciar las entidades y relaciones individuales en trminos


de sus atributos. Una clave es un conjunto de uno o ms atributos que, tomados
colectivamente, permiten identificar de forma nica una entidad en el conjunto de entidades.
Existe un conjunto de claves candidatas, es decir, se pueden formar distintos conjuntos de
atributos que identifiquen una entidad. Es decir, se puede incluir atributos innecesarios en
una clave candidata, de forma que subconjuntos propios de ella no son clave. Se usa el

18
Tema 2. El modelo Entidad-Relacin
trmino de clave primaria para denotar una clave candidata que es elegida por el diseador
como elemento principal para identificar las entidades (preferiblemente, no debe contener
atributos innecesarios).
Ejemplo: entidad Persona = {dni, num_seg_social, nombre, direccion}
Claves candidatas = { {dni, nombre}, {dni, num_seg_social}, {dni}, {num_seg_social} }
Clave primaria = {dni} Tambin podra haberse elegido {num_seg_social}.

5 Diagrama entidad relacin


Es un grfico en el que se representan entidades, atributos y relaciones utilizando un
conjunto de smbolos:
- rectngulos: representan entidades. En el interior se escribe el nombre de la entidad
representada.
- elipses: representan atributos. En el interior se escribe el nombre del atributo
representado y se unen a la entidad a la que describen mediante una lnea. Si este
atributo pertenece a la clave primaria, se subraya. Si un atributo es multivalorado se
indica mediante una n sobre la lnea que lo une a la entidad.
- rombos: representan relaciones binarias. La cardinalidad de una relacin se representa
sobre el rombo de la relacin. Este rombo se divide en dos y se sombrea aquella parte
que corresponde a una relacin N.
- lneas: unen atributos a entidades y entidades a relaciones.

Ejemplos:
1. Relacin es_capital

Nacion Ciudad

Es_capital

Nombre Num_hab Nombre

2. Relacin realiza_pedido
Realiza_pedido

Cliente Pedido

NIF Nombre Fecha Numero

19
Tema 2. El modelo Entidad-Relacin

3. Relacin vive

Persona Vivienda

Vive
DNI Nombre Direccion

6 Caractersticas avanzadas

6.1 Entidades fuertes y dbiles

Una entidad fuerte existe por s misma sin depender de la existencia de ninguna otra
entidad. Por el contrario, la existencia de una instancia de una entidad dbil depende de la
existencia previa de otra entidad. Si la entidad dbil puede ser identificada sin necesidad de
identificar previamente la entidad de cuya existencia depende, diremos que la entidad dbil
lo es por existencia nicamente. Si la entidad dbil no puede ser identificada
independientemente, sino que previamente es necesario identificar a la entidad de cuya
existencia depende, diremos que la entidad dbil lo es por identificacin. Es decir, esta
entidad dbil no tiene suficientes atributos para formar una clave primaria. Para que tenga
sentido, debe formar parte de una relacin uno a muchos. El discriminante (clave parcial),
de una entidad dbil es un conjunto de atributos que permite distinguir las entidades que
dependen de una entidad particular fuerte. La clave primaria de una entidad dbil se forma
con la clave primaria de la entidad fuerte de cuya existencia depende, ms el discriminante.
La relacin que asocia el conjunto de entidades dbil con un propietario se llama relacin
de identificacin. Una entidad dbil se indica con un doble rectngulo, y la
correspondiente relacin de existencia mediante una E sobre la lnea que une la entidad
dbil a la relacin con la entidad fuerte. Si la relacin es de identificacin, se indicar
mediante ID. El discriminante se subraya con una lnea discontinua.
Por ejemplo, dado un libro del que se han editado muchos ejemplares, la entidad Ejemplar
(que se identifica mediante un nmero dentro de la edicin) es dbil con respecto a la
entidad Libro.

Pertenece

Libro Ejemplar
ID

Codigo Titulo Numero Ubicacin

20
Tema 2. El modelo Entidad-Relacin

6.2 Tipos especiales de relacin

- Relacin reflexiva: relaciona una entidad consigo misma. Ejemplo: empleados que
pueden ser jefes de otros empleados.
Es_jefe

Empleado

- Dos relaciones entre las mismas entidades. Muy til en el caso de necesitar
almacenar informacin histrica completa. Ejemplo: proyectos en los que trabaja
actualmente un empleado y proyectos en los que ha trabajado anteriormente.

Proyectos

Actual Historico

Empleado

- Relacin ternaria. Asociacin de tres entidades. La forma de hallar cardinalidades en


las relaciones ternarias es fijar una combinacin de elementos en dos de los extremos
de la relacin y obtener lgicamente las cardinalidades mnima y mxima en el otro
extremo libre. Ejemplo: el ttulo de un libro, un autor y una editorial se relacionan las
tres mediante la accin de publicar el libro (en un ao concreto, con un ISBN y con un
determinado nmero de pginas en la edicin). Para determinar las cardinalidades hay
que preguntarse por:
- Cuntos autores puede tener un determinado libro publicado en una determinada
editorial (cardinalidad en el extremo de la entidad autor).
- Cuntos libros puede tener un determinado autor publicados en una determinada
editorial (cardinalidad en el extremo de la entidad libro).
- En cuntas editoriales puede un determinado autor publicar un mismo libro
(cardinalidad en el extremo de la entidad editorial).

21
Tema 2. El modelo Entidad-Relacin

Libro Autor

paginas
ao

ISBN
Publica

Editorial

- Relacin de especializacin (ES-UN). Se trata de una tipificacin de una entidad en


subtipos en nmero finito y conocido. Cada subtipo puede poseer atributos propios.
Adems heredan los atributos que pudiera tener la entidad general. Este tipo de
relacin puede clasificarse de dos maneras distintas. La primera segn si una instancia
o elemento concreto de la entidad puede ser de ms de un subtipo a la vez. En caso
afirmativo se dice que la relacin es inclusiva o con solapamiento mientras que en
caso contrario ser exclusiva o sin solapamiento. La segunda clasificacin se basa
en si obligatoriamente cada instancia o elemento concreto debe ser obligatoriamente
de alguno de los subtipos especificados, es decir, si no pueden existir elementos de la
entidad que no pertenezcan a ninguno de los subtipos. Si es as la relacin se dice
total y en caso contrario parcial. La situacin ms corriente en una relacin de
especializacin es que sea exclusiva y total. Ejemplos:
- Una entidad persona tiene los subtipos hombre y mujer. Una misma persona no
puede ser hombre y mujer a la vez por lo que la relacin es exclusiva. No puede
existir una persona que no sea hombre ni mujer, por lo que tambin es total.

Persona

(0,1) (0,1)

(1,1) (1,1)
Hombre Mujer

- La entidad universitario (representando a las personas que pertenecen a la


comunidad universitaria) tiene los subtipos estudiante y profesor. Un mismo
universitario puede ser ambas cosas a la vez por lo que la relacin es inclusiva.

22
Tema 2. El modelo Entidad-Relacin
Pero en la universidad tambin hay por ejemplo, tcnicos o PAS, por lo que la
relacin es parcial.

Universitario

(0,1) (0,1)

(1,1) (1,1)
Estudiante Profesor

La cardinalidad en las relaciones de especializacin es siempre (1,1) en el extremo de


la entidad que se especializa en subtipos y (0,1) en el extremo de los subtipos si la
relacin es exclusiva o ({0,1},1) si es inclusiva.

7 Ejercicios

Dado el siguiente diagrama entidad-relacin, contestar a las siguientes preguntas:

Dom={agr_regadio, agr_secano,
Pertenece industria, turismo, }

Provincia Poblacin N
Pples_ingresos
ID

Nombre Nombre Num_hab

L/m2

Nombre
Meses

a) Cuntas poblaciones pertenecen a una misma provincia?


b) Hay algn problema porque exista una poblacin llamada Orihuela en Alicante y en
Teruel?

23
Tema 2. El modelo Entidad-Relacin
c) Se puede almacenar que los principales ingresos de una poblacin provienen de la
agricultura de regado y del turismo?
d) Para una misma poblacin, cuntos datos acerca de los l/m2 recogidos podemos
almacenar?
e) En un mes, se puede almacenar informacin sobre las precipitaciones cadas en
varias poblaciones?

Dadas las entidades:


- TRAMO (cdigo_tramo)
- CALLE (cdigo, nombre, longitud)
- MANZANA (nmero)
- BARRIO (nombre)
1. Dibujar el diagrama E-R que expresa que:
a) un barrio est formado por muchas manzanas
b) una manzana slo pertenece a un barrio
c) un tramo de una calle pertenece slo a una calle
d) una calle est compuesta de varios tramos
e) un tramo contiene varias manzanas y una manzana contiene varios tramos
f) dos tramos se pueden cruzar
2. Cmo se podra contestar a las siguientes preguntas?
a) Calles a las que pertenece una manzana
b) Barrio al que pertenece una calle
c) Con cuntos tramos cruza un tramo en particular
3. Se podra conocer la longitud de cada tramo? Y la longitud total de una calle si
almacenamos la longitud de cada tramo?

Se desea generar una base de datos para almacenar informacin respecto la


geografa espaola. En concreto, queremos almacenar informacin sobre ros, mares,
ciudades, provincias y comunidades autnomas.
- De cada ciudad queremos saber su nombre, cuntos habitantes tiene y en qu
provincia se encuentra. Hay que tener en cuenta que dos ciudades de distintas
provincias pueden tener el mismo nombre.
- De cada provincia, nos interesa conocer su nombre y qu ciudad es su capital.
- De cada comunidad autnoma, es interesante conocer su nombre, el nmero de
provincias que pertenecen a ella y cules son estas provincias.

24
Tema 2. El modelo Entidad-Relacin
- En cuanto a cada mar, queremos almacenar su nombre y a qu provincias baa,
indicando adems cuntos kilomtros de la costa de esa provincia es baada por este
mar.
- La informacin de los ros ser la ms completa: adems del nombre, nos interesa
conocer en qu provincia nace, por qu ciudades pasa y en qu mar desemboca. Por
otro lado, tambin queremos saber qu ros son afluentes de otros ros.

25
Tema 3. Modelo Relacional

1 Introduccin

La teora del modelo de datos relacional fue presentada por el investigador Edgar Codd en
1970 y es el ltimo modelo en el que se ha basado una gran familia de SGBD,
imponindose en la dcada de los ochenta sobre los modelos previos. Actualmente es el
modelo elegido para la construccin de casi todos los SGBD comerciales existiendo ya
muchos disponibles como son ORACLE, INFORMIX, etc.
A grandes rasgos, el modelo relacional se caracteriza por disponer que:
- toda la informacin debe estar contenida en tablas
- las relaciones entre datos deben ser representadas explcitamente en esos
mismos datos

2 Estructura de las bases de datos relacionales

La relacin es el elemento bsico del modelo relacional y se representa por una tabla.
Informalmente, los trminos y sus equivalentes son:

Relacin Tabla
Tupla Fila
Atributo Columna
Nmero de tuplas Cardinalidad
Nmero de atributos Grado
Dominio Coleccin de valores, de los cuales uno o ms atributos
obtienen sus valores reales
Clave primaria Identificador nico para la tabla, es decir, una columna o
combinacin de columnas con la propiedad de que nunca
existen dos filas de la tabla con el mismo valor en esa
columna o combinacin de columnas

Es importante sealar que la tabla es plana en el sentido de que el cruce entre una fila y
una columna slo puede dar un valor, es decir, no se admiten atributos multivaluados. A
cada una de las tablas se le asigna un nombre exclusivo.
Tema 3. El modelo Relacional

Desde el punto de vista de los niveles de una base de datos, la estructura de una base de
datos relacional es la siguiente:

- Nivel lgico.
- Est compuesto por las distintas vistas que tienen los usuarios de la BD total
- Lenguajes: DML
- Nivel fsico.
- Est compuesto por las tablas que componen la BD
- Lenguajes: DDL
- Nivel de almacenamiento.
- Est compuesto por los ficheros donde se almacenan las tablas del nivel anterior
- Lenguajes: comandos del sistema operativo, DSDL (lenguaje de definicin del
almacenamiento de datos).

VISTA
Nivel
lgico

Nivel
fsico TABLAS

Nivel de
almace-
namiento
FICHERO

3 Tablas

! Representan tanto las entidades como las relaciones del modelo E-R.
! Tienen la forma de una matriz rectangular bidimensional (filas y columnas).
! Cada elemento o casilla de la matriz es un tem de datos elemental. Es el mnimo
elemento lgico de acceso y modificacin.
! Una columna representa un atributo de la entidad:
! Debe tener un nombre nico en cada tabla
! Cada atributo tiene asociado un espacio de valores o dominio

28
Tema 3. El modelo Relacional
! Un valor nulo indica valor desconocido o no aplicable
! Su captura puede ser opcional (puede tomar valores nulos) u obligatoria
! Su nmero es fijo a priori
! Una fila o tupla representa un objeto del mundo real:
! Nunca pueden estar duplicadas
! Es la mnima unidad de borrado
! Representa un registro lgico
! Su nmero vara segn se realicen operaciones de insercin y borrado en la tabla
! Pueden estar dispuestas en cualquier orden

3.1 Claves

Aparecen debido a la necesidad de identificar de forma unvoca y no ambigua los datos de


la base de datos.
! Clave candidata: agrupacin de atributos (quizs uno solo) que identifican sin
ambigedad y de forma unvoca todas las posibles tuplas de una tabla.
! Como mnimo, una clave debe tener un atributo. Como mximo, los que tenga la
tabla.
! No debe haber atributos intiles o superfluos. La idea es que si se elimina algn
atributo de la clave candidata, ya no lo es.
! Siempre hay seguro al menos una clave candidata (la agregacin de todos los
atributos).
! Puede haber varias claves candidatas.
! Clave primaria: se escoge de entre las claves candidatas. Usualmente se prefiere la
de menor tamao.
! Claves alternativas: el resto de claves candidatas no escogidas como clave primaria.
! Atributo primo: aquel que forma parte de la clave primaria.
! Clave ajena: un atributo de una tabla (o agregacin de ellos) puede ser clave primaria
de otra tabla.
! Mecanismo de relacin y enlace de informacin.
! Los atributos de una clave ajena pueden o no formar parte de la clave primaria de
la tabla a la que pertenecen.
! En una tabla no es obligatoria la existencia de claves ajenas.

29
Tema 3. El modelo Relacional

4 Reduccin de un esquema E-R a tablas

! Representacin tabular de las entidades fuertes: una entidad fuerte se representa


mediante una tabla con varias columnas distintas cada una de las cuales corresponde
a uno de los atributos de la entidad.
! Representacin tabular de las entidades dbiles: una entidad dbil, dependiente de
una entidad fuerte, se representa mediante una tabla con una columna por cada uno de
los atributos de la clave primaria de la entidad fuerte de la que depende ms los
atributos propios de la entidad dbil.
Ejemplo:
Pertenece

Libro Ejemplar
ID

Codigo Titulo Numero Ubicacin

La entidad fuerte Libro se representa mediante la siguiente tabla:


Tabla: LIBRO
CP={codigo}
Atr={titulo}
CAj={}

La entidad dbil Ejemplar se representa mediante la siguiente tabla:


Tabla: EJEMPLAR
CP={numero, codigo}
Atr={ubicacin}
CAj={codigo}

! Representacin tabular de las relaciones: se representa mediante una tabla con una
columna por cada atributo formado por la unin de las claves primarias de las
entidades que relaciona ms los atributos descriptivos de la relacin (si los tiene).
! Redundancia de tablas: en general, la tabla para la relacin que une una entidad
dbil con su correspondiente entidad fuerte es redundante y no necesita ser
representada en una representacin tabular de un diagrama E-R.

30
Tema 3. El modelo Relacional
! Combinacin de tablas: si una entidad es dependiente de otra, se pueden
combinar para formar una nica tabla consistente en la unin de las columnas de
ambas tablas.

! Atributos multivalorados: para un atributo multivalorado se crea una tabla con una
columna que corresponde a la clave primaria de la entidad o de relaciones al que
pertenece el atributo multivalorado.
! Representacin tabular de la especializacin: hay dos formas; la primera es crear
una tabla para la entidad de nivel ms alto y para cada entidad de nivel ms bajo, crear
una tabla que incluya una columna para cada uno de los atributos de esa entidad ms
una columna por cada atributo de la clave primaria de la entidad de nivel ms alto; la
segunda, para especializaciones exclusivas y totales, se crea para cada entidad de
nivel ms bajo, una tabla que incluya una columna para cada atributo de la entidad ms
una columna por cada atributo de la entidad de nivel ms alto.

4.1 Ejemplos

4.1.1 Relacin realiza_pedido


En esta relacin binaria participan las entidades Cliente y Pedido. Se indica que un cliente
puede realizar muchos pedidos, mientras que un pedido concreto corresponde a un cliente.
Ambas entidades son fuertes.

Realiza_pedido

Cliente Pedido

NIF Nombre Fecha Numero

Tabla: CLIENTE
CP={NIF}
Atr={Nombre}
CAj={}

Tabla: PEDIDO
CP={Numero}
Atr={fecha, NIF_cliente}
CAj={NIF_cliente}

31
Tema 3. El modelo Relacional
En este caso, se debera haber generado una tabla para la entidad PEDIDO y otra para la
relacin. Sin embargo, seran redundantes y por ello se unen en una sola.
La diferencia entre la representacin tabular de una entidad dbil y de una relacin 1:N es
que, mientras en la entidad dbil la clave de la entidad fuerte pasa a formar parte de la
clave de la entidad dbil, en el caso de relaciones 1:N, la clave de la entidad que forma
parte de la relacin pasa a ser un atributo de la tabla.

4.1.2 Relacin es_capital


En esta relacin, encontramos dos entidades (Nacin y Ciudad) que se relacionan 1 a 1.
Ambas son fuertes.

Nacion Ciudad

Es_capital

Nombre Num_hab Nombre

Tabla: NACION
CP={nombre_nacion }
Atr={}
CAj={}

Tabla: CIUDAD
CP={nombre_ciudad }
Atr={num_hab}
CAj={}

Tabla: ES_CAPITAL
CP={nombre_nacion, nombre_ciudad}
Atr={}
CAj={nombre_nacion, nombre_ciudad}

En este caso, tenemos esta posibilidad de generar dos tablas, sobretodo si hay otras
entidades con las que tambin se relacionan. Tambin se podra haber generado una nica
tabla conteniendo todos los datos de ambas entidades.

32
Tema 3. El modelo Relacional

4.1.3 Relacin vive


En este caso, tenemos una relacin muchos a muchos entre dos entidades fuertes
(Persona y Vivienda).

Persona Vivienda

Vive
DNI Nombre Direccion

Tabla: PERSONA
CP={DNI}
Atr={nombre}
CAj={}

Tabla: VIVIENDA
CP={direccion}
Atr={}
CAj={}

Tabla: VIVE
CP={DNI, direccion}
Atr={}
CAj={DNI, direccion}

4.2 Restricciones

El modelo relacional de datos contempla tres tipos de restricciones:


1. Integridad de la clave. Ningn atributo de una clave candidata puede tomar valores
nulos. Lgicamente, los atributos que forman la clave candidata han de tomar siempre
valores distintos para cada posible tupla.
2. Integridad de referencia o referencial. Sea T1.a un atributo de la tabla T1 que forma
parte de una clave ajena para la tabla T2. Es decir, que en T2 existe un atributo

33
Tema 3. El modelo Relacional
definido con el mismo dominio, aunque no obligatoriamente con igual nombre, y que es
parte de su clave primaria. Entonces, T1.a debe ser siempre igual a algn valor ya
contenido en el atributo referenciado en la tabla T2, o bien tomar un valor nulo.
Ejemplo: en la relacin entre clientes y pedidos que realiza cada cliente, podemos
encontrar las siguientes tablas:
PEDIDO CLIENTES
Numero Fecha NIF_cliente NIF Nombre
1 1/3/00 24680246 23456789 Sara Red Corell
2 4/3/00 23456789 13579135 Marta Planells Garcia
3 5/3/00 98765432 24680246 Eduardo Garcia Algarra
4 5/3/00 01234567 98765432 Luis Tarin Paula

En este caso se produce una violacin de la integridad referencial, ya que el


NIF_cliente en negrita NO corresponde a ninguna tupla de la tabla de CLIENTES.

3. Otras restricciones de acuerdo con la semntica concreta del problema. Pueden ser
sencillas, como la especificacin de valores mnimos o mximos que puede tomar un
atributo numrico, lista de valores permitidos de un atributo, o ms complejas como
condiciones sobre valores de los atributos en funcin de valores de otros atributos de
esa u otras tablas. Ejemplos:
! La restriccin el nmero de la Seguridad Social debe ser un entero positivo menor
de 100.000.000 establece una restriccin sobre el dominio del atributo.
! La restriccin el nombre de empleado siempre se ha de conocer restringe al
atributo a no tomar un valor nulo.

4.3 Problemas con las restricciones durante las operaciones

4.3.1 Insercin de una nueva tupla en una tabla


! Slo se puede insertar una tupla si todos los atributos de la clave primaria tienen valor
no nulo.
! Slo se puede insertar una tupla si el conjunto de todos los atributos que forman la
clave primaria toma un valor nico e indito hasta el momento en la tabla.
! Slo se puede insertar una tupla si todos los atributos que son claves ajenas de otras
tablas toman valores ya presentes en dichas tablas o bien nulos.
! Slo se puede insertar una tupla si todos los valores de los atributos satisfacen todas
las restricciones adicionales que pudieran concernirles.

34
Tema 3. El modelo Relacional
4.3.2 Modificacin del valor de algn atributo de una o varias tuplas de una
tabla
! Si el atributo a modificar forma parte de la clave primaria, su valor no puede
modificarse a nulo
! Si el atributo a modificar forma parte de la clave primaria, su valor no puede
modificarse a otro tal que la nueva clave primaria ya no sea nica en la tabla.
! Slo puede modificarse el valor de un atributo si el nuevo valor satisface todas las
restricciones adicionales que puedan afectarle.
! Si el atributo a modificar es parte de una clave ajena en otra tabla, entonces hay que
modificar automticamente el viejo valor que tomaba en dicha tabla por el nuevo valor.
Por ejemplo: si el NIF de Sara Red Corell cambia, deber cambiar en la tabla Pedido.

4.3.3 Borrado de una o varias tuplas de una tabla.


Al borrar una tupla hay que tener en cuenta que se deben verificar las restricciones de
integridad referencial. Es decir, dadas dos relaciones R y S, tal que R tiene una clave ajena
CA que hace referencia a S, el borrado de una tupla de S causar una violacin de la
integridad referencial si existe alguna tupla de R que hace referencia a ella. En este caso,
es necesario restaurar la integridad referencial y puede realizarse de dos formas,
dependiendo de si existe una relacin de entidad dbil por existencia:
! Propagar la operacin en cascada sobre las tuplas de R que hacen referencia a la tupla
de S afectada. Es decir, borrar estas tuplas de R.
! Modificar a nulo el valor de la clave ajena CA de las tuplas de R que hacen referencia a
la tupla de S afectada.

5 Ejercicios
Dado el siguiente diagrama entidad-relacin, obtener el modelo relacional
correspondiente.
Dom={agr_regadio, agr_secano,
Pertenece industria, turismo, }

Provincia Poblacin N
Pples_ingresos
ID

Nombre Nombre Num_hab

L/m2

Nombre
Meses

35
Tema 3. El modelo Relacional

Dado el siguiente diagrama entidad-relacin, obtener el modelo relacional


correspondiente.

DNI
Nombre
Num.S.S. N.factura
Calibr_campo Fecha_ini
Fecha_fin
Descripcin
Realiza

Personal Trabajo

Solicita
Mantenimiento
NIF
Utiliza

Fecha_ult_rev
Aparato Cliente

Numserie
Modelo
Se alquila
Alquila

N.factura
Fecha_ini
Fecha_fin
Alquiler
Descripcin

Obtener el modelo relacional correspondiente al diagrama entidad-relacin del


segundo ejercicio del tema anterior.

Obtener el modelo relacional correspondiente al diagrama entidad-relacin del ltimo


ejercicio del tema anterior.

36
Tema 4. Teora de la normalizacin

1 Introduccin

Cuando se disea una base de datos mediante el modelo relacional, al igual que ocurre en
otros modelos de datos, tenemos distintas alternativas, es decir, podemos obtener
diferentes esquemas relacionales y no todos son equivalentes, ya que algunos van a
representar la realidad mejor que otros. Es necesario conocer qu propiedades debe tener
un esquema relacional para representar adecuadamente una realidad y cules son los
problemas que se pueden derivar de un diseo inadecuado.
El esquema relacional puede obtenerse de dos formas distintas:
! Directamente a partir de la observacin de nuestro universo del discurso, donde
especificamos conjuntos de atributos, relaciones y restricciones que corresponden a los
observados en el mundo real.
! Realizando el proceso de diseo en dos fases, primero el diseo conceptual (E/R)
obteniendo el esquema conceptual y posteriormente transformar ste a un esquema
relacional, siguiendo algunas reglas generales, que fueron dadas anteriormente.

La teora de la Normalizacin es un mtodo objetivo y riguroso que se aplica en el diseo


de bases de datos relacionales y que nos permite detectar y corregir posibles errores de
diseo. Algunos problemas que se pueden presentar son:
! Incapacidad para almacenar ciertos hechos
! Redundancias y por tanto, posibilidad de incoherencias
! Ambigedades
! Prdida de informacin
! Prdida de dependencias funcionales, es decir, ciertas restricciones de integridad que
dan lugar a interdependencias entre los datos.
! Aparicin en la BD de estados no vlidos, es decir, anomalas de insercin, borrado y
modificacin.

En conclusin, el esquema relacional obtenido debe ser analizado para comprobar que no
presenta los problemas anteriores. Para ello, veremos en primer lugar, algunos ejemplos de
anomalas que se pueden presentar. Despus, introduciremos las formas normales y las
aplicaremos en un ejemplo.
Tema 4. Teora de la Normalizacin

2 Ejemplos de anomalas que se pueden presentar

Analicemos la siguiente relacin: ESCRIBE

AUTOR NACIONALIDAD COD_LIBRO TITULO EDITORIAL AO


Date, C. Norteamericana 98987 Database Addison 1990
Date, C. Norteamericana 97777 SQL Stan Addison, W. 1986
Date, C. Norteamericana 98987 Guide for Addison, W. 1988
Codd,E. Norteamericana 7890 Relational Addison,W. 1990
Gardarin Francesa 12345 Basi Dati Paraninfo 1986
Gardarin Francesa 67890 Comp BD Eyrolles 1984
Valduriez Francesa 67890 Comp BD Eyrolles 1984
Kim,W. Norteamericana 11223 BD OO ACM 1989
Lochovsky Canadiense 11223 BD OO ACM 1989

Esta relacin almacena datos de autores y de libros. Algunos problemas son:


! Redundancia, ya que la nacionalidad del autor se repite por cada ocurrencia del mismo.
Lo mismo sucede cuando un libro tiene ms de un autor, se repite la editorial y el ao
de publicacin.
! Anomalas de modificacin, es fcil cambiar el nombre de una editorial en una tupla sin
modificar el resto de las que corresponden al mismo libro, lo que da lugar a
incoherencias.
! Anomalas de insercin, ya que si queremos aadir informacin de algn autor, del que
no hubiera ningn libro en la base datos, no sera posible, ya que cod_libro es parte de
la clave primaria de la relacin (regla de integridad de la entidad). La insercin de un
libro, que tiene dos autores obliga a insertar dos tuplas en la relacin.
! Anomalas de borrado, ya que si queremos eliminar un cierto libro, deberamos perder
los datos de su autor y viceversa.

En los casos anteriores, se deja en manos del usuario manejar la integridad de la base de
datos.

En el ejemplo anterior, el conjunto de las siguientes relaciones no presenta estos


problemas:
LIBRO( cod_libro, titulo, editorial, ao )
AUTOR( nombre, nacionalidad )

38
Tema 4. Teora de la Normalizacin
ESCRIBE( cod_libro, nombre )

La normalizacin introduce una tcnica formal para disear bases de datos relacionales, y
permite mecanizar parte del proceso al disponer de algoritmos de normalizacin. Una
observacin importante es que las anomalas antes descritas se producen en procesos de
actualizacin y no en procesos de consulta. La normalizacin penaliza las consultas, al
disminuir la eficiencia, ya que la normalizacin aumenta el nmero de relaciones presentes
en la base de datos, por lo que una determinada consulta puede llevar consigo el acceso a
varias tablas, lo que aumenta el costo de sta.

3 Nocin intuitiva de las formas normales

La normalizacin tiene como objetivo obtener esquemas relacionales que cumplan


determinadas condiciones, a travs de las formas normales.

! Primera Forma Normal (1FN) fue introducida por Codd, en su primer trabajo. Es una
restriccin inherente al modelo relacional por lo que su cumplimiento es obligatorio.
Consiste en la prohibicin de que en una relacin existan grupos repetitivos, es decir,
un atributo no puede tomar ms de un valor del dominio subyacente.

Si tenemos la relacin AMIGO(nombre, direccion, fecha_cumpleaos, num_telefono),


siendo el atributo num_telefono multivaluado, esta relacin no est en 1FN. Sin
embargo, este conjunto de relaciones s est en 1FN:
AMIGO(nombre, direccion, fecha_cumpleaos)
TELEFONOS(nombre, num_telefono)

! Segunda Forma Normal (2FN), fue introducida por Codd. Una relacin est en 2FN, si
adems de estar en 1FN, todos los atributos que no forman parte de ninguna clave
candidata suministran informacin acerca de la clave completa.

Para la relacin PRESTAMO (num_socio, nombre_socio, cod_libro, fec_prest, editorial,


pas) las claves candidatas son:
(num_socio, cod_libro) y (nombre_socio, cod_libro)

Se puede observar que ciertos atributos que no forman parte de las claves candidatas,
tal como la editorial, constituye informacin acerca del libro, pero no acerca de la clave
completa. Luego, la relacin PRESTAMO no se encuentra en 2FN.

La solucin es descomponer esta relacin en las siguientes:

39
Tema 4. Teora de la Normalizacin
PRESTAMO1( num_socio, nombre_socio, cod_libro, fec_prest )
LIBRO( cod_libro, editorial, pas )

En la relacin PRESTAMO1, el nico atributo que no forma parte de las claves


candidatas es fec_prest, pero suministra informacin acerca de la clave completa. Por
lo que est en 2FN.
En la relacin LIBRO, la clave es cod_libro y los dos atributos editorial y pas
suministran informacin de la clave completa. Por lo tanto, est en 2FN.
Una relacin que est formada por un nico atributo est en 2FN.

! Tercera Forma Normal (3FN), propuesta por Codd. Una relacin est en 3FN, si
adems de estar en 2FN, los atributos que no forman parte de ninguna clave candidata
facilitan informacin slo acerca de la(s) clave(s) y no acerca de otros atributos.

En la relacin PRESTAMO1, el atributo fec_prest facilita informacin acerca de las


claves, ya que no existen ms atributos. Por tanto, est en 3FN.
En la relacin LIBRO, el atributo pas entrega informacin acerca de la editorial que
publica el libro, por lo que no est en 3FN.

La solucin es descomponerla en:


LIBRO1( cod_libro, editorial )
EDITORIAL( editorial, pas ),
que estn en 3FN, ya que todo atributo no clave facilita informacin acerca de la clave.

! Forma Normal de Boyce y Codd (FNBC). La relacin PRESTAMO1, que est en 3FN,
todava presenta anomalas, ya que num_socio y nombre_socio, se repiten
innecesariamente por cada cod_libro. Una relacin est en FNBC si y solo si, todos los
atributos de las claves candidatas informan acerca del resto de claves candidatas
completas.
En la relacin PRESTAMO1, num_socio es informacin acerca de nombre_socio y
viceversa. Ninguno de estos atributos son clave (aunque formen parte de la clave).
Para solucionarlo la descomponemos:
SOCIO( num_socio, nombre_socio )
PRESTAMO2( num_socio, cod_libro, fec_prest ),
que estn en FNBC.

Hasta ahora nuestro esquema relacional est compuesto por las siguientes relaciones
en FNBC:

40
Tema 4. Teora de la Normalizacin
LIBRO1( cod_libro, editorial )
EDITORIAL( editorial, pas )
SOCIO( num_socio, nombre_socio )
PRESTAMO2( num_socio, cod_libro, fec_prest )

La teora de la normalizacin se basa en restricciones definidas sobre los atributos de una


relacin. que son conocidas como dependencias funcionales, relacionadas con la 2FN y
3FN y FNBC. Sean a y b atributos de una misma tabla o relacin T. Se dice que b es
funcionalmente dependiente de a y se denota como T.a->T.b si todo posible valor de a tiene
asociado un nico valor de b, es decir, en todas las tuplas de T en las que el atributo a toma
el mismo valor v1, el atributo b toma tambin un mismo valor v2.

4 Ejercicios

Dada la relacin R(estudiante, nro_matricula, curso, centro, profesor, texto) con las
siguientes restricciones:
a) Un estudiante puede estar matriculado de varios cursos
b) Un estudiante tiene un nmero de matricula distinto para cada curso en el que est
matriculado
c) Un curso se imparte en un solo centro
d) El nmero de matricula identifica al centro en el que se imparte el curso y al curso
mismo
e) Un curso es impartido por un solo profesor, pero un profesor puede impartir varios
cursos
f) Un curso de apoya en distintos textos y un mismo texto puede servir de soporte a
varios cursos
Reducir el esquema anterior a un conjunto equivalente de relaciones en FNBC

Comprobar si los modelos relacionales generados en el tema 3 estn en FNBC.

41
Unidad temtica 2:

Gestin de Bases de Datos


Relacionales
Objetivos
- Conocer las principales caractersticas del lenguaje SQL
- Ser capaces de realizar consultas sobre datos alfanumricos utilizando SQL
- Ser capaces de crear tablas sencillas con SQL

Contenidos
Tema 5. Introduccin al lenguaje SQL
Tema 6. Lenguaje de manipulacin de datos
Tema 7. Lenguaje de definicin de datos
Tema 5: Introduccin al lenguaje SQL

1 Introduccin

El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado,


utilizado por muchos sistemas de bases de datos relacionales. Sus principales
caractersticas son las siguientes:
- SQL es un lenguaje declarativo, es decir, el usuario expresa el resultado que desea
obtener sin especificar cmo el sistema debe operar para calcular este resultado. El
lenguaje es sencillo y es accesible a usuarios no expertos.
- SQL se basa en fundamentos matemticos. El conjunto de operaciones que se pueden
realizar con los datos estn definidas por dos lenguajes formales equivalentes: el
clculo relacional y el lgebra relacional.
- La simplicidad de SQL presenta un inconveniente que consiste en que, en ocasiones,
su expresividad no es suficiente para obtener el resultado que el usuario desea.

El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de


agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y
manipular las bases de datos. En este tema veremos estos elementos de forma general
para profundizar en ellos en los prximos temas.

2 Comandos

Existen dos tipos de comandos SQL:


los DDL (Data Definition Language) o LDD que permiten crear y definir nuevas
bases de datos, campos e ndices.
los DML (Data Manipulation Language) o LMD que permiten generar consultas
para ordenar, filtrar y extraer datos de la base de datos.

Los comandos DDL son:


Comando Descripcin
CREATE Utilizado para crear nuevas tablas, campos e ndices
DROP Empleado para eliminar tablas e ndices
ALTER Utilizado para modificar las tablas agregando campos o cambiando su
definicin
Tema 5. Introduccin al lenguaje SQL

Los comandos DML se resumen en:


Comando Descripcin
Utilizado para consultar registros de la base de datos que satisfagan un
SELECT
criterio determinado
INSERT Utilizado para insertar nuevos datos en la base de datos
UPDATE Utilizado para modificar los valores de los campos y registros especificados
DELETE Utilizado para eliminar registros de una tabla de una base de datos

3 Clusulas

Las clusulas son condiciones de modificacin utilizadas en los comandos para definir los
datos que se desea seleccionar o manipular. Un resumen de las clausulas disponibles en
SQL son:
Clusula Descripcin
Utilizada para especificar la tabla de la cual se van a seleccionar los
FROM
registros
Utilizada para especificar las condiciones que deben reunir los registros que
WHERE
se van a seleccionar
GROUP BY Utilizada para separar los registros seleccionados en grupos especficos
HAVING Utilizada para expresar la condicin que debe satisfacer cada grupo
Utilizada para ordenar los registros seleccionados de acuerdo con un orden
ORDER BY
especfico

4 Operadores Lgicos

Los operadores lgicos que se pueden utilizar en las clusulas son:


Operador Uso
Es el "y" lgico. Evalua dos condiciones y devuelve verdadero slo si
AND
ambas son ciertas.
Es el "o" lgico. Evala dos condiciones y devuelve verdadero si alguna de
OR
las dos es cierta.
NOT Negacin lgica. Devuelve el valor contrario de la expresin.

46
Tema 5. Introduccin al lenguaje SQL

5 Operadores de Comparacin

Los operadores de comparacin son:


Operador Uso
< Menor que
> Mayor que
<> Distinto de
<= Menor o Igual que
>= Mayor o Igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores.
LIKE Utilizado en la comparacin de un modelo
IN Utilizado para especificar registros de una base de datos

6 Funciones de Agregado

Las funciones de agregado se usan dentro de una clusula SELECT donde se han
agrupado los registros para devolver un nico valor por cada grupo de registros. Las ms
usuales son:
Funcin Descripcin
AVG Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el nmero de registros de la seleccin
Utilizada para devolver la suma de todos los valores de un campo
SUM
determinado
MAX Utilizada para devolver el valor ms alto de un campo especificado
MIN Utilizada para devolver el valor ms bajo de un campo especificado

7 Esquema a utilizar

En este apartado daremos la definicin de las tablas a utilizar, tanto en los ejemplos de los
prximos temas como en las prcticas de laboratorio. Este esquema est compuesto por 7
tablas que representan una zona rural con dos lagos y tres municipios, en los que se
encuentran diversas casas rurales y servicios como hospital, supermercados, etc., todo ello

47
Tema 5. Introduccin al lenguaje SQL
comunicado a travs de distintas carreteras. A continuacin se presenta un croquis de la
regin a la que se refieren los datos de la base de datos:

Lago Abis C2
Abis

C1
C3

Abiside Lago Bernacle


C5
C4

Bernacle

Seguidamente, se muestra la descripcin de las tablas, que tambin podemos obtener


mediante el comando DESCRIBE <nombre_tabla>.

Tabla CASA_RURAL
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
CODIGO NOT NULL CHAR(10) Clave primaria
DUENYO NOT NULL VARCHAR2(40)
DIRECCION NOT NULL VARCHAR2(30)
TELEFONO NOT NULL VARCHAR2(9)
EMAIL VARCHAR2(30)
PRECIO NOT NULL NUMBER(4,2)
FECHA_CONSTRUCCION NOT NULL DATE
FECHA_REHABILITACION DATE
MUNICIPIO NOT NULL CHAR(10) Clave ajena->MUNICIPIO
DESCRIPCION VARCHAR2(100)

48
Tema 5. Introduccin al lenguaje SQL
LOCALIZACION MDSYS.GEOMETRY

CODIGO es un identificador de cada casa. DUENYO almacena el nombre del dueo de la


casa. DIRECCION indica la direccin de la casa. TELEFONO y EMAIL son los puntos de
contacto para poder realizar una reserva. PRECIO indica lo que cuesta el alquiler de la casa
completa. FECHA_CONSTRUCCION y FECHA_REHABILITACION son las fechas de
construccin y de la ltima rehabilitacin (si ha lugar) de la casa. MUNICIPIO es el cdigo
del municipio donde est la casa. DESCRIPCION almacena las caractersticas de la casa,
como por ejemplo, la disponibilidad de garaje, cocina totalmente equipada, etc. Por ltimo,
LOCALIZACION indica las coordenadas de la casa.
Es importante comentar el hecho de que en esta tabla se ha representado su relacin con
el municipio donde se encuentra cada casa de forma explcita, a travs de una clave ajena.
Tambin podra extraerse esta relacin a travs de una consulta de tipo espacial, como se
har, por ejemplo, para saber si una carretera pasa por un municipio.

Tabla HABITACION
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
CODIGO NOT NULL CHAR(2) Clave primaria
NUM_PLAZAS NOT NULL NUMBER(2)
BANYO NOT NULL CHAR(1) IN ('S','N')
PRECIO_NOCHE NOT NULL NUMBER(4,2)
PRECIO_DTO_3 NUMBER(4,2)
DESCRIPCION VARCHAR2(100)
COD_CASA NOT NULL CHAR(10) Clave primaria
Clave ajena->CASA_RURAL

CODIGO es el identificador de cada habitacin dentro de la casa COD_CASA.


NUM_PLAZAS indica el nmero de plazas de esta habitacin. BANYO indica si la
habitacin tiene bao ('S') o no ('N'). PRECIO_NOCHE da el precio de esta habitacin por
noche y PRECIO_DTO_3 indica el precio en el caso de que la estancia supere los tres das.
DESCRIPCION, como en el caso anterior, almacena las caractersticas de una habitacin.

Tabla MUNICIPIO
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
CODIGO NOT NULL CHAR(10) Clave primaria
CODIGO_POSTAL NOT NULL NUMBER(5)
NOMBRE NOT NULL VARCHAR2(30)

49
Tema 5. Introduccin al lenguaje SQL
GEOMETRIA MDSYS.GEOMETRY

CODIGO es el identificador de cada municipio. CODIGO_POSTAL indica su cdigo postal y


NOMBRE, su nombre. GEOMETRIA describe un polgono que representa al municipio.

Tabla TIPO_SERVICIO
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
TIPO NOT NULL CHAR(15) Clave primaria
DESCRIPCION VARCHAR2(30)

Esta tabla recoge los servicios que puedan resultar necesarios. Por ejemplo, supermercado,
centro de salud, hospital, farmacia, etc. A cada uno de ellos, se le asigna un cdigo.

Tabla SERVICIO
Nombre de Columna Nulo? Tipo
-------------------- -------- ----
CODIGO NOT NULL NUMBER(3)
TIPO CHAR(15) Clave ajena->TIPO_SERVICIO
DESCRIPCION VARCHAR2(50)
LOCALIZACION MDSYS.GEOMETRY

Indica el tipo (TIPO) y descripcin (DESCRIPCION) de un servicio, as como sus


coordenadas (LOCALIZACION).

Tabla CARRETERA
Nombre de Columna Nulo? Tipo
------------------------------ -------- ----
CODIGO NOT NULL CHAR(10)
DESCRIPCION VARCHAR2(50)
GEOMETRIA MDSYS.GEOMETRY

Indica el cdigo de carretera y su descripcin (CODIGO y DESCRIPCION) as como un


conjunto de lneas que representan su geometra (GEOMETRIA).

50
Tema 5. Introduccin al lenguaje SQL

Tabla LAGO
Nombre de Columna Nulo? Tipo
------------------------------ -------- ----
CODIGO NOT NULL CHAR(10)
DESCRIPCION VARCHAR2(50)
GEOMETRIA MDSYS.GEOMETRY

Indica el cdigo de lago y su descripcin (CODIGO y DESCRIPCION) as como un polgono


que representa su geometra (GEOMETRIA).

En el anexo I se listan todos los datos que contienen las tablas.

51
Tema 6: Lenguaje de Manipulacin de Datos

1 Introduccin

El lenguaje de manipulacin de datos comprende las consultas de seleccin y las


operaciones de insercin, borrado y modificacin de datos de las tablas.
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva
informacin de las bases de datos. Esta informacin es devuelta en forma de conjunto de
registros.
Las consultas de accin son aquellas que no devuelven ningn registro, son las encargadas
de acciones como aadir y borrar y modificar registros.

2 Consultas de seleccin

2.1 Consultas bsicas


La sintaxis bsica de una consulta de seleccin es la siguiente:
SELECT Campos
FROM Tabla;
donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los
mismos. Por ejemplo:
SELECT duenyo, telefono
FROM casa_rural;
Esta consulta devuelve un conjunto de registros con el campo duenyo y telfono de la
tabla casa_rural.

2.2 Ordenar los registros


Adicionalmente se puede especificar el orden en que se desean recuperar los registros de
las tablas mediante la clasula ORDER BY Lista de Campos, donde Lista de campos
representa los campos a ordenar. Ejemplo:
SELECT duenyo, direccion, telefono
FROM casa_rural
ORDER BY duenyo;
Esta consulta devuelve los campos duenyo, direccion, telefono de la tabla
casa_rural ordenados por el campo duenyo.
Tema 6. Lenguaje de Manipulacin de Datos
Se pueden ordenar los registros por ms de un campo, como por ejemplo:
SELECT duenyo, direccion, telefono
FROM casa_rural
ORDER BY duenyo, precio;
Incluso se puede especificar el orden de los registros: ascendente mediante la clasula
(ASC -se toma este valor por defecto) descendente (DESC)
SELECT duenyo, direccion, telefono
FROM casa_rural
ORDER BY duenyo ASC, precio DESC;

2.3 Consultas con Predicado


El predicado se incluye entre la clasula y el primer nombre del campo a recuperar, los
posibles predicados son:

Predicado Descripcin
ALL Devuelve todos los campos de la tabla
TOP Devuelve un determinado nmero de registros de la tabla
DISTINCT Omite los registros cuyos campos seleccionados coincidan totalmente

2.3.1 ALL
Si no se incluye ninguno de los predicados se asume ALL. Se seleccionan todos los
registros que cumplen las condiciones de la instruccin SQL. No es conveniente abusar de
este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la
tabla para averiguar los campos que contiene, es mucho ms rpido indicar el listado de
campos deseados.
SELECT ALL FROM habitacion;
SELECT * FROM habitacion;

2.3.2 TOP
Devuelve un cierto nmero de registros a partir del principio o del final de un rango
especificado por una clusula ORDER BY. Supongamos que queremos recuperar los
dueos de las 5 casas ms caras:
SELECT TOP 5 duenyo
FROM casa_rural
ORDER BY precio DESC;

54
Tema 6. Lenguaje de Manipulacin de Datos
Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto arbitrario de 25
registros de la tabla casa_rural. El predicado TOP no elige entre valores iguales. En el
ejemplo anterior, si la casa nmero 5 y la 6 tienen el mismo precio, la consulta devolver 6
registros. Se puede utilizar la palabra reservada PERCENT para devolver un cierto
porcentaje de registros que caen al principio o al final de un rango especificado por la
clusula ORDER BY. Supongamos que en lugar de las 5 casas ms caras deseamos el 10
por ciento de las casas:
SELECT TOP 10 PERCENT duenyo
FROM casa_rural
ORDER BY precio DESC;
El valor que va a continuacin de TOP debe ser un entero sin signo.

2.3.3 DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Para que
los valores de cada campo listado en la instruccin SELECT se incluyan en la consulta
deben ser nicos.
Por ejemplo, varias casas de la tabla casa_rural pueden tener el mismo dueo. Si
ejecutamos la siguiente instruccin SQL, devolver un nico registro por cada dueo
diferente:
SELECT DISTINCT duenyo
FROM casa_rural;
En otras palabras, el predicado DISTINCT devuelve aquellos registros cuyos campos
indicados en la clusula SELECT posean un contenido diferente.

2.4 Alias
En determinadas circunstancias es necesario asignar un nombre a alguna columna
determinada del resultado de una consulta. Para ello, podemos utilizar la palabra reservada
AS que se encarga de asignar el nombre que deseamos a la columna indicada. Tomando
como referencia el ejemplo anterior podemos hacer que la columna devuelta por la
consulta, en lugar de llamarse duenyo (igual que el campo devuelto) se llame Persona de
contacto. En este caso procederamos de la siguiente forma:
SELECT DISTINCT duenyo AS Persona de contacto
FROM casa_rural;
Se consigue el mismo efecto utilizando la siguiente consulta:
SELECT DISTINCT duenyo Persona de contacto
FROM casa_rural;

55
Tema 6. Lenguaje de Manipulacin de Datos

2.5 Criterios de Seleccin


En el apartado anterior se vio la forma de recuperar registros de las tablas. Sin embargo, se
devolvan todos los registros de la mencionada tabla. A lo largo de este apartado se
estudiarn las posibilidades de filtrar los registros con el fin de recuperar solamente
aquellos que cumplan unas condiciones preestablecidas.
Antes de comenzar el desarrollo de este apartado hay que recalcar que:
! cada vez que se desee establecer una condicin referida a un campo de texto la
condicin de bsqueda debe ir encerrada entre comillas simples; se tiene en cuenta la
diferencia entre maysculas y minsculas
! las fechas se deben escribir siempre en formato dd/mm/aa donde dd representa el da,
mm el mes y aa el ao, se puede utilizar la barra (/) o el guin (-) y adems la fecha
debe ir encerrada entre comillas simples (). Por ejemplo si deseamos referirnos al da
3 de Septiembre de 1995 deberemos hacerlo de la siguiente forma; 09-03-95 9-3-
95 9/3/95.

2.5.1 La clusula WHERE


La clusula WHERE puede usarse para determinar qu registros de las tablas enumeradas
en la clusula FROM aparecern en los resultados de la instruccin SELECT. Despus de
escribir esta clusula se deben especificar las condiciones que se expondrn en los
apartados siguientes. Si no se emplea esta clusula, la consulta devolver todas las filas de
la tabla. WHERE es opcional, pero cuando aparece debe ir a continuacin de FROM.

2.5.2 Operadores de comparacin


Como ya comentamos, los operadores de comparacin disponibles en SQL son: =, <, >, <=,
>=, <> (distinto). Veamos algunos ejemplos:
Obtener el dueo y el precio de las casas que valgan menos de 300
euros
SELECT duenyo, precio
FROM casa_rural
WHERE precio < 300;

Obtener el cdigo de las casas y el cdigo de las habitaciones que


tengan ms de dos plazas
SELECT cod_casa, codigo
FROM habitacion
WHERE num_plazas > 2;

Obtener el dueo y la direccin de las casas cuya fecha de


construccin sea posterior a 01/10/1994
SELECT duenyo, direccion

56
Tema 6. Lenguaje de Manipulacin de Datos
FROM casa_rural
WHERE fecha_construccion > 01/10/94;

Obtener el cdigo de la casa y de las habitaciones que tengan bao


SELECT cod_casa, codigo
FROM habitacion
WHERE banyo = 'S';

2.5.3 Operadores Lgicos


Los operadores lgicos soportados por SQL son, entre otros: AND, OR, NOT. A excepcin
de NOT todos poseen la siguiente sintaxis:
<expresin1> operador <expresin2>
donde expresin1 y expresin2 son las condiciones a evaluar. El resultado de la operacin
vara en funcin del operador lgico. La tabla adjunta muestra los diferentes posibles
resultados para AND y OR:

<expresin1> Operador <expresin2> Resultado

Verdad AND Falso Falso


Verdad AND Verdad Verdad
Falso AND Verdad Falso
Falso AND Falso Falso
Verdad OR Falso Verdad
Verdad OR Verdad Verdad
Falso OR Verdad Verdad
Falso OR Falso Falso

Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT el resultado


de la operacin ser el contrario al devuelto sin el operador NOT. Veamos algunos
ejemplos.

Obtener el cdigo de las casas cuyo precio oscila entre 200 y 300
euros
SELECT codigo
FROM casa_rural
WHERE precio > 200 AND precio < 300;

57
Tema 6. Lenguaje de Manipulacin de Datos
Obtener el cdigo de las casas cuyo precio oscila entre 200 y 300
euros o su fecha de construccin es posterior al ao 1994.
SELECT codigo
FROM casa_rural
WHERE (precio > 200 AND precio < 300) OR
fecha_construccion >= 01/01/95;

Obtener todos los datos de los tipo de servicio diferentes a


Supermercado.
SELECT *
FROM tipo_servicio
WHERE NOT descripcion=Supermercado;

Obtener todos los datos de las habitaciones cuyo precio por noche
est entre 50 y 60 euros o cuyo precio con descuento est entre 40 y
50 euros.
SELECT *
FROM habitacion
WHERE (precio_noche > 50 AND precio_noche < 60) OR
(precio_dto_3 > 40 AND precio_dto_3 < 50);

2.5.4 Intervalos de Valores


Para indicar que deseamos recuperar los registros segn el intervalo de valores de un
campo emplearemos el operador Between cuya sintaxis es:
campo [Not] Between valor1 And valor2 (la condicin Not es opcional)
En este caso la consulta devolvera los registros que contengan en "campo" un valor
incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condicin Not
devolver aquellos valores no incluidos en el intervalo. Veamos algunos ejemplos:

Obtener las casas cuyo precio oscila entre 200 y 300 euros
SELECT codigo
FROM casa_rural
WHERE precio BETWEEN 200 AND 300;

Obtener el nombre y el cdigo postal de los municipios cuyo nombre


est entre Ab y As

58
Tema 6. Lenguaje de Manipulacin de Datos
SELECT nombre, codigo_postal
FROM municipio
WHERE nombre BETWEEN Ab AND As;

Obtener las casas cuya fecha de construccin oscila entre los aos
1989 y 1992
SELECT codigo
FROM casa_rural
WHERE fecha_construccion BETWEEN 01/01/89 AND 31/12/92;

2.5.5 El Operador Like


Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL.
Su sintaxis es:
expresin Like modelo
donde expresin es un campo y modelo es una cadena contra la que se compara
expresin. Se puede utilizar el operador Like para encontrar valores en los campos que
coincidan con el modelo especificado. Por modelo puede especificar un valor completo (Ana
Mara), o se pueden utilizar caracteres comodn como los reconocidos por el sistema
operativo para encontrar un rango de valores (Like An%).
El operador Like se puede utilizar en una expresin para comparar un valor de un campo
con una expresin de cadena. Por ejemplo, si introduce Like C% en una consulta SQL, la
consulta devuelve todos los valores de campo que comiencen por la letra C.
El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de cualquier
letra entre A y F y de tres dgitos:
Like 'P[A-F]###'
Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D
seguidas de cualquier cadena.
Like '[A-D]%'
En la tabla siguiente se muestra cmo utilizar el operador Like para comparar expresiones
con diferentes modelos.

Tipo de coincidencia Modelo Planteado Coincide No coincide


Varios caracteres 'a%a' 'aa', 'aBa', 'aBBBa' 'aBC'
Carcter especial 'a[%]a' 'a%a' 'aaa'
Varios caracteres 'ab%' 'abcdefg', 'abc' 'cab', 'aab'
Un solo carcter 'a?a' 'aaa', 'a3a', 'aBa' 'aBBBa'
Un solo dgito 'a#a' 'a0a', 'a1a', 'a2a' 'aaa', 'a10a'

59
Tema 6. Lenguaje de Manipulacin de Datos

Rango de caracteres '[a-z]' 'f', 'p', 'j' '2', '&'


Fuera de un rango '[!a-z]' '9', '&', '%' 'b', 'a'
Distinto de un dgito '[!0-9]' 'A', 'a', '&', '~' '0', '1', '9'
Combinada 'a[!b-m]#' 'An9', 'az0', 'a99' 'abc', 'aj0'

Obtener el dueo de las casas que disponen de frigorifico


SELECT duenyo
FROM casa_rural
WHERE descripcion LIKE '%frigorifico%';

2.5.6 El Operador In
Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los
incluidos en una lista. Su sintaxis es:
expresin [Not] In(valor1, valor2, . . .)
Por ejemplo, la siguiente consulta devuelve el nombre de los municipios cuyo cdigo postal
pertenezca al conjunto {99991, 99993}:
SELECT nombre
FROM municipio
WHERE codigo_postal IN (99991, 99993);

2.6 Agrupamiento de Registros

2.6.1 GROUP BY
Combina los registros con valores idnticos en la lista de campos especificados, en un
nico registro. Para cada registro se crea un valor sumario si se incluye una funcin SQL
agregada, como por ejemplo Sum o Count, en la instruccin SELECT. Su sintaxis es:
SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo
GROUP BY es opcional. Los valores de resumen se omiten si no existe una funcin SQL
agregada en la instruccin SELECT. Los valores Null en los campos GROUP BY se
agrupan y no se omiten. No obstante, los valores Null no se evalan en ninguna de las
funciones SQL agregadas.
Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y la clusula
HAVING para filtrar los registros una vez agrupados.
Un campo de la lista de campos GROUP BY puede referirse a cualquier campo de las
tablas que aparecen en la clusula FROM, incluso si el campo no esta incluido en la
instruccin SELECT, siempre y cuando la instruccin SELECT incluya al menos una funcin
SQL agregada.

60
Tema 6. Lenguaje de Manipulacin de Datos
Todos los campos de la lista de campos de SELECT deben incluirse en la clusula GROUP
BY o como argumentos de una funcin SQL agregada. Por ejemplo, la siguiente consulta
obtiene para cada casa, el nmero total de plazas de todas sus habitaciones:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa;
Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro
agrupado por la clusula GROUP BY que satisfaga las condiciones de la clusula HAVING.
HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los
registros se han agrupado utilizando GROUP BY, HAVING determina cules de ellos se van
a mostrar. Por ejemplo, la siguiente consulta obtiene los mismos datos que la consulta
anterior, pero slo de aquellas casas en las que haya al menos 6 plazas y el mximo a
pagar por noche de una habitacin sean 90 euros:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa
HAVING SUM(num_plazas) > 6 AND MAX(precio_noche)<90;

2.6.2 AVG
Calcula la media aritmtica de un conjunto de valores contenidos en un campo especificado
de una consulta. Su sintaxis es la siguiente
Avg(expr)
donde expr representa el campo que contiene los datos numricos para los que se desea
calcular la media o una expresin que realiza un clculo utilizando los datos de dicho
campo. La media calculada por Avg es la media aritmtica (la suma de los valores dividido
por el nmero de valores). La funcin Avg no incluye ningn campo Null en el clculo. Por
ejemplo, la siguiente consulta calcula el precio medio de las casas rurales:
SELECT AVG(precio) AS Promedio
FROM casa_rural;

2.6.3 COUNT
Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente
Count(expr)
donde expr contiene el nombre del campo que desea contar. Puede contar cualquier tipo
de datos incluso texto. Aunque expr puede realizar un clculo sobre un campo, Count
simplemente cuenta el nmero de registros sin tener en cuenta qu valores se almacenan
en los registros. La funcin Count no cuenta los registros que tienen campos null a menos
que expr sea el carcter comodn asterisco (*). Si utiliza un asterisco, Count calcula el
nmero total de registros, incluyendo aquellos que contienen campos null.

61
Tema 6. Lenguaje de Manipulacin de Datos
Por ejemplo, la siguiente consulta obtiene el nmero total de casas rurales existentes en la
base de datos:
SELECT Count(*) AS Total
FROM casa_rural;

2.6.4 MAX, MIN


Devuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo
especifico de una consulta. Su sintaxis es:
Min(expr)
Max(expr)
donde expr es el campo sobre el que se desea realizar el clculo. Veamos un par de
ejemplos.

Obtener el precio mnimo de las casas cuya fecha de construccin es


anterior al ao 1994.
SELECT MIN(precio) AS El Minimo
FROM casa_rural
WHERE fecha_construccion < 01/01/94;

Obtener el precio mximo de las casas cuya fecha de construccin es


anterior al ao 1994.
SELECT MAX(precio) AS El Maximo
FROM casa_rural
WHERE fecha_construccion < 01/01/94;

2.6.5 SUM
Devuelve la suma del conjunto de valores contenido en un campo especifico de una
consulta. Su sintaxis es:
Sum(expr)
donde expr representa el nombre del campo que contiene los datos que desean sumarse o
una expresin que realiza un clculo utilizando los datos de dichos campos. Por ejemplo, la
siguiente consulta obtiene para cada casa, el nmero total de plazas de todas sus
habitaciones:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa;

62
Tema 6. Lenguaje de Manipulacin de Datos
2.6.6 StDev, StDevP
Devuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros
de la tabla) o una muestra de la poblacin representada (muestra aleatoria) . Su sintaxis es:
StDev(expr)
StDevP(expr)
donde expr representa el nombre del campo que contiene los datos que desean evaluarse
o una expresin que realiza un clculo utilizando los datos de dichos campos.
StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta
contiene menos de dos registros (o ningn registro para StDevP), estas funciones
devuelven un valor Null (el cual indica que la desviacin estndar no puede calcularse). Por
ejemplo:
SELECT StDev(precio) AS Desviacion
FROM casa_rural
WHERE fecha_construccion < 01/01/94;

SELECT StDevP(precio) AS Desviacion


FROM casa_rural
WHERE fecha_construccion < 01/01/94;

2.6.7 Var, VarP


Devuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o
una muestra de la poblacin (muestra aleatoria de registros) sobre los valores de un campo.
Su sintaxis es:
Var(expr)
VarP(expr)
VarP evala una poblacin, y Var evala una muestra de la poblacin. Expr es el nombre
del campo que contiene los datos que desean evaluarse o una expresin que realiza un
clculo utilizando los datos de dichos campos. Si la consulta contiene menos de dos
registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse).
Puede utilizar Var y VarP en una expresin de consulta o en una Instruccin SQL. Por
ejemplo:
SELECT Var(precio) AS Desviacion
FROM casa_rural
WHERE fecha_construccion < 01/01/94;

SELECT VarP(precio) AS Desviacion


FROM casa_rural

63
Tema 6. Lenguaje de Manipulacin de Datos
WHERE fecha_construccion < 01/01/94;

2.7 Consultas sobre ms de una tabla

Normalmente los datos que se desean extraer a travs de una consulta no estn en una
nica tabla. En estos casos, hemos de incluir en la clusula FROM todas las tablas de las
que deseamos extraer algn dato. Por ejemplo, si quisiramos obtener para cada casa su
cdigo, su direccin y el municipio donde se encuentran, deberamos escribir:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio;
Se debe indicar que el cdigo es de la casa rural porque existe otro campo cdigo en la
tabla municipio y podra resultar ambiguo. La ejecucin de esta consulta nos devuelve la
siguiente informacin:
CODIGO DIRECCION NOMBRE
---------- ------------------------------ ------------------------------
1001 Monje 27 Abis
1001 Monje 27 Abiside
1001 Monje 27 Bernacle
2001 Fca Almadraba,Almendro Blanco Abis
2001 Fca Almadraba,Almendro Blanco Abiside
2001 Fca Almadraba,Almendro Blanco Bernacle
2002 Mayor 18 Abis
2002 Mayor 18 Abiside
2002 Mayor 18 Bernacle
...
Se observa que cada casa aparece tres veces, una vez con cada municipio. Esto es debido
a que cuando se ponen dos tablas en la clusula FROM se une cada fila de la primera tabla
con cada fila de la segunda tabla. Para obtener la consulta correcta, se debe indicar en la
clusula WHERE la relacin existente entre ambas tablas a travs de sus claves ajenas. En
este caso, la tabla casa_rural tiene una clave ajena sobre la tabla municipio. Por tanto, la
consulta correcta sera:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio
WHERE casa_rural.municipio = municipio.codigo;
As, obtendramos los siguientes datos:
CODIGO DIRECCION NOMBRE
---------- ------------------------------ ------------------------------
1001 Monje 27 Abis
2001 Fca Almadraba,Almendro Blanco Abiside
2002 Mayor 18 Abiside
...

Cuando se utilizan varias tablas, es frecuente que haya nombres de campos repetidos en
ellas. Hemos visto que la solucin pasa por escribir delante del campo en cuestin el
nombre de la tabla a la que pertenece, lo que en ocasiones puede resultar tedioso,

64
Tema 6. Lenguaje de Manipulacin de Datos
sobretodo si los nombres de las tablas son largos. Por esta razn, se suelen utilizar alias
para reducir el nombre de las tablas. Por ejemplo:
SELECT c.codigo, direccion, nombre
FROM casa_rural c, municipio m
WHERE c.municipio = m.codigo;

2.8 Consultas de Unin Externas

Se utiliza la operacin UNION para crear una consulta de unin, combinando los resultados
de dos o ms consultas o tablas independientes. Su sintaxis es:
[TABLE] consulta1 UNION [ALL] [TABLE] consulta2
[UNION [ALL] [TABLE] consultan [ ... ]]
donde consulta1, consulta2, consultan son instrucciones SELECT, el nombre de una
consulta almacenada o el nombre de una tabla almacenada precedido por la palabra clave
TABLE.
Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT, en
cualquier orden, en una nica operacin UNION. El ejemplo siguiente combina una tabla
existente llamada Otras_casas_lujo y una instruccin SELECT:
TABLE Otras_casas_lujo
UNION ALL
SELECT * FROM casa_rural
WHERE precio > 100;
Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la
operacin UNION, no obstante puede incluir el predicado ALL para asegurar que se
devuelven todos los registros. Esto hace que la consulta se ejecute ms rpidamente.
Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos, no
obstante los campos no tienen porqu tener el mismo tamao o el mismo tipo de datos.
Se puede utilizar una clusula GROUP BY y/o HAVING en cada argumento consulta para
agrupar los datos devueltos. Puede utilizar una clusula ORDER BY al final del ltimo
argumento consulta para visualizar los datos devueltos en un orden especfico.

3 SubConsultas

Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.
Puede utilizar tres formas de sintaxis para crear una subconsulta:
- comparacin [ANY | ALL | SOME] (instruccin sql)

65
Tema 6. Lenguaje de Manipulacin de Datos
- expresin [NOT] IN (instruccin sql)
- [NOT] EXISTS (instruccin sql)
donde:
! comparacin: es una expresin y un operador de comparacin que compara la
expresin con el resultado de la subconsulta.
! expresin: es una expresin por la que se busca el conjunto resultante de la
subconsulta.
! instruccin sql: es una instruccin SELECT, que sigue el mismo formato y reglas que
cualquier otra instruccin SELECT. Debe ir entre parntesis.
Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una
instruccin SELECT o en una clusula WHERE o HAVING. En una subconsulta, se utiliza
una instruccin SELECT para proporcionar un conjunto de uno o ms valores especificados
para evaluar en la expresin de la clusula WHERE o HAVING.

3.1 ANY, SOME


Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar
registros de la consulta principal, que satisfagan la comparacin con cualquier otro registro
recuperado en la subconsulta. El ejemplo siguiente devuelve el cdigo de todas las casas
rurales en las que hay una habitacin cuyo precio sea mayor que el precio total de cualquier
casa cuya fecha de construccin sea posterior al ao 1992:
SELECT DISTINCT cod_casa
FROM habitacion
WHERE precio_noche > ANY (SELECT precio
FROM casa_rural
WHERE fecha_construccion >= 01/01/1993);

3.2 ALL
El predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta
principal que satisfacen la comparacin con todos los registros recuperados en la
subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, la consulta devolver
nicamente aquellas casas en las que haya una habitacin cuyo precio sea mayor que el de
todas las casas construidas despus de 1992. Esto es mucho ms restrictivo.

3.3 IN
El predicado IN se emplea para recuperar nicamente aquellos registros de la consulta
principal para los que algunos registros de la subconsulta contienen un valor igual. El
ejemplo siguiente obtiene el nombre del dueo de las casas que tienen alguna habitacin
con bao:
SELECT duenyo
FROM casa_rural
WHERE codigo IN (SELECT cod_casa

66
Tema 6. Lenguaje de Manipulacin de Datos
FROM habitacion
WHERE banyo='S');

Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la


consulta principal para los que no hay ningn registro de la subconsulta que contenga un
valor igual.

3.4 EXISTS
El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones
de verdad/falso para determinar si la subconsulta devuelve algn registro.
Se puede utilizar tambin el alias del nombre de la tabla en una subconsulta para referirse a
tablas listadas en la clusula FROM fuera de la subconsulta. El ejemplo siguiente
corresponde a la misma consulta anterior:
SELECT duenyo
FROM casa_rural c
WHERE EXISTS (SELECT cod_casa
FROM habitacion
WHERE banyo='S' AND cod_casa=c.codigo);

3.5 Ejemplos
Obtener el cdigo de la casa (ordenado y sin repetir) de las
habitaciones cuyo precio por noche sea mayor de 90 euros
SELECT DISTINCT cod_casa
FROM habitacion
WHERE precio_noche>90
ORDER BY cod_casa;

Obtener el cdigo de la casa y de la habitacin de todas las


habitaciones con bao
SELECT DISTINCT cod_casa
FROM habitacion
WHERE banyo='S'
ORDER BY cod_casa;

Obtener el nombre del dueo de las casas construidas antes de 1990


SELECT duenyo

67
Tema 6. Lenguaje de Manipulacin de Datos
FROM casa_rural
WHERE fecha_construccion<'01/01/90';

Obtener el cdigo de la casa y la suma del precio de todas sus


habitaciones
SELECT cod_casa, SUM(precio_noche) as Suma
FROM habitacion
GROUP BY cod_casa;

Obtener el cdigo de la casa y la media del nmero de plazas de


todas sus habitaciones
SELECT cod_casa, AVG(num_plazas) AS Media
FROM habitacion
GROUP BY cod_casa;

Obtener el cdigo de la casa y la media del nmero de plazas de


todas sus habitaciones con bao
SELECT cod_casa, AVG(num_plazas) AS media
FROM habitacion
WHERE banyo='S'
GROUP BY cod_casa;

Obtener el cdigo de la casa y la media del nmero de plazas de


todas sus habitaciones con bao, de las casas cuya dicha media
supera el 3
SELECT cod_casa, AVG(num_plazas) AS Media
FROM habitacion
WHERE banyo='S'
GROUP BY cod_casa
HAVING AVG(num_plazas)>3;

Obtener el cdigo y la descripcin de todos los servicios junto con


la descripcion de su tipo
SELECT s.codigo, s.descripcion, t.descripcion
FROM servicio s, tipo_servicio t
WHERE s.tipo=t.tipo;

68
Tema 6. Lenguaje de Manipulacin de Datos

Obtener el cdigo de las casas de los municipios que empiezan por


A
SELECT codigo
FROM casa_rural
WHERE municipio IN (SELECT codigo
FROM municipio
WHERE nombre LIKE 'A%')
ORDER BY codigo;

Obtener la direccin y el telfono de contacto de las casas que


tienen habitaciones con capacidad para ms de 3 personas
SELECT direccion, telefono
FROM casa_rural
WHERE codigo IN (SELECT cod_casa
FROM habitacion
WHERE num_plazas>3);

Obtener el dueo, el precio y el cdigo postal de las casas que


valgan menos de 300 euros
SELECT duenyo, precio, codigo_postal
FROM casa_rural c, municipio m
WHERE c.municipio=m.codigo AND
precio<300;

Obtener el cdigo de las casas y el cdigo de las habitaciones que


tengan ms de dos plazas y cuya fecha de construccin sea posterior
al ao 1993
SELECT cod_casa, h.codigo
FROM casa_rural c, habitacion h
WHERE c.codigo=h.cod_casa AND
num_plazas > 2 AND
fecha_construccion > 1/1/94;

Obtener el cdigo, el dueo, la direccin con el nombre del


municipio de las casas cuyo precio oscila entre 200 y 300 euros o su
fecha de construccin es posterior al ao 1994.

69
Tema 6. Lenguaje de Manipulacin de Datos
SELECT c.codigo, duenyo, direccion, m.nombre
FROM casa_rural c, municipio m
WHERE c.municipio=m.codigo AND
((precio > 200 AND precio < 300) OR
fecha_construccion >= 01/01/95);

Obtener el cdigo y el total de plazas de las casas en las que haya


al menos 6 plazas, frigorfico y el mximo a pagar por noche en una
habitacin sean 120 euros.
SELECT cod_casa, SUM(num_plazas)
FROM casa_rural c, habitacion h
WHERE c.codigo=h.cod_casa AND
c.descripcion LIKE %frigorifico%
GROUP BY cod_casa
HAVING SUM(num_plazas) > 6 AND MAX(precio_noche)<120;

Obtener el nombre del dueo de las casas que tienen frigorfico y


alguna habitacin con bao
SELECT duenyo
FROM casa_rural
WHERE descripcion LIKE %frigorifico% AND
codigo IN (SELECT cod_casa
FROM habitacion
WHERE banyo='S');

Obtener el nombre del dueo de las casas tales que todas las
habitaciones valgan menos de 60 euros.
SELECT duenyo
FROM casa_rural c
WHERE NOT EXISTS (SELECT cod_casa
FROM habitacion
WHERE precio_noche > 60 AND
cod_casa=c.codigo);

70
Tema 6. Lenguaje de Manipulacin de Datos

4 Consultas de Accin

4.1 DELETE
Crea una consulta de eliminacin que elimina los registros de una o ms de las tablas
listadas en la clusula FROM que satisfagan la clusula WHERE. Su sintaxis es:
DELETE FROM Tabla WHERE criterio
Ejemplo: Con la siguiente instruccin, eliminamos de la tabla
casa_rural aquellas casas en las que el dueo se llama Manuel
delete from casa_rural
where duenyo like 'Manuel%';

DELETE es especialmente til cuando se desea eliminar varios registros. Si desea eliminar
todos los registros de una tabla, eliminar la propia tabla es ms eficiente que ejecutar una
consulta de borrado.
Una consulta de borrado elimina los registros completos, no nicamente los datos en
campos especficos. Si desea eliminar valores en un campo especificado, crear una
consulta de actualizacin que cambie los valores a Null.
Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede
deshacer la operacin. Para saber qu registros se eliminarn, primero se pueden examinar
los resultados de una consulta de seleccin que utilice el mismo criterio y despus ejecutar
la consulta de borrado.

4.2 INSERT INTO


Agrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta
consulta puede ser de dos tipos: insertar un nico registro o insertar en una tabla los
registros contenidos en otra tabla.

4.2.1 Para insertar un nico registro:


En este caso la sintaxis es la siguiente:
INSERT INTO Tabla (campo1, campo2, .., campoN)
VALUES (valor1, valor2, ..., valorN)
Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente.
Hay que prestar especial atencin a acotar entre comillas simples (') los valores literales
(cadenas de caracteres) y las fechas que adems hay que indicar en formato dd-mm-aa.
Cuando no se especifica valor para un campo, se inserta el valor predeterminado o Null.
Los registros se agregan al final de la tabla.
Ejemplos:

71
Tema 6. Lenguaje de Manipulacin de Datos
INSERT INTO casa_rural values (1001 , 'Manuel Martinez Garcia',
'Monje 27', '927561119', 'caminoreal@retemail.com', 80000,
'20/12/98', NULL, 1, 'comedor,desayuno y cena opcional');
INSERT INTO topo1.municipio values (2, 29610, 'Ojen', 29);
INSERT INTO topo1.serv_casa values (1001, 1, 0.3);

4.2.2 Para insertar registros de otra tabla:


En este caso la sintaxis es:
INSERT INTO Tabla [IN base_externa] (campo1, campo2, ..., campoN)
SELECT TablaOrigen.campo1, ..., TablaOrigen.campoN
FROM TablaOrigen
En este caso se seleccionarn los campos 1,2, ..., n de la tabla origen y se grabarn en los
campos 1,2,.., n de la Tabla. La condicin SELECT puede incluir la clusula WHERE para
filtrar los registros a copiar. Si Tabla y TablaOrigen poseen la misma estrucutra podemos
simplificar la sintaxis a:
INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen
De esta forma los campos de TablaOrigen se grabarn en Tabla, para realizar esta
operacin es necesario que todos los campos de TablaOrigen estn contenidos con igual
nombre en Tabla. Con otras palabras que Tabla posea todos los campos de TablaOrigen
(igual nombre e igual tipo).
Por ejemplo: si quisiramos generar una tabla de casas rurales de lujo utilizaramos:
INSERT INTO casa_rural_lujo
SELECT casa_rural.* FROM casa_rural WHERE precio>600;

4.3 UPDATE
Crea una consulta de actualizacin que cambia los valores de los campos de una tabla
especificada basndose en un criterio especfico. Su sintaxis es:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN
WHERE Criterio;
UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o
cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. El
ejemplo siguiente incrementa los valores del campo Precio_Noche en un 10 por ciento y los
valores del campo Precio_Dto_3 en un 3 por ciento para las habitaciones que tienen bao:
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03
WHERE banyo = 'S';

72
Tema 6. Lenguaje de Manipulacin de Datos
UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que
examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y
despus ejecutar la consulta de actualizacin.
Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la
tabla sealada sern actualizados.
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03;

5 Ejercicios

5.1 Consultas bsicas

1. Obtener el cdigo de la casa (ordenado y sin repetir) de las habitaciones cuyo precio
por noche sea mayor de 15000
COD_CASA
----------
1001
2001
2002
3001
3002
5003

2. Obtener el cdigo de la casa y de la habitacin de todas las habitaciones con bao


COD_CASA
----------
1001
2001
2002
2003
3002
5001
5002
5003

73
Tema 6. Lenguaje de Manipulacin de Datos

3. Obtener el nombre del dueo de las casas construidas antes de 1990


DUENYO
----------------------------------------
Manuel Martinez Garcia
Vicenta Duque Moreira
Ricardo Olmos Garcia
Rodrigo Gracia Andres

5.2 Consultas con agrupamiento de registros

4. Obtener el cdigo de la casa y la suma del precio de todas sus habitaciones


COD_CASA SUMA
---------- ----------
1001 68000
2001 37000
2002 70000
2003 48000
3001 36000
3002 34000
5001 32000
5002 17000
5003 49000

5. Obtener el cdigo de la casa y la media del nmero de plazas de todas sus


habitaciones
COD_CASA MEDIA
---------- ----------
1001 2,5
2001 1,66666667
2002 4
2003 2
3001 4
3002 2,66666667

74
Tema 6. Lenguaje de Manipulacin de Datos
5001 2,66666667
5002 2
5003 2,5

6. Obtener el cdigo de la casa y la media del nmero de plazas de todas sus


habitaciones con bao
COD_CASA MEDIA
---------- ----------
1001 2,66666667
2001 2
2002 4
2003 2
3002 4
5001 2,66666667
5002 2
5003 2,66666667

7. Obtener el cdigo de la casa y la media del nmero de plazas de todas sus


habitaciones con bao, de las casas cuya dicha media supera el 3.
COD_CASA MEDIA
---------- ----------
2002 4
3002 4

5.3 Consultas de unin de tablas

8. Obtener el cdigo, direccin y nombre del municipio de todas las casas


CODIGO DIRECCION NOMBRE
---------- ------------------------------ --------------------------
1001 Monje 27 Abis
2001 Fca Almadraba,Almendro Blanco Abiside
3001 Plz Calixto III Bernacle
5001 La Barra 30 Abis
5002 Plz La Iglesia 5 Abis

75
Tema 6. Lenguaje de Manipulacin de Datos
5003 Alta 7 Abis
2002 Mayor 18 Abiside
2003 Mayor 16 Abiside
3002 Sta Ana 20 Bernacle

9. Obtener el cdigo y la descripcin de todos los servicios junto con la descripcion de su


tipo.
CODIGO DESCRIPCION DESCRIPCION
---------- ----------------------------------- ---------------------
1 Ultramarinos Pea Supermercado
2 Garcia Comestibles Supermercado
3 Tienda Martinez Supermercado
4 Hospital de Abis Hospital
5 Farmacia Abis Farmacia
6 Ambulancias Montes Ambulancia
7 Centro de Salud de Bernacle Centro de Salud
8 Comestibles Mora Supermercado

5.4 Consultas con subconsultas

10. Obtener el nombre del dueo de las casas que tienen alguna habitacin con bao
DUENYO
----------------------------------------
Manuel Martinez Garcia
Amalia Gomez Tormes
Monica Fernandez Gil
Monica Fernandez Gil
Rodrigo Gracia Andres
Vicenta Duque Moreira
Vicenta Duque Moreira
Ricardo Olmos Garcia

76
Tema 6. Lenguaje de Manipulacin de Datos

11. Obtener el cdigo de las casas de los municipios que empiezan por A
CODIGO
----------
1001
2001
2002
2003
5001
5002
5003

12. Obtener la direccin y el telfono de contacto de las casas que tienen habitaciones con
capacidad para ms de 3 personas
DIRECCION TELEFONO
------------------------------ ---------
Monje 27 927561119
Mayor 18 695672356
Plz Calixto III 902209900
Sta Ana 20 656723322
La Barra 30 962523689
Alta 7 603457689

77
Manual del SQLWorksheet

1 Introduccin

ORACLE es un sistema gestor de bases de datos relacionales. Actualmente acaba de


lanzar su versin 9, pero utilizaremos la versin 8.1 en las prcticas.
En este sistema, no existe el concepto de esquema de base de datos tal y como lo hemos
entendido hasta ahora, sino que, asociado a cada usuario definido en el sistema, se crea
una base de datos en la que se almacenarn todos los objetos (tablas, vistas,
procedimientos, etc.) creados por l.
En el sistema ORACLE pueden definirse los siguientes objetos del estndar SQL:
relaciones bsicas, vistas y privilegios de acceso. Adems, pueden definirse algunos
detalles relativos a la representacin interna de los datos (ndices, tablespace, cluster, etc.);
disparadores para modelar comportamiento activo (triggers), as como elementos de
programacin (funciones y procedimientos, paquetes de procedimientos, etc.).
Est compuesto por varios mdulos. Los que utilizaremos en las sesiones de prcticas son
la aplicacin Schema Manager, para la gestin de tablas (se ver en prcticas posteriores)
y SQL worksheet, para la ejecucin de sentencias SQL.

2 SQL Worksheet

Se trata de una herramienta que nos permite ejecutar sentencias SQL de forma interactiva.
Mantiene un historial de los comandos introducidos, de forma que podemos utilizar esta
aplicacin para editar y ejecutar de nuevo un comando anterior sin tener que teclearlo otra
vez. Es posible tener varias SQL Worksheet abiertas al mismo tiempo, cada una es
independiente de las otras.

SQL Worksheet se encuentra en Inicio -> Oracle Enterprise Manager -> SQL Worksheet.
Inmediatamente aparece un cuadro de dilogo para conectarse a la base de datos. Los
datos a introducir son: username (topo2, por ejemplo), password (topo2) y service (topo).
Una vez se valida con el servidor, entramos en la aplicacin, que consta de los siguientes
elementos (ver figura):
Panel de entrada: en la parte inferior de la pantalla, nos permite introducir los
comandos SQL a ejecutar.
Panel de salida: situado en la parte superior de la pantalla, muestra el resultado de la
ejecucin de dicha sentencia.
Barra de divisin: divide ambos paneles, si se pincha y arrastra sobre ella se puede
modificar el tamao de stos.
Barra de herramientas del panel de entrada
Nueva worksheet: borra el panel de entrada para introducir una nueva sentencia SQL,
si no haba sido guardado, indica la posibilidad de hacerlo.
Manual del SQLWorksheet
Abrir worksheet: muestra un cuadro de dilogo para abrir una sentencia SQL
almacenada previamente.
Guardar worksheet: muestra un cuadro de dilogo para guardar el contenido del panel
de entrada.
Ejecutar: ejecuta el comando SQL presente en el panel de entrada.
Historial de comandos: muestra una ventana con las sentencias ejecutadas
ltimamente y permite recuperar una (botn Get) para ser editada.
Comando anterior y Siguiente comando: permiten la navegacin por el historial de
comandos.
Barra de herramientas del panel de salida: slo tiene un botn, que nos permite
guardar la informacin del panel de salida en un fichero.
Mens desplegables: aparecen en la parte superior de la pantalla. Sus principales
funciones se resumen a continuacin.

2.1 Men File


Change Database Connection: Muestra el cuadro de dilogo de conexin a una
instancia de una base de datos.

80
Manual del SQLWorksheet
New, Open, Save: Realizan las mismas funciones que los botones de la barra del panel
de entrada.
Save As: Guarda el contenido del panel de entrada en un fichero distinto del que est
abierto actualmente.
Print: Imprime el contenido del panel de entrada.
Save Output As: Guarda el contenido del panel de salida en un fichero.
Print Output: Imprime el contenido del panel de salida.
Print Setup: Muestra el cuadro de dilogo de configuracin de la impresin.
Exit: Sale de SQL Worksheet.

2.2 Men Edit


Realiza las funciones habituales en el panel activo.

2.3 Men Worksheet


Execute: Ejecuta el comando del panel de entrada.
Run Script: Permite la seleccin y ejecucin de un script.
Spool: Escribe dinmicamente la salida en un fichero.
Command History, Previous Command y Next Command: Realizan las mismas
funciones que los botones del panel de entrada.

81
Prctica 1. Consultas alfanumricas

Consiste en realizar las consultas que se proponen a continuacin. Deben aparecer los
mismos ttulos de columnas y los datos en el mismo orden.

1. Cdigo y descripcin de todas las carreteras de la regin que van al sur (es decir, que
en su descripcin aparece la palabra Sur).
CODIGO DESCRIPCION
---------- --------------------------------------------------
C1 Carretera 1 - Noreste-Suroeste
C2 Carretera 2 - Norte-Sur
C5 Carretera 5 - Este-(Norte-Sur)

2. Supermercados de todos los municipios.


CODIGO DESCRIPCION
---------- --------------------------------------------------
1 Ultramarinos Pea
2 Garcia Comestibles
3 Tienda Martinez
8 Comestibles Mora

3. Nombre del dueo y direccin completa (con el nombre del municipio) de todas las
casas rurales de la regin, ordenado por el nombre del municipio.
DUENYO DIRECCION MUNICIPIO
----------------------- ------------------------------ -------------
Manuel Martinez Garcia Monje 27 Abis
Vicenta Duque Moreira La Barra 30 Abis
Vicenta Duque Moreira Plz La Iglesia 5 Abis
Ricardo Olmos Garcia Alta 7 Abis
Amalia Gomez Tormes Fca Almadraba,Almendro Blanco Abiside
Monica Fernandez Gil Mayor 18 Abiside
Monica Fernandez Gil Mayor 16 Abiside
Amparo Molins Lopez Plz Calixto III Bernacle
Rodrigo Gracia Andres Sta Ana 20 Bernacle

4. Precio medio de las casas que hayan sido construidas o rehabilitadas despus del ao
90.
MEDIA
----------
39285,7143
Prctica 1. Consultas alfanumricas

5. Precio de la habitacin ms cara de cada casa ordenado por cdigo de casa.


CODIGO MAX_HABIT
---------- ----------
1001 24000
2001 16000
2002 25000
2003 12000
3001 18000
3002 16000
5001 14000
5002 10000
5003 20000

6. Cdigo de la casa y diferencia de precio entre alquilar una casa completa y alquilarla
por habitaciones (sin descuentos) ordenado por cdigo de casa.
CODIGO DIFERENCIA
---------- ----------
1001 8000
2001 2000
2002 6000
2003 8000
3001 3000
3002 4000
5001 4000
5002 2000
5003 6000

7. Cdigo, direccin y total de plazas de las casas en las que caben al menos 10
personas en total.
CODIGO DIRECCION TOTAL
---------- ------------------------------ ----------
1001 Monje 27 10
2002 Mayor 18 12
5003 Alta 7 10

8. Nombre del dueo de las casas que tienen TV en todas las habitaciones.
DUENYO
----------------------------------------
Manuel Martinez Garcia
Ricardo Olmos Garcia
Monica Fernandez Gil
Monica Fernandez Gil
Rodrigo Gracia Andres

84
Prctica 1. Consultas alfanumricas

9. Cdigo y direccin de las casas en las que hay al menos 8 plazas en habitaciones con
bao.
CODIGO DIRECCION
---------- ------------------------------
1001 Monje 27
2002 Mayor 18
2003 Mayor 16
5001 La Barra 30
5003 Alta 7

85
Tema 7: Lenguaje de Definicin de Datos

1 Tipos de Datos

Los tipos de datos SQL se clasifican en 12 tipos de datos primarios:

Tipo de Datos Longitud Descripcin


Para consultas sobre tabla adjunta de productos de bases
BINARY 1 byte
de datos que definen un tipo de datos Binario.
BIT 1 byte Valores Si/No True/False
BYTE 1 byte Un valor entero entre 0 y 255.
COUNTER 4 bytes Un nmero incrementado automticamente (de tipo Long)
Un entero escalable entre 922.337.203.685.477,5808 y
CURRENCY 8 bytes
922.337.203.685.477,5807.
DATETIME 8 bytes Un valor de fecha u hora entre los aos 100 y 9999.
Un valor en punto flotante de precisin simple con un
38 -45
rango de -3.402823*10 a -1.401298*10 para valores
SINGLE 4 bytes -45 38
negativos, 1.401298*10 a 3.402823*10 para valores
positivos, y 0.
Un valor en punto flotante de doble precisin con un rango
308 -324
de -1.79769313486232*10 a -4.94065645841247*10
DOUBLE 8 bytes -324
para valores negativos, 4.94065645841247*10 a
308
1.79769313486232*10 para valores positivos, y 0.
SHORT 2 bytes Un entero corto entre -32,768 y 32,767.
LONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647.
1 byte por
TEXT De cero a 255 caracteres.
caracter
1 byte por
LONGTEXT De cero a un mximo de 1.2 gigabytes.
carcter

2 Estructuras de las Tablas

2.1 Creacin de Tablas Nuevas

La sintaxis de la instruccin para crear bases de datos es:


Tema 7. Lenguaje de definicin de datos
CREATE TABLE tabla (campo1 tipo (tamao) ndice1 ,
campo2 tipo (tamao) ndice2 , ...,
ndice multicampo , ... )
donde:
Parte Descripcin
tabla Es el nombre de la tabla que se va a crear.
campo1 Es el nombre del campo o de los campos que se van a crear en la nueva
campo2 tabla. La nueva tabla debe contener, al menos, un campo.
tipo Es el tipo de datos de campo en la nueva tabla. (Ver Tipos de Datos)
tamao Es el tamao del campo slo se aplica para campos de tipo texto.
ndice1 Es una clusula CONSTRAINT que define el tipo de indice a crear. Esta
ndice2 clusula en opcional.
Es una clusula CONSTRAINT que define el tipo de ndice multicampos a
ndice
crear. Un ndice multi campo es aquel que est indexado por el contenido
multicampos
de varios campos. Esta clusula en opcional.

2.2 La clusula CONSTRAINT

Se utiliza la clusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE


para crear o eliminar ndices. Existen dos sintaxis para esta clusula dependiendo si desea
crear o eliminar un ndice de un nico campo o si se trata de un campo multindice.
Para los ndices de campos nicos:
CONSTRAINT nombre {PRIMARY KEY |
UNIQUE |
REFERENCES tabla_externa [(campo externo1,
campo externo2,...)]}
Para los ndices de campos mltiples:
CONSTRAINT nombre {PRIMARY KEY (primario1[, primario2 [, ...]]) |
UNIQUE (nico1[, nico2 [, ...]]) |
FOREIGN KEY (ref1[, ref2 [, ...]])
REFERENCES tabla_externa [(campo_externo1...)]}

Parte Descripcin
nombre Es el nombre del ndice que se va a crear.
primarioN Es el nombre del campo o de los campos que forman el ndice primario.

88
Tema 7. Lenguaje de definicin de datos

Es el nombre del campo o de los campos que forman el ndice de clave


nicoN
nica.
Es el nombre del campo o de los campos que forman el ndice externo
refN
(hacen referencia a campos de otra tabla).
Es el nombre de la tabla que contiene el campo o los campos
tabla externa
referenciados en refN
campos Es el nombre del campo o de los campos de la tabla externa especificados
externos por ref1, ref2, ..., refN

Si se desea crear un ndice para un campo cuando se esta utilizando las instrucciones
ALTER TABLE o CREATE TABLE la clusula CONTRAINT debe aparecer inmediatamente
despus de la especificacin del campo indexado.
Si se desea crear un ndice con mltiples campos cuando se est utilizando las
instrucciones ALTER TABLE o CREATE TABLE la clusula CONSTRAINT debe aparecer
fuera de la clusula de creacin de tabla.

Tipo de ndice Descripcin


Genera un ndice de clave nica. lo que implica que los registros de la
UNIQUE
tabla no pueden contener el mismo valor en los campos indexados.
Genera un ndice primario el campo o los campos especificados. Todos
PRIMARY KEY los campos de la clave principal deben ser nicos y no nulos, cada
tabla slo puede contener una nica clave principal.
Genera un ndice externo (toma como valor del ndice campos
contenidos en otras tablas). Si la clave principal de la tabla externa
consta de ms de un campo, se debe utilizar una definicin de ndice
de mltiples campos, listando todos los campos de referencia, el
FOREIGN KEY
nombre de la tabla externa, y los nombres de los campos referenciados
en la tabla externa en el mismo orden que los campos de referencia
listados. Si los campos referenciados son la clave principal de la tabla
externa, no tiene que especificar los campos referenciados.

Ejemplos:
Crear una nueva tabla llamada Casa_rural con los campos que hemos
definido anteriormente. Adems, indica que la clave primaria es el
campo CODIGO y establece una clave ajena sobre el campo MUNICIPIO al
campo CODIGO de la tabla Municipio.
CREATE TABLE casa_rural
( codigo char(10) not null,
duenyo varchar2(40) not null,
direccion varchar2(30) not null,
telefono varchar2(9) not null,

89
Tema 7. Lenguaje de definicin de datos
email varchar2(30) null,
precio number(4,2) not null,
fecha_construccion date not null,
fecha_rehabilitacion date null,
municipio char(10) not null,
descripcion varchar2(100),
CONSTRAINT primaria PRIMARY KEY (codigo),
FOREIGN KEY (municipio) REFERENCES municipio(codigo));

Crear una nueva tabla Habitacion con los campos definidos


anteriormente. Se define una clave primaria con dos campos: codigo,
cod_casa. Se define una clave ajena sobre el campo cod_casa que
referencia al campo codigo de la tabla casa_rural. Se define una
restriccin de valor: el campo banyo debe tomar valores en el
conjunto (S,N).
create table habitacion
( codigo char(2) not null,
num_plazas number(2) not null,
banyo char(1) not null,
precio_noche number(6) not null,
precio_dto_3 number(6),
descripcion varchar2(100),
cod_casa char(10) not null,
primary key (codigo, cod_casa),
foreign key (cod_casa) references casa_rural(codigo),
constraint dom_banyo check (banyo in ('S','N')));

2.3 Creacin de ndices

La sintaxis para crear un ndice en una tabla ya definida en la siguiente:


CREATE [UNIQUE] INDEX ndice ON tabla
(campo [ASC|DESC][, campo [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

Donde:

90
Tema 7. Lenguaje de definicin de datos

Parte Descripcin
ndice Es el nombre del ndice a crear.
tabla Es el nombre de una tabla existentes en la que se crear el ndice.
campo Es el nombre del campo o lista de campos que consituyen el ndice.
Indica el orden de los valores de lso campos ASC indica un orden
ASC|DESC
ascendente (valor predeterminado) y DESC un orden descendente.
UNIQUE Indica que el indice no puede contener valores duplicados.
DISALLOW
Prohibe valores nulos en el ndice
NULL
IGNORE Excluye del ndice los valores nulos incluidos en los campos que lo
NULL componen.
Asigna al ndice la categora de clave principal, en cada tabla slo puede
PRIMARY existir un nico indice que sea "Clave Principal". Si un ndice es clave
principal implica que que no puede contener valores nulos ni duplicados.

Ejemplos:
Crea un ndice llamado MiIndice en la tabla Casa_rural con los
campos Duenyo y Telefono.
CREATE INDEX MiIndice ON Casa_rural (Duenyo, Telefono);

Crea un ndice en la tabla Casa_rural utilizando el campo CODIGO,


obligando que el campo CODIGO no contenga valores nulos ni
repetidos.
CREATE UNIQUE INDEX MiIndice ON Casa_rural (CODIGO) WITH DISALLOW
NULL;

2.4 Modificar el Diseo de una Tabla

Modifica el diseo de una tabla ya existente, se pueden modificar los campos o los ndices
existentes. Su sintaxis es:
ALTER TABLE tabla
{ADD {COLUMN tipo de campo[(tamao)]
[CONSTRAINT ndice] CONSTRAINT ndice multicampo} |
DROP {COLUMN campo I CONSTRAINT nombre del ndice} }

Donde:

91
Tema 7. Lenguaje de definicin de datos

Parte Descripcin
Tabla Es el nombre de la tabla que se desea modificar.
Campo Es el nombre del campo que se va a aadir o eliminar.
Tipo Es el tipo de campo que se va a aadir.
Tamao El el tamao del campo que se va a aadir (slo para campos de texto).
Es el nombre del ndice del campo (cuando se crean campos) o el nombre
ndice
del ndice de la tabla que se desea eliminar.
ndice Es el nombre del ndice del campo multicampo (cuando se crean campos) o
multicampo el nombre del ndice de la tabla que se desea eliminar.

Operacin Descripcin
ADD Se utiliza para aadir un nuevo campo a la tabla, indicando el nombre, el
COLUMN tipo de campo y opcionalmente el tamao (para campos de tipo texto).
ADD Se utliza para agregar un ndice de multicampos o de un nico campo.
DROP Se utliza para borrar un campo. Se especifica nicamente el nombre del
COLUMN campo.
Se utiliza para eliminar un ndice. Se especifica nicamente el nombre del
DROP
ndice a continuacin de la palabra reservada CONSTRAINT.

Ejemplos:

Modifica la definicin de los campos duenyo y descripcion.


alter table casa_rural
modify(duenyo char(10), descripcion varchar2(200));

Elimina la restriccin de dominio impuesta sobre el campo banyo.


alter table habitacion drop constraint dom_banyo;

2.5 Eliminacin de tablas


Se utiliza la siguiente instruccin:
DROP TABLE nombre_relacin;

Ejemplo: borrar la relacin habitacin:


drop table habitacion;

92
Unidad temtica 3:

Bases de Datos Espaciales

Objetivos
Comprender el concepto de base de datos espacial
Ser capaces de seleccionar el modelo de datos espacial que ms se ajusta a los datos
Ser capaces de insertar datos espaciales en una base de datos Oracle
Ser capaces de realizar consultas sobre datos espaciales en Oracle 8i

Contenidos
Tema 8. Modelado de datos espaciales
Tema 9. Gestin de datos espaciales en Oracle 8i
Tema 10. Consultas espaciales en Oracle 8i
Tema 8: Modelado de datos espaciales

1 Introduccin

Como ya hemos comentado, la tendencia actual de los SIG es la de utilizar SGBD


extendidos para aprovechar las ventajas de una visin integrada de los datos. El concepto
bsico consiste en la habilidad de aadir nuevos tipos y operaciones al sistema relacional.
En el caso de aplicaciones geoespaciales, la tendencia actual es la extensin de SGBD
relacionales de la siguiente forma:
1. El lenguaje de consulta SQL se extiende para manipular datos espaciales as como
datos descriptivos. Los nuevos datos espaciales (punto, lnea, regin) se manejan
como los tipos alfanumricos bsicos.
2. Muchas otras funciones del SGBD, como optimizacin de consultas, se adaptan para
manejar datos espaciales eficientemente.

Muchos SGBD ofrecen esta extensin espacial. Oracle 8i es uno de ellos y es el que
estudiaremos en temas posteriores.

2 Definiciones

En un SIG la informacin geoespacial correspondiente a un aspecto en particular se conoce


como tema (o entidad). Un tema es similar a una relacin como se define en el modelo
relacional. Por ejemplo, rios, ciudades y pases son temas. Cuando un tema se muestra en
papel o sobre la pantalla, lo que el usuario ve es un mapa.
Los mayores objetos a considerar en el nivel conceptual son los objetos geogrficos. Un
tema es una coleccin de objetos geogrficos. Un objeto geogrfico corresponde con una
entidad del mundo real y tiene dos componentes:
- Una descripcin. El objeto es descrito por un conjunto de atributos descriptivos.
Por ejemplo, el nombre y el nmero de habitantes de una ciudad constituyen su
descripcin. Tambin son conocidos como atributos alfanumricos.
- Un componente espacial, el cual puede estar compuesto por la geometra
(localizacin en el espacio, forma, etc.) y la topologa (relaciones espaciales entre
objetos existentes, como la adyacencia). Por ejemplo, una ciudad puede tener
como valor geomtrico un polgono en 2D.
Dada la inherente complejidad de las entidades geogrficas en el mundo real y las
relaciones de composicin existentes entre muchas de estas entidades, introducimos la
nocin de objeto geogrfico atmico y objeto geogrfico complejo. Los objetos
geogrficos complejos se componen de otros objetos geogrficos, que pueden a su vez, ser
Tema 9. Gestin de datos espaciales en Oracle 8i
atmicos o complejos. Por ejemplo, en el tema que corresponde a las comunidades
autnomas espaolas, el objeto geogrfico (complejo) Comunidad Valenciana se
compone de otros objetos geogrficos (que podemos considerar atmicos) Provincias de la
Comunidad Valenciana. Un tema es, por tanto, un conjunto homogneo de objetos
geogrficos (es decir, de objetos que tienen la misma estructura o tipo).

El atributo espacial es un objeto geogrfico no se corresponde con ningn tipo de dato


estndar, como entero o cadena. La representacin de la geometra y de la topologa
requiere un modelado potente al nivel de tema u objeto, que nos lleva a los modelos de
datos espaciales. Normalmente, los siguientes tipos de datos bsicos son utilizados en los
modelos de datos espaciales:
- point (punto): objeto de dimensin 0
- line (lnea): objeto de dimensin 1
- region (regin): objeto bidimensional
Por ejemplo, el objeto espacial asociado a un ro es una lnea, mientras que el objeto
asociado con una ciudad es una regin (o polgono).

3 Operaciones simples sobre temas

Supongamos que hemos definido los siguientes temas:


1. Pases, con los atributos descriptivos nombre, capital, nmero de habitantes y con un
atributo espacial denominado geo.
2. Idiomas, que representa la distribucin de los principales idiomas hablados (o familias
de idiomas), con el atributo descriptivo idioma y el atributo espacial geo.
Es decir:
1. Pases (nombre, capital, num_habitantes, geo:region)
2. Idiomas (idioma, geo:region)

Las siguientes son operaciones comunes sobre estos temas, basadas en el lgebra
relacional:
- proyeccin, consiste en la operacin de seleccionar uno o varios campos para
mostrar su contenido. Por ejemplo, dado el tema Paises, podemos proyectar sobre
el campo num_habitantes y obtendremos la siguiente tabla:
Paises Num_habitantes
Portugal 10.500.000
Francia 58.000.000
... ...
Alemania 78.500.000

96
Tema 9. Gestin de datos espaciales en Oracle 8i

- seleccin, consiste en la operacin de seleccionar una o varias tuplas de un tema.


Por ejemplo, dado el tema Paises podemos seleccionar aquellos pases con ms
de 50 millones de habitantes y obtendremos la siguiente tabla:
Paises Num_habitantes
Francia 58.000.000
... ...
Alemania 78.500.000

- superposicin, consiste en superponer dos o ms temas para obtener uno nuevo.


Por ejemplo, si tomamos los temas Paises e Idiomas y los superponemos,
obtendremos los paises donde se habla cada idioma.
- seleccin geomtrica, por ejemplo:
- windowing: consiste en definir una ventana y seleccionar todos aquellos
elementos de un tema que la ventana superpone, aunque sea parcialmente
- clipping: consiste en definir una ventana y seleccionar slo la parte de los
elementos de un tema que la ventana superpone

97
Tema 9: Gestin de datos espaciales en Oracle 8i

En este tema veremos los distintos modos en los que los datos espaciales pueden ser
modelados en Oracle 8i, as como las distintas relaciones que se pueden establecer entre
objetos geogrficos. Tambin estudiaremos el modelo objeto-relacional de Oracle 8i y cmo
se insertan datos de tipo espacial en las tablas.

1 Modelado del espacio geogrfico

En el tema anterior definimos un objeto geogrfico como dos partes: una descripcin y una
componente espacial. Para distinguir un objeto geogrfico de otro, debemos asignarle una
identidad. El conjunto de (identidad, componente espacial, descripcin) se conoce como
entidad.
La interpretacin del espacio depende de la semntica asociada con el territorio geogrfico.
Consideremos, por ejemplo, a Espaa. Si adoptamos un punto de vista administrativo,
Espaa se divide en comunidades autnomas. Desde un punto de vista geolgico,
obtenemos una organizacin totalmente distinta del espacio, en rea geolgicas. Si
estamos interesados en el control de trfico, nos fijaremos en la red de carreteras. En cada
caso, elegimos una nueva interpretacin del espacio y definimos un nuevo conjunto de
entidades que describen este espacio. En Oracle 8i, podemos utilizar los siguientes tipos
bsicos de objetos espaciales:
a) punto (point). Se utilizan para representar la localizacin de entidades cuya forma no
se considera til o cuando el rea es bastante pequea comparada con el espacio
total. Ciudades, iglesias y cruces son ejemplos de entidades tipo punto.
b) lnea (line string). Se suelen usar para representar redes (carreteras, hidrogrficas,
etc.). El tipo bsico considerado es la polyline, que se define como un conjunto finito de
segmentos de lneas o bordes, tal que cada punto de final de un segmento es
compartido por exactamente dos segmentos, excepto los puntos finales de la polyline.
c) polgono (polygon). Se utilizan para representar entidades con reas grandes, tales
como parcelas o reas administrativas. Un polgono es una regin del plano acotada
por una polyline cerrada, llamada frontera.

Es importante destacar el hecho de que la eleccin de uno u otro tipo de objeto espacial es
arbitraria. Depende del futuro uso que se le va a dar a la coleccin de entidades. Muchos
factores pueden influir en esta eleccin, pero uno de los ms determinantes es la escala.
Por ejemplo, un aeropuerto puede ser visto como un punto (si estamos interesados en
enlaces areos) o como un polgono, si el objetivo es la organizacin del aeropuerto.
Tema 9. Gestin de datos espaciales en Oracle 8i

2 La extensin Spatial de Oracle 8i

El modelo de datos Spatial es una estructura jerrquica que consiste en:


- elementos: un elemento es el bloque bsico de una geometra. Los tipos de
elementos bsicos son el punto, la lnea y el polgono. Por ejemplo, un elemento
puede modelar una constelacin (conjunto de puntos), una carretera (polyline) o
los lmites de una comarca (polgono).
- geometras: una geometra es la representacin de una caracterstica espacial,
modelada como un conjunto ordenado de elementos. Por ejemplo, una geometra
puede describir el suelo edificable de una poblacin.
- capas: una capa es un conjunto heterogneo de geometras que tienen el mismo
conjunto de atributos. Por ejemplo, una capa puede recoger las caractersticas
topogrficas de una zona, mientras que otra capa puede describir la densidad de
poblacin de la misma regin.

Las relaciones espaciales que se pueden establecer entre dos entidades de la base de
datos son las siguientes:
- DISJOINT: los contornos y los interiores de las entidades no intersectan
- TOUCH: los contornos intersectan pero los interiores no
- OVERLAPBDYDISJOINT: el interior de un objeto intersecta con el contorno y el
interior del otro objeto pero los contornos no intersectan. Esto ocurre, por ejemplo,
cuando una lnea comienza fuera de un polgono y termina dentro del polgono.
- OVERLAPBDYINTERSECT: los contornos y los interiores de los dos objetos
intersectan.
- EQUAL: los dos objetos tienen el mismo contorno y el mismo interior.
- CONTAINS: el interior y el contorno de un objeto est completamente contenido en
el interior del otro objeto
- COVERS: el interior de un objeto est completamente contenido en el interior del
otro y sus contornos intersectan
- INSIDE: el contrario de CONTAINS. A INSIDE B implica B CONTAINS A.
- COVEREDBY: el contrario de COVERS. A COVEREDBY B implica B COVERS A
- ANYINTERACT: los objetos intersectan de algn modo.

100
Tema 9. Gestin de datos espaciales en Oracle 8i

3 El modelo Objeto-relacional de Spatial

Veamos, ahora, una descripcin de las tablas especficas que son necesarias en Oracle 8i
para manejar los datos espaciales.

En primer lugar, la informacin de una geometra asociada a una entidad se almacena


como un objeto en una de las columnas de la tabla que contiene el resto de datos
alfanumricos. Por ejemplo, si definimos la tabla MUNICIPIO:
MUNICIPIO = {codigo, nombre, codigo_postal, geometria}.
Este nuevo campo geometria es de tipo SDO_GEOMETRY. Los componentes de este tipo
indican el tipo de geometra y los datos concretos que va a tener la fila correspondiente.
Estos componentes son:
- SDO_GTYPE: Define el tipo de geometra. Los tipos bsicos se definen con los
siguientes valores: 1 para puntos, 2 para lneas y 3 para polgonos. Se compone
un nmero de cuatro cifras, donde la primera indica el nmero de dimensiones en
las que se representa el objeto. As, si hablamos de dos dimensiones, se asignar
2001 para puntos, 2002 para lneas y 2003 para polgonos.
- SDO_SRID: No se utiliza en esta versin, por lo que su valor debe ser NULL.
- SDO_POINT: Define las coordenadas del punto, si SDO_GTYPE es 1.
- SDO_ELEM_INFO: Permite interpretar los valores contenidos en el campo
SDO_ORDINATES. Cada tripleta de elementos proporciona informacin de un
elemento de la geometra y una geometra puede contener varios elementos. De
momento, slo vamos a tratar con geometras simples, por lo que
SDO_ELEM_INFO contendr nicamente tres elementos:
- SDO_STARTING_OFFSET: indica el desplazamiento dentro de
SDO_ORDINATES donde est almacenada la primera coordenada de este
elemento.
- SDO_ETYPE: indica el tipo del elemento, es decir, 1, 2 3.
- SDO_INTERPRETATION: indica si se trata de un elemento compuesto.
- SDO_ORDINATES: almacena los valores de las coordenadas que configuran el
contorno del objeto espacial.

Por ejemplo, la entidad municipio la podemos modelar en la tabla MUNICIPIO como un


punto o como un polgono. Veamos cules seran los valores que se asignaran a cada una
de las componentes de SDO_GEOMETRY en cada caso:
- si modelamos el municipio como un punto:
SDO_GTYPE = 2001
SDO_SRID = NULL
SDO_POINT = (5.5, 3.2, NULL)
SDO_ELEM_INFO = NULL

101
Tema 9. Gestin de datos espaciales en Oracle 8i
SDO_ORDINATES = NULL
- si modelamos el municipio como un polgono:
SDO_GTYPE = 2003
SDO_SRID = NULL
SDO_POINT = NULL
SDO_ELEM_INFO = (1,3,1)
SDO_ORDINATES = (3,3,4,5,6,5,6,3,3,3)

4 Creacin de tablas con datos espaciales

El primer paso cuando se desean asociar atributos espaciales a entidades alfanumricas


en Oracle 8i consiste en crear un nuevo campo en la tabla de tipo SDO_GEOMETRY. De
esta forma, se indica que en este campo se almacenarn datos de tipo espacial.
Por ejemplo, podemos crear la tabla MUNICIPIO con un campo espacial:
CREATE TABLE municipio
( codigo char(10) not null,
nombre varchar2(40) not null,
codigo_postal varchar2(5) not null,
geometria MDSYS.SDO_GEOMETRY,
CONSTRAINT primaria PRIMARY KEY (codigo));

Cuando se introduce un campo de tipo SDO_GEOMETRY en una tabla, es necesario


insertar las caractersticas de esta geometra en la tabla SDO_GEOM_METADATA. Esta
tabla almacena la informacin concerniente a la escala de los elementos que se guardarn
en la nueva columna. Esta informacin se consultar ms adelante cuando se desee
realizar consultas espaciales sobre la tabla. Concretamente, el esquema de la tabla
SDO_GEOM_METADATA es el siguiente:
Nombre de Columna Nulo? Tipo
------------------------------ -------- ----
TABLE_NAME VARCHAR2(30)
COLUMN_NAME VARCHAR2(30)
DIMINFO MDSYS.SDO_DIM_ARRAY

Por ejemplo, veamos cmo se debe dar de alta la columna geometria de la tabla
MUNICIPIO:
INSERT INTO SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO)

102
Tema 9. Gestin de datos espaciales en Oracle 8i
VALUES ('municipio', 'geometria',
MDSYS.SDO_DIM_ARRAY
(MDSYS.SDO_DIM_ELEMENT('X', -180.00, 180.00, 0.000000050),
MDSYS.SDO_DIM_ELEMENT('Y', -90.00, 90.00, 0.000000050)
));

5 Insercin de datos espaciales

Insertar los valores de una entidad de la tabla SERVICIO. Cada


entidad se representa con un punto.
insert into servicio
values (8, 1, 'Comestibles Mora', mdsys.sdo_geometry(2001, NULL,
mdsys.sdo_point_type(4.75,6.75,NULL), NULL, NULL))

Insertar los valores de una entidad de la tabla CARRETERA. Cada


entidad se representa con una polyline.
insert into carretera values ('C1','Carretera 1 - Norte-Sur',
mdsys.sdo_geometry(2002, NULL, NULL,
mdsys.sdo_elem_info_array(1,2,1),
mdsys.sdo_ordinate_array(6,6.6, 4.5,5.5, 4.5,3.5, 3.25,3.5, 2,2.2)))

Insertar los valores de una entidad de la tabla LAGO. Cada entidad


se representa con un polgono.
insert into lago values ('L2','Lago Bernacle',
mdsys.sdo_geometry(2003, NULL, NULL,
mdsys.sdo_elem_info_array(1,3,1),
mdsys.sdo_ordinate_array(3,2, 6,2, 6,3, 4.5,3, 4.5,3.8, 3,3.8, 3,2))
)

103
Tema 10. Consultas espaciales en Oracle 8i

1 Introduccin

En este tema vamos a ver algunas funciones de Spatial que nos permiten realizar consultas
sencillas sobre datos espaciales en Oracle 8i. Estas funciones son:
SDO_GEOM.RELATE: permite evaluar o conocer la relacin espacial entre dos
entidades
SDO_GEOM.SDO_DISTANCE: permite conocer la mnima distancia eucldea entre dos
entidades
SDO_GEOM.SDO_AREA: permite conocer el rea de una entidad
SDO_GEOM.SDO_LENGTH: permite conocer la longitud o el permetro de una entidad

2 SDO_GEOM.RELATE

Obtiene o evala la relacin existente entre dos entidades.


Su sintaxis es:
SDO_GEOM.RELATE (campo1, metadata1, mascara, campo2, metadata2)
donde:
- campo1 es el nombre del primer campo espacial a relacionar
- metadata1 son los datos que aparecen en la tabla SDO_GEOM_METADATA
referidos al campo1
- mascara es el nombre de la relacin que se quiere comprobar si se establece
entre ambos campos. Puede ser cualquiera de las vistas o DETERMINE cuando lo
que se pretende es conocer qu relacin existe.
- campo2 es el nombre del segundo campo espacial a relacionar
- metadata2 son los datos que aparecen en la tabla SDO_GEOM_METADATA
referidos al campo2
La funcin devuelve tres tipos de respuesta:
- Si se pasa el nombre de una o varias relaciones como mscara, la funcin
devuelve el nombre de la relacin de las indicadas que ms se ajusta para este
par de geometras. Si todas las relaciones indicadas son falsas, la funcin
devuelve FALSE.
Tema 10. Consultas espaciales en Oracle 8i
- Si se pasa como mscara DETERMINE, la funcin devuelve la relacin que mejor
se ajusta. Slo se puede utilizar DETERMINE si la funcin SDO_GEOM.RELATE
se encuentra en la clusula SELECT.
- Si se pasa ANYINTERACT, la funcin devuelve TRUE si las dos geometras no
son disjuntas.

Ejemplos:
Obtener la descripcin de las carreteras que pasan por el municipio
de Bernacle:
SELECT descripcion
FROM carretera c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CARRETERA AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (c.geometria,g1.diminfo,OVERLAPBDYDISJOINT,
m.geometria,g2.diminfo)=OVERLAPBDYDISJOINT;

SELECT descripcion
FROM carretera c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CARRETERA AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (c.geometria,g1.diminfo,ANYINTERACT,
m.geometria,g2.diminfo)=TRUE;

Obtener el nombre del dueo y la direccin de las casas de Bernacle:


SELECT duenyo, direccion
FROM casa_rural c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CASA_RURAL AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (c.localizacion,g1.diminfo,INSIDE,

106
Tema 10. Consultas espaciales en Oracle 8i
m.geometria,g2.diminfo)=INSIDE;

SELECT duenyo, direccion


FROM casa_rural c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CASA_RURAL AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (m.geometria,g2.diminfo,CONTAINS,
c.localizacion,g1.diminfo)=CONTAINS;

SELECT duenyo, direccion


FROM casa_rural c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CASA_RURAL AND
g2.table_name=MUNICIPIO AND
SDO_GEOM.RELATE (c.localizacion,g1.diminfo,ANYINTERACT,
m.geometria,g2.diminfo)=TRUE;

Obtener la relacin existente entre el municipio de Bernacle y cada


carretera
SELECT descripcion,
SDO_GEOM.RELATE (c.geometria,g1.diminfo,DETERMINE,
m.geometria,g2.diminfo)
FROM carretera c, municipio m, sdo_geom_metadata g1,
sdo_geom_metadata g2
WHERE m.nombre=Bernacle AND
g1.table_name=CARRETERA AND
g2.table_name=MUNICIPIO;

3 SDO_GEOM.SDO_DISTANCE

Obtiene la mnima distancia eucldea entre dos entidades.

107
Tema 10. Consultas espaciales en Oracle 8i
La sintaxis de esta funcin es:
SDO_GEOM.SDO_DISTANCE(campo1, metadata1, campo2, metadata2)
donde:
- campo1 y campo2 son los campos entre los cuales se desea calcular la distancia
- metadata1 y metadata2 es la informacin de la tabla SDO_GEOM_METADATA de
cada campo

Ejemplos:
Obtener la distancia desde el lago Abis a cada carretera:
SELECT c.descripcion,
SDO_GEOM.SDO_DISTANCE(l.geometria, g1.diminfo,
c.geometria, g2.diminfo)
FROM lago l, carretera c, sdo_geom_metadata g1, sdo_geom_metadata g2
WHERE l.descripcion=Lago Abis AND
g1.table_name=LAGO AND
g2.table_name=CARRETERA;

Obtener la distancia desde el lago Abis a cada carretera cuando esta


distancia es inferior a 1.5:
SELECT c.descripcion,
SDO_GEOM.SDO_DISTANCE(l.geometria, g1.diminfo,
c.geometria, g2.diminfo)
FROM lago l, carretera c, sdo_geom_metadata g1, sdo_geom_metadata g2
WHERE l.descripcion=Lago Abis AND
g1.table_name=LAGO AND
g2.table_name=CARRETERA AND
SDO_GEOM.SDO_DISTANCE(l.geometria, g1.diminfo,
c.geometria, g2.diminfo)<1.5;

4 SDO_GEOM.SDO_AREA

Obtiene el rea de la entidad indicada.


Su sintaxis es:
SDO_GEOM.SDO_AREA(campo1, metadata1)

108
Tema 10. Consultas espaciales en Oracle 8i
donde:
- campo1 es el campo del cual se desea calcular el rea
- metadata1 es la informacin de la tabla SDO_GEOM_METADATA de este campo

Ejemplo:
Obtener el rea de todos los municipios:
SELECT m.nombre,
SDO_GEOM.SDO_AREA(m.geometria, g1.diminfo)
FROM municipio m, sdo_geom_metadata g1
WHERE g1.table_name=MUNICIPIO;

Obtener el rea de todos los municipios cuya rea sea superior a 2:


SELECT m.nombre,
SDO_GEOM.SDO_AREA(m.geometria, g1.diminfo)
FROM municipio m, sdo_geom_metadata g1
WHERE g1.table_name=MUNICIPIO AND
SDO_GEOM.SDO_AREA(m.geometria, g1.diminfo)>2;

5 SDO_GEOM.SDO_LENGTH

Obtiene la longitud si la entidad indicada es una polilnea o el permetro si la entidad


indicada es un polgono.
Su sintaxis es:
SDO_GEOM.SDO_LENGTH(campo1, metadata1)
donde:
- campo1 es el campo del cual se desea calcular la longitud o el permetro
- metadata1 es la informacin de la tabla SDO_GEOM_METADATA de este campo

Ejemplo:
Obtener el permetro de todos los municipios:
SELECT m.nombre,
SDO_GEOM.SDO_LENGTH(m.geometria, g1.diminfo)
FROM municipio m, sdo_geom_metadata g1

109
Tema 10. Consultas espaciales en Oracle 8i
WHERE g1.table_name=MUNICIPIO;

Obtener el permetro de todos los municipios cuyo permetro sea


superior a 5:
SELECT m.nombre,
SDO_GEOM.SDO_LENGTH(m.geometria, g1.diminfo)
FROM municipio m, sdo_geom_metadata g1
WHERE g1.table_name=MUNICIPIO AND
SDO_GEOM.SDO_LENGTH(m.geometria, g1.diminfo)>5;

110
Prctica 2. Consultas espaciales

Consiste en realizar las consultas siguientes.

1. Nombre y rea de todos los lagos.

DESCRIPCION AREA
-------------------------------------------------- ----------
Lago Abis 3,9
Lago Bernacle 4,2

2. Cdigo de la casa y nombre del dueo de las casas situadas en Abis.

CODIGO DUENYO
---------- ----------------------------------------
1001 Manuel Martinez Garcia
5001 Vicenta Duque Moreira
5002 Vicenta Duque Moreira
5003 Ricardo Olmos Garcia

3. Cdigo y descripcin de las carreteras que pasan por Abiside.

CODIGO DESCRIPCION
---------- --------------------------------------------------
C3 Carretera 3 - Este-Oeste
C4 Carretera 4 - Circular

4. Nombre de los municipios donde hay ms de un supermercado.

NOMBRE
------------------------------
Abis
Prctica 2. Consultas espaciales

5. Nombre de los municipios cuya distancia a un hospital es menor de 3.

NOMBRE
------------------------------
Abis
Abiside

6. Distancias entre cada lago y cada carretera.

LAGO CARRETERA DISTANCIA


--------------- --------------------------------- ----------
Lago Abis Carretera 1 - Noreste-Suroeste ,9
Lago Abis Carretera 2 - Norte-Sur 3,4
Lago Abis Carretera 3 - Este-Oeste 1
Lago Abis Carretera 4 - Circular 0
Lago Abis Carretera 5 - Este-(Norte-Sur) 1,92937814
Lago Bernacle Carretera 1 - Noreste-Suroeste 0
Lago Bernacle Carretera 2 - Norte-Sur 1
Lago Bernacle Carretera 3 - Este-Oeste ,7
Lago Bernacle Carretera 4 - Circular 0
Lago Bernacle Carretera 5 - Este-(Norte-Sur) 0

7. Cdigo, dueo y fecha de construccin de las casas en las que caben entre 5 y 10
personas en el total de habitaciones y cuya distancia al lago Abis sea menor de 3.

CODIGO DUENYO FECHA_CONSTRUCCION


---------- ----------------------------------- --------------------
1001 Manuel Martinez Garcia 21/10/80
2001 Amalia Gomez Tormes 01/04/98
2003 Monica Fernandez Gil 01/02/95
5001 Vicenta Duque Moreira 01/08/78
5003 Ricardo Olmos Garcia 08/08/88

112
Prctica 2. Consultas espaciales
8. Cdigo de las casas rurales cuyo precio total es inferior a 50000 y cuya distancia a un
supermercado es inferior a 0.6, sabiendo que el tipo de servicio de un supermercado es
1. Mostrar tambin la distancia correspondiente.

CODIGO DISTANCIA
---------- ----------
2001 ,559016994
3001 ,55
3002 ,2
5001 ,5

9. Cdigo y longitud de la carretera ms corta.

CODIGO LONGITUD
---------- ----------
C5 4,15138782

10. Cdigo y descripcin de las carreteras que pasan por todos los municipios.

CODIGO DESCRIPCION
---------- --------------------------------------------------
C4 Carretera 4 - Circular

113
Prctica 3: Manipulacin de la base de datos

1. Insertar la informacin correspondiente a la siguiente casa rural:

Municipio: Bernacle
Dueo: Mnica Rodrguez Campos
Direccin: Calle Lago Bernacle, 3
Telfono: 650673256
Precio: 22000
Fecha construccin: enero-1994
Descripcin: amplio saln con chimenea, cocina office
Coordenadas: 5.1, 1.2

Habitacin 1:
- nmero de plazas: 2
- bao: S
- precio noche: 12000
- precio descuento: 10000
- descripcin: cama matrimonio, telfono

Habitacin 2:
- nmero de plazas: 4
- bao: S
- precio noche: 25000
- precio descuento: 20000
- descripcin: dos camas matrimonio, telfono

2. Modificar el precio de la casa anterior de 22000 a 32000.


3. Obtener las distancias de esta casa al supermercado y al centro de salud de Bernacle.
4. Eliminar toda la informacin de esta casa.

También podría gustarte