You are on page 1of 58

Bases de datos objeto-relacionales Un sistema de gestin de

pedidos

Wladimiro Daz
9 de noviembre de 2011

DBD Ejemplo BDOR

1 / 26

Introduccin
Antecedentes
Anlisis
Aproximacin relacional
Modelos objeto-relacional

Introduccin

DBD Ejemplo BDOR

2 / 26

Antecedentes

Introduccin
Antecedentes

 Este ejemplo est basado en una actividad empresarial simple: gestin de pedidos de

usuarios.

Anlisis
Aproximacin relacional
Modelos objeto-relacional

 El ejemplo se estructura en dos partes.


 Aproximacin relacional:


Se implementa el esquema utilizando slo los tipos de datos intrnsecos de


Oracle.

Mediante esta aproximacin, se crean tablas que contienen los datos de la


aplicacin.

Y se utilizan tcnicas bien conocidas para implementar las relaciones entre


entidades.

 aproximacin objeto-relacional:


DBD Ejemplo BDOR

Se utilizan tipos de datos definidos por el usuario para trasladar los dominios, las
entidades y las relaciones directamente en esquemas de objetos que pueden ser
manipulados por el DBMS.

3 / 26

Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional

Anlisis

DBD Ejemplo BDOR

4 / 26

Entidades y relaciones

Introduccin
Anlisis
Entidades y relaciones

 Las entidades bsicas del ejemplo son:


 Los clientes (compradores de productos).

Aproximacin relacional

 El stock de productos a la venta.

Modelos objeto-relacional

 Los pedidos de compra.

DBD Ejemplo BDOR

5 / 26

Entidades y relaciones

Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional

 Podemos identificar las siguientes relaciones en el modelo:


 Los clientes tienen una relacin uno-a-muchos con los pedidos de compra ya que un

comprador puede solicitar varios pedidos, pero un pedido determinado est


asociado a un slo cliente.

Modelos objeto-relacional

 Los pedidos mantienen una relacin muchos-a-muchos con los items del stock ya

que un pedido puede contener varios items del stock y un item del stock puede
aparecer en mltiples pedidos.
La forma usual de abordar la relacin muchos-a-muchos entre pedidos y el stock
es introducir otra entidad denominada lista de items.
 Un pedido puede tener un nmero arbitrario de items, pero cada lnea de la lista de

items pertenece a un nico pedido.


 Un elemento del stock puede aparecer en un gran nmero de listas de items, pero

cada lnea de la lista de items hace referencia slo a un item del stock.

DBD Ejemplo BDOR

5 / 26

Entidades y relaciones

Introduccin
Anlisis

 La siguiente tabla resume la informacin requerida para cada una de las entidades

descritas.

Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional

DBD Ejemplo BDOR

Entidad

Informacin requerida

Cliente
Stock
Pedido
Lista de items

Informacin de contacto
Identificador del item, precio, importe del IVA
Cliente, pedido y fecha de envo, direccin de envo
Item del stock, cantidad, precio, descuento aplicable para cada item

5 / 26

Entidades y relaciones

Introduccin

 El diagrama de clases UML es:

Anlisis

Aproximacin relacional

Pedido

Cliente

Entidades y relaciones

numCliente
nombre

Modelos objeto-relacional

#cliente

0..*

#pedidos

numPedido
fechaPedido
fechaEnvio

Stock
0..*

0..*
#items

numStock
precio
tasa

Item
0..*

#telefonos

Telefono
numTelefono

DBD Ejemplo BDOR

#direccion

#direccion

Direccion

cantidad
descuento

calle
poblacion
provincia
codigoZip

5 / 26

Entidades y relaciones

Introduccin

 O mejor este:

Anlisis

Aproximacin relacional

Pedido

Cliente

Entidades y relaciones

numCliente
nombre

Modelos objeto-relacional

#cliente

0..*

#pedidos

numPedido
fechaPedido
fechaEnvio

Item
#pedido

0..* cantidad

#items

descuento

0..*
0..*

#telefonos

Telefono
numTelefono

DBD Ejemplo BDOR

#direccion

#direccion

Direccion
calle
poblacion
provincia
codigoZip

#stock

Stock
numStock
precio
tasa

5 / 26

Entidades y relaciones

Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional

 El problema es que los atributos de las entidades en el mundo real son complejos.
 Por lo tanto, requieren un conjunto complejo de atributos para contener las estructuras

de datos:
 Una direccin contiene atributos tales como la calle, la poblacin, la provincia y el

cdigo postal.
 Un cliente puede tener varios nmeros de telfono.
 La lista de items contiene atributos y simutneamente es un atributo del pedido.

Los tipos predefinidos estndar no pueden representar estos elementos directamente. La aproximacin objeto-relacional hace posible manejar estas estructuras
complejas de forma ms eficiente.

DBD Ejemplo BDOR

5 / 26

Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional

DBD Ejemplo BDOR

Aproximacin relacional

6 / 26

Aproximacin relacional

Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional

DBD Ejemplo BDOR

 El modelo relacional normaliza las entidades y sus atributos y estructura las entidades

comprador, pedidos de compra y stock en tablas.


 La direcciones se parten en componentes estndar.
 Se introduce un nmero arbitrario de nmeros de telfono que un cliente puede tener y

le asigna una columna a cada uno de ellos.


 El modelo relacional separa las listas de items de sus pedidos y las pone en su propia

tabla individual. La tabla contiene columnas para las claves externas a las tablas stock
y pedido.

7 / 26

Aproximacin relacional

Introduccin

 Tablas

Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional

DBD Ejemplo BDOR

 La tabla de clientes:
CREATE TABLE c l i e n t e s (
numclient
NUMBER,
nombre
VARCHAR2( 2 0 0 ) ,
calle
VARCHAR2( 2 0 0 ) ,
poblacion
VARCHAR2( 2 0 0 ) ,
provincia
VARCHAR2( 5 0 ) ,
cod_zip
VARCHAR2( 2 0 ) ,
telef1
VARCHAR2( 2 0 ) ,
telef2
VARCHAR2( 2 0 ) ,
telef3
VARCHAR2( 2 0 ) ,
PRIMARY KEY ( n u m c l i e n t )
);

7 / 26

Aproximacin relacional

Introduccin

 Tablas

Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional

DBD Ejemplo BDOR

 La tabla de pedidos:
CREATE TABLE pedidos (
numpedido
NUMBER,
numclient
NUMBER REFERENCES c l i e n t e s ,
fecha_pedido DATE,
f e c h a _ e n v i o DATE,
c a l l e _ e n v i o VARCHAR2( 2 0 0 ) ,
p o b l a _ e n v i o VARCHAR2( 2 0 0 ) ,
prov_envio
VARCHAR2( 5 0 ) ,
zip_envio
VARCHAR2( 2 0 ) ,
PRIMARY KEY ( numpedido )
);

7 / 26

Aproximacin relacional

Introduccin

 Tablas

Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores

 La tabla de stock :
CREATE TABLE
numstock
precio
cod_tasa
);

stock (
NUMBER PRIMARY KEY,
NUMBER,
NUMBER

Modelos objeto-relacional

 La tabla con la lista de items:


CREATE TABLE l i s t a _ i t e m s (
numitem
NUMBER,
numpedido
NUMBER REFERENCES pedidos ,
numstock
NUMBER REFERENCES stock ,
cantidad
NUMBER,
descuento
NUMBER,
PRIMARY KEY ( numpedido , numitem )
);

DBD Ejemplo BDOR

7 / 26

Aproximacin relacional

Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores

clientes, contiene informacin acerca de los compradores.


La tabla pedidos tiene una columna numclient, que contiene una clave externa a la
tabla pedidos. La clave externa implementa la relacin muchos-a-uno entre pedidos y

 La primera tabla,


clientes.

lista_items contiene las claves externas numpedido y numstock que


hacen referencia a las tablas pedido y stock respectivamente.

 La tabla

Modelos objeto-relacional

DBD Ejemplo BDOR

7 / 26

Insercin de valores

Introduccin
Anlisis

 En una aplicacin basada en las tablas definidas en la seccin anterior, sentencias

como las que siguen insertan valores en las tablas:

Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores

INSERT INTO c l i e n t e s
VALUES ( 1 , Juan Perez , Avda . Camelias , 127 ,
V a l e n c i a , V a l e n c i a , 46018 ,
96 123 1212 , NULL, NULL ) ;

Modificacin de valores
Modelos objeto-relacional

INSERT INTO c l i e n t e s
VALUES ( 2 , I s a b e l A r i a s , C / C o l e g i o Mayor , 51 ,
B u r j a s s o t , V a l e n c i a , 46100 ,
96 354 3232 , 96 354 3233 , NULL ) ;
INSERT INTO pedidos
VALUES (1001 , 1 , SYSDATE,
NULL, NULL, NULL, NULL ) ;

15MAY2001 ,

INSERT INTO pedidos


VALUES (2001 , 2 , SYSDATE, 20MAY2001 ,
Avda . Americas , 33 , V a l e n c i a ,
V a l e n c i a , 46008 ) ;

DBD Ejemplo BDOR

8 / 26

Insercin de valores

Introduccin
Anlisis

 En una aplicacin basada en las tablas definidas en la seccin anterior, sentencias

como las que siguen insertan valores en las tablas:

Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores

INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

stock
stock
stock
stock

VALUES(1004 ,
VALUES(1011 ,
VALUES(1534 ,
VALUES(1535 ,

INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

lista_items
lista_items
lista_items
lista_items

6750.0 ,
4500.0 ,
2235.0 ,
3455.0 ,

2);
2);
2);
2);

Modificacin de valores
Modelos objeto-relacional

DBD Ejemplo BDOR

VALUES( 0 1 ,
VALUES( 0 2 ,
VALUES( 1 0 ,
VALUES( 1 1 ,

1001 ,
1001 ,
2001 ,
2001 ,

1534 ,
1535 ,
1004 ,
1011 ,

12 , 0 ) ;
10 , 1 0 ) ;
1, 0);
2, 1);

8 / 26

Seleccin de valores

Introduccin

 Las aplicaciones pueden ahora ejecutar consultas de diverso tipo para recuperar la

Anlisis

informacin de los datos almacenados.

Aproximacin relacional

 Cliente y datos del pedido para la orden de compra 1001:

Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional

SELECT C . n u m c l i e n t , C . nombre , C . c a l l e , C. p o b l a c i o n ,
C . p r o v i n c i a , C . cod_zip , C. t e l e f 1 , C . t e l e f 2 ,
C . t e l e f 3 , P . numpedido , P . fecha_pedido ,
L . numstock , L . numitem , L . c a n t i d a d , L . descuento
FROM c l i e n t e s C, pedidos P , l i s t a _ i t e m s L
WHERE C . n u m c l i e n t = P . n u m c l i e n t
AND P . numpedido = L . numpedido
AND P . numpedido = 1001;

 Valor total de cada pedido de compra:


SELECT
FROM
WHERE
AND
GROUP

DBD Ejemplo BDOR

P . numpedido , SUM(S . p r e c i o L . c a n t i d a d )
pedidos P , i t e m s L , s t o c k S
P . numpedido = L . numpedido
L . numstock = S . numstock
BY P . numpedido ;

9 / 26

Seleccin de valores

Introduccin

 Las aplicaciones pueden ahora ejecutar consultas de diverso tipo para recuperar la

Anlisis

informacin de los datos almacenados.

Aproximacin relacional

 Pedidos de compra e informacin de la lista de items del elemento del stock 1004:

Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional

DBD Ejemplo BDOR

SELECT P . numpedido , P . n u m c l i e n t , L . numstock ,


L . numitem , L . c a n t i d a d , L . descuento
FROM pedidos P , l i s t a _ i t e m s L
WHERE P . numpedido = L . numpedido
AND L . numstock = 1004;

9 / 26

Modificacin de valores

Introduccin
Anlisis

 Actualizacin. Para modificar la cantidad de items del stock 1001 para el pedido 01 se

realizara del siguiente modo:

Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores

UPDATE
SET
WHERE
AND

lista_items
c a n t i d a d = 20
numpedido = 1
numstock = 1001;

Modificacin de valores
Modelos objeto-relacional

 Borrado. Para eliminar el pedido 1001 utilizaramos la siguiente sentencia SQL:


DELETE
FROM l i s t a _ i t e m s ,
WHERE numpedido = 1001;
DELETE
FROM pedidos
WHERE numpedido = 1001;

DBD Ejemplo BDOR

10 / 26

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t

Modelos objeto-relacional

Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

11 / 26

Introduccin

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos

 Las aplicaciones escritas en lenguajes de tercera generacin son capaces de

implementar tipos definidos por el usuario de gran complejidad, encapsulando los datos
y los mtodos.
 El SQL slo proporciona tipos bsicos escalares y ningn mtodo para encapsular las

operaciones relevantes.
 Entonces...

Declaracin del tipo

item_t
Declaracin del tipo

Por qu no desarrollar las aplicaciones en lenguajes de tercera generacin?

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab

 Fundamentalmente por dos motivos:


 Los DBMS proporcionan funcionalidades que costara millones de horas de trabajo

replicar.
 Los lenguajes 3GL carecen de persistencia.

La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

12 / 26

Introduccin

Introduccin
Anlisis

Esto deja al desarrollador con el problema de simular tipos complejos empleando slo
la implementacin incompleta de SQL.

Aproximacin relacional
Modelos objeto-relacional

 Serios problemas de implementacin, ya que obliga a:

Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos

 Traducir de la lgica de la aplicacin a la lgica del sistema de almacenamiento a la

hora de escribir los datos.


 Llevar a cabo el proceso inverso cuando los datos se requieren de nuevo en una

aplicacin.
 Se produce un intenso trfico bidireccional entre el espacio de direcciones de la

aplicacin y el del servidor


 El rendimiento disminuye de forma notable.

La tabla de objetos

clientes_tab
La tabla de objetos

El objetivo de la tecnologa objeto-relacional es resolver estos problemas.

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

12 / 26

La va objeto-relacional

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional

 La aproximacin objeto-relacional del ejemplo que hemos considerado comienza con

las mismas entidades y relaciones esbozadas.


 Sin embargo, la utilizacin de tipos definidos por el usuario permite trasladar ms

informacin de estas estructuras al esquema de la base de datos.

Introduccin
La va objeto-relacional
Definicin de tipos

 Algunas de las mejoras que podemos introducir mediante el modelo objeto-relacional

son:

Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

 En lugar de separar las direcciones o los nmeros de telfono de contacto en

columnas desligadas en tablas relacionales, el modelo objeto-relacional define tipos


para representar estas entidades.
 Del mismo modo, en lugar de separar las listas de items en tablas separadas, el

modelo objeto relacional permite mantener la listas con sus respectivos pedidos
como tablas anidadas.

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab

 En el modelo objeto-relacional, las entidades principales

clientes, stock y

pedidos se convierten en objetos. Las relaciones muchos-a-uno se representan


mediante referencias entre estos objetos.

Modificacin de las tablas


Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

13 / 26

Definicin de tipos

Introduccin

 Las siguientes sentencias sientan las bases:

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos

CREATE TYPE i t e m _ t ;
CREATE TYPE p e d i d o _ t ;
CREATE TYPE s t o c k _ t ;

 Las sentencias anteriores definen tipos de datos incompletos.


 La siguiente sentencia define un tipo vector,

lista_tel_t:

Declaracin del tipo

item_t

CREATE TYPE l i s t a _ t e l _ t AS VARRAY( 1 0 ) OF VARCHAR2( 2 0 ) ;

Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos

 Sus elementos son hasta 10 nmeros de telfono almacenados en un

VARCHAR2.

 En este caso, la lista representa un conjunto de nmeros de telfono de contacto de

un nico cliente

La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

14 / 26

Definicin de tipos

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores

 Una lista de nmeros de telfono podra definirse como un vector o como una tabla

anidada.

VARRAY es mejor eleccin por:


El orden de los nmeros puede ser importante. Un VARRAY est ordenado mientras

 En este caso, un vector




que una tabla anidada no.


 El nmero de nmeros de telfono para un cliente concreto es pequeo. Los

vectores VARRAY obligan a especificar el nmero de elementos con antelacin y por


tanto gestionan el almacenamiento de forma mucho ms eficiente.
 No existe ningn motivo especial por el cual estemos interesados en preguntar por

la lista de nmeros de telfono. El uso de una tabla anidada no ofrece beneficios


adicionales.
 Si el orden y los lmites no son consideraciones importantes en el diseo, se debe usar

la siguiente receta para decidir entre VARRAYs y tablas anidadas:


 Si se requiere consultar la coleccin, es mejor utilizar tablas anidadas.
 Si slo se requiere recuperar la coleccin como un todo, es aconsejable utilizar

vectores VARRAY.

Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

14 / 26

Definicin de tipos

Introduccin
Anlisis

 La siguiente sentencia define el tipo de objeto

direccion_t que se utilizar para

representar direcciones postales.

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

CREATE TYPE
calle
poblacion
provincia
cod_zip
);

d i r e c c i o n _ t AS OBJECT (
VARCHAR2( 1 0 0 ) ,
VARCHAR2( 1 0 0 ) ,
VARCHAR2( 5 0 ) ,
VARCHAR2( 2 0 )

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

14 / 26

Definicin de tipos

Introduccin
Anlisis

 La siguiente sentencia define el tipo

cliente_t que utiliza los tipos ya definidos como

bloques estructurales:

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab

CREATE TYPE c l i e n t e _ t AS OBJECT (


numclient
NUMBER,
nombre
VARCHAR2( 2 0 0 ) ,
direccion
direccion_t ,
telefonos
lista_tel_t ,
ORDER MEMBER FUNCTION
o r d _ c l i e n t e ( x IN c l i e n t e _ t ) RETURN INTEGER ,
PRAGMA RESTRICT_REFERENCES (
o r d _ c l i e n t e , WNDS, WNPS, RNPS, RNDS)
);

 Las entidades del tipo

cliente_t definido son objetos que representan bloques de

informacin acerca de un cliente concreto.

cliente_t tiene tambin asociado un mtodo de clasificacin, uno


de los dos tipos de mtodos de comparacin, ord_cliente.

 Cada objecto

La tabla de objetos

pedidos_tab
Modificacin de las tablas

 La sentencia anterior no incluye el programa PL/SQL que implementa el mtodo.

Este se definir con posterioridad.

Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

14 / 26

Declaracin del tipo item_t

Introduccin
Anlisis

 La siguiente sentencia completa la definicin del tipo de objeto incompleto

item_t

definido al principio de esta seccin:

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

CREATE TYPE i t e m _ t AS OBJECT (


numitem
NUMBER,
stockref
REF s t o c k _ t ,
cantidad
NUMBER,
descuento
NUMBER
);

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

lista_item_t. Un dato
de este tipo es una tabla anidada en la que cada fila contiene un objeto item_t.

 La siguiente sentencia define un tipo de tabla denominado

stock_t
Definicin de mtodos

CREATE TYPE l i s t a _ i t e m _ t AS TABLE OF i t e m _ t ;

Creacin de las tablas de


objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

15 / 26

Declaracin del tipo item_t

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

 Para representar un valor mltiple como la lista de items de un pedido, una tabla

anidada es mejor eleccin que un VARRAY de objetos item_t debido a los siguientes
motivos:
 Una de las operaciones que llevarn a cabo muchas aplicaciones ser onsultar el

contenido de una lista de items. Esta operacin es poco eficiente en VARRAYS ya


que implica convertir esta estructura en una tabla anidada.
 Cabe esperar que algunas aplicaciones requieran indexar los datos de la lista de

items. Esto es posible en tablas anidadas pero no en VARRAYs.


 El orden de los items en la lista de items carece de importancia y el nmero de item

puede utilizarse para ordenar los items en caso de que sea necesario.
 No hay un lmite prctico en el nmero de items en un pedido. Utilizar un

VARRAY

obliga a especificar un valor mximo en el nmero de elementos.

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

15 / 26

Declaracin del tipo pedido_t

Introduccin
Anlisis

 La siguiente sentencia completa la definicin del tipo incompleto

pedido_t declarado

al principio de esta seccin:

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab

CREATE TYPE p e d i d o _ t AS OBJECT (


numpedido
NUMBER,
clientref
REF c l i e n t e _ t ,
fechapedido DATE,
fechaenvio
DATE,
lista_item
lista_item_t ,
direc_envio direccion_t ,
MAP MEMBER FUNCTION v a l o r RETURN NUMBER,
PRAGMA RESTRICT_REFERENCES (
v a l o r , WNDS, WNPS, RNPS, RNDS) ,
MEMBER FUNCTION v a l o r _ t o t a l RETURN NUMBER,
PRAGMA RESTRICT_REFERENCES (
v a l o r _ t o t a l , WNDS, WNPS)
);

La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

16 / 26

Declaracin del tipo pedido_t

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

 Las instancias de este tipo son objetos que representan un pedido. Contienen seis

atributos, incluyendo una referencia (REF), una tabla anidada de tipo lista_item_t y
un objeto de tipo direccion_t.

valor y valor_total. El primero es un mtodo


de MAP (proyeccin), una de las dos clases de clasificacin. Un mtodo de MAP

 Tambin cuentan con dos mtodos:

devuelve la posicin relativa del objeto, de modo que cada vez que Oracle necesita
comparar dos objetos de tipo pedido_t invoca implcitamente a este mtodo. Las
declaraciones PRAGMA proporcionan informacin al PL/SQL acerca del tipo de acceso
a la base de datos que requieren.

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

16 / 26

Declaracin del tipo stock_t

Introduccin
Anlisis

 Por ltimo, la siguiente sentencia completa la definicin del tercer tipo,

stock_t,

definido al principio de la seccin:

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos

CREATE TYPE
numstock
precio
cod_tasa
);

s t o c k _ t AS OBJECT (
NUMBER,
NUMBER,
NUMBER

Declaracin del tipo

item_t
Declaracin del tipo

pedido_t

 Las instancias del tipo

stock_t representan los elementos del stock que los clientes

solicitan en sus pedidos.

Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

17 / 26

Definicin de mtodos

Introduccin
Anlisis

 En este apartado mostraremos cmo se especifican los mtodos de los tipos de objeto

cliente_t y pedido_t, es decir, el programa PL/SQL que implementa los mtodos:

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores

CREATE OR REPLACE TYPE BODY p e d i d o _ t AS


MEMBER FUNCTION v a l o r _ t o t a l RETURN NUMBER IS
i
INTEGER ;
stock
stock_t ;
item
item_t ;
total
NUMBER : = 0 ;
precio
NUMBER;
BEGIN
FOR i IN 1 . . SELF . l i s t a _ i t e m .COUNT LOOP
i t e m : = SELF . l i s t a _ i t e m ( i ) ;
SELECT DEREF( i t e m . s t o c k r e f ) INTO s t o c k FROM DUAL;
t o t a l := t o t a l + item . cantidad stock . precio ;
END LOOP;
RETURN t o t a l ;
END;
MAP MEMBER FUNCTION v a l o r RETURN NUMBER IS
BEGIN
RETURN numpedido ;
END;
END;

Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

18 / 26

Definicin de mtodos

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional

 El mtodo

valor es sencillo: simplemente devuelve el nmero asociado a cada

pedido.
 El mtodo

valor_total usa una serie de mecanismos objeto-relacionales para

devolver la suma de los precios de los elementos de la lista de items asociada al pedido.

Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos

 La misin de esta funcin es calcular el importe total de los elementos asociados al

pedido.

COUNT proporciona el nmero total de elementos en un vector o


tabla PL/SQL. En combinacin con LOOP permite a la aplicacin iterar sobre todos
los elementos de la coleccin. De este modo, SELF.lista_item.COUNT cuenta el
nmero de elementos en la tabla anidada que coincide con el atributo lista_item
del objeto pedido_t representado por SELF.

 La palabra clave

La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

18 / 26

Definicin de mtodos

Introduccin
Anlisis

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

valor_total...
El operador DEREF toma un valor de tipo referencia como argumento y devuelve un
objeto fila. En este caso, DEREF(line_item.stockref) toma el atributo
stockref como argumento y devuelve un objeto stock_t.
Volviendo a nuestra definicin de los datos, podemos comprobar que stockref es
un atributo del objeto item_t que es a su vez un atributo de lista_item_t. Este

 El mtodo

objeto-lista, que hemos estructurado como una tabla anidada es al fin y al cabo un
atributo del objeto pedido_t representado por SELF.
 Esto puede parecer realmente complejo, pero basta retomar nuestra perspectiva del

mundo real para clarificar la situacin: un pedido (pedido_t) est constituido por
una lista (lista_item_t) de items (item_t), cada uno de los cuales contiene una
referencia (stockref) a informacin acerca del item (stock_t).
 La operacin que hemos llevado a cabo simplemente recupera la informacin va un

mecanismo objeto-relacional.

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

18 / 26

Definicin de mtodos

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab

 El mtodo

valor_total...

 Todas estas entidades son tipos de datos abstractos y como tales pueden

interpretarse como patrones de objetos. Cmo recuperamos entonces los valores


actuales de los objetos stock? Se requiere, por tanto, la sentencia SQL SELECT con
la llamada explcita a DEREF ya que Oracle no permite la dereferencia implcita de
REFs en programas PL/SQL. La variable PL/SQL stock es del tipo stock_t. La
sentencia SELECT le asigna el valor representado por
DEREF(line_item.stockref) y ese objeto es el item del stock referenciado en
el i-simo elemento de la lista de items.
 Habiendo recuperado el item del stock en cuestin, el siguiente paso es calcular el

importe. El programa hace referencia al coste del item como stock.precio. Sin
embargo, para calcular el precio del item tambin se requiere conocer la cantidad de
elementos pedidos. En nuestra aplicacin, el trmino line_item.cantidad
representa al atributo cantidad de cada objeto item_t.

La tabla de objetos

pedidos_tab
Modificacin de las tablas

 El resto del mtodo es fcil de comprender. El bucle suma los valores de los elementos

de la lista y finalmente devuelve el importe total.

Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

18 / 26

Definicin de mtodos

Introduccin

 El mtodo

ord_cliente del tipo de objeto cliente_t se define a continuacin:

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

CREATE OR REPLACE TYPE BODY c l i e n t e _ t AS


ORDER MEMBER FUNCTION
o r d _ c l i e n t e ( x IN c l i e n t e _ t ) RETURN INTEGER IS
BEGIN
RETURN n u m c l i e n t x . n u m c l i e n t ;
END;
END;

 Como ya hemos mencionado, la funcin

ord_cliente sirve para comparar dos

pedidos de clientes.
 El mecanismo de operacin es sencillo. El mtodo utiliza otro objeto de tipo

cliente_t como argumento de entrada y devuelve la diferencia entre los nmeros


numclient.

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

18 / 26

Definicin de mtodos

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

 Si el nmero de cliente tiene algn significado lgico (por ejemplo, nmeros menores

significan clientes ms antiguos), el valor devuelto por esta funcin permite ordenar los
objetos de este tipo.
 Por tanto, el mtodo puede devolver:
 Un nmero negativo si cliente actual es ms antiguo que x.
 Un nmero positivo si el cliente actual es ms reciente.
 Cero, en cuyo caso el objeto est comparndose consigo mismo.

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

18 / 26

Creacin de las tablas de objetos

Introduccin

 Generalmente, podemos considerar que la relacin entre objetos y tablas es la

Anlisis

siguiente:

Aproximacin relacional

 Las clases, que representan a las entidades, cumplen la misma funcin que las

Modelos objeto-relacional

tablas.

Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos

 Los atributos son equivalentes a la columnas.


 Los objetos son equivalentes a las filas.
 Contemplado desde esta prespectiva:
 Cada tabla se puede considerar un tipo implcito; cada uno de cuyos objetos (las filas

especficas) comparte los mismos atributos (las columnas).


 De acuerdo con esto, la creacin de tipos de datos abstracto de forma explcita

introduce un nuevo nivel de funcionalidad.

La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

19 / 26

La tabla de objetos clientes_tab

Introduccin
Anlisis

 La siguiente sentencia define la tabla de objetos

clientes_tab que contiene objetos

del tipo cliente_t:

Aproximacin relacional
Modelos objeto-relacional

CREATE TABLE c l i e n t e s _ t a b OF c l i e n t e _ t
( n u m c l i e n t PRIMARY KEY ) ;

Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab

 Los tipos de dato se comportan como patrones para las tablas de objetos:
 El hecho de que exista un tipo

cliente_t significa que es posible crear numerosas

tablas de este tipo. Sin esta capacidad, sera necesario definir cada tabla de forma
individual.
 La capacidad para crear tablas del mismo tipo no implica necesariamente que no se

puedan introducir variaciones. Por ejemplo, en la sentencia que crea la tabla


clientes_tab se define como clave primaria la columna numclient. Cualquier
otra tabla de objetos cliente_t no tiene porque satisfacer esta restriccin.
Las restricciones se aplican a las tablas, no a la definicin de tipos.

La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

20 / 26

La tabla de objetos clientes_tab

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t

 Las tablas de objetos pueden contener objetos embebidos:

clientes_tab podemos observar que la


columna direccion contiene objetos del tipo direccion_t.

 Examinando la definicin de la tabla

 Un tipo de datos abstracto puede contener atributos que son a su vez tipos de datos

abstractos.
 Cuando un tipo de dato es instanciado como un objeto, los objetos incluidos tambin

son instanciados.

Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

20 / 26

La tabla de objetos stock_tab

Introduccin

 La siguiente sentencia crea la tabla de objetos

stock_tab:

Anlisis
Aproximacin relacional

CREATE TABLE s t o c k _ t a b OF s t o c k _ t
( numstock PRIMARY KEY ) ;

Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

21 / 26

La tabla de objetos pedidos_tab

Introduccin

 La siguiente sentencia define una tabla constituida por objetos del tipo

pedido_t:

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos

CREATE TABLE pedidos_tab OF p e d i d o _ t (


PRIMARY KEY ( numpedido ) ,
SCOPE FOR ( c l i e n t r e f ) IS c l i e n t e s _ t a b
)
NESTED TABLE l i s t a _ i t e m STORE AS l i s t a _ i t e m _ t a b ;

 Cada fila de la tabla es un objeto de tipo


numpedido
clientref
fechapedido
fechaenvio
lista_item

pedido_t, cuyos atributos son:

NUMBER
REF c l i e n t e _ t
DATE
DATE
lista_item_t

Creacin de las tablas de


objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

22 / 26

La tabla de objetos pedidos_tab

Introduccin
Anlisis

Aproximacin relacional
Modelos objeto-relacional
Introduccin

a cualquier objeto-fila.
 Sin embargo, las referencias

Declaracin del tipo

item_t
Declaracin del tipo

almacenarse en cualquier otra tabla.

Declaracin del tipo

Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

clientref de la tabla pedidos_tab.


No es aplicable a los atributos de todos los objetos pedido_t que puedan

 Esta limitacin slo afecta a las columnas

pedido_t
stock_t

clientref pueden hacer referencia slo a filas en la

tabla clientes_tab.

La va objeto-relacional
Definicin de tipos

SCOPE asociado al operador REF de la columna clientref?


Cuando no se aplican restricciones en el mbito, el operador REF permite referenciar

 Por qu el

lista_item_t.
La sentencia NESTED TABLE crea una tabla lista_item_tab.
Esta tabla contendr las columnas lista_item_t de todas las filas de la tabla
pedidos_tab.

 Cada fila cuenta con una columna que es una tabla anidada



stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

22 / 26

La tabla de objetos pedidos_tab

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t

 Es importante notar:
 Todas las filas de una tabla anidada se encuentran en una tabla de almacenamiento

separada.
 Se utilliza una fila oculta en esta tabla de almacenamiento, denominada

NESTED_TABLE_ID, para relacionar las filas con su correspondiente fila padre.


 Todos los elementos de una tabla anidada que pertenecen a un determinado padre

tienen el mismo valor del ndice NESTED_TABLE_ID.

Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

22 / 26

Modificacin de las tablas

Introduccin

 La siguiente sentencia modifica la tabla de almacenamiento

lista_item_tab, que

Anlisis

contiene las columnas lista_item_t de la tabla de objetos anidada en

Aproximacin relacional

pedidos_tab

Modelos objeto-relacional

ALTER TABLE l i s t a _ i t e m _ t a b
ADD (SCOPE FOR ( s t o c k r e f ) IS s t o c k _ t a b ) ;

Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t

 Esto impone una restriccin en el mbito de las referencias (REFs).


 La tabla de almacenamiento

Declaracin del tipo

tipo lista_item_t.

pedido_t
Declaracin del tipo

stock_t

 Uno de los atributos de este objeto, y por tanto de cada columna de la tabla

Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab

lista_item_tab contiene columnas anidadas del

lista_item_tab, es stockref que es de tipo REF stock_t.


La sentencia ALTER anterior restringe el mbito de la columna de referencias a la
tabla de objetos stock_tab.

La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

23 / 26

Modificacin de las tablas

Introduccin
Anlisis

 La siguiente sentencia modifica de nuevo la tabla anidada

lista_item_tab para

especificar un ndice:

Aproximacin relacional
Modelos objeto-relacional
Introduccin

ALTER TABLE l i s t a _ i t e m _ t a b
STORAGE (NEXT 5K PCTINCREASE 5
MINEXTENTS 1 MAXEXTENTS 2 0 ) ;

La va objeto-relacional
Definicin de tipos
Declaracin del tipo

CREATE INDEX l i s t a _ i t e m _ i n d
ON l i s t a _ i t e m _ t a b ( NESTED_TABLE_ID ) ;

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

 Esto crea un ndice en esa columna, haciendo ms eficiente el acceso a los contenidos

de la columnas de tipo lista_item_tab.

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

23 / 26

Insercin de valores

Introduccin

 Insercin de valores en la tabla

stock_tab

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores

INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

stock_tab
stock_tab
stock_tab
stock_tab

 Insercin en la tabla

VALUES
VALUES
VALUES
VALUES

(1004 ,
(1011 ,
(1534 ,
(1535 ,

6750.0 ,
4500.0 ,
2235.0 ,
3455.0 ,

2);
2);
2);
2);

clientes_tab

INSERT INTO c l i e n t e s _ t a b
VALUES (
1 , Juan Perez ,
d i r e c c i o n _ t ( Avda . Camelias , 127 , V a l e n c i a ,
V a l e n c i a , 46018 ) ,
l i s t a _ t e l _ t ( 96 123 1212 )
);
INSERT INTO c l i e n t e s _ t a b
VALUES (
2 , Isabel Arias ,
d i r e c c i o n _ t ( C / C o l e g i o Mayor , 51 , B u r j a s s o t ,
V a l e n c i a , 46100 ) ,
l i s t a _ t e l _ t ( 96 354 3232 , 96 354 3233 )
);

Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

24 / 26

Insercin de valores

Introduccin

 La tabla

pedidos_tab

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

INSERT INTO pedidos_tab


SELECT 1001 , REF( c ) ,
SYSDATE, 15MAY2001 ,
lista_item_t () ,
NULL
FROM c l i e n t e s _ t a b c
WHERE c . n u m c l i e n t = 1 ;

item_t
Declaracin del tipo

 ESta sentencia construye un objeto de tipo

pedido_t con los siguientes atributos:

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab

numpedido
clientref
fechapedido
fechaenvio
lista_item
direc_envio

1001
REF al cliente nmero 1
SYSDATE
15 de mayo de 2001
Una lista de items vaca
NULL

La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas

En esta sentencia se ha utilizado una consulta para construir una referencia a la


fila-objeto en la tabla clientes_tab cuyo valor de numclient es igual a 1

Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

24 / 26

Insercin de valores

Introduccin

 La siguiente sentencia utiliza una subconsulta para identificar el objetivo de la insercin:

una fila de la tabla anidada en la columna lista_item de la tabla pedidos_tab:

Anlisis
Aproximacin relacional

INSERT INTO TABLE(


SELECT p . l i s t a _ i t e m
FROM pedidos_tab p
WHERE p . numpedido = 1001
)
SELECT 01 , REF( s ) , 12 , 0
FROM s t o c k _ t a b s
WHERE s . numstock = 1534;

Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t

 La palabra clave

anidada almacenada en una columna.

Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab

TABLE se utiliza para manipular las filas individuales de una tabla

TABLE es el prefijo de una subconsulta que devuelve una columna simple o una tabla
anidada.

 La necesidad de utilizar la palabra clave

TABLE obedece al hecho de que es necesario

informar a Oracle de que el resultado de la consulta no es un valor escalar.

Modificacin de las tablas


Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

24 / 26

Insercin de valores

Introduccin

 Ahora creamos un nuevo pedido y aadimos varios items:

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t

INSERT INTO pedidos_tab


SELECT 2001 , REF( c ) ,
SYSDATE, 20MAY2001 ,
lista_item_t () ,
d i r e c c i o n _ t ( Avda . Americas , 33 , V a l e n c i a ,
V a l e n c i a , 46008 )
FROM c l i e n t e s _ t a b c
WHERE c . n u m c l i e n t = 2 ;

Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

INSERT INTO TABLE(


SELECT p . l i s t a _ i t e m
FROM pedidos_tab p
WHERE p . numpedido = 1001
)
SELECT 02 , REF( s ) , 10 , 10
FROM s t o c k _ t a b s
WHERE s . numstock = 1535;

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

24 / 26

Insercin de valores

Introduccin

 Ahora creamos un nuevo pedido y aadimos varios items:

Anlisis
Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t

INSERT INTO TABLE(


SELECT p . l i s t a _ i t e m
FROM pedidos_tab p
WHERE p . numpedido = 2001
)
SELECT 10 , REF( s ) , 1 , 0
FROM s t o c k _ t a b s
WHERE s . numstock = 1004;

Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

INSERT INTO TABLE(


SELECT p . l i s t a _ i t e m
FROM pedidos_tab p
WHERE p . numpedido = 2001
)
VALUES ( i t e m _ t ( 1 1 , NULL, 2 , 1 ) ) ;

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

24 / 26

Insercin de valores

Introduccin
Anlisis

 En la siguiente sentencia se muestra una forma adicional de realizar la misma

operacin:

Aproximacin relacional
Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos

UPDATE TABLE(
SELECT p . l i s t a _ i t e m
FROM pedidos_tab p
WHERE p . numpedido = 2001
) plist
SET p l i s t . s t o c k r e f =
(SELECT REF( s )
FROM s t o c k _ t a b s
WHERE s . numstock = 1011
)
WHERE p l i s t . numitem = 1 1 ;

Creacin de las tablas de


objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

24 / 26

Seleccin de valores

Introduccin
Anlisis

 La siguiente sentencia invoca de forma implcita un mtodo de comparacin e ilustra

cmo utiliza Oracle el mtodo de ordering del objeto pedido_t:

Aproximacin relacional
Modelos objeto-relacional
Introduccin

SELECT p . numpedido
FROM pedidos_tab p
ORDER BY VALUE( p ) ;

La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

 Oracle invoca al mtodo de MAP

valor para cada objeto de tipo pedido_t de la

seleccin.
 Como el mtodo simplemente devuelve el valor del atributo

numpedido, el resultado

de la seleccin es una lista de nmeros de pedido ordenados en sentido ascendente.

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

25 / 26

Seleccin de valores

Introduccin

 En las siguientes lneas reproduciremos, utilizando la tecnologa objeto-relacional, las

Anlisis

consultas de ejemplo que vimos en la implementacin relacional:

Aproximacin relacional

 Cliente y datos del pedido para la orden de compra 1001:

Modelos objeto-relacional
Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

SELECT DEREF( p . c l i e n t r e f ) p . d i r e c _ e n v i o p . numpedido


FROM pedidos_tab p
WHERE p . numpedido = 1001;

 Valor total de cada pedido de compra:


SELECT p . numpedido , p . v a l o r _ t o t a l ( )
FROM pedidos_tab p ;

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas

 Pedidos de compra e informacin de la lista de items del elemento del stock 1004:
SELECT po . numpedido po . c l i e n t r e f . n u m c l i e n t ,
CURSOR (
SELECT
FROM TABLE( po . l i s t a _ i t e m ) L
WHERE L . s t o c k r e f . numstock = 1004
)
FROM pedidos_tab po ;

Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

25 / 26

Borrado de valores

Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional

 El siguiente ejemplo tiene el mismo efecto que las dos operaciones de borrado

necesarias en el modelo relacional


 En este caso Oracle borra automticamente todas las lneas de item que pertenecen al

pedido borrado:

Introduccin
La va objeto-relacional
Definicin de tipos
Declaracin del tipo

DELETE
FROM pedidos_tab
WHERE numpedido = 1001;

item_t
Declaracin del tipo

pedido_t
Declaracin del tipo

stock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos

clientes_tab
La tabla de objetos

stock_tab
La tabla de objetos

pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores

DBD Ejemplo BDOR

26 / 26

You might also like