Tema 10. SBD Objeto-Relacionales Objeto

Anuncio
Objeto-relacional en SQL :
Tema 10. SBD Objeto-Relacionales
•
Object-Relational and Extended-Relational Systems
Elmasri/Navathe 04
•
•
•
•
Objeto-relacional en SQL
Objeto-relacional en Oracle 8
Se conoce como objeto-relacional a la ampliación de
ciertos SGBD relacionales con características de
orientación a objetos.
SQL-99 es un subconjunto ya aprobado de la próxima
versión de SQL, llamada SQL3.
Constructores de tipo:
create type tipo_dir as (
calle
varchar(20),
ciudad
varchar(20),
cod_postal char(5) );
create type tipo_empl as (
nombre
varchar(20),
apellido varchar(20),
direccion tipo_dir );
Definición de un
tipo de usuario
tipo de usuario para
definir otro tipo
Vector de 10
posiciones de
create type tipo_empr as (
tipo varchar(20)
nombre varchar(20),
lugares varchar(20) array[10] );
create table empresa of tipo_empr;
create table empleado of tipo_empl;
tipos de usuario
para definir tablas
•
© A. Jaime 2005
DBD Tema 10
1
Objeto-relacional en SQL :
identificadores de objeto usando referencias
•
Definición de identificadores de objetos para tablas.
Además de system generated puede ser derived
(que utiliza la clave primaria como identificador):
create table empleado of tipo_empl
ref is id_empl system generated;
create table empresa of tipo_empr (
ref is id_empr system generated,
También pueden
primary key(nombre) );
tener claves primarias
•
Un atributo puede ser una referencia a un identificador
de tupla (equivalentente a clave extranjera):
Por ejemplo empresa.lugares[10] es el 10º elemento
del vector y empleado.direccion.ciudad el campo
ciudad de la dirección
© A. Jaime 2005
DBD Tema 10
2
Objeto-relacional en SQL :
identificadores de objeto usando referencias (2)
•
Los identificadores de objeto también pueden figurar en
una definición de tipo:
create type tipo_empl as (
Equivale a
nombre varchar(20),
ref is id_emp
apellido varchar(20),
system generated
direccion tipo_dir,
en la definición de tabla
id_empl ref(tipo_empl) );
create table empleado of tipo_empl
values for id_empl
Pero en la definición
are system generated;
de tabla hay que indicar
si los valores del
identificador los genera
o no el sistema
Tabla a la que
hace referencia
create type tipo_trab as (
empl ref(tipo_empl) scope(empleado),
empr ref(tipo_empr) scope(empresa) );
create table trabajo of tipo_trab;
•
Se usa “->” como notación para referencias:
select t.empl->apellido
from trabajo as t
where t.empr->nombre=‘ACME’;
Campo de la tabla
empresa a la que hace
referencia
© A. Jaime 2005
DBD Tema 10
3
© A. Jaime 2005
DBD Tema 10
4
Objeto-relacional en SQL :
encapsulación de operaciones
Objeto-relacional en SQL :
encapsulación de operaciones (2)
• create type es similar a una definición de clase y
•
puede incluir métodos (operaciones):
create type tipo_dir as (
calle
varchar(20),
ciudad
varchar(20),
Función definida
cod_postal char(5)
Por el usuario
)
method piso returns integer;
•
•
declare external <función><signatura>
language <lenguaje>
•
Habrá que incluir el código del método. En este ejemplo
se indica el fichero que contiene dicho código:
method
create function piso returns integer
for tipo_dir as external name
‘c:/x/y/piso.class’ language ‘java’;
•
•
Al definir un tipo T, SQL genera ciertas funciones:
– T() para crear nuevos objetos de tipo T
– si X es un objeto de tipo T y T incluye el atributo A,
X.A y A(X) permitirán consultar los valores de A
– También hay funciones para modificar los objetos.
– Se puede restringir el uso de todas estas funciones
© A. Jaime 2005
DBD Tema 10
5
•
Por tanto hereda todos sus atributos y métodos.
Además se define el atributo específico depto:
•
•
create type tipo_jefe under tipo_empl as(
depto char(20) );
•
Subtabla/supertabla funciona parecido a la herencia:
create table estado_act(
propiedad est_act,
dueño char(25),
precio money );
create table est_europa under estado_act;
create table est_españa under est_europa;
create table est_rioja under est_españa;
•
– Una subtabla hereda todas las columnas de su
supertabla.
– Cada fila de una subtabla corresponde a una única
fila de su supertabla.
– Cada fila de una supertabla corresponde a lo sumo,
en una subtabla, a una de sus filas. Puede haber filas
de una supertabla que no se correspondan con
ninguna fila de una subtabla
– Las operaciones de inserción, modificación o
borrado de filas se propagan adecuadamente entre
subtablas y supertablas
•
DBD Tema 10
DBD Tema 10
6
Objeto-relacional en SQL :
objetos complejos sin estructura
• tipo_jefe se define como subtipo de tipo_empl.
© A. Jaime 2005
Algunos SGBD incluyen bibliotecas de tipos abstractos
de datos (pueden venderse por separado). Algunos
ejemplos son:
– data blades de Informix Universal Server
– data cartridges de Oracle
– extenders de DB2.
Los tipos de datos de usuario se pueden usar en la
definición de parámetros de funciones.
La equivalencia de tipos se define a dos niveles:
– Por nombre: cuando los tipos tienen el mismo
nombre
– Por estructura: cuando los tipos tienen el mismo
número de componentes y de tipos equivalentes
entre sí
Atributos y funciones pueden ser (una de las tres):
– Public: visibles desde la interfaz del tipo de usuario
– Private: no visibles desde la interfaz del tipo de
usuario
– Protected: visibles sólo para los subtipos del tipo de
usuario
© A. Jaime 2005
Objeto-relacional en SQL :
herencia y sobrecarga de funciones
•
Las funciones internas se escriben en el lenguaje PSM de
SQL. Las externas en un lenguaje anfitrión y se declaran
así:
7
Hay tipos para trabajar con objetos grandes y con sus
localizadores.
Se distingue entre objetos grandes binarios y de
caracteres
Se propone trabajar con ellos desde el SGBD sin recurrir
a ficheros externos. Hay operadores que no se aplican a
atributos de estos tipos, como las comparaciones (<, >,
...), group by, order by, like, concatenación, etc.
Hasta aquí hemos visto las propuestas estandarizadas
para SQL. Se puede apreciar un gran parecido a lo que
ya tenían implementado ciertos sistemas comerciales.
La parte multimedia se ha planteando como otro estándar
separado.
© A. Jaime 2005
DBD Tema 10
8
Objeto-relacional en Oracle 8:
Ejemplos
Objeto-relacional en Oracle 8:
Ejemplos (2)
•
Algunas de las características estudiadas para SQL
también están presentes en Oracle 8.
•
Atributos multivaluados con “varray” (vector de
longitud variable):
•
Objetos complejos con tablas anidadas (cont.):
– Las tablas anidadas no tienen límite de elementos
– Pueden consultarse los elementos por separado
(imposible con varray)
– Pueden construirse índices sobre las tablas anidadas
•
Vistas sobre objetos:
– Permiten construir objetos virtuales a partir de datos
relacionales
Se define el número
máximo de elementos
create type tipo_tfno
que puede contener
as object(tfno char(10));
el varray
create type tipo_tfnos
as varray(5) of tipo_tfno;
create type tipo_cliente
as object(nombre_cli varchar(20),
Atributo
tfnos tipo_tfnos);
multivaluado
create table cliente of tipo_cliente;
select nombre_cli, tfnos
from cliente
•
Atributo
multivaluado
Objetos complejos con tablas anidadas:
create type tipo_tfno
as object(tfno
char(10),
descripcion char(30));
Es un tipo de datos
create type tipo_tfnos
para una columna cuyo
as table of tipo_tfno;
valor es una tabla
create type tipo_cliente
as object(nombre_cli varchar(20),
tfnos tipo_tfnos);
Tabla de teléfonos
create table cliente of tipo_cliente;
© A. Jaime 2005
DBD Tema 10
9
Objeto-relacional en Oracle 8 :
Objetos grandes y otras características de almacenamiento
•
Se pueden almacenar objetos muy grandes como vídeos,
audio o textos. Se han incluido tipos especiales para ello:
–
–
–
–
BLOB: objeto binario grande
CLOB : objeto de caracteres grande
BFILE: fichero binario almacenado fuera de la BD
NCLOB: CLOB multibyte de anchura fija
Salvo BFILE todos se almacenan en la BD.
•
Tablas sólo en índices:
– Los índices de Oracle 7 son árboles B+ con punteros
a bloques de datos. Dan buen rendimiento en la
mayoría de casos. Oracle 8 mantiene estos índices.
– Algunos datos están en las tablas y en los índices.
– Con tablas sólo en índices de Oracle 8 los registros
están en el propio índice. Esto acelera las consultas y
reduce el espacio de almacenamiento necesario.
– Es útil para ficheros pequeños o medianos con
registros no muy grandes
•
Índices divididos y tablas divididas:
– Tablas e índices grandes pueden dividirse en trozos,
teniendo una tabla (o índice) lógico que corresponde
a varias tablas (o índices) físicos.
© A. Jaime 2005
DBD Tema 10
11
© A. Jaime 2005
DBD Tema 10
10
Descargar