Está en la página 1de 37

Seminario Unigis

21 de Enero 2000

Bases de Datos y SQL

Michael Gould
ndice
Introduccin: Bases de datos
Modelo relacional
SQL
Repaso de comandos principales
Lenguaje de definicin de datos (DDL)
Lenguaje de manipulacin (DML)
Demostraciones
Extensiones de SQL para el mundo SIG
Problemas con el modelo relacional
Porque las bases de datos?
Parece obvio hoy en da
Tradicionalmente sistemas trabajaban a base de
ficheros sueltos, y procedimientos sobre ellos
sistemas a medida de cada aplicacin (pg. 2-9)
Bdatos: separacin de datos e su implementacin
(hardware/software)
Independencia
Proteccin (permite sistema multiusuario)
Flexibilidad (conectar la bdatos a todo)
Eficiencia (minimiza duplicidad de datos)
Integridad (minimiza errores lgicos)
Papel de BBDD en los SIG
Tpicamente mucha nfasis en cursos de SIG en la
parte cartogrfica
digitalizacin, depuracin, conversin de mapas
digitales...
enfoque geomtrico
y se puede enlazar atributos a cada elemento
geogrfico...lnea, polgono etc.
tpico ejemplo: segmento de calle (lnea) con 6
atributos: longitud, anchura, 4 nmeros de polica
La parte cartogrfica es ms visual, interesante
(transparencias)
Papel de BBDD (2)
La creacin de la base de datos SIG supone la
recogida de datos carto(geo)grficos y atributos
Ocupa gran parte del tiempo/presupuesto
Durante la explotacin de un SIG, a largo plazo, la
actualizacin cartogrfica juega un papel trivial
Explotacin del SIG sinnimo con consultar ...a la
base de datos (transparencias)

la geometra se mantiene relativamente fija, los atributos no


el SGBDR permite combinaciones de consultas casi sin limite
limitacin: del diseo de la base de datos
esta en vuestros manos
Papel de BBDD (3)
Un experto en BBDD puede determinar el xito de (o
salvar) un proyecto SIG; un cartgrafo no
UNIGIS ofrece dos asignaturas (mdulos) dedicadas
a las BBDD
Aconsejables los dos mdulos
Y si puede ser, un curso de Oracle despus de Unigis
Si no puede ser, utilizacin de MS-Access (en adicin
a Quasar) para el primer mdulo
Modelos de bases de datos
Modelo jerrquico
estructura de rbol: relaciones 1:muchos
requiere duplicacin de datos
Modelo en red
permiten mejor relacin entre los datos
todo conectado a todo
muy utilizado en aplicaciones COBOL (empresarial)
Dibujos en la pgina 2-30
Modelo relacional
modelo dominante hoy en da
Modelo relacional
Dr Edgar (Ted) Codd, de la IBM
1970 A relational model of data for large shared
data banks Communications of the ACM 13(6).
Modelo muy simple, flexible hasta cierto punto
Todo en tablas, con columnas y filas
Operaciones para crear, borrar, modificar tablas
Otras operaciones (lgebra relacional) para manipular
(consultar) estas tablas...
El modelo se caracteriza por tres elementos
Caractersticas del modelo
Elemento estructural: forma de guardar datos
todo en tablas, y nada ms que tablas
sin duplicar registros (filas, tuplas)
campos (columnas) con nombres nicos
entradas en un campo de solo un tipo
numrico (entero, real..), texto, fecha, etc.
todas las entradas sern datos atmicos
orden de filas/columnas no importa
valores nulos soportados (<> 0)
claves para crear relaciones (solo una es clave primaria)
Caractersticas (2)
Elemento de manipulacin: que se puede hacer
Entrada: una o mas tablas
Salida: una tabla nueva
Codd define lgebra y clculo relacional (el usuario no los
vea)
En la prctica, solo son 3 operadores fundamentales:
SELECT: especificar criterios de bsqueda y crear una nueva
tabla con solo los datos que buscbamos
PROJECT: copia un subconjunto de campos a una tabla nueva
JOIN: pega dos tablas para crear una nueva
Select y Join: operaciones crticas en el SIG vectorial
Caractersticas (3)
Elemento de integridad: control lgico
Integridad de entidades
garantiza que los campos clave tengan datos (no nulos) y que
si existe un registro se puede localizar
Integridad referencial
mantiene intactas relaciones (referencias) de clave a clave
no puedes borrar un registro al que depende otra tabla
los dos campos clave deben ser del mismo tipo
Cardinalidad = 2155 Grado = 5
Como manipular los
datos/tablas?
Structured Query Language, SQL
Viene de Sequel (IBM, 1974), todava se pronuncia
siquel, aunque oficialmente es S.Q.L.
Un estndar ANSI, ISO pero...
Los fabricantes han creado sus propias versiones
no exactamente estndares...
PL/SQL de Oracle <> SQL de MS Access (Jet)
Muchos SIG utilizan ficheros DBF o MDB, que los
manipulan sin los gestores dBase o Access
Ningn fabricante soporta el 100% del estndar
SQL y el modelo relacional
SQL no forma parte del modelo relacional
Query-By-Example (QBE), otros lenguajes de
consulta pueden aplicarse tambin al modelo
SQL ha sido aceptado como el lenguaje de facto
SQL aceptado por Codd, con matices
Sirve como lenguaje completo: de definicin (DDL) y
de manipulacin (DML) de datos segn el modelo
relacional
Tiene una estructura pseudo inglsa
Se utiliza como lingua franca entre sistemas
Repaso de comandos SQL
DDL:
CREATE <tabla>
DROP <tabla>
DML:
SELECT <columna(s) de datos>
FROM <tabla(s)>
WHERE <condicin lgica>
Ejemplos del sintaxis SQL
create table zona (
IdZona smallint not null unique,
NomZona char(30) not null unique,
Superf smallint,
IdOfCD smallint not null
);
create table tipo (
IdTipo smallint not null unique,
DescTipo char(30) not null unique
);
Mas ejemplos...
SELECT DISTINCT NomCons
FROM ofarea,relacion,ofcd,zona,parcela,construc
WHERE NomAr=Central
AND ofarea.IdAr=relacion.IdAr
AND relacion.IdOfCD=zona.IdOfCD
AND zona.IdZona=parcela.IdZona
AND parcela.IdCons=construc.IdCons;
Mas ejemplos...

SELECT
NomAr,AVG(Superf),SUM(Superf)
FROM ofarea,relacion,zona
WHERE ofarea.IdAr=relacion.IdAr
AND relacion.IdOfCD=zona.IdOfCD
GROUP BY NomAr;
FROM
Datum INNER JOIN (Map_projection INNER JOIN (Height_reference_system INNER JOIN
(((Keyword INNER JOIN ((Ellipsoid INNER JOIN (Geographic_area INNER JOIN
(Standard_product INNER JOIN (Scale INNER JOIN ((Organisation INNER JOIN Contact
ON Organisation.organisationID = Contact.organisationID) INNER JOIN (Dataset
INNER JOIN (((((((((((Application_schema INNER JOIN Contact_Role_of_contact ON
Application_schema.datasetID = Contact_Role_of_contact.datasetID) INNER JOIN
Dataset_Keyword ON Application_schema.datasetID = Dataset_Keyword.datasetID)
INNER JOIN Dataset_quality ON Application_schema.datasetID =
Dataset_quality.datasetID) INNER JOIN Distribution ON
Application_schema.datasetID = Distribution.datasetID) INNER JOIN Extent ON
Application_schema.datasetID = Extent.datasetID) INNER JOIN
Extent_Geographic_area ON (Extent.datasetID = Extent_Geographic_area.datasetID)
AND (Application_schema.datasetID = Extent_Geographic_area.datasetID)) INNER JOIN
Object_type ON Application_schema.datasetID = Object_type.datasetID) INNER JOIN
Organisation_Role_of_organisation ON Application_schema.datasetID =
Organisation_Role_of_organisation.datasetID) INNER JOIN Role_of_contact ON
(Role_of_contact.roleID = Contact_Role_of_contact.roleID) AND
(Organisation_Role_of_organisation.roleID = Role_of_contact.roleID)) INNER JOIN
Role_of_organisation ON (Role_of_organisation.roleID =
Organisation_Role_of_organisation.roleID) AND (Contact_Role_of_contact.roleID =
Role_of_organisation.roleID)) INNER JOIN Spatial_reference_system ON
Application_schema.datasetID = Spatial_reference_system.datasetID) ON
(Dataset.datasetID = Dataset_quality.datasetID) AND (Dataset.datasetID =
Dataset_Keyword.datasetID) AND (Dataset.datasetID =
Contact_Role_of_contact.datasetID) AND (Dataset.datasetID =
Organisation_Role_of_organisation.datasetID) AND (Dataset.datasetID =
Object_type.datasetID) AND (Dataset.datasetID = Extent.datasetID) AND
(Dataset.datasetID = Application_schema.datasetID) AND (Dataset.datasetID =
Distribution.datasetID) AND (Dataset.datasetID =
Spatial_reference_system.datasetID)) ON (Contact.contactID =
Contact_Role_of_contact.contactID) AND (Organisation.organisationID =
Organisation_Role_of_organisation.organisationID)) ON Scale.scaleID =
Dataset.scaleID) ON Standard_product.standard_productID =
Dataset.standard_productID) ON Geographic_area.geographic_areaID =
Extent_Geographic_area.geographic_areaID) ON Ellipsoid.ellipsoidID =
Spatial_reference_system.ellipsoidID) INNER JOIN Attribute_type ON
Object_type.object_typeID = Attribute_type.object_typeID) ON Keyword.keywordID =
Dataset_Keyword.keywordID) INNER JOIN Association_type ON
Object_type.object_typeID = Association_type.from_object_typeID) INNER JOIN
Object_Structure_primitive ON Object_type.object_typeID =
Object_Structure_primitive.object_typeID) ON
Height_reference_system.height_reference_systemID =
Spatial_reference_system.height_reference_systemID) ON
Map_projection.map_projectionID = Spatial_reference_system.map_projectionID) ON
Datum.datumID = Spatial_reference_system.datumID

WHERE
Relaciones
Son BBDD relacionales, no?
Dividimos los datos entre varias tablas (especficas)
para minimizar la duplicacin de datos, y tambin las
dependencias entre campos
proceso conocido como normalizacin (seccin 4.1.3)
Hay relaciones de 3 tipos entre atributos
1:1, una persona tiene un DNI
1:M, una persona tiene muchos amigos
M:N, una tienda tiene muchos clientes, cada uno de los
cuales es cliente de muchas tiendas
Relaciones (2)
El modelo relacional no permite relaciones M:N, por
eso a veces hay que crear nuevas tablas (auxiliares)
como puentes entre una tabla y otras
Ejemplo de la Videoteca:
tabla clientes (cada cliente es nico)
tabla pelculas (cada pelcula es nica)
Problema: Como modelar el caso en que una pelcula esta
en manos de muchos clientes, y que cada cliente puede
haber alquilado muchas pelculas?
Solucin: nueva tabla movimientos, con campos en
comn con clientes y pelculas
Claves
Para enlazar tablas mediante un campo en comn
Claves primarias (campo nico), como DNI en la
tabla clientes
Claves externas (forneas), como DNI en la tabla
movimientos
Ejemplo de Neptuno en Access
Diseo de la Base de Datos
Cuales son las entidades (y sus atributos) de
importancia
Cuales son las relaciones entre ellas
Creacin de modelos E-A-R tratada en detalle en la
seccin 4 del libro Unigis
Luego disear una bdatos fsica de acuerdo con el
modelo
Este diseo no es una tarea trivial
La explotacin del SIG (consultas posibles) se basa
en este diseo !!
Redisear una base de datos a posteriori MUY caro !!
SQL en el mbito SIG
Se utiliza (SQL es un estndar de facto)
Cuando sabes SQL, sabes el 30% de cualquier SIG vectorial
Pero no es lenguaje ptimo para representar las
relaciones espaciales (basadas en la geometra)
cerca de, pasando por, interseccin con, dentro de
Y no permite interaccin multimodal
Cules son las carreteras que pasan por este
<sealizando con ratn> barrio?
En general: SQL es para tablas de texto
SQL sirve para modelar como la gente utiliza tablas
Problemas con SQL
Normalmente el SIG maneja datos alfanumricos (en
tablas relacionales) y grficos (en ficheros
propietarios)...
Ejemplos de Arc/INFO, MapInfo
SQL no ofrece herramientas para la parte grfica
No es eficiente guardar miles (millones) de coords x,y,z en
columnas largas
Para representar un polgono hace falta crear por lo menos 5
tablas y sus relaciones correspondientes
Demasiado complicado y lento
Problemas con SQL (2)
Como optimizar almacenamiento de datos
espaciales?
Puedes ordenar un campo y definir un ndice (que siempre
es unidimensional) sobre este campo
Contra la norma de Codd, que el orden no importa
Y qu campo vas a elegir? Slo coord-x, slo coord-y...
En general, lectura de tablas relacionales es muy lenta
(olvdalo para dibujar elementos geogrficos)
Indices bidimensionales
Quadtree, KDB-tree (van Oosterom)
Decomposicin/indexacin regular en 2-D del espacio
Problemas con SQL (3)
No se puede definir tipos de datos abstractos
Modelo relacional define CHAR, ENTERO, REAL,
FECHA, etc.
Sera til poder definir tipos geomtricos por
ejemplo:
lnea, nodo, rectngulo...
Reconocida hace 20 aos la necesidad de
extensiones especiales al SQL para servir los campos
SIG, CAD, diseo...
Solucin 1: Pseudo-SQL
Ejemplo de MapInfo
Han definido extensiones para objetos
geogrficos
aqu objeto = entidad (no es OO)
obj contiene otro obj, tiene interseccin con, esta
completamente dentro...
Gestor de base de datos hecho por MapInfo, que
entiende estas extensiones, y que trabaja con
ficheros DBF
No cumple con muchas normas del ANSI SQL
Pero funciona...
Solucin 2: SQL espacial
Bundock y otros (Smallworld)
Herring y otros (Intergraph>>Oracle)
van Oosterom (en libro anexo Unigis)
SQL-3 algo ms flexible, permite algo de OO
SQL-MM (multimedia)
Oracle Spatial (todos los datos en tablas relacionales)
Basado en un nuevo modelo objeto-relacional
Soporta algo de SQL, algo de conceptos OO,
programacin desde Java, C++, etc.
Ejemplos, Oracle Spatial
Cuales son los parques con ros?

SELECT parks.name
FROM parks, rivers
WHERE
sdo_geom.relate(parks.geometry,
rivers.geometry,
OVERLAPBDYINTERSECT) =
OVERLAPBDYINTERSECT;
Otro de Oracle Spatial

Parques por donde pasa la carretera I-93

SELECT Parks.Name FROM Parks, Roads


WHERE
MDSYS.SDO_RELATE(Parks.Geometry,
Roads.Geometry,
MASK=ANYINTERACT) = TRUE
AND Roads.Name = I-93;
BBDD objeto-relacional
En su infancia
Oracle liderando el campo, empujando fuerte
tiene grupo de 200 trabajando en temas especiales
BD relacionales poseen una masa crtica sustancial
Todos los sistemas utilizan indexacin 2-D (o n-D)
para mejorar rendimiento
tema tratado en otro modulo de Unigis
El futuro de las BBDD
Ya que vivimos en tiempo de Internet, nadie sabe
Ser la propia Internet (web) nuestra base de
datos?
Todo distribuido
Todo conectado
Faltan nuevos ndices, buscadores
Es una base de datos con dominio abierto
crece al ritmo de 100.000 pginas (recursos) al da
no es posible la consulta Dame un listado de todos los
recursos sobre tal tema
Otros tiempos, otros SIGs
Seminario Unigis
21 de Enero 2000

Gracias por vuestra atencin.

gould@uji.es

También podría gustarte