Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apuntes BDC PDF
Apuntes BDC PDF
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:
Bibliografa
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
2 Definiciones
Insercin Recuperacin
Actualizacin BD Tratamiento
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.
11
Tema 1. Introduccin a las Bases de Datos
4 Modelos de Datos
12
Tema 1. Introduccin a las Bases de Datos
datos (o catlogo); es decir, el diccionario de datos contiene metadatos, datos
acerca de los datos.
! LMD es el lenguaje de manipulacin de datos; permite realizar la recuperacin y
actualizacin (insercin, actualizacin y borrado) de los datos almacenados en la
base de datos. La primera de estas operaciones es lo que se llama normalmente
query y a la parte del LMD que permite esta operacin lenguaje de query; sin
embargo suelen usarse indistintamente los trmino lenguaje de query y LMD.
Puede ser procedimental, si los usuarios tienen que especificar las operaciones
que desean hacer y la manera de hacerlas (BD jerrquicas y en red) o no
procedimental, si el usuario slo el indica el tipo de operacin que desea hacer
pero no cmo hacerla. Los comandos para hacer estas operaciones pueden
usarse interactivamente o embebidos en un lenguaje de programacin
convencional (lenguaje husped).
Veremos el LDD y LMD que proporciona el lenguaje SQL en la unidad temtica 2.
! Interacta con el gestor de ficheros del S.O para almacenar los datos de forma
segura y eficiente. Las diferentes sentencias LMD son traducidas a comandos de bajo
nivel para gestionar ficheros; as el SGBD se encarga realmente del almacenamiento,
la recuperacin y actualizacin de la BD.
! Implanta el control de seguridad e integridad. El ABD puede haber establecido
determinadas restricciones para algunos datos (rangos, controles de seguridad, etc) y
el SGBD verifica si, en algn caso, los accesos a la BD violan estas restricciones y
realiza las acciones apropiadas.
! Lleva a cabo copias de seguridad y recuperacin de datos. Cualquier sistema est
sujeto a fallos o errores; si se pierde la informacin de la BD por algn motivo, es
responsabilidad del SGBD detectar estos fallos y arrancar los procedimientos de
recuperacin.
! Realiza el control de concurrencia. En un entorno de multiprogramacin, varios
usuarios pueden estar accediendo a los datos concurrentemente; el SGBD controla las
acciones de los distintos usuarios para preservar la consistencia de los datos.
Algunos SGBD, diseados para ejecutarse en ordenadores personales pequeos, no
cuentan con parte de las funciones mencionadas: por ejemplo, son monousuario, con lo que
no tienen que realizar el control de concurrencia, o dejan al usuario las tareas de respaldo,
recuperacin y seguridad. Aunque esto puede ser aceptable para las bases de datos
personales, no es de ninguna manera adecuado para cumplir con los requerimientos de
una empresa de tamao mediano o grande.
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) .
14
Tema 1. Introduccin a las Bases de Datos
consultas y aplicaciones, lo que supone una autntica revolucin en el mundo de las
tecnologas SIG. Estos sistemas cambian la orientacin de los SIG desde SIG cntricos a
Sistemas Gestores de la Base de Datos cntricos, en los cuales, los datos espaciales son
simplemente otro tipo de datos dentro del entorno del Sistema Gestor de la Base de Datos.
Ejemplos de SGBD que actualmente permiten el anlisis espacial integrado en la misma BD
son DB2 (IBM), Informix, Oracle 8i, Sybase, etc.
El objetivo es una completa integracin de los datos espaciales dentro de la BD. Para llegar
a este tipo de estructuras es necesario un sistema gestor de la base de datos as como
extensiones S.Q.L estandar que soporten la definicin, almacenamiento, gestin y
actualizacin de datos que poseen tanto atributos espaciales como atributos no espaciales.
Un SGBD debe tener la capacidad de entender los datos y operadores espaciales y de
acceder eficientemente a la base de datos espacial. Para ello necesitamos, un soporte para
un tipo de datos abstractos, as como funciones e ndices definidos por el usuario. De esta
forma se consigue que los usuarios puedan ejecutar consultas integradas sobre cualquier
tipo de datos (tanto espaciales como datos de negocio) usando el lenguaje S.Q.L.
El tratamiento de datos espaciales requiere una extensin de las funcionalidades del SGBD.
Entre ellas podemos destacar la extensin de los mtodos de almacenamiento de datos y
de bsqueda de los datos implicados en una determinada consulta, del tipo de operadores
utilizables en una consulta (operadores espaciales y operadores de anlisis avanzado que
permiten la creacin de nuevas geometras).
Ante esta revolucin, como es lgico, ha surgido la necesidad del establecimiento de una
normativa, para que los usuarios puedan acceder y procesar los datos desde una gran
variedad de fuentes. Para ello, se crea el OGC (Open Gis Consortium) que especifica el
camino que deben seguir las BD espaciales para la consecucin de unos objetivos
comunes con el fin de obtener la mxima eficacia en la gestin de la informacin.
15
Tema 2. El modelo Entidad-Relacin
1 Introduccin
El modelo Entidad-Relacin fue propuesto por Chen a mediados de los aos setenta como
medio de representacin conceptual de los problemas y para representar la visin de un
sistema de forma global. Fsicamente adopta la forma de un grfico escrito en papel al que
se denomina diagrama Entidad-Relacin. Sus elementos fundamentales son las
entidades y las relaciones.
2 Entidades
Entidad: Una entidad es una cosa u objeto distinguible de todos los dems, y tiene un
conjunto de propiedades que identifican la identidad. Ejemplo: PARCELA
Atributo: Los atributos describen propiedades que posee cada entidad, y cada atributo
tiene un conjunto de valores permitidos, llamados dominio o conjunto de valores.
Ejemplo: tipo_cultivo, cuyo dominio puede ser (ctricos, via, olivo, ...).
Los atributos se distinguen en:
- Simples y compuestos: los simples no estn subdivididos en subpartes mientras que
los compuestos se pueden dividir en otros atributos. Ejemplo: el atributo direccin se
puede subdividir en (calle, nmero, piso, puerta,...)
- Univalorados y multivalorados: los univalorados tienen un solo valor para una entidad
concreta y los multivalorados tienen un conjunto de valores para una entidad
especfica. Ejemplo: al atributo telfono se le pueden asignar varios valores
correspondiendo al telfono particular, al del trabajo, al mvil, ...
- Nulos: se usa cuando una entidad no tiene un valor para un atributo, o el valor es
desconocido.
- Derivado: el valor del atributo se puede derivar de los valores de otros atributos.
Ejemplo: el atributo edad se puede derivar del atributo fecha_nacimiento.
3 Relaciones
Relacin: Una relacin es una asociacin entre diferentes entidades. Ejemplo: las
entidades parcela y propietario se asocian a travs de la relacin pertenece.
Una relacin puede tener tambin atributos descriptivos. Ejemplo: en la relacin
pertenece puede aparecer como atributo la fecha de adquisicin.
Tema 2. El modelo Entidad-Relacin
El grado de la relacin es el nmero de entidades que participan en una relacin;
normalmente son relaciones binarias aunque tambin podemos encontrar relaciones
ternarias.
Depende de la estructura del desarrollo del mundo real que se est modelando la decisin
de qu cosas consideramos como entidades y qu cosas como atributos, y tampoco hay
una norma exacta para decidir si es mejor expresar un objeto mediante una entidad o
mediante una relacin. Una posible gua es designar una relacin para describir una accin
que ocurre entre entidades.
Cada entidad interviene en una relacin con una determinada cardinalidad. Es decir, la
cardinalidad es el nmero de instancias o elementos de una entidad que pueden asociarse
a un elemento de la otra entidad relacionada. La cardinalidad se representa mediante una
pareja de datos de la forma (cardinalidad mnima, cardinalidad mxima). Son posibles las
siguientes cardinalidades: (0,1), (1,1), (0,n), (1,n) y (n,m).
Ejemplos:
! Las entidades nacion y ciudad participan en la relacin es_capital. La entidad nacion
tiene una cardinalidad (1,1) al igual que la entidad ciudad.
! Las entidades cliente y pedidos participan en la relacin realiza_pedido. La entidad
cliente tiene una cardinalidad (1,n) mientras que la entidad pedidos tiene una
cardinalidad (1,1).
! Las entidades persona y vivienda participan en la relacin vive. Ambas entidades
tienen una cardinalidad (0,n).
El tipo de relacin se define tomando los mximos de las cardinalidades que intervienen
en la relacin. Hay tres tipos posibles:
- Una a una (1:1). En este tipo de relacin, una vez fijado un elemento de una entidad se
conoce el elemento de la otra entidad con el que est relacionado. Por ejemplo, nacin
y ciudad a travs de la relacin es_capital.
- Una a muchas (1:N). Por ejemplo, cliente y pedidos en la relacin realiza_pedido.
- Muchas a muchas (N:N). Por ejemplo, personas y viviendas en la relacin vive.
4 Claves
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}.
Ejemplos:
1. Relacin es_capital
Nacion Ciudad
Es_capital
2. Relacin realiza_pedido
Realiza_pedido
Cliente Pedido
19
Tema 2. El modelo Entidad-Relacin
3. Relacin vive
Persona Vivienda
Vive
DNI Nombre Direccion
6 Caractersticas avanzadas
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
20
Tema 2. El modelo Entidad-Relacin
- Relacin reflexiva: relaciona una entidad consigo misma. Ejemplo: empleados que
pueden ser jefes de otros empleados.
Es_jefe
Empleado
- Dos relaciones entre las mismas entidades. Muy til en el caso de necesitar
almacenar informacin histrica completa. Ejemplo: proyectos en los que trabaja
actualmente un empleado y proyectos en los que ha trabajado anteriormente.
Proyectos
Actual Historico
Empleado
21
Tema 2. El modelo Entidad-Relacin
Libro Autor
paginas
ao
ISBN
Publica
Editorial
Persona
(0,1) (0,1)
(1,1) (1,1)
Hombre Mujer
22
Tema 2. El modelo Entidad-Relacin
Pero en la universidad tambin hay por ejemplo, tcnicos o PAS, por lo que la
relacin es parcial.
Universitario
(0,1) (0,1)
(1,1) (1,1)
Estudiante Profesor
7 Ejercicios
Dom={agr_regadio, agr_secano,
Pertenece industria, turismo, }
Provincia Poblacin N
Pples_ingresos
ID
L/m2
Nombre
Meses
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?
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
La relacin es el elemento bsico del modelo relacional y se representa por una tabla.
Informalmente, los trminos y sus equivalentes son:
Relacin Tabla
Tupla Fila
Atributo Columna
Nmero de tuplas Cardinalidad
Nmero de atributos Grado
Dominio Coleccin de valores, de los cuales uno o ms atributos
obtienen sus valores reales
Clave primaria Identificador nico para la tabla, es decir, una columna o
combinacin de columnas con la propiedad de que nunca
existen dos filas de la tabla con el mismo valor en esa
columna o combinacin de columnas
Es importante sealar que la tabla es plana en el sentido de que el cruce entre una fila y
una columna slo puede dar un valor, es decir, no se admiten atributos multivaluados. A
cada una de las tablas se le asigna un nombre exclusivo.
Tema 3. El modelo Relacional
Desde el punto de vista de los niveles de una base de datos, la estructura de una base de
datos relacional es la siguiente:
- Nivel lgico.
- Est compuesto por las distintas vistas que tienen los usuarios de la BD total
- Lenguajes: DML
- Nivel fsico.
- Est compuesto por las tablas que componen la BD
- Lenguajes: DDL
- Nivel de almacenamiento.
- Est compuesto por los ficheros donde se almacenan las tablas del nivel anterior
- Lenguajes: comandos del sistema operativo, DSDL (lenguaje de definicin del
almacenamiento de datos).
VISTA
Nivel
lgico
Nivel
fsico TABLAS
Nivel de
almace-
namiento
FICHERO
3 Tablas
! Representan tanto las entidades como las relaciones del modelo E-R.
! Tienen la forma de una matriz rectangular bidimensional (filas y columnas).
! Cada elemento o casilla de la matriz es un tem de datos elemental. Es el mnimo
elemento lgico de acceso y modificacin.
! Una columna representa un atributo de la entidad:
! Debe tener un nombre nico en cada tabla
! Cada atributo tiene asociado un espacio de valores o dominio
28
Tema 3. El modelo Relacional
! Un valor nulo indica valor desconocido o no aplicable
! Su captura puede ser opcional (puede tomar valores nulos) u obligatoria
! Su nmero es fijo a priori
! Una fila o tupla representa un objeto del mundo real:
! Nunca pueden estar duplicadas
! Es la mnima unidad de borrado
! Representa un registro lgico
! Su nmero vara segn se realicen operaciones de insercin y borrado en la tabla
! Pueden estar dispuestas en cualquier orden
3.1 Claves
29
Tema 3. El modelo Relacional
Libro Ejemplar
ID
! Representacin tabular de las relaciones: se representa mediante una tabla con una
columna por cada atributo formado por la unin de las claves primarias de las
entidades que relaciona ms los atributos descriptivos de la relacin (si los tiene).
! Redundancia de tablas: en general, la tabla para la relacin que une una entidad
dbil con su correspondiente entidad fuerte es redundante y no necesita ser
representada en una representacin tabular de un diagrama E-R.
30
Tema 3. El modelo Relacional
! Combinacin de tablas: si una entidad es dependiente de otra, se pueden
combinar para formar una nica tabla consistente en la unin de las columnas de
ambas tablas.
! Atributos multivalorados: para un atributo multivalorado se crea una tabla con una
columna que corresponde a la clave primaria de la entidad o de relaciones al que
pertenece el atributo multivalorado.
! Representacin tabular de la especializacin: hay dos formas; la primera es crear
una tabla para la entidad de nivel ms alto y para cada entidad de nivel ms bajo, crear
una tabla que incluya una columna para cada uno de los atributos de esa entidad ms
una columna por cada atributo de la clave primaria de la entidad de nivel ms alto; la
segunda, para especializaciones exclusivas y totales, se crea para cada entidad de
nivel ms bajo, una tabla que incluya una columna para cada atributo de la entidad ms
una columna por cada atributo de la entidad de nivel ms alto.
4.1 Ejemplos
Realiza_pedido
Cliente Pedido
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.
Nacion Ciudad
Es_capital
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
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
33
Tema 3. El modelo Relacional
definido con el mismo dominio, aunque no obligatoriamente con igual nombre, y que es
parte de su clave primaria. Entonces, T1.a debe ser siempre igual a algn valor ya
contenido en el atributo referenciado en la tabla T2, o bien tomar un valor nulo.
Ejemplo: en la relacin entre clientes y pedidos que realiza cada cliente, podemos
encontrar las siguientes tablas:
PEDIDO CLIENTES
Numero Fecha NIF_cliente NIF Nombre
1 1/3/00 24680246 23456789 Sara Red Corell
2 4/3/00 23456789 13579135 Marta Planells Garcia
3 5/3/00 98765432 24680246 Eduardo Garcia Algarra
4 5/3/00 01234567 98765432 Luis Tarin Paula
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.
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.
5 Ejercicios
Dado el siguiente diagrama entidad-relacin, obtener el modelo relacional
correspondiente.
Dom={agr_regadio, agr_secano,
Pertenece industria, turismo, }
Provincia Poblacin N
Pples_ingresos
ID
L/m2
Nombre
Meses
35
Tema 3. El modelo Relacional
DNI
Nombre
Num.S.S. N.factura
Calibr_campo Fecha_ini
Fecha_fin
Descripcin
Realiza
Personal Trabajo
Solicita
Mantenimiento
NIF
Utiliza
Fecha_ult_rev
Aparato Cliente
Numserie
Modelo
Se alquila
Alquila
N.factura
Fecha_ini
Fecha_fin
Alquiler
Descripcin
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.
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
En los casos anteriores, se deja en manos del usuario manejar la integridad de la base de
datos.
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.
! 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.
! 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.
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.
39
Tema 4. Teora de la Normalizacin
PRESTAMO1( num_socio, nombre_socio, cod_libro, fec_prest )
LIBRO( cod_libro, editorial, pas )
! 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.
! 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 )
4 Ejercicios
Dada la relacin R(estudiante, nro_matricula, curso, centro, profesor, texto) con las
siguientes restricciones:
a) Un estudiante puede estar matriculado de varios cursos
b) Un estudiante tiene un nmero de matricula distinto para cada curso en el que est
matriculado
c) Un curso se imparte en un solo centro
d) El nmero de matricula identifica al centro en el que se imparte el curso y al curso
mismo
e) Un curso es impartido por un solo profesor, pero un profesor puede impartir varios
cursos
f) Un curso de apoya en distintos textos y un mismo texto puede servir de soporte a
varios cursos
Reducir el esquema anterior a un conjunto equivalente de relaciones en FNBC
41
Unidad temtica 2:
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
2 Comandos
3 Clusulas
Las clusulas son condiciones de modificacin utilizadas en los comandos para definir los
datos que se desea seleccionar o manipular. Un resumen de las clausulas disponibles en
SQL son:
Clusula Descripcin
Utilizada para especificar la tabla de la cual se van a seleccionar los
FROM
registros
Utilizada para especificar las condiciones que deben reunir los registros que
WHERE
se van a seleccionar
GROUP BY Utilizada para separar los registros seleccionados en grupos especficos
HAVING Utilizada para expresar la condicin que debe satisfacer cada grupo
Utilizada para ordenar los registros seleccionados de acuerdo con un orden
ORDER BY
especfico
4 Operadores Lgicos
46
Tema 5. Introduccin al lenguaje SQL
5 Operadores de Comparacin
6 Funciones de Agregado
Las funciones de agregado se usan dentro de una clusula SELECT donde se han
agrupado los registros para devolver un nico valor por cada grupo de registros. Las ms
usuales son:
Funcin Descripcin
AVG Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el nmero de registros de la seleccin
Utilizada para devolver la suma de todos los valores de un campo
SUM
determinado
MAX Utilizada para devolver el valor ms alto de un campo especificado
MIN Utilizada para devolver el valor ms bajo de un campo especificado
7 Esquema a utilizar
En este apartado daremos la definicin de las tablas a utilizar, tanto en los ejemplos de los
prximos temas como en las prcticas de laboratorio. Este esquema est compuesto por 7
tablas que representan una zona rural con dos lagos y tres municipios, en los que se
encuentran diversas casas rurales y servicios como hospital, supermercados, etc., todo ello
47
Tema 5. Introduccin al lenguaje SQL
comunicado a travs de distintas carreteras. A continuacin se presenta un croquis de la
regin a la que se refieren los datos de la base de datos:
Lago Abis C2
Abis
C1
C3
Bernacle
Tabla CASA_RURAL
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
CODIGO NOT NULL CHAR(10) Clave primaria
DUENYO NOT NULL VARCHAR2(40)
DIRECCION NOT NULL VARCHAR2(30)
TELEFONO NOT NULL VARCHAR2(9)
EMAIL VARCHAR2(30)
PRECIO NOT NULL NUMBER(4,2)
FECHA_CONSTRUCCION NOT NULL DATE
FECHA_REHABILITACION DATE
MUNICIPIO NOT NULL CHAR(10) Clave ajena->MUNICIPIO
DESCRIPCION VARCHAR2(100)
48
Tema 5. Introduccin al lenguaje SQL
LOCALIZACION MDSYS.GEOMETRY
Tabla HABITACION
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
CODIGO NOT NULL CHAR(2) Clave primaria
NUM_PLAZAS NOT NULL NUMBER(2)
BANYO NOT NULL CHAR(1) IN ('S','N')
PRECIO_NOCHE NOT NULL NUMBER(4,2)
PRECIO_DTO_3 NUMBER(4,2)
DESCRIPCION VARCHAR2(100)
COD_CASA NOT NULL CHAR(10) Clave primaria
Clave ajena->CASA_RURAL
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
Tabla TIPO_SERVICIO
Nombre de Columna Nulo? Tipo
------------------------- -------- ----
TIPO NOT NULL CHAR(15) Clave primaria
DESCRIPCION VARCHAR2(30)
Esta tabla recoge los servicios que puedan resultar necesarios. Por ejemplo, supermercado,
centro de salud, hospital, farmacia, etc. A cada uno de ellos, se le asigna un cdigo.
Tabla SERVICIO
Nombre de Columna Nulo? Tipo
-------------------- -------- ----
CODIGO NOT NULL NUMBER(3)
TIPO CHAR(15) Clave ajena->TIPO_SERVICIO
DESCRIPCION VARCHAR2(50)
LOCALIZACION MDSYS.GEOMETRY
Tabla CARRETERA
Nombre de Columna Nulo? Tipo
------------------------------ -------- ----
CODIGO NOT NULL CHAR(10)
DESCRIPCION VARCHAR2(50)
GEOMETRIA MDSYS.GEOMETRY
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
51
Tema 6: Lenguaje de Manipulacin de Datos
1 Introduccin
2 Consultas de seleccin
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
56
Tema 6. Lenguaje de Manipulacin de Datos
FROM casa_rural
WHERE fecha_construccion > 01/10/94;
Obtener el cdigo de las casas cuyo precio oscila entre 200 y 300
euros
SELECT codigo
FROM casa_rural
WHERE precio > 200 AND precio < 300;
57
Tema 6. Lenguaje de Manipulacin de Datos
Obtener el cdigo de las casas cuyo precio oscila entre 200 y 300
euros o su fecha de construccin es posterior al ao 1994.
SELECT codigo
FROM casa_rural
WHERE (precio > 200 AND precio < 300) OR
fecha_construccion >= 01/01/95;
Obtener todos los datos de 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);
Obtener las casas cuyo precio oscila entre 200 y 300 euros
SELECT codigo
FROM casa_rural
WHERE precio BETWEEN 200 AND 300;
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;
59
Tema 6. Lenguaje de Manipulacin de Datos
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.1 GROUP BY
Combina los registros con valores idnticos en la lista de campos especificados, en un
nico registro. Para cada registro se crea un valor sumario si se incluye una funcin SQL
agregada, como por ejemplo Sum o Count, en la instruccin SELECT. Su sintaxis es:
SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo
GROUP BY es opcional. Los valores de resumen se omiten si no existe una funcin SQL
agregada en la instruccin SELECT. Los valores Null en los campos GROUP BY se
agrupan y no se omiten. No obstante, los valores Null no se evalan en ninguna de las
funciones SQL agregadas.
Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y la clusula
HAVING para filtrar los registros una vez agrupados.
Un campo de la lista de campos GROUP BY puede referirse a cualquier campo de las
tablas que aparecen en la clusula FROM, incluso si el campo no esta incluido en la
instruccin SELECT, siempre y cuando la instruccin SELECT incluya al menos una funcin
SQL agregada.
60
Tema 6. Lenguaje de Manipulacin de Datos
Todos los campos de la lista de campos de SELECT deben incluirse en la clusula GROUP
BY o como argumentos de una funcin SQL agregada. Por ejemplo, la siguiente consulta
obtiene para cada casa, el nmero total de plazas de todas sus habitaciones:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa;
Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro
agrupado por la clusula GROUP BY que satisfaga las condiciones de la clusula HAVING.
HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los
registros se han agrupado utilizando GROUP BY, HAVING determina cules de ellos se van
a mostrar. Por ejemplo, la siguiente consulta obtiene los mismos datos que la consulta
anterior, pero slo de aquellas casas en las que haya al menos 6 plazas y el mximo a
pagar por noche de una habitacin sean 90 euros:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa
HAVING SUM(num_plazas) > 6 AND MAX(precio_noche)<90;
2.6.2 AVG
Calcula la media aritmtica de un conjunto de valores contenidos en un campo especificado
de una consulta. Su sintaxis es la siguiente
Avg(expr)
donde expr representa el campo que contiene los datos numricos para los que se desea
calcular la media o una expresin que realiza un clculo utilizando los datos de dicho
campo. La media calculada por Avg es la media aritmtica (la suma de los valores dividido
por el nmero de valores). La funcin Avg no incluye ningn campo Null en el clculo. Por
ejemplo, la siguiente consulta calcula el precio medio de las casas rurales:
SELECT AVG(precio) AS Promedio
FROM casa_rural;
2.6.3 COUNT
Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente
Count(expr)
donde expr contiene el nombre del campo que desea contar. Puede contar cualquier tipo
de datos incluso texto. Aunque expr puede realizar un clculo sobre un campo, Count
simplemente cuenta el nmero de registros sin tener en cuenta qu valores se almacenan
en los registros. La funcin Count no cuenta los registros que tienen campos null a menos
que expr sea el carcter comodn asterisco (*). Si utiliza un asterisco, Count calcula el
nmero total de registros, incluyendo aquellos que contienen campos null.
61
Tema 6. Lenguaje de Manipulacin de Datos
Por ejemplo, la siguiente consulta obtiene el nmero total de casas rurales existentes en la
base de datos:
SELECT Count(*) AS Total
FROM casa_rural;
2.6.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;
63
Tema 6. Lenguaje de Manipulacin de Datos
WHERE fecha_construccion < 01/01/94;
Normalmente los datos que se desean extraer a travs de una consulta no estn en una
nica tabla. En estos casos, hemos de incluir en la clusula FROM todas las tablas de las
que deseamos extraer algn dato. Por ejemplo, si quisiramos obtener para cada casa su
cdigo, su direccin y el municipio donde se encuentran, deberamos escribir:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio;
Se debe indicar que el cdigo es de la casa rural porque existe otro campo cdigo en la
tabla municipio y podra resultar ambiguo. La ejecucin de esta consulta nos devuelve la
siguiente informacin:
CODIGO DIRECCION NOMBRE
---------- ------------------------------ ------------------------------
1001 Monje 27 Abis
1001 Monje 27 Abiside
1001 Monje 27 Bernacle
2001 Fca Almadraba,Almendro Blanco Abis
2001 Fca Almadraba,Almendro Blanco Abiside
2001 Fca Almadraba,Almendro Blanco Bernacle
2002 Mayor 18 Abis
2002 Mayor 18 Abiside
2002 Mayor 18 Bernacle
...
Se observa que cada casa aparece tres veces, una vez con cada municipio. Esto es debido
a que cuando se ponen dos tablas en la clusula FROM se une cada fila de la primera tabla
con cada fila de la segunda tabla. Para obtener la consulta correcta, se debe indicar en la
clusula WHERE la relacin existente entre ambas tablas a travs de sus claves ajenas. En
este caso, la tabla casa_rural tiene una clave ajena sobre la tabla municipio. Por tanto, la
consulta correcta sera:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio
WHERE casa_rural.municipio = municipio.codigo;
As, obtendramos los siguientes datos:
CODIGO DIRECCION NOMBRE
---------- ------------------------------ ------------------------------
1001 Monje 27 Abis
2001 Fca Almadraba,Almendro Blanco Abiside
2002 Mayor 18 Abiside
...
Cuando se utilizan varias tablas, es frecuente que haya nombres de campos repetidos en
ellas. Hemos visto que la solucin pasa por escribir delante del campo en cuestin el
nombre de la tabla a la que pertenece, lo que en ocasiones puede resultar tedioso,
64
Tema 6. Lenguaje de Manipulacin de Datos
sobretodo si los nombres de las tablas son largos. Por esta razn, se suelen utilizar alias
para reducir el nombre de las tablas. Por ejemplo:
SELECT c.codigo, direccion, nombre
FROM casa_rural c, municipio m
WHERE c.municipio = m.codigo;
Se utiliza la operacin UNION para crear una consulta de unin, combinando los resultados
de dos o ms consultas o tablas independientes. Su sintaxis es:
[TABLE] consulta1 UNION [ALL] [TABLE] consulta2
[UNION [ALL] [TABLE] consultan [ ... ]]
donde consulta1, consulta2, consultan son instrucciones SELECT, el nombre de una
consulta almacenada o el nombre de una tabla almacenada precedido por la palabra clave
TABLE.
Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT, en
cualquier orden, en una nica operacin UNION. El ejemplo siguiente combina una tabla
existente llamada Otras_casas_lujo y una instruccin SELECT:
TABLE Otras_casas_lujo
UNION ALL
SELECT * FROM casa_rural
WHERE precio > 100;
Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la
operacin UNION, no obstante puede incluir el predicado ALL para asegurar que se
devuelven todos los registros. Esto hace que la consulta se ejecute ms rpidamente.
Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos, no
obstante los campos no tienen porqu tener el mismo tamao o el mismo tipo de datos.
Se puede utilizar una clusula GROUP BY y/o HAVING en cada argumento consulta para
agrupar los datos devueltos. Puede utilizar una clusula ORDER BY al final del ltimo
argumento consulta para visualizar los datos devueltos en un orden especfico.
3 SubConsultas
Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.
Puede utilizar tres formas de sintaxis para crear una subconsulta:
- comparacin [ANY | ALL | SOME] (instruccin sql)
65
Tema 6. Lenguaje de Manipulacin de Datos
- expresin [NOT] IN (instruccin sql)
- [NOT] EXISTS (instruccin sql)
donde:
! comparacin: es una expresin y un operador de comparacin que compara la
expresin con el resultado de la subconsulta.
! expresin: es una expresin por la que se busca el conjunto resultante de la
subconsulta.
! instruccin sql: es una instruccin SELECT, que sigue el mismo formato y reglas que
cualquier otra instruccin SELECT. Debe ir entre parntesis.
Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una
instruccin SELECT o en una clusula WHERE o HAVING. En una subconsulta, se utiliza
una instruccin SELECT para proporcionar un conjunto de uno o ms valores especificados
para evaluar en la expresin de la clusula WHERE o HAVING.
3.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');
3.4 EXISTS
El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones
de verdad/falso para determinar si la subconsulta devuelve algn registro.
Se puede utilizar tambin el alias del nombre de la tabla en una subconsulta para referirse a
tablas listadas en la clusula FROM fuera de la subconsulta. El ejemplo siguiente
corresponde a la misma consulta anterior:
SELECT duenyo
FROM casa_rural c
WHERE EXISTS (SELECT cod_casa
FROM habitacion
WHERE banyo='S' AND cod_casa=c.codigo);
3.5 Ejemplos
Obtener el cdigo de la casa (ordenado y sin repetir) de las
habitaciones cuyo precio por noche sea mayor de 90 euros
SELECT DISTINCT cod_casa
FROM habitacion
WHERE precio_noche>90
ORDER BY cod_casa;
67
Tema 6. Lenguaje de Manipulacin de Datos
FROM casa_rural
WHERE fecha_construccion<'01/01/90';
68
Tema 6. Lenguaje de Manipulacin de Datos
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 nombre del dueo de las casas tales que todas las
habitaciones valgan menos de 60 euros.
SELECT duenyo
FROM casa_rural c
WHERE NOT EXISTS (SELECT cod_casa
FROM habitacion
WHERE precio_noche > 60 AND
cod_casa=c.codigo);
70
Tema 6. Lenguaje de Manipulacin de Datos
4 Consultas de Accin
4.1 DELETE
Crea una consulta de eliminacin que elimina los registros de una o ms de las tablas
listadas en la clusula FROM que satisfagan la clusula WHERE. Su sintaxis es:
DELETE FROM Tabla WHERE criterio
Ejemplo: Con la siguiente instruccin, eliminamos de la tabla
casa_rural aquellas casas en las que el dueo se llama Manuel
delete from casa_rural
where duenyo like 'Manuel%';
DELETE es especialmente til cuando se desea eliminar varios registros. Si desea eliminar
todos los registros de una tabla, eliminar la propia tabla es ms eficiente que ejecutar una
consulta de borrado.
Una consulta de borrado elimina los registros completos, no nicamente los datos en
campos especficos. Si desea eliminar valores en un campo especificado, crear una
consulta de actualizacin que cambie los valores a Null.
Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede
deshacer la operacin. Para saber qu registros se eliminarn, primero se pueden examinar
los resultados de una consulta de seleccin que utilice el mismo criterio y despus ejecutar
la consulta de borrado.
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.3 UPDATE
Crea una consulta de actualizacin que cambia los valores de los campos de una tabla
especificada basndose en un criterio especfico. Su sintaxis es:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN
WHERE Criterio;
UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o
cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. El
ejemplo siguiente incrementa los valores del campo Precio_Noche en un 10 por ciento y los
valores del campo Precio_Dto_3 en un 3 por ciento para las habitaciones que tienen bao:
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03
WHERE banyo = 'S';
72
Tema 6. Lenguaje de Manipulacin de Datos
UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que
examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y
despus ejecutar la consulta de actualizacin.
Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la
tabla sealada sern actualizados.
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03;
5 Ejercicios
1. Obtener el cdigo de la casa (ordenado y sin repetir) de las habitaciones cuyo precio
por noche sea mayor de 15000
COD_CASA
----------
1001
2001
2002
3001
3002
5003
73
Tema 6. Lenguaje de Manipulacin de Datos
74
Tema 6. Lenguaje de Manipulacin de Datos
5001 2,66666667
5002 2
5003 2,5
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
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
2 SQL Worksheet
Se trata de una herramienta que nos permite ejecutar sentencias SQL de forma interactiva.
Mantiene un historial de los comandos introducidos, de forma que podemos utilizar esta
aplicacin para editar y ejecutar de nuevo un comando anterior sin tener que teclearlo otra
vez. Es posible tener varias SQL Worksheet abiertas al mismo tiempo, cada una es
independiente de las otras.
SQL Worksheet se encuentra en Inicio -> Oracle Enterprise Manager -> SQL Worksheet.
Inmediatamente aparece un cuadro de dilogo para conectarse a la base de datos. Los
datos a introducir son: username (topo2, por ejemplo), password (topo2) y service (topo).
Una vez se valida con el servidor, entramos en la aplicacin, que consta de los siguientes
elementos (ver figura):
Panel de entrada: en la parte inferior de la pantalla, nos permite introducir los
comandos SQL a ejecutar.
Panel de salida: situado en la parte superior de la pantalla, muestra el resultado de la
ejecucin de dicha sentencia.
Barra de divisin: divide ambos paneles, si se pincha y arrastra sobre ella se puede
modificar el tamao de stos.
Barra de herramientas del panel de entrada
Nueva worksheet: borra el panel de entrada para introducir una nueva sentencia SQL,
si no haba sido guardado, indica la posibilidad de hacerlo.
Manual del SQLWorksheet
Abrir worksheet: muestra un cuadro de dilogo para abrir una sentencia SQL
almacenada previamente.
Guardar worksheet: muestra un cuadro de dilogo para guardar el contenido del panel
de entrada.
Ejecutar: ejecuta el comando SQL presente en el panel de entrada.
Historial de comandos: muestra una ventana con las sentencias ejecutadas
ltimamente y permite recuperar una (botn Get) para ser editada.
Comando anterior y Siguiente comando: permiten la navegacin por el historial de
comandos.
Barra de herramientas del panel de salida: slo tiene un botn, que nos permite
guardar la informacin del panel de salida en un fichero.
Mens desplegables: aparecen en la parte superior de la pantalla. Sus principales
funciones se resumen a continuacin.
80
Manual del SQLWorksheet
New, Open, Save: Realizan las mismas funciones que los botones de la barra del panel
de entrada.
Save As: Guarda el contenido del panel de entrada en un fichero distinto del que est
abierto actualmente.
Print: Imprime el contenido del panel de entrada.
Save Output As: Guarda el contenido del panel de salida en un fichero.
Print Output: Imprime el contenido del panel de salida.
Print Setup: Muestra el cuadro de dilogo de configuracin de la impresin.
Exit: Sale de SQL Worksheet.
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)
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
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
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
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.
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));
Donde:
90
Tema 7. Lenguaje de definicin de datos
Parte Descripcin
ndice Es el nombre del ndice a crear.
tabla Es el nombre de una tabla existentes en la que se crear el ndice.
campo Es el nombre del campo o lista de campos que consituyen el ndice.
Indica el orden de los valores de lso campos ASC indica un orden
ASC|DESC
ascendente (valor predeterminado) y DESC un orden descendente.
UNIQUE Indica que el indice no puede contener valores duplicados.
DISALLOW
Prohibe valores nulos en el ndice
NULL
IGNORE Excluye del ndice los valores nulos incluidos en los campos que lo
NULL componen.
Asigna al ndice la categora de clave principal, en cada tabla slo puede
PRIMARY existir un nico indice que sea "Clave Principal". Si un ndice es clave
principal implica que que no puede contener valores nulos ni duplicados.
Ejemplos:
Crea un ndice llamado MiIndice en la tabla Casa_rural con los
campos Duenyo y Telefono.
CREATE INDEX MiIndice ON Casa_rural (Duenyo, Telefono);
Modifica el diseo de una tabla ya existente, se pueden modificar los campos o los ndices
existentes. Su sintaxis es:
ALTER TABLE tabla
{ADD {COLUMN tipo de campo[(tamao)]
[CONSTRAINT ndice] CONSTRAINT ndice multicampo} |
DROP {COLUMN campo I CONSTRAINT nombre del ndice} }
Donde:
91
Tema 7. Lenguaje de definicin de datos
Parte Descripcin
Tabla Es el nombre de la tabla que se desea modificar.
Campo Es el nombre del campo que se va a aadir o eliminar.
Tipo Es el tipo de campo que se va a aadir.
Tamao El el tamao del campo que se va a aadir (slo para campos de texto).
Es el nombre del ndice del campo (cuando se crean campos) o el nombre
ndice
del ndice de la tabla que se desea eliminar.
ndice Es el nombre del ndice del campo multicampo (cuando se crean campos) o
multicampo el nombre del ndice de la tabla que se desea eliminar.
Operacin Descripcin
ADD Se utiliza para aadir un nuevo campo a la tabla, indicando el nombre, el
COLUMN tipo de campo y opcionalmente el tamao (para campos de tipo texto).
ADD Se utliza para agregar un ndice de multicampos o de un nico campo.
DROP Se utliza para borrar un campo. Se especifica nicamente el nombre del
COLUMN campo.
Se utiliza para eliminar un ndice. Se especifica nicamente el nombre del
DROP
ndice a continuacin de la palabra reservada CONSTRAINT.
Ejemplos:
92
Unidad temtica 3:
Objetivos
Comprender el concepto de base de datos espacial
Ser capaces de seleccionar el modelo de datos espacial que ms se ajusta a los datos
Ser capaces de insertar datos espaciales en una base de datos Oracle
Ser capaces de realizar consultas sobre datos espaciales en Oracle 8i
Contenidos
Tema 8. Modelado de datos espaciales
Tema 9. Gestin de datos espaciales en Oracle 8i
Tema 10. Consultas espaciales en Oracle 8i
Tema 8: Modelado de datos espaciales
1 Introduccin
Muchos SGBD ofrecen esta extensin espacial. Oracle 8i es uno de ellos y es el que
estudiaremos en temas posteriores.
2 Definiciones
Las siguientes son operaciones comunes sobre estos temas, basadas en el lgebra
relacional:
- proyeccin, consiste en la operacin de seleccionar uno o varios campos para
mostrar su contenido. Por ejemplo, dado el tema Paises, podemos proyectar sobre
el campo num_habitantes y obtendremos la siguiente tabla:
Paises Num_habitantes
Portugal 10.500.000
Francia 58.000.000
... ...
Alemania 78.500.000
96
Tema 9. Gestin de datos espaciales en Oracle 8i
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.
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
Las relaciones espaciales que se pueden establecer entre dos entidades de la base de
datos son las siguientes:
- DISJOINT: los contornos y los interiores de las entidades no intersectan
- TOUCH: los contornos intersectan pero los interiores no
- OVERLAPBDYDISJOINT: el interior de un objeto intersecta con el contorno y el
interior del otro objeto pero los contornos no intersectan. Esto ocurre, por ejemplo,
cuando una lnea comienza fuera de un polgono y termina dentro del polgono.
- OVERLAPBDYINTERSECT: los contornos y los interiores de los dos objetos
intersectan.
- EQUAL: los dos objetos tienen el mismo contorno y el mismo interior.
- CONTAINS: el interior y el contorno de un objeto est completamente contenido en
el interior del otro objeto
- COVERS: el interior de un objeto est completamente contenido en el interior del
otro y sus contornos intersectan
- INSIDE: el contrario de CONTAINS. A INSIDE B implica B CONTAINS A.
- COVEREDBY: el contrario de COVERS. A COVEREDBY B implica B COVERS A
- ANYINTERACT: los objetos intersectan de algn modo.
100
Tema 9. Gestin de datos espaciales en Oracle 8i
Veamos, ahora, una descripcin de las tablas especficas que son necesarias en Oracle 8i
para manejar los datos espaciales.
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)
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)
));
103
Tema 10. Consultas espaciales en Oracle 8i
1 Introduccin
En este tema vamos a ver algunas funciones de Spatial que nos permiten realizar consultas
sencillas sobre datos espaciales en Oracle 8i. Estas funciones son:
SDO_GEOM.RELATE: permite evaluar o conocer la relacin espacial entre dos
entidades
SDO_GEOM.SDO_DISTANCE: permite conocer la mnima distancia eucldea entre dos
entidades
SDO_GEOM.SDO_AREA: permite conocer el rea de una entidad
SDO_GEOM.SDO_LENGTH: permite conocer la longitud o el permetro de una entidad
2 SDO_GEOM.RELATE
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;
106
Tema 10. Consultas espaciales en Oracle 8i
m.geometria,g2.diminfo)=INSIDE;
3 SDO_GEOM.SDO_DISTANCE
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;
4 SDO_GEOM.SDO_AREA
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;
5 SDO_GEOM.SDO_LENGTH
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;
110
Prctica 2. Consultas espaciales
DESCRIPCION AREA
-------------------------------------------------- ----------
Lago Abis 3,9
Lago Bernacle 4,2
CODIGO DUENYO
---------- ----------------------------------------
1001 Manuel Martinez Garcia
5001 Vicenta Duque Moreira
5002 Vicenta Duque Moreira
5003 Ricardo Olmos Garcia
CODIGO DESCRIPCION
---------- --------------------------------------------------
C3 Carretera 3 - Este-Oeste
C4 Carretera 4 - Circular
NOMBRE
------------------------------
Abis
Prctica 2. Consultas espaciales
NOMBRE
------------------------------
Abis
Abiside
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.
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
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
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