diseño bases de datos - sgp
Post on 27-Feb-2018
223 Views
Preview:
TRANSCRIPT
-
7/25/2019 Diseo Bases de Datos - SGP
1/58
DBD Ejemplo BDOR 1 / 26
Bases de datos objeto-relacionales Un sistema de gestin de
pedidos
Wladimiro Daz
9 de noviembre de 2011
-
7/25/2019 Diseo Bases de Datos - SGP
2/58
Introduccin
Introduccin
Antecedentes
Anlisis
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 2 / 26
-
7/25/2019 Diseo Bases de Datos - SGP
3/58
Antecedentes
Introduccin
Antecedentes
Anlisis
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 3 / 26
Este ejemplo est basado en una actividad empresarial simple: gestin de pedidos de
usuarios.
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:
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 sermanipulados por el DBMS.
-
7/25/2019 Diseo Bases de Datos - SGP
4/58
Anlisis
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 4 / 26
-
7/25/2019 Diseo Bases de Datos - SGP
5/58
Entidades y relaciones
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 5 / 26
Las entidades bsicas del ejemplo son:
Los clientes (compradores de productos).
Elstockde productos a la venta.
Los pedidos de compra.
-
7/25/2019 Diseo Bases de Datos - SGP
6/58
Entidades y relaciones
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 5 / 26
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.
Los pedidos mantienen una relacin muchos-a-muchos con los items del stockya
que un pedido puede contener varios items del stocky un item delstockpuede
aparecer en mltiples pedidos.
La forma usual de abordar la relacin muchos-a-muchos entre pedidos y el stock
es introducir otra entidad denominadalista de items.
Un pedido puede tener un nmero arbitrario de items, pero cada lnea de la lista de
itemspertenece a un nico pedido.
Un elemento del stockpuede aparecer en un gran nmero de listas de items, pero
cada lnea de la lista de items hace referencia slo a un item delstock.
-
7/25/2019 Diseo Bases de Datos - SGP
7/58
Entidades y relaciones
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 5 / 26
La siguiente tabla resume la informacin requerida para cada una de las entidades
descritas.
Entidad Informacin requerida
Cliente Informacin de contacto
Stock Identificador del item, precio, importe del IVA
Pedido Cliente, pedido y fecha de envo, direccin de envo
Lista de items Item delstock, cantidad, precio, descuento aplicable para ca-
da item
-
7/25/2019 Diseo Bases de Datos - SGP
8/58
Entidades y relaciones
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 5 / 26
El diagrama de clases UML es:
Cliente
nombrenumCliente
numPedidofechaPedido
fechaEnvio
Pedido
TelefononumTelefono calle
poblacionprovinciacodigoZip
Direccion
numStockprecio
tasa
Stock
cantidad
descuento
Item
0..*#cliente
#telefonos0..* #direccion #direccion
0..* 0..*
#items#pedidos
-
7/25/2019 Diseo Bases de Datos - SGP
9/58
Entidades y relaciones
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 5 / 26
O mejor este:
Cliente
nombrenumCliente
numPedidofechaPedido
fechaEnvio
Pedido
TelefononumTelefono calle
poblacionprovinciacodigoZip
Direccion
cantidaddescuento
Item
numStockpreciotasa
Stock
0..*#cliente
#telefonos0..* #direccion #direccion
#pedidos
#pedido 0..*
#stock
0..*
#items
-
7/25/2019 Diseo Bases de Datos - SGP
10/58
Entidades y relaciones
Introduccin
Anlisis
Entidades y relaciones
Aproximacin relacional
Modelos objeto-relacional
DBD Ejemplo BDOR 5 / 26
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 directa-mente. La aproximacin objeto-relacional hace posible manejar estas estructuras
complejas de forma ms eficiente.
-
7/25/2019 Diseo Bases de Datos - SGP
11/58
Aproximacin relacional
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 6 / 26
-
7/25/2019 Diseo Bases de Datos - SGP
12/58
Aproximacin relacional
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 7 / 26
El modelo relacional normaliza las entidades y sus atributos y estructura las entidades
comprador, pedidos de compra ystocken 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/25/2019 Diseo Bases de Datos - SGP
13/58
Aproximacin relacional
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 7 / 26
Tablas
La tabla de clientes:
CREATE TABLE c l i e n t e s (
n u m c l i e n t NUMBER,
nombre VARCHAR2( 2 0 0 ) ,
c a l l e VARCHAR2( 2 0 0 ) ,
p o b l a c i o n VARCHAR2( 2 0 0 ) ,
p r o v i n c i a VARCHAR2( 5 0 ) ,
c o d _ z i p VARCHAR2( 2 0 ) ,
t e l e f 1 VARCHAR2( 2 0 ) ,
t e l e f 2 VARCHAR2( 2 0 ) ,t e l e f 3 VARCHAR2( 2 0 ) ,
PRIMARY KEY ( n u mc l i e n t )
) ;
-
7/25/2019 Diseo Bases de Datos - SGP
14/58
Aproximacin relacional
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 7 / 26
Tablas
La tabla de pedidos:
CREATE TABLE pe di do s (
numpedido NUMBER,n u m c l i e n t 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 ) ,
p r o v _ e n v i o VARCHAR2( 5 0 ) ,
z i p _ e n v i o VARCHAR2( 2 0 ) ,PRIMARY KEY (numpedido)
) ;
-
7/25/2019 Diseo Bases de Datos - SGP
15/58
Aproximacin relacional
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 7 / 26
Tablas
La tabla destock:
CREATE TABLE st oc k (
numstock NUMBER PRIMARY KEY,
p r e c i o NUMBER,
cod_tasa NUMBER
) ;
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 s to ck ,
c a n t i d a d NUMBER,
descuento NUMBER,
PRIMARY KEY ( numpedido , numitem )
) ;
-
7/25/2019 Diseo Bases de Datos - SGP
16/58
Aproximacin relacional
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 7 / 26
La primera tabla,clientes, contiene informacin acerca de los compradores.
La tablapedidostiene una columnanumclient, que contiene una clave externa a la
tablapedidos. La clave externa implementa la relacin muchos-a-uno entre pedidos y
clientes.
La tablalista_itemscontiene las claves externasnumpedidoy numstockque
hacen referencia a las tablaspedidoy stock respectivamente.
-
7/25/2019 Diseo Bases de Datos - SGP
17/58
Insercin de valores
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 8 / 26
En una aplicacin basada en las tablas definidas en la seccin anterior, sentencias
como las que siguen insertan valores en las tablas:
INSERT INTO c l i e n t e s
VALUES ( 1 , Juan P er ez , A vda . C am el ia s , 127 ,
V a l e n c i a , V a l e n c i a , 4 6018 , 96 123 1212 , NULL, NULL ) ;
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 ol eg io Mayor , 51 ,
B u r j a s s o t , V a l e n c i a , 4 6100 ,
9 6 354 3 232 , 9 6 354 3233 , NULL ) ;
INSERT INTO pedidos
VALUES (1 00 1 , 1 , SYSDATE, 15MAY2001 ,
NULL, NULL, NULL, NULL ) ;
INSERT INTO pedidos
VALUES (2 00 1 , 2 , SYSDATE, 20MAY2001 , A vda . A me ri ca s , 33 , V a l e nc i a ,
V a l e n c i a , 460 08 ) ;
-
7/25/2019 Diseo Bases de Datos - SGP
18/58
Insercin de valores
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 8 / 26
En una aplicacin basada en las tablas definidas en la seccin anterior, sentencias
como las que siguen insertan valores en las tablas:
INSERT INTO s t o c k VALUES( 10 04 , 6 75 0. 0 , 2 ) ;
INSERT INTO s t o c k VALUES( 10 11 , 4 50 0. 0 , 2 ) ;
INSERT INTO s t o c k VALUES( 15 34 , 2 23 5. 0 , 2 ) ;INSERT INTO s t o c k VALUES( 15 35 , 3 45 5. 0 , 2 ) ;
INSERT INTO l i s t a _ i t e m s VALUES( 01 , 1001 , 1534 , 12 , 0 ) ;
INSERT INTO l i s t a _ i t e m s VALUES( 0 2 , 10 01 , 15 35 , 1 0 , 1 0 ) ;
INSERT INTO l i s t a _ i t e m s VALUES( 10 , 2001 , 1004 , 1 , 0 ) ;
INSERT INTO l i s t a _ i t e m s VALUES( 11 , 2001 , 1011 , 2 , 1 ) ;
-
7/25/2019 Diseo Bases de Datos - SGP
19/58
Seleccin de valores
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 9 / 26
Las aplicaciones pueden ahora ejecutar consultas de diverso tipo para recuperar la
informacin de los datos almacenados.
Cliente y datos del pedido para la orden de compra 1001:
SELECT C . n u m c l i en t , C . nombre , C . c a l l e , C . p o b l a c io n ,
C . p r o v i n c i a , C . c od _z ip , C . t e l e f 1 , C . t e l e f 2 ,
C . t e l e f 3 , P . n umped id o , P . f e c h a_ p e d id o ,
L . n umst oc k , L . n umite m , L . c a n t i d a d , L . d e sc u en t o
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 . n umpe di do = 1 0 0 1;
Valor total de cada pedido de compra:
SELECT P . numpedido , SUM(S. pre c io L . c a n t i d a d )
FROM p ed id os P , i te ms L , s to ck S
WHERE P. numpedido = L . numpedido
AND L . n umst oc k = S . n umst oc kGROUP BY P. numpedido ;
-
7/25/2019 Diseo Bases de Datos - SGP
20/58
Seleccin de valores
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 9 / 26
Las aplicaciones pueden ahora ejecutar consultas de diverso tipo para recuperar la
informacin de los datos almacenados.
Pedidos de compra e informacin de la lista de items del elemento del stock 1004:
SELECT P . numpedido , P. numcl ient , L . numstock ,
L . n umite m , L . c a n t i d a d , L . d e s cu e nt o
FROM pedidos P , l i s t a _ i t e m s L
WHERE P. numpedido = L . numpedido
AND L . n um st oc k = 1 0 04 ;
-
7/25/2019 Diseo Bases de Datos - SGP
21/58
Modificacin de valores
Introduccin
Anlisis
Aproximacin relacional
Aproximacin relacional
Insercin de valores
Seleccin de valores
Modificacin de valores
Modelos objeto-relacional
DBD Ejemplo BDOR 10 / 26
Actualizacin. Para modificar la cantidad de items del stock 1001 para el pedido 01 se
realizara del siguiente modo:
UPDATE l i s t a _ i t e m s
SET c a n ti d a d = 20
WHERE numpedido = 1AND numstock = 1001;
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;
-
7/25/2019 Diseo Bases de Datos - SGP
22/58
Modelos objeto-relacional
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 tipostock_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
-
7/25/2019 Diseo Bases de Datos - SGP
23/58
Introduccin
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 tipostock_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 12 / 26
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...
Por qu no desarrollar las aplicaciones en lenguajes de tercera generacin?
Fundamentalmente por dos motivos:
Los DBMS proporcionan funcionalidades que costara millones de horas de trabajo
replicar.
Los lenguajes 3GL carecen de persistencia.
-
7/25/2019 Diseo Bases de Datos - SGP
24/58
Introduccin
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 tipostock_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 12 / 26
Esto deja al desarrollador con el problema de simular tipos complejos empleando slo
la implementacin incompleta de SQL.
Serios problemas de implementacin, ya que obliga a:
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 laaplicacin y el del servidor
El rendimiento disminuye de forma notable.
El objetivo de la tecnologa objeto-relacional es resolver estos problemas.
-
7/25/2019 Diseo Bases de Datos - SGP
25/58
La va objeto-relacional
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 tipostock_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 13 / 26
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.
Algunas de las mejoras que podemos introducir mediante el modelo objeto-relacional
son:
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.
En el modelo objeto-relacional, las entidades principales clientes,stocky
pedidos se convierten en objetos. Las relaciones muchos-a-uno se representan
mediante referencias entre estos objetos.
-
7/25/2019 Diseo Bases de Datos - SGP
26/58
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 tipostock_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
Las siguientes sentencias sientan las bases:
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:
CREATE TYPE l i s t a _ t e l _ t AS VARRAY( 1 0 ) OF VARCHAR2( 2 0 ) ;
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
-
7/25/2019 Diseo Bases de Datos - SGP
27/58
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 tipostock_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
Una lista de nmeros de telfono podra definirse como un vector o como una tabla
anidada.
En este caso, un vectorVARRAYes mejor eleccin por:
El orden de los nmeros puede ser importante. UnVARRAYest ordenado mientras
que una tabla anidada no.
El nmero de nmeros de telfono para un cliente concreto es pequeo. Los
vectoresVARRAYobligan 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 porla 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 entreVARRAYs 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
vectoresVARRAY.
-
7/25/2019 Diseo Bases de Datos - SGP
28/58
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 tipostock_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
La siguiente sentencia define el tipo de objetodireccion_tque se utilizar para
representar direcciones postales.
CREATE TYPE d i r e c c i o n _ t AS OBJECT (
c a l l e VARCHAR2( 1 0 0 ) ,
p o b l a c i o n VARCHAR2( 1 0 0 ) ,p r o v i n c i a VARCHAR2( 5 0 ) ,
c o d _ z i p VARCHAR2( 2 0 )
) ;
-
7/25/2019 Diseo Bases de Datos - SGP
29/58
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 tipostock_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
La siguiente sentencia define el tipocliente_tque utiliza los tipos ya definidos como
bloques estructurales:
CREATE TYPE c l i e n t e _ t AS OBJECT (
n u m c l i e n t NUMBER,
nombre VARCHAR2( 2 0 0 ) ,d i r e c c i o n d i r ec c i on _ t ,
t e l ef o n o s l i s t a _ t e l _ 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 tipocliente_tdefinido son objetos que representan bloques de
informacin acerca de un cliente concreto.
Cada objectocliente_ttiene tambin asociado un mtodo de clasificacin, uno
de los dos tipos de mtodos de comparacin, ord_cliente. La sentencia anterior no incluye el programa PL/SQL que implementa el mtodo.
Este se definir con posterioridad.
-
7/25/2019 Diseo Bases de Datos - SGP
30/58
Declaracin del tipoitem_t
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa va objeto-relacional
Definicin de tipos
Declaracin del tipo
item_t
Declaracin del tipo
pedido_t
Declaracin del tipostock_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 15 / 26
La siguiente sentencia completa la definicin del tipo de objeto incompleto item_t
definido al principio de esta seccin:
CREATE TYPE i t e m _ t AS OBJECT (
numitem NUMBER,
s t o c k r e f REF s t o c k _ t ,c a n t i d a d NUMBER,
descuento NUMBER
) ;
La siguiente sentencia define un tipo de tabla denominado lista_item_t. Un dato
de este tipo es una tabla anidada en la que cada fila contiene un objetoitem_t.CREATE TYPE l i s t a _ i t e m _ t AS TABLE OF i t e m _ t ;
-
7/25/2019 Diseo Bases de Datos - SGP
31/58
Declaracin del tipoitem_t
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa va objeto-relacional
Definicin de tipos
Declaracin del tipo
item_t
Declaracin del tipo
pedido_t
Declaracin del tipostock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos
clientes_tab
La tabla de objetos
stock_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 15 / 26
Para representar un valor mltiple como la lista de items de un pedido, una tabla
anidada es mejor eleccin que unVARRAYde objetositem_tdebido 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 VARRAYSya
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 enVARRAYs.
El orden de los items en la lista de items carece de importancia y el nmero de itempuede 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 unVARRAY
obliga a especificar un valor mximo en el nmero de elementos.
-
7/25/2019 Diseo Bases de Datos - SGP
32/58
Declaracin del tipopedido_t
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa va objeto-relacional
Definicin de tipos
Declaracin del tipo
item_t
Declaracin del tipo
pedido_t
Declaracin del tipostock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos
clientes_tab
La tabla de objetos
stock_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 16 / 26
La siguiente sentencia completa la definicin del tipo incompleto pedido_tdeclarado
al principio de esta seccin:
CREATE TYPE p e d i d o _ t AS OBJECT (
numpedido NUMBER,
c l i e n t r e f REF c l i e n t e _ t ,f e c h a p e d i d o DATE,
f e c h a e n v i o DATE,
l i s t a _ i t e m l i s t a _ i t e m _ t ,
d i r ec _ en v i o d i r e c c i on _ 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)
) ;
-
7/25/2019 Diseo Bases de Datos - SGP
33/58
Declaracin del tipopedido_t
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa va objeto-relacional
Definicin de tipos
Declaracin del tipo
item_t
Declaracin del tipo
pedido_t
Declaracin del tipostock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos
clientes_tab
La tabla de objetos
stock_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 16 / 26
Las instancias de este tipo son objetos que representan un pedido. Contienen seis
atributos, incluyendo una referencia (REF), una tabla anidada de tipolista_item_ty
un objeto de tipodireccion_t.
Tambin cuentan con dos mtodos:valory valor_total. El primero es un mtodo
deMAP (proyeccin), una de las dos clases de clasificacin. Un mtodo deMAPdevuelve la posicin relativa del objeto, de modo que cada vez que Oracle necesita
comparar dos objetos de tipopedido_tinvoca implcitamente a este mtodo. Las
declaraciones PRAGMAproporcionan informacin al PL/SQL acerca del tipo de acceso
a la base de datos que requieren.
-
7/25/2019 Diseo Bases de Datos - SGP
34/58
Declaracin del tipostock_t
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa va objeto-relacional
Definicin de tipos
Declaracin del tipo
item_t
Declaracin del tipo
pedido_t
Declaracin del tipostock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos
clientes_tab
La tabla de objetos
stock_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 17 / 26
Por ltimo, la siguiente sentencia completa la definicin del tercer tipo, stock_t,
definido al principio de la seccin:
CREATE TYPE s t o c k _ t AS OBJECT (
numstock NUMBER,
p r e c i o NUMBER,cod_tasa NUMBER
) ;
Las instancias del tipostock_trepresentan los elementos delstockque los clientes
solicitan en sus pedidos.
-
7/25/2019 Diseo Bases de Datos - SGP
35/58
Definicin de mtodos
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa va objeto-relacional
Definicin de tipos
Declaracin del tipo
item_t
Declaracin del tipo
pedido_t
Declaracin del tipostock_t
Definicin de mtodos
Creacin de las tablas de
objetos
La tabla de objetos
clientes_tab
La tabla de objetos
stock_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 18 / 26
En este apartado mostraremos cmo se especifican los mtodos de los tipos de objeto
cliente_ty pedido_t, es decir, el programa PL/SQL que implementa los mtodos:
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 ;s t o c k s t o c k _ t ;
i t e m i t e m _ t ;
t o t a l NUMBER := 0 ;
p r e c i o NUMBER;
BEGIN
FOR i IN 1 . . SELF . l i s t a _ i t e m .COUNT LOOP
i te 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 + i te m . c an ti da d s t o c k . p r e c i o ;
END LOOP;
RETURN t o t a l ;
END ;
MAP MEMBER FUNCTION v a l o r RETURN NUMBER ISBEGIN
RETURN numpedido ;
END ;
END ;
-
7/25/2019 Diseo Bases de Datos - SGP
36/58
Definicin de mtodos
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa 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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 18 / 26
El mtodovalores sencillo: simplemente devuelve el nmero asociado a cada
pedido.
El mtodovalor_totalusa una serie de mecanismos objeto-relacionales para
devolver la suma de los precios de los elementos de la lista de items asociada al pedido.
La misin de esta funcin es calcular el importe total de los elementos asociados al
pedido.
La palabra claveCOUNTproporciona el nmero total de elementos en un vector o
tabla PL/SQL. En combinacin conLOOPpermite a la aplicacin iterar sobre todos
los elementos de la coleccin. De este modo, SELF.lista_item.COUNTcuenta elnmero de elementos en la tabla anidada que coincide con el atributolista_item
del objetopedido_trepresentado porSELF.
-
7/25/2019 Diseo Bases de Datos - SGP
37/58
Definicin de mtodos
Introduccin
Anlisis
Aproximacin relacional
Modelos objeto-relacional
IntroduccinLa 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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 18 / 26
El mtodovalor_total...
El operadorDEREFtoma un valor de tipo referencia como argumento y devuelve un
objeto fila. En este caso,DEREF(line_item.stockref)toma el atributo
stockrefcomo argumento y devuelve un objeto stock_t.
Volviendo a nuestra definicin de los datos, podemos comprobar questockrefes
un atributo del objetoitem_tque es a su vez un atributo delista_item_t. Este
objeto-lista, que hemos estructurado como una tabla anidada es al fin y al cabo un
atributo del objetopedido_trepresentado porSELF.
Esto puede parecer realmente complejo, pero basta retomar nuestra perspectiva delmundo 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.
-
7/25/2019 Diseo Bases de Datos - SGP
38/58
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 18 / 26
El mtodovalor_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 SQLSELECTcon
la llamada explcita aDEREFya que Oracle no permite la dereferencia implcita deREFs en programas PL/SQL. La variable PL/SQLstockes del tipostock_t. La
sentenciaSELECTle 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 comostock.precio. Sin
embargo, para calcular el precio del item tambin se requiere conocer la cantidad de
elementos pedidos. En nuestra aplicacin, el trminoline_item.cantidad
representa al atributocantidadde cada objetoitem_t. 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.
-
7/25/2019 Diseo Bases de Datos - SGP
39/58
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 18 / 26
El mtodoord_clientedel tipo de objetocliente_tse define a continuacin:
CREATE OR REPLACE TYPE BODY c l i e n t e _ t AS
ORDER MEMBER FUNCTION
o r d _ c li 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 funcinord_clientesirve para comparar dos
pedidos de clientes.
El mecanismo de operacin es sencillo. El mtodo utiliza otro objeto de tipo
cliente_tcomo argumento de entrada y devuelve la diferencia entre los nmeros
numclient.
-
7/25/2019 Diseo Bases de Datos - SGP
40/58
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 18 / 26
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 quex.
Un nmero positivo si el cliente actual es ms reciente.
Cero, en cuyo caso el objeto est comparndose consigo mismo.
-
7/25/2019 Diseo Bases de Datos - SGP
41/58
Creacin de las tablas de objetos
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 19 / 26
Generalmente, podemos considerar que la relacin entre objetos y tablas es la
siguiente:
Las clases, que representan a las entidades, cumplen la misma funcin que las
tablas.
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.
-
7/25/2019 Diseo Bases de Datos - SGP
42/58
La tabla de objetosclientes_tab
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 20 / 26
La siguiente sentencia define la tabla de objetos clientes_tabque contiene objetos
del tipocliente_t:
CREATE TABLE c l i e n t e s _ t a b OF c l i e n t e _ t
( n u mc l i e n t PRIMARY KEY ) ;
Los tipos de dato se comportan como patrones para las tablas de objetos:
El hecho de que exista un tipocliente_tsignifica 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 sepuedan introducir variaciones. Por ejemplo, en la sentencia que crea la tabla
clientes_tab se define como clave primaria la columnanumclient. Cualquier
otra tabla de objetoscliente_tno tiene porque satisfacer esta restriccin.
Las restricciones se aplican a las tablas, no a la definicin de tipos.
-
7/25/2019 Diseo Bases de Datos - SGP
43/58
La tabla de objetosclientes_tab
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 20 / 26
Las tablas de objetos pueden contener objetos embebidos:
Examinando la definicin de la tablaclientes_tabpodemos observar que la
columnadireccioncontiene objetos del tipodireccion_t.
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.
-
7/25/2019 Diseo Bases de Datos - SGP
44/58
La tabla de objetosstock_tab
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 21 / 26
La siguiente sentencia crea la tabla de objetos stock_tab:
CREATE TABLE s t o c k _ t a b OF s t o c k _ t
(numstock PRIMARY KEY ) ;
-
7/25/2019 Diseo Bases de Datos - SGP
45/58
La tabla de objetospedidos_tab
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 22 / 26
La siguiente sentencia define una tabla constituida por objetos del tipo pedido_t:
CREATE TABLE p e d i d o s _ t a b OF pe d id 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 pedido_t, cuyos atributos son:
numpedido NUMBER
c l i e n t r e f REF c l i e n t e _ t
f e c h a p e d i d o DATE
f e c h a e n v i o DATE
l i s t a _ i t e m l i s t a _ i t e m _ t
-
7/25/2019 Diseo Bases de Datos - SGP
46/58
La tabla de objetospedidos_tab
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 22 / 26
Por qu elSCOPEasociado al operadorREF de la columnaclientref?
Cuando no se aplican restricciones en el mbito, el operadorREFpermite referenciar
a cualquier objeto-fila.
Sin embargo, las referenciasclientrefpueden hacer referencia slo a filas en la
tablaclientes_tab.
Esta limitacin slo afecta a las columnasclientrefde la tablapedidos_tab.
No es aplicable a los atributos de todos los objetospedido_tque puedan
almacenarse en cualquier otra tabla.
Cada fila cuenta con una columna que es una tabla anidadalista_item_t.
La sentenciaNESTED TABLEcrea una tablalista_item_tab.
Esta tabla contendr las columnaslista_item_tde todas las filas de la tabla
pedidos_tab.
-
7/25/2019 Diseo Bases de Datos - SGP
47/58
La tabla de objetospedidos_tab
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 22 / 26
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 ndiceNESTED_TABLE_ID.
-
7/25/2019 Diseo Bases de Datos - SGP
48/58
Modificacin de las tablas
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 23 / 26
La siguiente sentencia modifica la tabla de almacenamientolista_item_tab, que
contiene las columnaslista_item_tde la tabla de objetos anidada en
pedidos_tab
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 ) ;
Esto impone una restriccin en el mbito de las referencias (REFs).
La tabla de almacenamientolista_item_tabcontiene columnas anidadas del
tipolista_item_t.
Uno de los atributos de este objeto, y por tanto de cada columna de la tablalista_item_tab, esstockrefque es de tipoREF stock_t.
La sentenciaALTERanterior restringe el mbito de la columna de referencias a la
tabla de objetosstock_tab.
-
7/25/2019 Diseo Bases de Datos - SGP
49/58
Modificacin de las tablas
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 23 / 26
La siguiente sentencia modifica de nuevo la tabla anidada lista_item_tabpara
especificar un ndice:
ALTER TABLE l i s t a _ i t e m _ t a b
STORAGE (NEXT 5K PCTINCREASE 5
MINEXTENTS 1 MAXEXTENTS 2 0 ) ;
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 ) ;
Esto crea un ndice en esa columna, haciendo ms eficiente el acceso a los contenidos
de la columnas de tipolista_item_tab.
-
7/25/2019 Diseo Bases de Datos - SGP
50/58
Insercin de valores
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_tabLa 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 en la tablastock_tab
INSERT INTO s t o c k _ t a b VALUES ( 10 04 , 6 75 0. 0 , 2 ) ;
INSERT INTO s t o c k _ t a b VALUES ( 10 11 , 4 50 0. 0 , 2 ) ;
INSERT INTO s t o c k _ t a b VALUES ( 15 34 , 2 23 5. 0 , 2 ) ;
INSERT INTO s t o c k _ t a b VALUES ( 15 35 , 3 45 5. 0 , 2 ) ;
Insercin en la tablaclientes_tab
INSERT INTO c l i e n t e s _ t a b
VALUES (
1 , J uan P er ez ,
d i r e c c i o n _ t ( Avda . C am el ia s , 127 , V a l e nc i a ,
Vale ncia , 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 , I s ab e l A ri as ,d i r e c c i o n _ t ( C/ C o l eg i o Mayor , 51 , B u r j a ss o t ,
Vale ncia , 46100 ) ,
l i s t a _ t e l _ t ( 9 6 354 3232 , 9 6 354 3233 )
) ;
-
7/25/2019 Diseo Bases de Datos - SGP
51/58
Insercin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 24 / 26
La tablapedidos_tab
INSERT INTO p e d i d o s _ t a b
SELECT 1001, REF( c ) ,
SYSDATE, 15MAY2001 ,
l i s t a _ i t e m _ t ( ) ,
NULL
FROM c l i e n t e s_ t a b c
WHERE c . n u m cl i en t = 1 ;
ESta sentencia construye un objeto de tipopedido_tcon los siguientes atributos:
numpedido 1001clientref REF al cliente nmero 1
fechapedido SYSDATE
fechaenvio 15 de mayo de 2001
lista_item Una lista de items vaca
direc_envio NULL
En esta sentencia se ha utilizado una consulta para construir una referencia a la
fila-objeto en la tablaclientes_tabcuyo valor denumclientes igual a 1
-
7/25/2019 Diseo Bases de Datos - SGP
52/58
Insercin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 24 / 26
La siguiente sentencia utiliza una subconsulta para identificar el objetivo de la insercin:
una fila de la tabla anidada en la columna lista_itemde la tablapedidos_tab:
INSERT INTO TABLE(
SELECT p . l i s t a _ i t e m
FROM p ed i d o s_ t a b pWHERE p. numpedido = 1001
)
SELECT 01 , REF( s ) , 12 , 0
FROM s to c k_ t ab s
WHERE s . n um st oc k = 1 5 34 ;
La palabra claveTABLEse utiliza para manipular las filas individuales de una tablaanidada almacenada en una columna.
TABLEes el prefijo de una subconsulta que devuelve una columna simple o una tabla
anidada.
La necesidad de utilizar la palabra claveTABLEobedece al hecho de que es necesario
informar a Oracle de que el resultado de la consulta no es un valor escalar.
-
7/25/2019 Diseo Bases de Datos - SGP
53/58
Insercin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 24 / 26
Ahora creamos un nuevo pedido y aadimos varios items:
INSERT INTO p e d i d o s _ t a b
SELECT 2001, REF( c ) ,
SYSDATE, 20MAY2001 ,
l i s t a _ i t e m _ t ( ) ,
d i r e c c i o n _ t ( A vda . A me ri ca s , 33 , V a l e nc i a ,
V a l e n c i a , 46 008 )
FROM c l i e n t e s_ t a b c
WHERE c . n u m cl i en t = 2 ;
INSERT INTO TABLE(
SELECT p . l i s t a _ i t e mFROM p ed i d o s_ t a b p
WHERE p. numpedido = 1001
)
SELECT 02 , REF( s ) , 10 , 10
FROM s to c k_ t ab s
WHERE s . n um st oc k = 1 5 35 ;
-
7/25/2019 Diseo Bases de Datos - SGP
54/58
Insercin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 24 / 26
Ahora creamos un nuevo pedido y aadimos varios items:
INSERT INTO TABLE(
SELECT p . l i s t a _ i t e m
FROM p ed i d o s_ t a b p
WHERE p. numpedido = 2001
)
SELECT 10 , REF( s ) , 1 , 0
FROM s to c k_ t ab s
WHERE s . n um st oc k = 1 0 04 ;
INSERT INTO TABLE(
SELECT p . l i s t a _ i t e mFROM p ed i d o s_ t a b p
WHERE p. numpedido = 2001
)
VALUES ( i t em _t (11 , NULL, 2 , 1 ) ) ;
-
7/25/2019 Diseo Bases de Datos - SGP
55/58
Insercin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 24 / 26
En la siguiente sentencia se muestra una forma adicional de realizar la misma
operacin:
UPDATE TABLE(
SELECT p . l i s t a _ i t e m
FROM p ed i d o s_ t a b pWHERE p. numpedido = 2001
) p l i s t
SET p l i s t . s t o c k r e f =
(SELECT REF( s )
FROM s to c k_ t ab s
WHERE s . n umst oc k = 1011
)WHERE p l i s t . numitem = 1 1;
S l i d l
-
7/25/2019 Diseo Bases de Datos - SGP
56/58
Seleccin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 25 / 26
La siguiente sentencia invoca de forma implcita un mtodo de comparacin e ilustra
cmo utiliza Oracle el mtodo deorderingdel objetopedido_t:
SELECT p . numpedido
FROM p ed i d o s_ t a b p
ORDER BY VALUE( p ) ;
Oracle invoca al mtodo de MAPvalorpara cada objeto de tipopedido_tde 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.
S l i d l
-
7/25/2019 Diseo Bases de Datos - SGP
57/58
Seleccin de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
DBD Ejemplo BDOR 25 / 26
En las siguientes lneas reproduciremos, utilizando la tecnologa objeto-relacional, las
consultas de ejemplo que vimos en la implementacin relacional:
Cliente y datos del pedido para la orden de compra 1001:
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 p ed i d os _ t a b p
WHERE p . n umpe di do = 1 0 0 1;
Valor total de cada pedido de compra:
SELECT p . numpedido , p . v a l o r _ t o t a l ( )
FROM p e di d os _ ta b p ;
Pedidos de compra e informacin de la lista de items del elemento del stock 1004:
SELECT po . nu mpedido po . c l i e n t r e f . n u m c l ie 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 . n um st oc k = 1004
)
FROM p ed i d os _ t a b po ;
B d d l
-
7/25/2019 Diseo Bases de Datos - SGP
58/58
Borrado de valores
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_tabLa tabla de objetos
pedidos_tab
Modificacin de las tablas
Insercin de valores
Seleccin de valores
Borrado de valores
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:
DELETE
FROM p e d i d o s _ t a b
WHERE numpedido = 1001;
top related