Diseño Bases de Datos - SGP

Embed Size (px)

Citation preview

  • 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;