bases de datos obxecto-relacionais introduccióncoba.dc.fi.udc.es/~bd/noauth/bdor.pdf · bases de...
Post on 04-Dec-2018
234 Views
Preview:
TRANSCRIPT
Bases de Datos Obxecto-Relacionais
Miguel Rodríguez Penabad
Laboratorio de Bases de Datos
Universidade da Coruña
Introducción
Conocementos previos
I Sobre Programación/Deseño Orientado a ObxectosI Especializacións, Herencia, ...
Obxectivos - Contidos do tema
I Ver os motivos da aparición da Orientación a Obxectos en BDs.I Conocer as extensións de tipos en BDOR
I Tipos complexos, coleccións, referencias a obxectos
I Entender os mecanismos de herencia en BDORI Ver a evolución de SQL (DDL, DML)I Discusión: ventaxas e inconvenientes do modelo obxecto-relacional
Bases de Datos Obxecto-Relacionais 2 / 35
Orientación a Obxectos en BD - MotivaciónSituación actual
I Existen BDs e aplicacións �tradicionais�Ex: Aplicacións xestión (nóminas, etc.)
I Rexistros cortos, simples, de lonxitude �xaI Primeira forma normal
I Aparecen novas necesidades de informaciónMelloras no hardware, novas aplicacións e tipos de información
I CAD/CAM (Deseño/Manufactura)I Ferramentas CASE (Enxeñaría de Software)I OIS (O�ce Information System)I Sistemas MultimediaI GIS (Sistemas de Información Xeográ�ca)
Bases de Datos Obxecto-Relacionais 3 / 35
Orientación a Obxectos en BD - MotivaciónProblemas e solucións
I Orientación a Obxectos no desenvolvemento de softwareI Éxito da Programación OO, Deseño OO, UML, Proceso
Uni�cadoI As aplicacións usan obxectos
Non hai 1FN, hai referencias/punteiros a obxectos e colecciónsI Problema: Desaxuste de impedancias ó tratar de almacenar
obxectos en BD relacionaisNecesidade de tranducción, �aplanar� obxectos, ...
I Problemas en consultasI Formulación
Ex: Imaxes con círculosI Optimización
Ex: calcular polígonos que se solapan cun polígono concreto
Bases de Datos Obxecto-Relacionais 4 / 35
Orientación a Obxectos en BD - Plantexamentos (i)
Linguaxe de programaciónOrientado a Obxectos
PersistenciaBase de Datos
Orientada a Obxectos
Base de Datos RelacionalOrientacióna Obxectos
Base de DatosObxecto-Relacional
Bases de Datos Obxecto-Relacionais 5 / 35
Orientación a Obxectos en BD - Plantexamentos (ii)
BD Orientada a ObxectosLinguaxe de programaciónOrientado a Obxectos
PersistenciaBase de Datos
Orientada a Obxectos
I Proposto por ODMG (Object Data Management Group)
I Son Linguaxes de Programación Persistentes (Estándar en2000)
I ODL (Object De�nition Language)I OML (Object Manipulation Language)I OQL (Object Query Language)
I Evolución: OMG (Object Management Group)I ODMG Java binding evoluciona a JDO (Java Data Objects,
estándar sen �nalizar)
I Máis que unha BD é un conxunto de ferramentas para dotarde persistencia ás clases dunha aplicación
I Impacto relativamente baixo no mercado
Bases de Datos Obxecto-Relacionais 6 / 35
Orientación a Obxectos en BD - Plantexamentos (iii)
BD Obxecto-RelacionalBase de Datos Relacional
Orientacióna Obxectos
Base de DatosObxecto-Relacional
I Conservar un modelo compatible co Modelo RelacionalI Fundamento teórico moi sólidoI Máis de 35 anos de investigación
I Exténdese para incorporar características desexables da OO
I Adoptado por numerosos SXBD
Oracle, IBM DB2, Informix Dynamic Server, PostgreSQLI Extensión do SQL para incorporar as novas características
I Estándar SQL:1999, revisado en SQL:2003I Extensión de tipos, obxectos, herencia, ...I Incorpora outras novidades
I Consultas recursivas, SQL/XML, ...
Bases de Datos Obxecto-Relacionais 7 / 35
Bases de Datos Obxecto-Relacionais
I Evolución do SQL
I Tipos de datosI Prede�nidosI Constructores de tipoI Tipos de�nidos polo usuarioI Referencias
I Herencia
I Táboas de ObxectosI CreaciónI ConsultasI Vistas
Bases de Datos Obxecto-Relacionais 8 / 35
Evolución do SQL
I SEQUEL (Structured English QUEry Language).Desarrollado en IBM para SYSTEM R.
I SQL-86 ou SQL-1. ANSI e ISO en 1986. Revisado en 1989.
I SQL-92 ou SQL-2. 1992.
I SQL:1999 (inicialmente chamado SQL3 ou SQL-99)Introduce tipos de datos complexos, procedementosalmacenados, triggers, ...
I SQL:2003. Revisión do SQL:1999, maioritariamentecorreccións e SQL/XML.
Bases de Datos Obxecto-Relacionais 9 / 35
SQL:2003 - Tipos de datos prede�nidos
I Numéricos exactosSMALLINT, INTEGER, BIGINT, NUMERIC[(p[,s])], DECIMAL[(p[,s])]
I Numéricos aproximadosREAL, DOUBLE PRECISION, FLOAT[(P)]
I Cadeas de caracteresCHAR[ACTER][(n)], CHAR[ACTER] VARYING(n) ou VARCHAR(n),CHARACTER LARGE OBJECT[(tamaño)] ou CLOB[(tamaño)]
Opcionalmente NATIONAL para internazionalizaciónI Binarios
(En SQL:1999 había BIT, BIT VARYING(n), pero foron eliminados en SQL:2003)
BINARY LARGE OBJECT[(tamaño)] ou BLOB[(tamaño)]
I Datas e horasDATE, TIME [WITH TIME ZONE], TIMESTAMP [WITH TIME ZONE]
Tamén inclúe tipos para INTERVALos de tempoI Outros
Lóxicos: BOOLEAN, con valores TRUE, FALSE, UNKNOWNXML
Bases de Datos Obxecto-Relacionais 10 / 35
SQL:2003 - Tipos de datos prede�nidosExemplos
1 CREATE TABLE Libro(
2 id CHAR(5),
3 titulo NATIONAL CHARACTER VARYING(100),
4 resumen NCLOB(25K),
5 imaxe BLOB(2M),
6 prezo NUMERIC(6,2)
7 ...
8 );
9
10 CREATE TABLE ProgramaTV(
11 ...
12 edade_min SMALLINT,
13 hora_ini TIMESTAMP WITH TIME ZONE,
14 telebasura BOOLEAN,
15 ...
16 );
Bases de Datos Obxecto-Relacionais 11 / 35
SQL:2003 - Constructores de Tipos
I Filas (rows)I ColecciónsI Tipos distinctI Tipos complexosI Referencias
CREATE TABLE Empregado(
NSS CHAR(9) NOT NULL PRIMARY KEY,
Nome VARCHAR(59) NOT NULL,
Enderezo ROW( -- Fila
Rua VARCHAR(40),
Numero SMALLINT,
Poboacion VARCHAR(40)
),
Salario EUROS, --Distinct
Telefono VARCHAR(20) ARRAY[2], --Colección
Experiencia ROW(
Posto VARCHAR(30),
Anos SMALLINT
) MULTISET --Colección de filas
);
Bases de Datos Obxecto-Relacionais 12 / 35
SQL:2003 - Constructores de tiposTipos Fila
I Constructor: ROW(<def. campo1>, <def. campo2>, ...)
Enderezo ROW(
Rua VARCHAR(40),
Numero SMALLINT,
Poboacion VARCHAR(40))
I Acceso ó tipo ou ós compoñentes
UPDATE ... SET Enderezo=ROW('Real',3,'Lugo')
SELECT ... WHERE Enderezo.Rua='Real'
I Pode anidarse
e EnderezoEspana ROW(
Provincia VARCHAR(20),
EnderezoProv ROW(
Rua VARCHAR(40),
Numero SMALLINT,
Poboacion VARCHAR(40)
)
)
... e.Provincia='Lugo' and e.EnderezoProv.Poboacion='Viveiro'
Bases de Datos Obxecto-Relacionais 13 / 35
SQL:2003 - Constructores de tiposColeccións (i): Arrays
<tipo> ARRAY[(n)]
I Pérdese a 1a Forma Normal (con calquera tipo de colección)I Coleeción ordenada (referenciada polo índice), admite valores
duplicadosI Aplicable a calquera tipo excepto ARRAYI Constructor: ARRAY[<lista elementos>]
A CHAR(59) ARRAY, Telefonos VARCHAR(20) ARRAY(2)
... set A = ARRAY['papel','pluma']
... set Telefonos[2] = '666 123 456' --Telefonos[1]: NULL
... WHERE Telefonos[1] IS NULL
I OperaciónsI Número de elementos: CARDINALITY(A)I Concatenación:
ARRAY['papel','pluma'] || ARRAY['lápiz']I UNNEST
Bases de Datos Obxecto-Relacionais 14 / 35
SQL:2003 - Constructores de tiposColeccións (ii): Multisets
<tipo> MULTISET (multiconxunto, bolsa)
I Colección sen orden nin índice, admite valores duplicadosI Constructor: MULTISET[<lista valores>] ou
MULTISET(<sentencia select>)
ms1=MULTISET[ROW('secretaria',2), ROW('xefa',4)]
ms2=MULTISET(select campo1 from taboa1)
I OperaciónsI Número de elementos: CARDINALITY(ms1)I Transformación a conxunto: SET(ms2)I Predicados:
a MEMBER OF ms, ms1 SUBMULTISET OF ms2,ms1 IS A SET
I MULTISET UNION, MULTISET INTERSECTION,MULTISET EXCEPT,
I UNNESTI Funcións de agregado: COLLECT, FUSION, INTERSECTION
Bases de Datos Obxecto-Relacionais 15 / 35
SQL:2003 - Constructores de tiposExemplos de operacións sobre coleccións
EMPREnomemp coddep postos
Ana 10 MULTISET[programador, analista, xefe]David 10 MULTISET[analista]Pedro 20 MULTISET[programador, analista]
DEPTOcod nomdep
10 Compras10 Ventas
-- A/desde 1FN
SELECT nomemp, UNNEST postos
FROM Empre;
SELECT nomdep,
MULTISET (SELECT nomemp FROM Empre
WHERE coddep = cod)
FROM Depto;
-- Agregados
SELECT coddep, COLECT(nomemp)
FROM Empre
GROUP BY coddep;
SELECT COLLECT(nomemp),
FUSION(postos) AS TodosPostos,
INTERSECTION(postos) AS PostosComuns
FROM Empre;
Bases de Datos Obxecto-Relacionais 16 / 35
SQL:2003 - Tipos de�nidos polo usuario
I Esquema básico
CREATE TYPE <nome tipo>
AS <definición tipo>
<restriccións de instanciación / subclase>
I <nome tipo> é o identi�cador (único no esquema)I <definición tipo> especi�ca o tipo
I Tipos distinctI Tipos estructurados
I <restriccións de instanciación / subclase>
I [NOT] INSTANTIABLE: Especi�ca se haberá �valores� desetipo (atributos, �las, ...)
I [NOT] FINAL: Especi�ca se podemos especializar o tipo (crearsubtipos)
NOT FINAL obrigatorio para tipos estructurados (permiteespecialización)FINAL obrigatorio para tipos distinct (non a permite)
Bases de Datos Obxecto-Relacionais 17 / 35
SQL:2003 - Tipos DISTINCTI Rede�nen tipos prede�nidos
I Normalmente para evitar inconsistencias semánticasI Podemos realizar conversións (casts)
I Son tipo FINAL (non poden de�nirse outros tipos sobre eles)
1 CREATE TABLE EMPREGADO(
2 NSS char(9),
3 Sal DECIMAL(7,2), --En EUROS
4 Com DECIMAL(7,2), --En DOLARES
5 ....
6 );
¾Que obtemos con esta consulta?
1 SELECT Sal+Com as SalTotal
2 FROM EMPREGADO;
1 CREATE TYPE EUROS AS DECIMAL(7,2) FINAL;
2 CREATE TYPE DOLARES AS DECIMAL(7,2) FINAL;
3 CREATE TABLE EMPREGADO(
4 Sal EUROS,
5 Com DOLARES, .... );
6
7 CREATE FUNCTION dolar_a_euro(d DOLARES)
8 RETURNS EUROS
9 BEGIN
10 RETURN d/1.1925;
11 END;
12
13 CREATE CAST(DOLARES AS EUROS)
14 WITH FUNCTION dolar_a_euro(DOLARES);
15
16 -- Salario total correcto, en euros
17 SELECT Sal+CAST(Com AS EUROS)
18 as SalTotal
19 FROM EMPREGADO;
Bases de Datos Obxecto-Relacionais 18 / 35
SQL:2003 - Tipos estructurados
I Constructor básico: �la (non se usa a palabra ROW)I A partir de tipos prede�nidos e/ou tipos distinctI Usando constructores (�la, colección)I Permiten de�nir métodos
CREATE TYPE Enderezo AS (
Rua VARCHAR(40),
Numero SMALLINT,
Poboacion VARCHAR(40)
) INSTANTIABLE NOT FINAL;
CREATE TYPE Empregado AS (
NSS CHAR(9),
Nome VARCHAR(59),
Dir Enderezo,
Sal EUROS
) INSTANTIABLE NOT FINAL;
CREATE TABLE Departamento(
Cod NUMERIC(3) PRIMARY KEY,
Nome VARCHAR(50),
Director Empregado,
Emps Empregado MULTISET
);
Bases de Datos Obxecto-Relacionais 19 / 35
SQL:2003 - Rutinas
I Estándar ISO/IEC 9075: 2003ISO/IEC 9075-2: SQL/FoundationISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM)
I Permite incluir rutinas na base de datosI Procedementos (procedure)
I Chamada: CALL
I Funcións (function)I Devolven un valorI Chamada en expresións (select, ...)I Métodos en tipos estructurados/obxectos (method)
I Poden ser de�nidas en SQL ou externas
Bases de Datos Obxecto-Relacionais 20 / 35
SQL:2003 - RutinasExemplos
CREATE PROCEDURE inc_salario
(IN porcentaxe NUMERIC(2))
BEGIN
UPDATE Empregado
set Salario = Salario *
(1 + porcentaxe/100.0);
END;
CALL inc_salario(2);
CREATE FUNCTION sal_total(oNSS CHAR(9))
RETURNS EURO;
BEGIN
DECLARE saltotal EURO;
SELECT Salario+Comision INTO saltotal
FROM EMP
WHERE NSS = oNSS;
RETURN saltotal;
END;
CREATE FUNCTION fx (p DOUBLE PRECISION)
RETURNS DOUBLE PRECISON
LANGUAGE C
EXTERNAL NAME '/usr/lib/udf/fx.so'
PARAMETER STYLE GENERAL
DETERMINISTIC
NO SQL;
SELECT NSS, Nome, sal_total(NSS)
FROM Empregado;
Bases de Datos Obxecto-Relacionais 21 / 35
SQL:2003 - Métodos
I Función asociada a un tipo estructuradoI Parámetro (implícito) SELFI Distintos tipos de métodos
I Estáticos (de clase); de instanciaI Constructores, observadores, mutadores, ...
CREATE TYPE Rectangulo(
x1 FLOAT, y1 FLOAT,
x2 FLOAT, y2 FLOAT)
INSTANTIABLE NOT FINAL
INSTANCE METHOD Area()
RETURNS FLOAT;
-- Metodo de instancia
CREATE INSTANCE METHOD Area
RETURNS FLOAT
FOR Rectangulo
BEGIN
RETURN ABS(SELF.x2 - SELF.x1) *
ABS(SELF.y2 - SELF.y1);
END;
CREATE TABLE Rects (
Id INTEGER,
Rect Rectangulo
);
SELECT Id, Rect.Area()
FROM Rects;
Bases de Datos Obxecto-Relacionais 22 / 35
SQL:2003 - Métodos (ii)
Constructores explícitos ouimplícitos
CREATE METHOD Rectangulo
(x1 float, y1 float,
x2 float, y2 float)
RETURNS Rectangulo
FOR Rectangulo
BEGIN
SELF.x1 = x1; SELF.y1 = y1;
SELF.x2 = x2; SELF.y2 = y2;
RETURN SELF;
END;
INSERT INTO Rects(Id, Rect)
VALUES (100,
NEW Rectangulo(1,1,5,9));
Observers e Mutators (de�nidos polo sistema)
UPDATE Rects
SET Rect = Rect.x1(2) -- Mutador:
-- Rect.x1 = 2
WHERE Rect.Id() = 100;-- Observador
-- Combina uso de constructor e mutadores
INSERT INTO Rects(Id, Rect)
VALUES (101,
NEW Rectangulo().x1(1).y1(1).x2(5).y2(9));
Bases de Datos Obxecto-Relacionais 23 / 35
SQL:2003 - Referencias e Obxectos
I Cada tipo de datos estructurado ten asociado un tipo referencia
REF(<tipo>)
I Pode serI REF FROM(<campo>): usa un (ou máis) dos atributos do tipo.I REF IS SYSTEM GENERATED: xenerada polo sistema.I REF USING <tipo de datos>: de�nida polo usuario
I �Punteiro persistente�I Usaranse para integridade referencial ...pero na declaración de tipo
non se indica a táboa referenciada, só o tipo.
CREATE TYPE Empregado(
NSS CHAR(9),
Nome VARCHAR(59), ...,
Depto REF(Departamento)
) NOT FINAL
REF FROM (NSS);
CREATE TYPE Departamento(
Nome VARCHAR(40),
Emps REF(Empregado) MULTISET
) NOT FINAL
REF IS SYSTEM GENERATED;
Bases de Datos Obxecto-Relacionais 24 / 35
SQL:2003 - Uso dos Tipos estructurados
I Como componentes (�campos�) dun tipo máis complexoI Como atributos dunha táboaI Para crear �táboas de obxectos�
I Unha táboa almacena unha colección de obxectosI Uso de OIDs (Object IDenti�ers)
I Importante de�nirI Os OIDs (REFerencias, que serán system generated,
user generated, derived)I O ámbito das referencias (integridade referencial, con opcións)
CREATE TABLE Empregados
OF Empregado
(REF IS NSS USER GENERATED,
-- ref is nss derived?
Depto WITH OPTIONS SCOPE Deptos
REFERENCES ARE CHECKED
ON DELETE RESTRICT);
CREATE TABLE Deptos
OF Depto
(REF IS oid SYSTEM GENERATED,
Emps WITH OPTIONS SCOPE Empregados);
Bases de Datos Obxecto-Relacionais 25 / 35
SQL:2003 - HerenciaHerencia de tipos
I Tipos de herencia admitidaI Herencia simple (... UNDER <superclase>)I Subclases disxuntasI Sobrecarga (rede�nición) de métodos
(selección do método adecuado en tempo de execución)
CREATE TYPE Rectangulo(
x1 FLOAT, y1 FLOAT,
x2 FLOAT, y2 FLOAT) INSTANTIABLE NOT FINAL
INSTANCE METHOD Area() RETURNS FLOAT;
-- Omitimos o codigo de Area()
CREATE TYPE cadrado
UNDER rectangulo (
tamano FLOAT
) INSTANTIABLE NOT FINAL
OVERRIDING METHOD area() RETURNS FLOAT;
CREATE METHOD area() FOR cadrado
BEGIN
RETURN Self.tamano * Self.tamano;
END;
CREATE TYPE dobrecadrado
UNDER rectangulo (
ladocorto FLOAT
) INSTANTIABLE NOT FINAL
OVERRIDING METHOD area() RETURNS FLOAT;
CREATE METHOD area() FOR cadrado
BEGIN
RETURN Self.ladocorto * Self.ladocorto * 2;
END;
Bases de Datos Obxecto-Relacionais 26 / 35
SQL:2003 - HerenciaHerencia en táboas (i)
Exemplo � Modelo conceptual
Bases de Datos Obxecto-Relacionais 27 / 35
SQL:2003 - HerenciaHerencia en táboas (ii)
Exemplo � DatosPersoa
IDPers Nome
111 Diego222 Sara333 Luisa444 Carlos
Alumno
IDPers Ano Curso
222 2002 5444 2006 1
Profesor
IDPers Departamento
111 Computación
Asignatura
Cód Nome Créd Aula
BD2 BD2 9 [3.3,LAB2.2]
Aula
Número Capacidade Asign
3.3 100 [BD2]LAB2.2 30 [BD2]
Clase
IDPers Ano Curso
111 222 BD2111 444 BD2
Bases de Datos Obxecto-Relacionais 28 / 35
SQL:2003 - HerenciaHerencia en táboas (iii)
Exemplo � Creación de tipos
CREATE TYPE Persoa AS(
IDPers CHAR(9),
Nome VARCHAR(50)
) NOT FINAL REF FROM(IDPers);
CREATE TYPE Alumno
UNDER Persoa AS(
Ano NUMERIC(4),
Curso NUMERIC(1),
enClases REF(Clase) MULTISET
)NOT FINAL;
CREATE TYPE Profesor
UNDER Persoa AS(
Departamento VARCHAR(20),
daClase REF(Clase) MULTISET
)NOT FINAL;
CREATE TYPE Asignatura AS(
Codigo CHAR(5),
Nome VARCHAR(30),
Creditos NUMERIC(2),
asAulas REF(Aula) MULTISET,
impartida REF(Clase) MULTISET
)NOT FINAL REF FROM(Codigo);
CREATE TYPE Aula AS(
Numero CHAR(9),
Capacidade SMALLINT,
asAsignaturas REF(Asignatura)
MULTISET
)NOT FINAL REF FROM(Numero);
CREATE TYPE Clase AS(
oProfesor REF(Profesor),
oAlumno REF(Alumno),
aAsignatura REF(Asignatura)
)NOT FINAL REF IS SYSTEM GENERATED;
Bases de Datos Obxecto-Relacionais 29 / 35
SQL:2003 - HerenciaHerencia en táboas (iv)
Exemplo � Creación de táboas
CREATE TABLE Persoas OF Persoa
(REF IS IDPers USER GENERATED);
CREATE TABLE Alumnos
UNDER Persoas
OF Alumno
(enClase WITH OPTIONS SCOPE
Clases);
CREATE TABLE Profesores
UNDER Persoas
OF Profesor
(daClase WITH OPTIONS SCOPE
Clases);
CREATE TABLE Asignaturas OF Asignatura
(REF IS Codigo USER GENERATED,
impartida WITH OPTIONS SCOPE Clases,
asAulas WITH OPTIONS SCOPE Aulas);
CREATE TABLE Aulas OF Aula
(REF IS Numero USER GENERATED,
asAsignaturas WITH OPTIONS SCOPE Asignaturas
);
CREATE TABLE Clases OF Clase
(REF IS oid SYSTEM GENERATED,
oProfesor WITH OPTIONS SCOPE Profesores,
oAlumno WITH OPTIONS SCOPE Alumnos,
aAsignatura WITH OPTIONS SCOPE Asignaturas);
Bases de Datos Obxecto-Relacionais 30 / 35
SQL:2003 - HerenciaHerencia en táboas (v)
Almacenamento e consultas
I Créanse táboas para a clase e as subclasesI Unha persoa (non profesor nin alumno) só ten datos en
Persoas.I Un alumno ten o IDPers e nome na táboa Persoas e os datos
de ano e curso na táboa Alumnos.I Un profesor ten o IDPers e nome na táboa Persoas e o
departamento na táboa Profesores.I Unha persoa non pode ser alumno e profesor á vez
(SQL:2003 ⇒ especialización disxunta)I A selección pode implicar Joins
I Selección en Persoas: só datos de persoasI Selección en Alumnos: Obtén todos os datos (como persoa e
como alumno). Implica facer internamente un join entrePersoas e Alumnos
Bases de Datos Obxecto-Relacionais 31 / 35
SQL:2003 - HerenciaHerencia en táboas (vi)
Modi�cación de datos
Inserción: Inserción en subclase ⇒ Inserción automática ensuperclase.
Borrado: Borrado en superclase ⇒ Borrado en todas assubclases, e viceversa.
Modi�cación: Modi�cación dos atributos �visibles� por cada táboa.Modi�cación como cambio de subclase: non sepermite.
Implicacións
¾Que ocorre se queremos almacenar ...
I que Sara non é alumna (quedaría só como persoa)?I que Luisa é profesora?I que Diego pasa de alumno a profesor?
Bases de Datos Obxecto-Relacionais 32 / 35
Consultas
Modi�cación de datos
I Tipos básicos (e distinct sobre eles): igual en SQL-92.
I Tipos �la: constructor ROW
I Coleccións:I Arrays: con constructor ou elemento a elementoI Multisets: con constructor ou operacións �alxebraicas�
I Referencias: Primeiro obter a referencia do obxecto.
Selección de datosExtracto de transparencias creadas por J. R. Ríos Viqueira (USC).
Bases de Datos Obxecto-Relacionais 33 / 35
Discusión
Ventaxas
I Maior capacidade de modelización
I ExtensibilidadeI Novos tipos de datos e novas operaciónsI Novas consultas
I Reusabilidade
I Integración relacional-obxectos(Eliminar desadaptación de impedancias)
Inconvenientes
I Falta de modelo (teórico) básico universal (para OO)
I Non é un modelo cerrado
I Problemas co tratamendo de referencias
I Xestión de herencia defectuosaBases de Datos Obxecto-Relacionais 34 / 35
Bibliografía
Thomas Connolly and Carolyn Begg.Sistemas de Bases de datos: Un enfoque práctico para diseño,
implementación y gestión.Addison-Wesley, 4a edition, 2005.
C. J. Date.Introducción a los sistemas de bases de datos.Prentice Hall, 7a edition, 2001.
Andrew Eisenberg, Jim Melton, Krishna Kulkarni, Jan-EikeMichels, and Fred Zemke.SQL:2003 has been published.SIGMOD Rec., 33(1):119�126, 2004.
P. Gulutzan and T. Pelzer.SQL-99 complete, really.R&D Books, Kansas, 1999.
J. Melton and A. R. Simon.SQL:1999 - Understanding relational language components.Morgan Kaufmann, 2002.
Bases de Datos Obxecto-Relacionais 35 / 35
1
Curso 2005/2006 1J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
SQL:2003 - Consultas
Fragmento del original:SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOSAsignatura: Sistemas de Información, Tema 2José Ramón Ríos ViqueiraCurso 2005-2006
Curso 2005/2006 2J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
Tipos complejos: ROW, ARRAY, MULTISET
CONSULTAS
CREATE TABLE empleado (id_emp INTEGER PRIMARY KEY,nombre VARCHAR(50),direccion ROW(calle VARHCAR(100), num INTEGER, loc VARCHAR(10),salario DECIMAL(9, 2),hijos VARCHAR(50) ARRAY,cursos ROW(nombre VARCHAR(50), nota DECIMAL(3, 1)) MULTISETdep INTEGER,
FOREING KEY dep REFERENCES departamento(id_dep));
CREATE TABLE departamento (id_dep INTEGER PRIMARY KEY,nombre VARCHAR(50),direccion ROW(calle VARHCAR(100), num INTEGER, loc VARCHAR(10),presupuesto DECIMAL(12, 2),
);
2
Curso 2005/2006 3J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
Tipos complejos: ROW, ARRAY, MULTISETDesanidar tipos colección
CONSULTAS
Obtener una lista con los hijos de cada empleado
SELECT e.nombre, h.hijoFROM empleado AS e, UNNEST (e.hijos) AS h(hijo)
Obtener para cada empleado de Santiago la nota media en los cursos que aprobó
SELECT e.nombre, AVG(c.nota)FROM empleado AS e, UNNEST (e.cursos) AS c(nota)WHERE e.direccion.loc = 'Santiago' and c.nota >= 5 GROUP BY e.nombre
Curso 2005/2006 4J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
Tipos complejos: ROW, ARRAY, MULTISETAnidar tipos colección
CONSULTAS
Obtener un informe en el que para cada departamento cuyo presupuesto sea mayor que la suma de los sueldos de sus empleados se indique:
• Nombre del departamento, • Presupuesto del departamento, • Relación de empleados con el nombre, salario y número de hijos
de cada empleado• Suma del salario de todos sus empleados
SELECT d.nombre, d.presupuesto,MULTISET(SELECT e2.nombre, e2.salario, count(h.hijo) AS Hijos
FROM empleado AS e2, UNNEST (e2.hijos) AS h(hijo)WHERE d.id_dep = e2.depGROUP BY e2.nombre, e2.salario),
SUM(e.salario) AS SalarioTotalFROM departamento AS d, empleado AS e WHERE e.id_dep=e.depGROUP BY d.nombre, d.presupuestoHAVING d.presupuesto > SUM(e.salario)
3
Curso 2005/2006 5J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
Uso de tipos estructurados: métodos y funciones
CONSULTAS
CARRETERAScod_carrt
N-651A-9 F
cp-0804064-001
propietarioEstatalEstatalProvincialMunicipal
EstadoMalo
BuenoRegularBueno
TrazadoL1L2L3L4
CENTROS_SALUDid_cs
12
nombreViñasSan Cide
camas0
10
posicionP1P2
Valores de tipo Linea
Valores de tipo Punto
CREATE TYPE punto UNDER geo (
x FLOAT, y FLOAT)INSTANTIABLE NOT FINAL;
CREATE TYPE linea UNDER geo(coords punto ARRAY)
INSTANTIABLE NOT FINALINSTANCE METHOD longitud() RETURNS FLOAT;
CREATE FUNCTION distancia (g1 geo, g2 geo) RETURNS FLOATBEGIN ... END
Curso 2005/2006 6J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
Longitud total de carreteras municipales en mal estado
CONSULTAS
SELECT sum(trazado.longitud)FROM carreterasWHERE propietario = 'Municipal' and estado = 'Malo'
Número total de camas de los centros de salud que se encuentran a menos de 1 km de un tramo de carretera con longitud mayor de 2 km y estado bueno
SELECT sum(camas)FROM carreteras AS c, centros_salud AS csWHERE c.estado = 'bueno' and c.longitud < 2000
and distancia(c.trazado, cs.posicion) < 1000
Uso de tipos estructurados: métodos y funciones
4
Curso 2005/2006 7J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Uso de tipos estructurados: Herencia
CREATE TABLE rios AS (id_rio INTEGER PRIMARY KEY,nombre VARHCAR(50),geom geo)
SELECT nombre, SUM(TREAT(geom AS linea).longitud)FROM riosWHERE geom IS OF (linea)GROUP BY nombre
Para cada río, devolver la longitud total de las partes que son de tipo línea
2, 'Tambre'
1, 'Tambre'
3, 'Tambre'
Curso 2005/2006 8J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
Referencias
CONSULTAS
CREATE TYPE Empleado AS (nombre VARCHAR (50),salario_base DECIMAL (9, 2),complementos DECIMAL(9, 2),dep REF(Departamento))
NOT FINALREF IS SYSTEM GENERATEDINSTANCE METHOD salario() RETURNS DECIMAL(9, 2);
CREATE TYPE Departamento AS (nombre VARCHAR (50),dir DIRECCION,emps REF(Empleado) MULTISET, director REF(Empleado))
NOT FINALREF IS SYSTEM GENERATED;
CREATE TABLE Empleados OF Empleado (REF IS oid SYSTEM GENERATED,dept WITH OPTIONS SCOPE Departamentos);
CREATE TABLE Departamentos OF Departamento (REF IS oid SYSTEM GENERATED,emps WITH OPTIONS SCOPE Empleados,director WITH OPTIONS SCOPE Empleados);
5
Curso 2005/2006 9J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
ReferenciasDereferenciación de atributos
CONSULTAS
Para cada departamento de santiago, obtén su nombre y el nombre de sus empleados
SELECT e.nombre, e.dept->nombre FROM Empleados eWHERE e.dep->dir.loc = 'Santiago'
SELECT e.nombre, (SELECT d.nombre FROM departamentos d WHERE d.oid = e.dep)FROM Empleados eWHERE (SELECT dir.loc FROM departamentos d WHERE d.oid = e.dep) = 'Santiago'
SELECT e.nombre, d.nombreFROM Empleados e LEFT JOIN Departamentos d ON (e.dep = d.oid)WHERE d.dir = 'Santiago'
SELECT e.nombre, DEREF(e.dept).nombre FROM Empleados eWHERE DEREF(e.dept).dir.loc = 'Santiago'
Curso 2005/2006 10J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Para cada departamento obtener la suma de los salarios de sus empleados
ReferenciasDereferenciación de métodos
SELECT d.nombre, SUM(e.ptr->salario)FROM Departamentos d, UNNEST(d.emps) AS e(ptr)GROUP BY d.nombre
Los métodos no se puede aplicar directamente a las tuplas
SELECT e.nombre, e.salarioFROM Empleados e
Nombre y salario de cada empleado
ERROR: e no es de tipo empleado, ya que tiene un atributo oid
SELECT e.nombre, DEREF(e.oid).salarioFROM Empleados e
CORRECTO
6
Curso 2005/2006 11J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Herencia de tipos
CREATE TYPE rectangulo AS (x1 FLOAT, y1 FLOAT, x2 FLOAT, y2 FLOAT)
NOT FINALINSTANCE METHOD area() RETURNS FLOAT;
CREATE TYPE cuadrado UNDER rectangulo (tamano FLOAT)NOT FINALOVERRIDING METHOD area() RETURNS FLOAT;
CREATE TABLE rectangulos AS (id_rect INTEGER PRIMARY KEY,rec rectangulo)
Obten el área de cada cuadrado de la tabla rectángulos
SELECT r.id_rect, r.rec.areaFROM rectangulosWHERE r.rec IS OF (cuadrado)
Curso 2005/2006 12J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Herencia de tablasUna selección en una supertabla, devuelve los atributos de esa supertabla para todas las tuplas de esa supertabla y de todas sus subtablas.
CREATE TABLE EMPLEADOS OF empleado(REF IS id_emp SYSTEM GENERATED,dep WITH OPTIONS SCOPE DEPARTAMENTOS);
CREATE TABLE ADMINISTRADORES OF administradorUNDER EMPLEADOS;
CREATE TABLE PROGRAMADORES OF programadorUNDER EMPLEADOS(proys WITH OPTIONS SCOPE PROYECTOS);
SELECT *FROM Empleados
Selecciona todos los empleados, de cualquier tipo
Selecciona el nombre y el lenguaje que domina cada programadorSELECT p.nombre, p.lenguajeFROM Programadores
7
Curso 2005/2006 13J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Herencia de tablasSelección de las túplas de un sólo tipo
• ONLY
SELECT *
FROM ONLY (Empleados)
Selecciona todos los empleados, que no son ni programadores ni administradores
SELECT *
FROM Empleados
WHERE DEREF(oid) IS OF (Empleado)
Curso 2005/2006 14J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Definición de vistasPosibilidad de definir vistas con tipoDefinición de jerarquías de vistasLas referencias entre tablas base pueden transformarse en referencias entre vistas
Vistas para el departamento de ventas
CREATE TYPE empVentas AS (nombre VARCHAR(50), salario DECIMAL(6, 2)) NOT FINAL;
CREATE TYPE admVentas UNDER empVentas (sistema VARCHAR(20)) NOT FINAL;
CREATE TYPE progVentasUNDER empVentas (
lenguaje VARCHAR(20),proys REF(proyecto) MULTISET
) NOT FINAL;
CREATE TYPE proyVentas AS (duracion INTEGER,presup DECIMAL(9, 2),
progs REF(programador) MULTISET) NOT FINAL;
Tipos
8
Curso 2005/2006 15J.R.R.V. – SI – Sistemas de bases de datos objeto-relacionales
CONSULTAS
Vistas para el departamento de ventas
Vistas
CREATE VIEW vistaEmpVentasOF empVentasREF IS oid SYSTEM GENERATEDAS (SELECT nombre, salario
FROM ONLY (Empleados)WHERE dep->nombre = 'Ventas');
CREATE VIEW vistaAdmVentasOF admVentas UNDER vistaEmpVentasAS (SELECT sistema
FROM ONLY(Administradores)WHERE dep->nombre = 'Ventas');
CREATE VIEW vistaProgVentasOF progVentas UNDER vistaEmpVentas(proys WITH OPTIONS SCOPE vistaProyVentas) AS (SELECT lenguaje, proys
FROM ONLY(Programadores)WHERE dep->nombre = 'Ventas');
CREATE VIEW vistaProyVentas OF proyVentasREF IS oid SYSTEM GENERATED(progs WITH OPTIONS SCOPE vistaProgVentas) AS (SELECT duracion, presup, progs
FROM ProyectosWHERE dep->nombre = 'Ventas');
top related