Está en la página 1de 17

UNIVERSIDAD UTE

Objeto-Relacional
Ing. Ciro Saguay, MSc.

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Introducción
Las bases de datos objeto-relacional describir una evolución del modelo
relacional hasta una base de datos orientada a objetos es decir es una
base híbrida, que contiene ambas tecnologías: relacional y objetos.

El modelo relacional está diseñado para representar los datos como una
serie de tablas con columnas y atributos. Una base de datos objeto-
relacional incorpora tecnologías orientadas a objetos, permitiendo
construir tipos de objetos complejos, entendidos como:
•Capacidad para definir objetos dentro de objetos.
•Cierta capacidad para encapsular o asociar métodos con dichos objetos.

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Introducción
Un tipo de objeto consta de dos partes:
especificación y cuerpo. La
especificación constituye la interface a I.
las aplicaciones; aquí se declaran las P.
estructuras de datos (conjunto de
atributos) y las operaciones (métodos)
necesarios para manipular los datos. El
cuerpo define los métodos, es decir,
implementa la especificación. C.
M

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
El Modelo Objeto-Relacional
Caso de Estudio
Esta es una agencia de renta de vehículos, para lo cual se necesita manejar información
referente a los vehículos y clientes, de estos es necesario tener su cédula y ciertos datos;
dichos datos son nombre, dirección y teléfonos.

De la dirección se necesita Ciudad, Calle y Número, mientras que solo se podrá ingresar
como máximo cinco teléfonos por clientes. Por otra parte sobre los vehículos se
necesita la Placa, datos referente al año y kilometraje actual del vehículo,
mantenimiento, costo por renta del vehículo y recargo por entregarlo fuera de plazo.

El mantenimiento corresponde a todas las veces que el vehículo debe ir al taller por
reparaciones, por lo cual se necesita manejar la fecha y el costo de dicha reparación.
Además es necesario tener información referente a la rentad e los vehículos, para ello se
necesita tener la cedula del cliente, la placa del vehículo, una glosa y el valor total de la
renta; la glosa corresponde a la fecha de préstamo y devolución del vehículo y su
kilometraje inicial y final.
ABD 2020 Ing. Ciro Saguay.
UNIVERSIDAD UTE
El Modelo Objeto-Relacional
Modelo lógico de datos
En base de datos objeto relacional este caso lo podemos plantear con
un esquema de tres tablas, dichas tablas son:
Cliente (Cedula, Datos).
Vehículos (Placa, Datos_v, Mantenimiento, Arriendo, Recargo).
Arriendo (Cliente, Vehiculo, Glosa, Valor).

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Creación de tablas (Cliente)
create type telefonos_type as varray(5) of varchar2(20); create type personas_type as object(
create type direccion_type as object( nombre varchar(50),
ciudad varchar2(20), direccion direccion_type,
calle varchar2(20), telefonos telefonos_type,
numero number(10,0) ); MEMBER FUNCTION
total_telefonos RETURN NUMBER,
PRAGMA RESTRICT_REFERENCES (total_telefonos , WNDS,
CREATE OR REPLACE TYPE BODY personas_type AS WNPS),
MEMBER FUNCTION total_telefonos RETURN NUMBER IS MEMBER FUNCTION
total NUMBER := 0; telefono_id(id in number) RETURN varchar,
BEGIN PRAGMA RESTRICT_REFERENCES (telefono_id , WNDS,
WNPS))
total:=SELF.telefonos.count;
RETURN total;
create table clientes(
END;
ced char(10) not null,
datos personas_type,
MEMBER FUNCTION telefono_id(id in number) RETURN
constraint pk_clientes primary key(ced)
varchar IS
);
telefono2 char(10);
BEGIN
telefono2:=SELF.telefonos(id);
RETURN telefono2;
END;
END;

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Creación de tablas (vehículos)
create type mantencion_type as object( create type vehiculos_type as object( CREATE OR REPLACE TYPE BODY
fecha date, placa char(6), vehiculos_type AS
costo number(7,0)); datos_v descripcion_type, MEMBER FUNCTION gasto RETURN NUMBER
IS
mantencion mantencion_table, i INTEGER;
create type mantencion_table as table of arriendo number(5,0), mantencion_aux mantencion_type;
mantencion_type; recargo number(5,0), total NUMBER := 0;
MEMBER FUNCTION BEGIN
create type descripcion_type as object( gasto RETURN NUMBER, FOR i IN 1.. SELF.mantencion.count LOOP
anio number(4,0), mantencion_aux:=SELF.mantencion(i);
PRAGMA RESTRICT_REFERENCES (gasto, total:=total+mantencion_aux.costo;
kilometraje number(10,0)); WNDS,WNPS), END LOOP;
MEMBER FUNCTION RETURN total;
total_item RETURN NUMBER, END;
PRAGMA RESTRICT_REFERENCES (
total_item , WNDS, WNPS), MEMBER FUNCTION total_item RETURN
NUMBER IS
MEMBER FUNCTION total NUMBER := 0;
extraer_item(id in number, col in number) BEGIN
RETURN char, total:=SELF.mantencion.count;
create table vehiculos of
PRAGMA RESTRICT_REFERENCES ( RETURN total;
vehiculos_type(
extraer_item , WNDS, WNPS)); END;
constraint pk_vehiculos
if col=1 then
primary key(placa)) MEMBER FUNCTION extraer_item(id in number,
dato:=to_char(SELF.mantencion(id).fecha,'dd/mm/yyyy');
nested table mantencion store else dato:= to_char(SELF.mantencion(id).costo); col in number) RETURN char IS
as mantencion_table_save; end if; i INTEGER;
RETURN dato; dato char(20);
END; BEGIN
END;
ABD 2020 Ing. Ciro Saguay.
UNIVERSIDAD UTE
Creación de tablas (arriendo)
create or replace trigger entrega_arriendo
create type glosa_arriendo as object(
fecha_ini date, before update on arriendo for each row
fecha_fin date, declare
km_ini number(10,0), km_v number;
km_fin number(10,0)); dif1 number;
dif2 number;
create or replace trigger ing_arriendo arriendo number;
before insert on arriendo
recargo number;
for each row
declare total number;
km_v number; begin
begin dif1:=:new.glosa.km_fin - :old.glosa.km_ini;
select p.datos_v.kilometraje into km_v from vehiculos p where dif2:=to_number(to_char(sysdate,'yyyymmdd')) -
p.placa=:new.vehiculo; to_number(to_char(:old.glosa.fecha_fin,'yyyymmdd'));
:new.glosa.km_ini:=km_v;
if dif2 < 0 then
end;
dif2:=0;
end if;
select p.arriendo, p.recargo into arriendo, recargo from vehiculos p
where p.placa=:new.vehiculo;
total:= arriendo * dif1 + recargo * dif2;
:new.valor:=total;
lock table vehiculos in row exclusive mode;
update vehiculos p set p.datos_v.kilometraje=:new.glosa.km_fin where
p.placa =:new.vehiculo;
End;

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Manipulación de datos
Insertar datos en Clientes:
insert into clientes values( '11235657-9', personas_type ('Luis Lillo', direccion_type ('Talca','29 sur ','555'),
telefonos_type('071-658768','071-658768','071-716698', null, null)));
insert into clientes values( '10235811-4', personas_type ('Gustavo Muñoz', direccion_type ('Talca','13
poniente ','840'), telefonos_type('071-244436','09-8347665',null, null, null)));

Insertar datos en vehículos:


insert into vehiculos values( ‘PF4412', descripcion_type(2011, 0), mantencion_table(),2400, 500);
insert into vehiculos values( 'AF5678', descripcion_type(2005, 10435), mantencion_table(),1400, 500);

Insertar datos en mantencion:


insert into the( select d.mantencion from vehiculos d where d.placa=‘PF4412')
values(mantencion_type(to_date('01/05/2011','dd/mm/yyyy'),149));
insert into the( select d.mantencion from vehiculos d where d.placa=‘PF4412')
values(mantencion_type(to_date('05/07/2011,'dd/mm/yyyy'),234));

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Manipulación de datos

Insertar datos en arriendo:


insert into arriendo values('11235657-9', 'AF5678', glosa_arriendo(to_date ('02/11/2007','dd/mm/yyyy'),
to_date ('04/11/2007','dd/mm/yyyy'),null,null), null);

Actualizar datos en arriendo (Entrega de vehículo):


update arriendo p set p.glosa.km_fin=10650 where p.cliente='112356575-9' and p.vehiculo= 'AF5678'

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Manipulación de datos
Consulta de datos:

1- Selección de cedula y nombre de los clientes.


select p.cedula, p.datos.nombre from clientes p

2- selección del primer teléfono del cliente cuya cedula es 112356575-9


select p.datos.telefono_id(1) from clientes p where p.cedula='11235657-9‘

3- selección de la placa, año y kilometraje de todos los vehículos.


select p.placa, p.datos_v.anio, p.datos_v.kilometraje from vehiculos p

4- Consultar la cantidad de mantenciones que tiene un vehículo indicando además


el gasto total en reparaciones.
select p.total_item(), p.gasto() from vehiculos p

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Evaluación
Cuál es la estructura de un objeto en BD O-R?
Qué se coloca en la implementación del objeto?

Tarea
Implemente el siguiente modelo objeto – relación
cargas_t Ced c Nombre_c Fecha_nac_c

Empleado_tab Tabla

Tabla anidada Cargas_tab_t


Empleado_t Tipo

ced_e Nombre_emp Fecha_nac telefono direccion departamento cargas

Direccion_t
varray calle numero ciudad
Telefono_t
Departamento_tab_t Tabla anidada

Id_depto Nombre_depto Direccion_depto Departamento_t

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Solución
1 Crear un tipo vector Telefono_t
2 crear un tipo de objeto Direccion_t
3crear un tipo de objeto Departamento _t
4 Crear una colección typo tabla Departaemneto_tab_t
5Crear un tipo objeto cargas_t
6 Crear una colección typo tabla Cargas_tab_t
7 Crear un tipo de objeto empleado_t

Create type empleado_t as object(


Ced_emp char(10),
Nom_emp varchar2(20), 8 Crear una tabla Empleado _tab
Fechn_emp date, Create table empleado_tab of empleado_t
Tel_emp telefono_t, (primary key (ced_e))
Dir_emp direccion_t, Nested table dep_emp store as departamento_taux
Dep_emp departamento_tab_t, Nested table car_emp store as cargas _aux
Car_emp cargar_tab_t);

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Demandas
Insertar 2 filas en la tabla empleado_tab;
Desc empleado_tab;
Insert into empleado_tab values(‘1716162830’,’Aquiles Castro’, ‘10/oct/1992’,
telefono_t(‘02245068’,’0995555’), direccion_t(‘xxx’,’515’,’Quito’),
departamento_tab_t(), cargas_tab_t());

Insertar 2 filas en la tabla anidada departament_tab_t


Insert into the (select dep_emp from empleado_tab where ced_emp=‘1716162830’)
values(departamento_t(‘001’,’Sistemas’, direccion_t(‘10de agosto’,120,’Quito’)));

Insertar 2 filas en la tabla anidada cargas_tab_t


Insert into the (select car_emp from empleado_tab where ced_emp=‘1716162830’)
values(cargas_t(‘1716163028’,’Rita Castro’,’20/feb/2005’);

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Demandas
Consultar todos los datos de los empleados
Select * from empleados_tab;
Consultar la cedula y nombre de todos los empleados
Select ced_emp, nom_emp from empleados_tab;
Consultar todos los datos del empleado con cedula 1716162830
Select * from empleados_tab where ced_emp=‘1716162830’
Consultar los teléfonos del empleado Aquiles Castro
Select tel_emp from empleados_tab where nom_emp=‘Aquiles Castro’
Agregar un nuevo teléfono al empleado Aquiles Castro
Update empleados_tab set tel_emp=telefono_t(‘02245068’,’0995555’,’123456’)
Where nom_emp=‘Aquiles Castro’;

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
DEMANDAS
Consultas a todos los empleados con todas sus cargas familiares
Select nom_emp Nombre, car_emp hijos from empleados_tab
Consultar a los departamentos de los empleados
Select nom_emp Nombre, dep_emp departamento from empleados_tab

ABD 2020 Ing. Ciro Saguay.


UNIVERSIDAD UTE
Bibliografia.

1. J. D. Ullman, J. Widom. Primier Curso de sistemas de Base de Datos.


2. Henry F. Korth, Abraham Silberschatz. Conceptos de Sistemas de Base de Datos.
3. C. J. Date. Introducción a los Sistemas de Base de Datos.

GRACIAS

ABD 2020 Ing. Ciro Saguay.

También podría gustarte