Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bases de Datos
Cartográficas
Laura Sebastiá
Departamento de Sistemas Informáticos y Computación
Objetivos
El objetivo principal de esta asignatura consiste en introducir los conceptos básicos de los
sistemas gestores de bases de datos actuales, por un lado, y por otro, la utilización de las
extensiones para el manejo de datos espaciales que proporcionan estos sistemas como
parte de un sistema de información geográfica. Para ello deberemos ser capaces de:
Bibliografía
Objetivos
• Comprender el concepto de SGBD
• Conocer cómo se organizan los datos alfanuméricos en una base de datos
• Ser capaces de interpretar un diagrama entidad-relación
• Ser capaces de generar un diseño de base de datos que cumpla los principios básicos
del modelo relacional
Contenidos
Tema 1. Introducción a las bases de datos
Tema 2. El modelo Entidad-Relación
Tema 3. El modelo relacional
Tema 4. Teoría de la normalización
Tema 1. Introducción a las Bases de Datos
1 Introducción
2 Definiciones
Inserción Recuperación
Actualización BD Tratamiento
10
Tema 1. Introducción a las Bases de Datos
! Proporcionar independencia de datos. Este concepto hace referencia a la necesidad
de establecer una desconexión entre los programas de aplicación y los datos
almacenados. Los usuarios interactuan con una representación de los datos
independientemente de la representación que estos datos tienen en los dispositivos
físicos, y es el SGBD el encargado de traducir las consultas y modificaciones del
usuario en operaciones eficientes sobre las estructuras de datos físicas. Esto es muy
diferente del tratamiento de ficheros tradicional, donde la estructura de un fichero junto
con las operaciones sobre él están embebidas en un programa de acceso.
Este mecanismo es alcanzable a través del uso de diferentes niveles de abstracción.
Se distinguen tres niveles de abstracción:
- El nivel físico trabaja sobre las estructuras de almacenamiento
- El nivel lógico o conceptual define la representación de los datos propuesta por el
usuario
- El nivel externo corresponde a una vista parcial de la base de datos proporcionada
por una determinada aplicación.
11
Tema 1. Introducción a las Bases de Datos
4 Modelos de Datos
12
Tema 1. Introducción a las Bases de Datos
datos (o catálogo); es decir, el diccionario de datos contiene metadatos, datos
acerca de los datos.
! LMD es el lenguaje de manipulación de datos; permite realizar la recuperación y
actualización (inserción, actualización 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 operación lenguaje de query; sin
embargo suelen usarse indistintamente los término 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 jerárquicas y en red) o no
procedimental, si el usuario sólo el indica el tipo de operación que desea hacer
pero no cómo hacerla. Los comandos para hacer estas operaciones pueden
usarse interactivamente o embebidos en un lenguaje de programación
convencional (lenguaje huésped).
Veremos el LDD y LMD que proporciona el lenguaje SQL en la unidad temática 2.
! Interactúa 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 recuperación y actualización 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 algún caso, los accesos a la BD violan estas restricciones y
realiza las acciones apropiadas.
! Lleva a cabo copias de seguridad y recuperación de datos. Cualquier sistema está
sujeto a fallos o errores; si se pierde la información de la BD por algún motivo, es
responsabilidad del SGBD detectar estos fallos y arrancar los procedimientos de
recuperación.
! Realiza el control de concurrencia. En un entorno de multiprogramación, 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, diseñados para ejecutarse en ordenadores personales pequeños, 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,
recuperación 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 tamaño mediano o grande.
Sobre las ventajas ya hemos hablado suficientemente a lo largo de este tema. Resumiendo
podemos decir que un SGBD proporciona:
! Gestión y control centralizado de los datos.
! Reducción de redundancias.
! Compartición de datos.
13
Tema 1. Introducción 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: Además del coste de comprar el software,
probablemente haya que ampliar o subir de versión el hardware (upgrade) para que el
programa pueda almacenarse y funcione correctamente; además, si no, el sistema
podría degradarse y los tiempos de respuesta subir drásticamente por la sobrecarga
que añade 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 migración de aplicaciones: Un coste adicional, también, es la migración de
las aplicaciones para pasar a un entorno integrado.
! Las operaciones de respaldo y recuperación de los datos en caso de fallo son
complejas, debido al acceso concurrente de múltiples usuarios.
! Criticidad del SGBD: La centralización también significa que los datos de la
organización, están almacenados en un único lugar, en la base de datos, con lo que
cualquier fallo de seguridad u operación del SGBD puede afectar a toda la organización
(sistemas distribuidos y compartidos) .
14
Tema 1. Introducción a las Bases de Datos
consultas y aplicaciones, lo que supone una auténtica revolución en el mundo de las
tecnologías SIG. Estos sistemas cambian la orientación de los SIG desde SIG céntricos a
Sistemas Gestores de la Base de Datos céntricos, 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 análisis espacial integrado en la misma BD
son DB2 (IBM), Informix, Oracle 8i, Sybase, etc.
El objetivo es una completa integración 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 definición, almacenamiento, gestión y
actualización 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 extensión de las funcionalidades del SGBD.
Entre ellas podemos destacar la extensión de los métodos de almacenamiento de datos y
de búsqueda de los datos implicados en una determinada consulta, del tipo de operadores
utilizables en una consulta (operadores espaciales y operadores de análisis avanzado que
permiten la creación de nuevas geometrías).
Ante esta revolución, como es lógico, 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 consecución de unos objetivos
comunes con el fin de obtener la máxima eficacia en la gestión de la información.
15
Tema 2. El modelo Entidad-Relación
1 Introducción
El modelo Entidad-Relación fue propuesto por Chen a mediados de los años setenta como
medio de representación conceptual de los problemas y para representar la visión de un
sistema de forma global. Físicamente adopta la forma de un gráfico escrito en papel al que
se denomina diagrama Entidad-Relación. Sus elementos fundamentales son las
entidades y las relaciones.
2 Entidades
Entidad: Una entidad es una cosa u objeto distinguible de todos los demás, 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 (cítricos, viña, olivo, ...).
Los atributos se distinguen en:
- Simples y compuestos: los simples no están subdivididos en subpartes mientras que
los compuestos se pueden dividir en otros atributos. Ejemplo: el atributo dirección se
puede subdividir en (calle, número, 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
específica. Ejemplo: al atributo teléfono se le pueden asignar varios valores
correspondiendo al teléfono particular, al del trabajo, al móvil, ...
- 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
Relación: Una relación es una asociación entre diferentes entidades. Ejemplo: las
entidades parcela y propietario se asocian a través de la relación pertenece.
Una relación puede tener también atributos descriptivos. Ejemplo: en la relación
pertenece puede aparecer como atributo la fecha de adquisición.
Tema 2. El modelo Entidad-Relación
El grado de la relación es el número de entidades que participan en una relación;
normalmente son relaciones binarias aunque también podemos encontrar relaciones
ternarias.
Depende de la estructura del desarrollo del mundo real que se esté modelando la decisión
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 relación. Una posible guía es designar una relación para describir una acción
que ocurre entre entidades.
Cada entidad interviene en una relación con una determinada cardinalidad. Es decir, la
cardinalidad es el número 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 mínima, cardinalidad máxima). 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 relación es_capital. La entidad nacion
tiene una cardinalidad (1,1) al igual que la entidad ciudad.
! Las entidades cliente y pedidos participan en la relación 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 relación vive. Ambas entidades
tienen una cardinalidad (0,n).
El tipo de relación se define tomando los máximos de las cardinalidades que intervienen
en la relación. Hay tres tipos posibles:
- Una a una (1:1). En este tipo de relación, una vez fijado un elemento de una entidad se
conoce el elemento de la otra entidad con el que está relacionado. Por ejemplo, nación
y ciudad a través de la relación es_capital.
- Una a muchas (1:N). Por ejemplo, cliente y pedidos en la relación realiza_pedido.
- Muchas a muchas (N:N). Por ejemplo, personas y viviendas en la relación vive.
4 Claves
18
Tema 2. El modelo Entidad-Relación
término de clave primaria para denotar una clave candidata que es elegida por el diseñador
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} – También podría haberse elegido {num_seg_social}.
Ejemplos:
1. Relación es_capital
Nacion Ciudad
Es_capital
2. Relación realiza_pedido
Realiza_pedido
Cliente Pedido
19
Tema 2. El modelo Entidad-Relación
3. Relación vive
Persona Vivienda
Vive
DNI Nombre Direccion
6 Características 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 débil depende de la
existencia previa de otra entidad. Si la entidad débil puede ser identificada sin necesidad de
identificar previamente la entidad de cuya existencia depende, diremos que la entidad débil
lo es por existencia únicamente. Si la entidad débil no puede ser identificada
independientemente, sino que previamente es necesario identificar a la entidad de cuya
existencia depende, diremos que la entidad débil lo es por identificación. Es decir, esta
entidad débil no tiene suficientes atributos para formar una clave primaria. Para que tenga
sentido, debe formar parte de una relación uno a muchos. El discriminante (clave parcial),
de una entidad débil es un conjunto de atributos que permite distinguir las entidades que
dependen de una entidad particular fuerte. La clave primaria de una entidad débil se forma
con la clave primaria de la entidad fuerte de cuya existencia depende, más el discriminante.
La relación que asocia el conjunto de entidades débil con un propietario se llama relación
de identificación. Una entidad débil se indica con un doble rectángulo, y la
correspondiente relación de existencia mediante una “E” sobre la línea que une la entidad
débil a la relación con la entidad fuerte. Si la relación es de identificación, se indicará
mediante “ID”. El discriminante se subraya con una línea discontinua.
Por ejemplo, dado un libro del que se han editado muchos ejemplares, la entidad Ejemplar
(que se identifica mediante un número dentro de la edición) es débil con respecto a la
entidad Libro.
Pertenece
Libro Ejemplar
ID
20
Tema 2. El modelo Entidad-Relación
- Relación 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 información histórica 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-Relación
Libro Autor
paginas
año
ISBN
Publica
Editorial
Persona
(0,1) (0,1)
(1,1) (1,1)
Hombre Mujer
22
Tema 2. El modelo Entidad-Relación
Pero en la universidad también hay por ejemplo, técnicos o PAS, por lo que la
relación es parcial.
Universitario
(0,1) (0,1)
(1,1) (1,1)
Estudiante Profesor
7 Ejercicios
Dom={agr_regadio, agr_secano,
Pertenece industria, turismo, …}
Provincia Población N
Pples_ingresos
ID
L/m2
Nombre
Meses
23
Tema 2. El modelo Entidad-Relación
c) ¿Se puede almacenar que los principales ingresos de una población provienen de la
agricultura de regadío y del turismo?
d) Para una misma población, ¿cuántos datos acerca de los l/m2 recogidos podemos
almacenar?
e) En un mes, ¿se puede almacenar información sobre las precipitaciones caídas en
varias poblaciones?
24
Tema 2. El modelo Entidad-Relación
- En cuanto a cada mar, queremos almacenar su nombre y a qué provincias baña,
indicando además cuántos kilométros de la costa de esa provincia es bañada por este
mar.
- La información de los ríos será la más completa: además del nombre, nos interesa
conocer en qué provincia nace, por qué ciudades pasa y en qué mar desemboca. Por
otro lado, también queremos saber qué ríos son afluentes de otros ríos.
25
Tema 3. Modelo Relacional
1 Introducción
La teoría 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,
imponiéndose en la década de los ochenta sobre los modelos previos. Actualmente es el
modelo elegido para la construcción 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 información debe estar contenida en tablas
- las relaciones entre datos deben ser representadas explícitamente en esos
mismos datos
La relación es el elemento básico del modelo relacional y se representa por una tabla.
Informalmente, los términos y sus equivalentes son:
Relación Tabla
Tupla Fila
Atributo Columna
Número de tuplas Cardinalidad
Número de atributos Grado
Dominio Colección de valores, de los cuales uno o más atributos
obtienen sus valores reales
Clave primaria Identificador único para la tabla, es decir, una columna o
combinación de columnas con la propiedad de que nunca
existen dos filas de la tabla con el mismo valor en esa
columna o combinación de columnas
Es importante señalar que la tabla es plana en el sentido de que el cruce entre una fila y
una columna sólo 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 lógico.
- Está compuesto por las distintas vistas que tienen los usuarios de la BD total
- Lenguajes: DML
- Nivel físico.
- 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 definición del
almacenamiento de datos).
VISTA
Nivel
lógico
Nivel
físico 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 mínimo
elemento lógico de acceso y modificación.
! 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 número es fijo a priori
! Una fila o tupla representa un objeto del mundo real:
! Nunca pueden estar duplicadas
! Es la mínima unidad de borrado
! Representa un registro lógico
! Su número varía según se realicen operaciones de inserción y borrado en la tabla
! Pueden estar dispuestas en cualquier orden
3.1 Claves
29
Tema 3. El modelo Relacional
Libro Ejemplar
ID
! Representación tabular de las relaciones: se representa mediante una tabla con una
columna por cada atributo formado por la unión de las claves primarias de las
entidades que relaciona más los atributos descriptivos de la relación (si los tiene).
! Redundancia de tablas: en general, la tabla para la relación que une una entidad
débil con su correspondiente entidad fuerte es redundante y no necesita ser
representada en una representación tabular de un diagrama E-R.
30
Tema 3. El modelo Relacional
! Combinación de tablas: si una entidad es dependiente de otra, se pueden
combinar para formar una única tabla consistente en la unión 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.
! Representación tabular de la especialización: hay dos formas; la primera es crear
una tabla para la entidad de nivel más alto y para cada entidad de nivel más bajo, crear
una tabla que incluya una columna para cada uno de los atributos de esa entidad más
una columna por cada atributo de la clave primaria de la entidad de nivel más alto; la
segunda, para especializaciones exclusivas y totales, se crea para cada entidad de
nivel más bajo, una tabla que incluya una columna para cada atributo de la entidad más
una columna por cada atributo de la entidad de nivel más 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 debería haber generado una tabla para la entidad PEDIDO y otra para la
relación. Sin embargo, serían redundantes y por ello se unen en una sola.
La diferencia entre la representación tabular de una entidad débil y de una relación 1:N es
que, mientras en la entidad débil la clave de la entidad fuerte pasa a formar parte de la
clave de la entidad débil, en el caso de relaciones 1:N, la clave de la entidad que forma
parte de la relación 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 también se relacionan. También se podría 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 algún valor ya
contenido en el atributo referenciado en la tabla T2, o bien tomar un valor nulo.
Ejemplo: en la relación 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 semántica concreta del problema. Pueden ser
sencillas, como la especificación de valores mínimos o máximos que puede tomar un
atributo numérico, lista de valores permitidos de un atributo, o más complejas como
condiciones sobre valores de los atributos en función de valores de otros atributos de
esa u otras tablas. Ejemplos:
! La restricción “el número de la Seguridad Social debe ser un entero positivo menor
de 100.000.000” establece una restricción sobre el dominio del atributo.
! La restricción “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 Modificación del valor de algún 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.
! Sólo 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 automáticamente 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-relación, obtener el modelo relacional
correspondiente.
Dom={agr_regadio, agr_secano,
Pertenece industria, turismo, …}
Provincia Población 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
Descripción
Realiza
Personal Trabajo
Solicita
Mantenimiento
NIF
Utiliza
Fecha_ult_rev
Aparato Cliente
Numserie
Modelo
Se alquila
Alquila
N.factura
Fecha_ini
Fecha_fin
Alquiler
Descripción
36
Tema 4. Teoría de la normalización
1 Introducción
Cuando se diseña 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 cuáles son los
problemas que se pueden derivar de un diseño inadecuado.
El esquema relacional puede obtenerse de dos formas distintas:
! Directamente a partir de la observación 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 diseño en dos fases, primero el diseño conceptual (E/R)
obteniendo el esquema conceptual y posteriormente transformar éste a un esquema
relacional, siguiendo algunas reglas generales, que fueron dadas anteriormente.
En conclusión, el esquema relacional obtenido debe ser analizado para comprobar que no
presenta los problemas anteriores. Para ello, veremos en primer lugar, algunos ejemplos de
anomalías que se pueden presentar. Después, introduciremos las formas normales y las
aplicaremos en un ejemplo.
Tema 4. Teoría de la Normalización
En los casos anteriores, se deja en manos del usuario manejar la integridad de la base de
datos.
38
Tema 4. Teoría de la Normalización
ESCRIBE( cod_libro, nombre )
La normalización introduce una técnica formal para diseñar bases de datos relacionales, y
permite mecanizar parte del proceso al disponer de algoritmos de normalización. Una
observación importante es que las anomalías antes descritas se producen en procesos de
actualización y no en procesos de consulta. La normalización penaliza las consultas, al
disminuir la eficiencia, ya que la normalización aumenta el número 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
restricción inherente al modelo relacional por lo que su cumplimiento es obligatorio.
Consiste en la prohibición de que en una relación existan grupos repetitivos, es decir,
un atributo no puede tomar más de un valor del dominio subyacente.
! Segunda Forma Normal (2FN), fue introducida por Codd. Una relación está en 2FN, si
además de estar en 1FN, todos los atributos que no forman parte de ninguna clave
candidata suministran información acerca de la clave completa.
Se puede observar que ciertos atributos que no forman parte de las claves candidatas,
tal como la editorial, constituye información acerca del libro, pero no acerca de la clave
completa. Luego, la relación PRESTAMO no se encuentra en 2FN.
39
Tema 4. Teoría de la Normalización
PRESTAMO1( num_socio, nombre_socio, cod_libro, fec_prest )
LIBRO( cod_libro, editorial, país )
! Tercera Forma Normal (3FN), propuesta por Codd. Una relación está en 3FN, si
además de estar en 2FN, los atributos que no forman parte de ninguna clave candidata
facilitan información sólo acerca de la(s) clave(s) y no acerca de otros atributos.
! Forma Normal de Boyce y Codd (FNBC). La relación PRESTAMO1, que está en 3FN,
todavía presenta anomalías, ya que num_socio y nombre_socio, se repiten
innecesariamente por cada cod_libro. Una relación está en FNBC si y solo si, todos los
atributos de las claves candidatas informan acerca del resto de claves candidatas
completas.
En la relación PRESTAMO1, num_socio es información 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 están en FNBC.
Hasta ahora nuestro esquema relacional está compuesto por las siguientes relaciones
en FNBC:
40
Tema 4. Teoría de la Normalización
LIBRO1( cod_libro, editorial )
EDITORIAL( editorial, país )
SOCIO( num_socio, nombre_socio )
PRESTAMO2( num_socio, cod_libro, fec_prest )
4 Ejercicios
Dada la relación 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 número de matricula distinto para cada curso en el que está
matriculado
c) Un curso se imparte en un solo centro
d) El número 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 temática 2:
Contenidos
Tema 5. Introducción al lenguaje SQL
Tema 6. Lenguaje de manipulación de datos
Tema 7. Lenguaje de definición de datos
Tema 5: Introducción al lenguaje SQL
1 Introducción
2 Comandos
3 Cláusulas
Las cláusulas son condiciones de modificación utilizadas en los comandos para definir los
datos que se desea seleccionar o manipular. Un resumen de las clausulas disponibles en
SQL son:
Cláusula Descripción
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 específicos
HAVING Utilizada para expresar la condición que debe satisfacer cada grupo
Utilizada para ordenar los registros seleccionados de acuerdo con un orden
ORDER BY
específico
4 Operadores Lógicos
46
Tema 5. Introducción al lenguaje SQL
5 Operadores de Comparación
6 Funciones de Agregado
Las funciones de agregado se usan dentro de una cláusula SELECT donde se han
agrupado los registros para devolver un único valor por cada grupo de registros. Las más
usuales son:
Función Descripción
AVG Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el número de registros de la selección
Utilizada para devolver la suma de todos los valores de un campo
SUM
determinado
MAX Utilizada para devolver el valor más alto de un campo especificado
MIN Utilizada para devolver el valor más bajo de un campo especificado
7 Esquema a utilizar
En este apartado daremos la definición de las tablas a utilizar, tanto en los ejemplos de los
próximos temas como en las prácticas 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. Introducción al lenguaje SQL
comunicado a través de distintas carreteras. A continuación se presenta un croquis de la
región 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. Introducción 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. Introducción 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 código.
• 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. Introducción 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 Manipulación de Datos
1 Introducción
2 Consultas de selección
Predicado Descripción
ALL Devuelve todos los campos de la tabla
TOP Devuelve un determinado número 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 instrucción 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 más rápido indicar el listado de
campos deseados.
SELECT ALL FROM habitacion;
SELECT * FROM habitacion;
2.3.2 TOP
Devuelve un cierto número de registros a partir del principio o del final de un rango
especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los
dueños de las 5 casas más caras:
SELECT TOP 5 duenyo
FROM casa_rural
ORDER BY precio DESC;
54
Tema 6. Lenguaje de Manipulación de Datos
Si no se incluye la cláusula 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 número 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
cláusula ORDER BY. Supongamos que en lugar de las 5 casas más 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 continuación 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 instrucción SELECT se incluyan en la consulta
deben ser únicos.
Por ejemplo, varias casas de la tabla casa_rural pueden tener el mismo dueño. Si
ejecutamos la siguiente instrucción SQL, devolverá un único registro por cada dueño
diferente:
SELECT DISTINCT duenyo
FROM casa_rural;
En otras palabras, el predicado DISTINCT devuelve aquellos registros cuyos campos
indicados en la cláusula 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 procederíamos 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 Manipulación de Datos
56
Tema 6. Lenguaje de Manipulación de Datos
FROM casa_rural
WHERE fecha_construccion > ‘01/10/94’;
Obtener el código 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 Manipulación de Datos
Obtener el código de las casas cuyo precio oscila entre 200 y 300
euros o su fecha de construcción es posterior al año 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 Manipulación de Datos
SELECT nombre, codigo_postal
FROM municipio
WHERE nombre BETWEEN ‘Ab’ AND ‘As’;
Obtener las casas cuya fecha de construcción oscila entre los años
1989 y 1992
SELECT codigo
FROM casa_rural
WHERE fecha_construccion BETWEEN ‘01/01/89’ AND ‘31/12/92’;
59
Tema 6. Lenguaje de Manipulación 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:
expresión [Not] In(valor1, valor2, . . .)
Por ejemplo, la siguiente consulta devuelve el nombre de los municipios cuyo código 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 idénticos en la lista de campos especificados, en un
único registro. Para cada registro se crea un valor sumario si se incluye una función SQL
agregada, como por ejemplo Sum o Count, en la instrucción 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 función SQL
agregada en la instrucción SELECT. Los valores Null en los campos GROUP BY se
agrupan y no se omiten. No obstante, los valores Null no se evalúan en ninguna de las
funciones SQL agregadas.
Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la cláusula
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 cláusula FROM, incluso si el campo no esta incluido en la
instrucción SELECT, siempre y cuando la instrucción SELECT incluya al menos una función
SQL agregada.
60
Tema 6. Lenguaje de Manipulación de Datos
Todos los campos de la lista de campos de SELECT deben incluirse en la cláusula GROUP
BY o como argumentos de una función SQL agregada. Por ejemplo, la siguiente consulta
obtiene para cada casa, el número 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 cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVING.
HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los
registros se han agrupado utilizando GROUP BY, HAVING determina cuáles de ellos se van
a mostrar. Por ejemplo, la siguiente consulta obtiene los mismos datos que la consulta
anterior, pero sólo de aquellas casas en las que haya al menos 6 plazas y el máximo a
pagar por noche de una habitación 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 aritmética 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 numéricos para los que se desea
calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho
campo. La media calculada por Avg es la media aritmética (la suma de los valores dividido
por el número de valores). La función Avg no incluye ningún campo Null en el cálculo. 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 número 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 cálculo sobre un campo, Count
simplemente cuenta el número de registros sin tener en cuenta qué valores se almacenan
en los registros. La función Count no cuenta los registros que tienen campos null a menos
que expr sea el carácter comodín asterisco (*). Si utiliza un asterisco, Count calcula el
número total de registros, incluyendo aquellos que contienen campos null.
61
Tema 6. Lenguaje de Manipulación de Datos
Por ejemplo, la siguiente consulta obtiene el número 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 expresión que realiza un cálculo utilizando los datos de dichos campos. Por ejemplo, la
siguiente consulta obtiene para cada casa, el número total de plazas de todas sus
habitaciones:
SELECT cod_casa, SUM(num_plazas)
FROM habitacion
GROUP BY cod_casa;
62
Tema 6. Lenguaje de Manipulación de Datos
2.6.6 StDev, StDevP
Devuelve estimaciones de la desviación estándar para la población (el total de los registros
de la tabla) o una muestra de la población 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 expresión que realiza un cálculo utilizando los datos de dichos campos.
StDevP evalúa una población, y StDev evalúa una muestra de la población. Si la consulta
contiene menos de dos registros (o ningún registro para StDevP), estas funciones
devuelven un valor Null (el cual indica que la desviación estándar no puede calcularse). Por
ejemplo:
SELECT StDev(precio) AS Desviacion
FROM casa_rural
WHERE fecha_construccion < ‘01/01/94’;
63
Tema 6. Lenguaje de Manipulación de Datos
WHERE fecha_construccion < ‘01/01/94’;
Normalmente los datos que se desean extraer a través de una consulta no están en una
única tabla. En estos casos, hemos de incluir en la cláusula FROM todas las tablas de las
que deseamos extraer algún dato. Por ejemplo, si quisiéramos obtener para cada casa su
código, su dirección y el municipio donde se encuentran, deberíamos escribir:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio;
Se debe indicar que el código es de la casa rural porque existe otro campo código en la
tabla municipio y podría resultar ambiguo. La ejecución de esta consulta nos devuelve la
siguiente información:
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 cláusula 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
cláusula WHERE la relación existente entre ambas tablas a través de sus claves ajenas. En
este caso, la tabla casa_rural tiene una clave ajena sobre la tabla municipio. Por tanto, la
consulta correcta sería:
SELECT casa_rural.codigo, direccion, nombre
FROM casa_rural, municipio
WHERE casa_rural.municipio = municipio.codigo;
Así, obtendríamos 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 solución pasa por escribir delante del campo en cuestión el
nombre de la tabla a la que pertenece, lo que en ocasiones puede resultar tedioso,
64
Tema 6. Lenguaje de Manipulación de Datos
sobretodo si los nombres de las tablas son largos. Por esta razón, 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 operación UNION para crear una consulta de unión, combinando los resultados
de dos o más 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 más consultas, tablas e instrucciones SELECT, en
cualquier orden, en una única operación UNION. El ejemplo siguiente combina una tabla
existente llamada Otras_casas_lujo y una instrucción 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
operación UNION, no obstante puede incluir el predicado ALL para asegurar que se
devuelven todos los registros. Esto hace que la consulta se ejecute más rápidamente.
Todas las consultas en una operación UNION deben pedir el mismo número de campos, no
obstante los campos no tienen porqué tener el mismo tamaño o el mismo tipo de datos.
Se puede utilizar una cláusula GROUP BY y/o HAVING en cada argumento consulta para
agrupar los datos devueltos. Puede utilizar una cláusula ORDER BY al final del último
argumento consulta para visualizar los datos devueltos en un orden específico.
3 SubConsultas
Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.
Puede utilizar tres formas de sintaxis para crear una subconsulta:
- comparación [ANY | ALL | SOME] (instrucción sql)
65
Tema 6. Lenguaje de Manipulación de Datos
- expresión [NOT] IN (instrucción sql)
- [NOT] EXISTS (instrucción sql)
donde:
! comparación: es una expresión y un operador de comparación que compara la
expresión con el resultado de la subconsulta.
! expresión: es una expresión por la que se busca el conjunto resultante de la
subconsulta.
! instrucción sql: es una instrucción SELECT, que sigue el mismo formato y reglas que
cualquier otra instrucción SELECT. Debe ir entre paréntesis.
Se puede utilizar una subconsulta en lugar de una expresión en la lista de campos de una
instrucción SELECT o en una cláusula WHERE o HAVING. En una subconsulta, se utiliza
una instrucción SELECT para proporcionar un conjunto de uno o más valores especificados
para evaluar en la expresión de la cláusula WHERE o HAVING.
3.2 ALL
El predicado ALL se utiliza para recuperar únicamente aquellos registros de la consulta
principal que satisfacen la comparación 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 habitación cuyo precio sea mayor que el de
todas las casas construidas después de 1992. Esto es mucho más 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 dueño de las casas que tienen alguna habitación
con baño:
SELECT duenyo
FROM casa_rural
WHERE codigo IN (SELECT cod_casa
66
Tema 6. Lenguaje de Manipulación 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 algún registro.
Se puede utilizar también el alias del nombre de la tabla en una subconsulta para referirse a
tablas listadas en la cláusula 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 código 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 Manipulación de Datos
FROM casa_rural
WHERE fecha_construccion<'01/01/90';
68
Tema 6. Lenguaje de Manipulación de Datos
69
Tema 6. Lenguaje de Manipulación 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 dueño 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 Manipulación de Datos
4 Consultas de Acción
4.1 DELETE
Crea una consulta de eliminación que elimina los registros de una o más de las tablas
listadas en la cláusula FROM que satisfagan la cláusula WHERE. Su sintaxis es:
DELETE FROM Tabla WHERE criterio
Ejemplo: Con la siguiente instrucción, eliminamos de la tabla
casa_rural aquellas casas en las que el dueño 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 más eficiente que ejecutar una
consulta de borrado.
Una consulta de borrado elimina los registros completos, no únicamente los datos en
campos específicos. Si desea eliminar valores en un campo especificado, crear una
consulta de actualización que cambie los valores a Null.
Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede
deshacer la operación. Para saber qué registros se eliminarán, primero se pueden examinar
los resultados de una consulta de selección que utilice el mismo criterio y después ejecutar
la consulta de borrado.
71
Tema 6. Lenguaje de Manipulación 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 actualización que cambia los valores de los campos de una tabla
especificada basándose en un criterio específico. Su sintaxis es:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN
WHERE Criterio;
UPDATE es especialmente útil cuando se desea cambiar un gran número de registros o
cuando éstos se encuentran en múltiples 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 baño:
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 Manipulación de Datos
UPDATE no genera ningún resultado. Para saber qué registros se van a cambiar, hay que
examinar primero el resultado de una consulta de selección que utilice el mismo criterio y
después ejecutar la consulta de actualización.
Si en una consulta de actualización suprimimos la cláusula WHERE todos los registros de la
tabla señalada serán actualizados.
UPDATE Habitacion
SET Precio_Noche = Precio_Noche * 1.1,
Precio_Dto_3 = Precio_Dto_3 * 1.03;
5 Ejercicios
1. Obtener el código 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 Manipulación de Datos
74
Tema 6. Lenguaje de Manipulación de Datos
5001 2,66666667
5002 2
5003 2,5
75
Tema 6. Lenguaje de Manipulación de Datos
5003 Alta 7 Abis
2002 Mayor 18 Abiside
2003 Mayor 16 Abiside
3002 Sta Ana 20 Bernacle
10. Obtener el nombre del dueño de las casas que tienen alguna habitación con baño
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 Manipulación de Datos
11. Obtener el código de las casas de los municipios que empiezan por ‘A’
CODIGO
----------
1001
2001
2002
2003
5001
5002
5003
12. Obtener la dirección y el teléfono de contacto de las casas que tienen habitaciones con
capacidad para más 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 Introducción
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
aplicación 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 diálogo 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 aplicación, 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
ejecución de dicha sentencia.
• Barra de división: divide ambos paneles, si se pincha y arrastra sobre ella se puede
modificar el tamaño de éstos.
• Barra de herramientas del panel de entrada
• Nueva worksheet: borra el panel de entrada para introducir una nueva sentencia SQL,
si no había sido guardado, indica la posibilidad de hacerlo.
Manual del SQLWorksheet
• Abrir worksheet: muestra un cuadro de diálogo para abrir una sentencia SQL
almacenada previamente.
• Guardar worksheet: muestra un cuadro de diálogo 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 (botón Get) para ser editada.
• Comando anterior y Siguiente comando: permiten la navegación por el historial de
comandos.
• Barra de herramientas del panel de salida: sólo tiene un botón, que nos permite
guardar la información del panel de salida en un fichero.
• Menús desplegables: aparecen en la parte superior de la pantalla. Sus principales
funciones se resumen a continuación.
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 diálogo de configuración de la impresión.
• Exit: Sale de SQL Worksheet.
81
Práctica 1. Consultas alfanuméricas
Consiste en realizar las consultas que se proponen a continuación. Deben aparecer los
mismos títulos de columnas y los datos en el mismo orden.
1. Código y descripción de todas las carreteras de la región que van al sur (es decir, que
en su descripción 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 dueño y dirección completa (con el nombre del municipio) de todas las
casas rurales de la región, 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 después del año
90.
MEDIA
----------
39285,7143
Práctica 1. Consultas alfanuméricas
5. Precio de la habitación más cara de cada casa ordenado por código de casa.
CODIGO MAX_HABIT
---------- ----------
1001 24000
2001 16000
2002 25000
2003 12000
3001 18000
3002 16000
5001 14000
5002 10000
5003 20000
6. Código de la casa y diferencia de precio entre alquilar una casa completa y alquilarla
por habitaciones (sin descuentos) ordenado por código de casa.
CODIGO DIFERENCIA
---------- ----------
1001 8000
2001 2000
2002 6000
2003 8000
3001 3000
3002 4000
5001 4000
5002 2000
5003 6000
7. Código, dirección 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 dueño 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
Práctica 1. Consultas alfanuméricas
9. Código y dirección de las casas en las que hay al menos 8 plazas en habitaciones con
baño.
CODIGO DIRECCION
---------- ------------------------------
1001 Monje 27
2002 Mayor 18
2003 Mayor 16
5001 La Barra 30
5003 Alta 7
85
Tema 7: Lenguaje de Definición de Datos
1 Tipos de Datos
Parte Descripción
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 definición de datos
Si se desea crear un índice para un campo cuando se esta utilizando las instrucciones
ALTER TABLE o CREATE TABLE la cláusula CONTRAINT debe aparecer inmediatamente
después de la especificación del campo indexado.
Si se desea crear un índice con múltiples campos cuando se está utilizando las
instrucciones ALTER TABLE o CREATE TABLE la cláusula CONSTRAINT debe aparecer
fuera de la cláusula de creación de tabla.
Ejemplos:
Crear una nueva tabla llamada Casa_rural con los campos que hemos
definido anteriormente. Además, 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 definición 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 definición de datos
Parte Descripción
í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 categoría de clave principal, en cada tabla sólo 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 diseño 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[(tamaño)]
[CONSTRAINT índice] CONSTRAINT índice multicampo} |
DROP {COLUMN campo I CONSTRAINT nombre del índice} }
Donde:
91
Tema 7. Lenguaje de definición de datos
Parte Descripción
Tabla Es el nombre de la tabla que se desea modificar.
Campo Es el nombre del campo que se va a añadir o eliminar.
Tipo Es el tipo de campo que se va a añadir.
Tamaño El el tamaño del campo que se va a añadir (sólo 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.
Operación Descripción
ADD Se utiliza para añadir un nuevo campo a la tabla, indicando el nombre, el
COLUMN tipo de campo y opcionalmente el tamaño (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 continuación de la palabra reservada CONSTRAINT.
Ejemplos:
92
Unidad temática 3:
Objetivos
• Comprender el concepto de base de datos espacial
• Ser capaces de seleccionar el modelo de datos espacial que más 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. Gestión de datos espaciales en Oracle 8i
Tema 10. Consultas espaciales en Oracle 8i
Tema 8: Modelado de datos espaciales
1 Introducción
Muchos SGBD ofrecen esta extensión 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:
- proyección, consiste en la operación 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. Gestión de datos espaciales en Oracle 8i
- superposición, consiste en superponer dos o más 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.
- selección geométrica, 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 sólo la parte de los
elementos de un tema que la ventana superpone
97
Tema 9: Gestión 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 geográficos. También estudiaremos el modelo objeto-relacional de Oracle 8i y cómo
se insertan datos de tipo espacial en las tablas.
En el tema anterior definimos un objeto geográfico como dos partes: una descripción y una
componente espacial. Para distinguir un objeto geográfico de otro, debemos asignarle una
identidad. El conjunto de (identidad, componente espacial, descripción) se conoce como
entidad.
La interpretación del espacio depende de la semántica asociada con el territorio geográfico.
Consideremos, por ejemplo, a España. Si adoptamos un punto de vista administrativo,
España se divide en comunidades autónomas. Desde un punto de vista geológico,
obtenemos una organización totalmente distinta del espacio, en área geológicas. Si
estamos interesados en el control de tráfico, nos fijaremos en la red de carreteras. En cada
caso, elegimos una nueva interpretación del espacio y definimos un nuevo conjunto de
entidades que describen este espacio. En Oracle 8i, podemos utilizar los siguientes tipos
básicos de objetos espaciales:
a) punto (point). Se utilizan para representar la localización de entidades cuya forma no
se considera útil o cuando el área es bastante pequeña comparada con el espacio
total. Ciudades, iglesias y cruces son ejemplos de entidades tipo punto.
b) línea (line string). Se suelen usar para representar redes (carreteras, hidrográficas,
etc.). El tipo básico considerado es la polyline, que se define como un conjunto finito de
segmentos de líneas 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) polígono (polygon). Se utilizan para representar entidades con áreas grandes, tales
como parcelas o áreas administrativas. Un polígono es una región del plano acotada
por una polyline cerrada, llamada frontera.
Es importante destacar el hecho de que la elección de uno u otro tipo de objeto espacial es
arbitraria. Depende del futuro uso que se le va a dar a la colección de entidades. Muchos
factores pueden influir en esta elección, pero uno de los más determinantes es la escala.
Por ejemplo, un aeropuerto puede ser visto como un punto (si estamos interesados en
enlaces aéreos) o como un polígono, si el objetivo es la organización del aeropuerto.
Tema 9. Gestión 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 línea comienza fuera de un polígono y termina dentro del polígono.
- 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 algún modo.
100
Tema 9. Gestión de datos espaciales en Oracle 8i
Veamos, ahora, una descripción de las tablas específicas que son necesarias en Oracle 8i
para manejar los datos espaciales.
101
Tema 9. Gestión de datos espaciales en Oracle 8i
SDO_ORDINATES = NULL
- si modelamos el municipio como un polígono:
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 cómo 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. Gestión 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 Introducción
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 relación espacial entre dos
entidades
• SDO_GEOM.SDO_DISTANCE: permite conocer la mínima distancia euclídea entre dos
entidades
• SDO_GEOM.SDO_AREA: permite conocer el área de una entidad
• SDO_GEOM.SDO_LENGTH: permite conocer la longitud o el perímetro de una entidad
2 SDO_GEOM.RELATE
Ejemplos:
Obtener la descripción 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 función 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 información 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 información 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 perímetro 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
Práctica 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
Práctica 2. Consultas espaciales
NOMBRE
------------------------------
Abis
Abiside
7. Código, dueño y fecha de construcción 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
Práctica 2. Consultas espaciales
8. Código 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 también la distancia correspondiente.
CODIGO DISTANCIA
---------- ----------
2001 ,559016994
3001 ,55
3002 ,2
5001 ,5
CODIGO LONGITUD
---------- ----------
C5 4,15138782
10. Código y descripción de las carreteras que pasan por todos los municipios.
CODIGO DESCRIPCION
---------- --------------------------------------------------
C4 Carretera 4 - Circular
113
Práctica 3: Manipulación de la base de datos
Municipio: Bernacle
Dueño: Mónica Rodríguez Campos
Dirección: Calle Lago Bernacle, 3
Teléfono: 650673256
Precio: 22000
Fecha construcción: enero-1994
Descripción: amplio salón con chimenea, cocina office
Coordenadas: 5.1, 1.2
Habitación 1:
- número de plazas: 2
- baño: Sí
- precio noche: 12000
- precio descuento: 10000
- descripción: cama matrimonio, teléfono
Habitación 2:
- número de plazas: 4
- baño: Sí
- precio noche: 25000
- precio descuento: 20000
- descripción: dos camas matrimonio, teléfono