Вы находитесь на странице: 1из 3

Objeto-relacional en SQL :

Tema 10. SBD Objeto-Relacionales


• Se conoce como objeto-relacional a la ampliación de
Object-Relational and Extended-Relational Systems ciertos SGBD relacionales con características de
Elmasri/Navathe 04 orientación a objetos.
• SQL-99 es un subconjunto ya aprobado de la próxima
versión de SQL, llamada SQL3.

• Objeto-relacional en SQL • Constructores de tipo:


• Objeto-relacional en Oracle 8 create type tipo_dir as ( Definición de un
tipo de usuario
calle varchar(20),
ciudad varchar(20),
cod_postal char(5) );
create type tipo_empl as (
nombre varchar(20), tipo de usuario para
apellido varchar(20), definir otro tipo
direccion tipo_dir );
Vector de 10
create type tipo_empr as ( posiciones de
nombre varchar(20), tipo 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
• 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 1 © A. Jaime 2005 DBD Tema 10 2

Objeto-relacional en SQL : Objeto-relacional en SQL :


identificadores de objeto usando referencias identificadores de objeto usando referencias (2)
• Definición de identificadores de objetos para tablas. • Los identificadores de objeto también pueden figurar en
Además de system generated puede ser derived una definición de tipo:
(que utiliza la clave primaria como identificador):
create type tipo_empl as (
create table empleado of tipo_empl nombre varchar(20), Equivale a
ref is id_emp
ref is id_empl system generated; apellido varchar(20), system generated
direccion tipo_dir, en la definición de tabla
create table empresa of tipo_empr (
id_empl ref(tipo_empl) );
ref is id_empr system generated,
primary key(nombre) ); También pueden create table empleado of tipo_empl
tener claves primarias
values for id_empl
Pero en la definición
• Un atributo puede ser una referencia a un identificador are system generated; de tabla hay que indicar
de tupla (equivalentente a clave extranjera): si los valores del
Tabla a la que identificador los genera
create type tipo_trab as ( hace referencia o no el sistema
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 : Objeto-relacional en SQL :
encapsulación de operaciones encapsulación de operaciones (2)
• create type es similar a una definición de clase y • Las funciones internas se escriben en el lenguaje PSM de
puede incluir métodos (operaciones): SQL. Las externas en un lenguaje anfitrión y se declaran
así:
create type tipo_dir as (
calle varchar(20), declare external <función><signatura>
ciudad varchar(20), Función definida language <lenguaje>
cod_postal char(5) Por el usuario • Algunos SGBD incluyen bibliotecas de tipos abstractos
)
method piso returns integer; de datos (pueden venderse por separado). Algunos
ejemplos son:
• Habrá que incluir el código del método. En este ejemplo – data blades de Informix Universal Server
se indica el fichero que contiene dicho código: – data cartridges de Oracle
method – extenders de DB2.
create function piso returns integer • Los tipos de datos de usuario se pueden usar en la
for tipo_dir as external name definición de parámetros de funciones.
‘c:/x/y/piso.class’ language ‘java’;
• La equivalencia de tipos se define a dos niveles:
• Al definir un tipo T, SQL genera ciertas funciones: – Por nombre: cuando los tipos tienen el mismo
– T() para crear nuevos objetos de tipo T nombre
– si X es un objeto de tipo T y T incluye el atributo A, – Por estructura: cuando los tipos tienen el mismo
número de componentes y de tipos equivalentes
X.A y A(X) permitirán consultar los valores de A
entre sí
– También hay funciones para modificar los objetos. • Atributos y funciones pueden ser (una de las tres):
– Se puede restringir el uso de todas estas funciones – 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 DBD Tema 10 5 © A. Jaime 2005 DBD Tema 10 6

Objeto-relacional en SQL : Objeto-relacional en SQL :


herencia y sobrecarga de funciones objetos complejos sin estructura
• tipo_jefe se define como subtipo de tipo_empl. • Hay tipos para trabajar con objetos grandes y con sus
Por tanto hereda todos sus atributos y métodos. localizadores.
Además se define el atributo específico depto:
• Se distingue entre objetos grandes binarios y de
create type tipo_jefe under tipo_empl as( caracteres
depto char(20) );
• Se propone trabajar con ellos desde el SGBD sin recurrir
• Subtabla/supertabla funciona parecido a la herencia: a ficheros externos. Hay operadores que no se aplican a
atributos de estos tipos, como las comparaciones (<, >,
create table estado_act(
propiedad est_act,
...), group by, order by, like, concatenación, etc.
dueño char(25),
precio money );
create table est_europa under estado_act; • Hasta aquí hemos visto las propuestas estandarizadas
create table est_españa under est_europa; para SQL. Se puede apreciar un gran parecido a lo que
create table est_rioja under est_españa; ya tenían implementado ciertos sistemas comerciales.
– Una subtabla hereda todas las columnas de su • La parte multimedia se ha planteando como otro estándar
supertabla. separado.
– 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

© A. Jaime 2005 DBD Tema 10 7 © A. Jaime 2005 DBD Tema 10 8


Objeto-relacional en Oracle 8: Objeto-relacional en Oracle 8:
Ejemplos Ejemplos (2)
• Algunas de las características estudiadas para SQL • Objetos complejos con tablas anidadas (cont.):
también están presentes en Oracle 8. – Las tablas anidadas no tienen límite de elementos
– Pueden consultarse los elementos por separado
• Atributos multivaluados con “varray” (vector de
(imposible con varray)
longitud variable):
Se define el número – Pueden construirse índices sobre las tablas anidadas
create type tipo_tfno máximo de elementos
que puede contener
as object(tfno char(10)); el varray
create type tipo_tfnos • Vistas sobre objetos:
as varray(5) of tipo_tfno; – Permiten construir objetos virtuales a partir de datos
create type tipo_cliente relacionales
as object(nombre_cli varchar(20),
Atributo tfnos tipo_tfnos);
multivaluado
create table cliente of tipo_cliente;
select nombre_cli, tfnos Atributo
from cliente multivaluado

• Objetos complejos con tablas anidadas:


create type tipo_tfno
as object(tfno char(10),
descripcion char(30));
create type tipo_tfnos Es un tipo de datos
para una columna cuyo
as table of tipo_tfno; valor es una tabla
create type tipo_cliente
as object(nombre_cli varchar(20),
Tabla de teléfonos tfnos tipo_tfnos);
create table cliente of tipo_cliente;

© A. Jaime 2005 DBD Tema 10 9 © A. Jaime 2005 DBD Tema 10 10

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

Вам также может понравиться