Sunteți pe pagina 1din 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

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.

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

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

Actualizacin

Recuperacin
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

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).
!

12

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

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.

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) .

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.

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.

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.

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}.

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

2.

Num_hab

Nombre

Relacin realiza_pedido
Realiza_pedido
Cliente

NIF

Nombre

Pedido

Fecha

Numero

19

Tema 2. El modelo Entidad-Relacin

3.

Relacin vive
Persona

Vivienda
Vive

DNI

6
6.1

Nombre

Direccion

Caractersticas avanzadas
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

20

Titulo

Numero

Ubicacin

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

Historico

Actual

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)

(1,1)

Hombre

22

(0,1)

(1,1)

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.

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.

Ejercicios

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


Dom={agr_regadio, agr_secano,

Pertenece
Provincia

industria, turismo, }

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:

1.

2.

3.

TRAMO (cdigo_tramo)

CALLE (cdigo, nombre, longitud)

MANZANA (nmero)

BARRIO (nombre)

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

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

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

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).

Nivel
lgico

Nivel
fsico

Nivel de
almacenamiento

VISTA

TABLAS

FICHERO

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:

28

Debe tener un nombre nico en cada tabla

Cada atributo tiene asociado un espacio de valores o dominio

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

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).
!

30

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.

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

NIF

Nombre

Pedido

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/3/00

24680246

23456789

Sara Red Corell

4/3/00

23456789

13579135

Marta Planells Garcia

5/3/00

98765432

24680246

Eduardo Garcia Algarra

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.

Ejercicios

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


correspondiente.
Dom={agr_regadio, agr_secano,

Pertenece
Provincia

industria, turismo, }

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.
Calibr_campo

N.factura
Fecha_ini
Fecha_fin
Descripcin

Realiza
Personal

Trabajo
Solicita
Mantenimiento
Utiliza

Fecha_ult_rev

NIF

Aparato

Cliente

Numserie
Modelo

Se alquila
Alquila
N.factura
Fecha_ini
Fecha_fin
Descripcin

Alquiler

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

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.

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.

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.

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

SELECT

Utilizado para consultar registros de la base de datos que satisfagan un


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

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

FROM

Utilizada para especificar la tabla de la cual se van a seleccionar los


registros

WHERE

Utilizada para especificar las condiciones que deben reunir los registros que
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

ORDER BY

Utilizada para ordenar los registros seleccionados de acuerdo con un orden


especfico

Operadores Lgicos

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


Operador

Uso

AND

Es el "y" lgico. Evalua dos condiciones y devuelve verdadero slo si


ambas son ciertas.

OR

Es el "o" lgico. Evala dos condiciones y devuelve verdadero si alguna de


las dos es cierta.

NOT

Negacin lgica. Devuelve el valor contrario de la expresin.

46

Tema 5. Introduccin al lenguaje SQL

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

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

SUM

Utilizada para devolver la suma de todos los valores de un campo


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

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

C3
Abiside
C4

C2
Abis

C1

Lago Bernacle

C5

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)

DUENYO

NOT NULL VARCHAR2(40)

DIRECCION

NOT NULL VARCHAR2(30)

TELEFONO

NOT NULL VARCHAR2(9)

EMAIL

Clave primaria

VARCHAR2(30)

PRECIO

NOT NULL NUMBER(4,2)

FECHA_CONSTRUCCION

NOT NULL DATE

FECHA_REHABILITACION
MUNICIPIO
DESCRIPCION
48

DATE
NOT NULL CHAR(10)

Clave ajena->MUNICIPIO

VARCHAR2(100)

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)

NUM_PLAZAS

NOT NULL NUMBER(2)

BANYO

NOT NULL CHAR(1)

PRECIO_NOCHE

NOT NULL NUMBER(4,2)

PRECIO_DTO_3

NUMBER(4,2)

DESCRIPCION

VARCHAR2(100)

COD_CASA

Clave primaria

IN ('S','N')

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)

DESCRIPCION

Clave primaria

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
2.1

Consultas de seleccin
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-395 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


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

las

casas

cuya

fecha

de

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
Supermercado.

los

datos

de

los

tipo

de

servicio

diferentes

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
2.6.1

Agrupamiento de Registros
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
---------1001
1001
1001
2001
2001
2001
2002
2002
2002

DIRECCION
-----------------------------Monje 27
Monje 27
Monje 27
Fca Almadraba,Almendro Blanco
Fca Almadraba,Almendro Blanco
Fca Almadraba,Almendro Blanco
Mayor 18
Mayor 18
Mayor 18

NOMBRE
-----------------------------Abis
Abiside
Bernacle
Abis
Abiside
Bernacle
Abis
Abiside
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
---------1001
2001
2002

DIRECCION
-----------------------------Monje 27
Fca Almadraba,Almendro Blanco
Mayor 18

NOMBRE
-----------------------------Abis
Abiside
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.

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)


habitaciones cuyo precio por noche sea mayor de 90 euros

de

las

todas

las

SELECT DISTINCT cod_casa


FROM habitacion
WHERE precio_noche>90
ORDER BY cod_casa;

Obtener el cdigo de
habitaciones con bao

la

casa

de

la

habitacin

de

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


habitaciones valgan menos de 60 euros.

casas

SELECT duenyo
FROM casa_rural c
WHERE NOT EXISTS (SELECT cod_casa
FROM habitacion
WHERE precio_noche > 60 AND
cod_casa=c.codigo);

70

tales

que

todas

las

Tema 6. Lenguaje de Manipulacin de Datos

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
casa_rural aquellas casas en las que el dueo se llama Manuel

tabla

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;

Ejercicios

5.1
1.

Consultas bsicas
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
4.

Consultas con agrupamiento de registros


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

2003

3001

3002

2,66666667

74

Tema 6. Lenguaje de Manipulacin de Datos

5001

2,66666667

5002

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

2002

2003

3002

5001

2,66666667

5002

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

3002

5.3
8.

Consultas de unin de tablas


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

---------- ----------------------------------- ---------------------

5.4

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

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.

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

80

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

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

BINARY

1 byte

Para consultas sobre tabla adjunta de productos de bases


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)

CURRENCY

8 bytes

Un entero escalable entre 922.337.203.685.477,5808 y


922.337.203.685.477,5807.

DATETIME

8 bytes

Un valor de fecha u hora entre los aos 100 y 9999.

4 bytes

Un valor en punto flotante de precisin simple con un


38
-45
rango de -3.402823*10 a -1.401298*10 para valores
-45
38
negativos, 1.401298*10
a 3.402823*10 para valores
positivos, y 0.

DOUBLE

8 bytes

Un valor en punto flotante de doble precisin con un rango


308
-324
a -4.94065645841247*10
de -1.79769313486232*10
-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.

TEXT

1 byte por
De cero a 255 caracteres.
caracter

LONGTEXT

1 byte por
De cero a un mximo de 1.2 gigabytes.
carcter

SINGLE

2
2.1

Estructuras de las Tablas


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
campo2

Es el nombre del campo o de los campos que se van a crear en la nueva


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
ndice2

Es una clusula CONSTRAINT que define el tipo de indice a crear. Esta


clusula en opcional.

ndice
multicampos

Es una clusula CONSTRAINT que define el tipo de ndice multicampos a


crear. Un ndice multi campo es aquel que est indexado por el contenido
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

nicoN

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


nica.

refN

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


(hacen referencia a campos de otra tabla).

tabla externa

Es el nombre de la tabla que contiene el campo o los campos


referenciados en refN

campos
externos

Es el nombre del campo o de los campos de la tabla externa especificados


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

UNIQUE

Genera un ndice de clave nica. lo que implica que los registros de la


tabla no pueden contener el mismo valor en los campos indexados.

PRIMARY KEY

Genera un ndice primario el campo o los campos especificados. Todos


los campos de la clave principal deben ser nicos y no nulos, cada
tabla slo puede contener una nica clave principal.

FOREIGN KEY

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
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.

ASC|DESC

Indica el orden de los valores de lso campos ASC indica un orden


ascendente (valor predeterminado) y DESC un orden descendente.

UNIQUE

Indica que el indice no puede contener valores duplicados.

DISALLOW
NULL

Prohibe valores nulos en el ndice

IGNORE
NULL

Excluye del ndice los valores nulos incluidos en los campos que lo
componen.

PRIMARY

Asigna al ndice la categora de clave principal, en cada tabla slo puede


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).

ndice

Es el nombre del ndice del campo (cuando se crean campos) o el nombre


del ndice de la tabla que se desea eliminar.

ndice
multicampo

Es el nombre del ndice del campo multicampo (cuando se crean campos) o


el nombre del ndice de la tabla que se desea eliminar.

Operacin

Descripcin

ADD
COLUMN

Se utiliza para aadir un nuevo campo a la tabla, indicando el nombre, el


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
COLUMN

Se utliza para borrar un campo. Se especifica nicamente el nombre del


campo.

DROP

Se utiliza para eliminar un ndice. Se especifica nicamente el nombre del


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

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.

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).

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:
-

96

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

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.

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

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:

100

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.

Tema 9. Gestin de datos espaciales en Oracle 8i

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)

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)
));

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

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;

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;

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;

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

Lago Abis

Carretera 2 - Norte-Sur

3,4

Lago Abis

Carretera 3 - Este-Oeste

Lago Abis

Carretera 4 - Circular

Lago Abis

Carretera 5 - Este-(Norte-Sur)

1,92937814

Lago Bernacle

Carretera 1 - Noreste-Suroeste

Lago Bernacle

Carretera 2 - Norte-Sur

Lago Bernacle

Carretera 3 - Este-Oeste

Lago Bernacle

Carretera 4 - Circular

Lago Bernacle

Carretera 5 - Este-(Norte-Sur)

7.

,9

,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.

S-ar putea să vă placă și