You are on page 1of 43

Bases de Datos II

IC-4302
ODBMS
Son Bases de Datos creadas para guardar información como objetos
Se integran con lenguajes de programación orientados a objetos como Smalltalk, C++, Java, .NET
entre otros
Normalmente los objetos contienen Métodos, Atributos, y están basados en clases
db4o
// accessDb4o // storeSecondPilot
ObjectContainer db = Pilot pilot2 = new Pilot("Rubens
Db4oEmbedded.openFile(Db4oEmbedded Barrichello", 99);
.newConfiguration(),
db.store(pilot2);
DB4OFILENAME);
try { System.out.println("Stored " +
// do something with db4o pilot2);
} finally {
db.close();
}
// retrieveAllPilotQBE
Pilot proto = new Pilot(null, 0);
ObjectSet result =
// storeFirstPilot db.queryByExample(proto);
Pilot pilot1 = new Pilot("Michael
Schumacher", 100);
db.store(pilot1);
System.out.println("Stored " + pilot1);
ODBMS vs RDBMS
Bases de Datos Relacionales están normalizadas para evitar duplicación de información
Los objetos deben ser divididos en diferentes partes para hacerlos más simples y poder
insertarlos en las tablas
Pasar de orientación a objetos a tablas es una labor que consume tiempo y es compleja
ODBMS - Ventajas
Los objetos no deben dividirse y volverse a agrupar por lo que es más rápido
Navegación en los objetos es más fácil
Concurrencia es mejor, porque hay jerarquía en los objetos
El Modelo es más parecido a la realidad
Requiere menos código cuando los lenguajes de programación son orientados a objectos
ODBMS - Desventajas
Eficiencia es menor cuando las relaciones son simples
Tablas Relacionales son más simples
Hay más herramientas para RDBMS
Los estándares son mejores para RDBMS
Hay mejor soporte para RDBMS
ODBMS - ¿Cuándo?
Aplicaciones CAS
Aplicaciones Multimedia
Comercio
Relacional Objeto
El propósito es extender el modelo relacional para incluir soporte de orientación a objetos
Permitir atributos y tipos complejos en las tuplas para permitir valores que no son atómicos y
relaciones anidadas
Preservar la funcionalidad relacional, en particular el acceso a los datos, extendiendo el
modelado
Tener compatibilidad con los lenguajes relacionales actuales
Tipos de Datos Complejos
La idea es permitir dominios que no sean Se permiten relaciones en cualquier lugar
atómicos donde se permitan valores atómicos
Por ejemplo, arrays, atributos, etc. Mantiene el fundamento matemático del
modelo relacional
Así da una perspectiva más intuitiva del
modelado especialmente con lenguajes Viola la primera forma Normal.
orientados a objetos
Relación Anidada

title author_ array publisher keyword_ set


(name, branch)
Compilers [Smith, Jones] (M cGraw-Hill, NewYork) {parsing, analysis}
Networks [Jones, Frick] (Oxford, London) {Internet, Web}
Descomposición de la Relación Anidada
title author position
Compilers Smith 1
Compilers Jones 2
N etw orks Jones 1
N etw orks Frick 2
authors

title keyword
Compilers parsing
Compilers analysis
N etw orks Internet
N etw orks Web
keywords

title pub_ name pub_ branch


Compilers M cGraw -H ill N ew York
N etw orks Oxford London
books4
Tipos Complejos y SQL
El soporte de tipos complejos es soportado Este soporte no esta incluido en todas la bases
desde SQL:1999, incluye de datos
◦ Colecciones y Objetos Grandes
Solo unas cuantas implementan el estándar
◦ Tipos Estructurados completamente
◦ Herencia
◦ Orientación a Objetos Entre ellas ORACLE
Tipos Estructurados en SQL
Los tipos Estructurados son los tipos que son
definidos por el usuario
Final o Not Final significa que el tipo no puede
usarse para herencia
Tipos Estructurados en SQL
Se pueden crear tablas cuyas filas son un tipo
creado por el usuario
Alternativamente también se pueden usar
tipos sin nombre
Métodos
Los métodos se agregan a la definición del tipo
El cuerpo de método se define por separado
Métodos - ORACLE
CREATE TYPE solid_typ AS OBJECT ( CREATE TYPE BODY solid_typ AS
len INTEGER, MEMBER FUNCTION volume RETURN INTEGER
IS
wth INTEGER,
BEGIN
hgt INTEGER,
RETURN len * wth * hgt;
MEMBER FUNCTION volume RETURN
INTEGER, -- RETURN SELF.len * SELF.wth *
SELF.hgt; -- equivalent to previous
/ line
END;
END;
/
SELECT s.volume() FROM solids s WHERE
s.len = 10;
Métodos Estáticos - ORACLE
Se declaran con
◦ STATIC FUNCTION o STATIC PROCEDURE

Para invocar un método estático se usa


◦ type_name.method()
Constructores
Los constructores permiten inicializar los
valores al crear el objeto
Constructores - ORACLE
Siempre hay un constructor definido por el sistema, excepto en la clases NOT INSTANTIABLE

CREATE TYPE shape AS OBJECT (


name VARCHAR2(30),
area NUMBER,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2)
RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION shape(SELF IN OUT NOCOPY shape, name VARCHAR2,
area NUMBER) RETURN SELF AS RESULT
) NOT FINAL;
/
Invocación - ORACLE
CREATE TYPE student_typ UNDER CREATE TYPE BODY student_typ AS
person_typ (
OVERRIDING MEMBER FUNCTION show
dept_id NUMBER, RETURN VARCHAR2 IS
major VARCHAR2(30), BEGIN
OVERRIDING MEMBER FUNCTION show RETURN (self AS
RETURN VARCHAR2) person_typ).show || ' -- Major: '
|| major ;
NOT FINAL;
END;
/

END;
/
Herencia
Se pude heredar de tipos si estos no están
definidos como final
También se pueden sobreescribir los métodos
usando overriding
Herencia - ORACLE
CREATE TYPE Movie_Type( CREATE TABLE Movies
Id NUMBER(12), OF Movie_Type
Title VARCHAR(200), (CONSTRAINT Mov_id_pk PRIMARY KEY
(Id),
Release_Date DATE,
CONSTRAINT Mov_TitleReleaseDate_u
Produced_By Prod_Company,
UNIQUE (Title, Release_Date) ) ;
Genre SET_GENERO,
Budget US_Dollars,
Takings US_Dollars,
Plot_Summary Doc_Type,
OnVideo BOOLEAN) ;
Herencia Múltiple
El SQL:1999 ni el SQL:2003 soportan herencia
múltiple
Herencia de Tablas
También se conoce como subtablas
Todos los atributos en una tabla están
presentes en sus subtablas
Además, todas la tuplas en las subtablas están
presentes en las tabla implícitamente
◦ Para evitar este comportamiento se puede usar
only cuando se hace el select
En teoría se puede tener también herencia
múltiple de tablas, pero esto no es soportado
en SQL
Para consistencia cada tupla en una supertabla
debe corresponder a lo sumo a una subtabla
Arrays y Multisets
Arrays se agregaron en el 99 y multisets en el
03
La diferencia es que los arrays son ordenados y
los multisets no tienen orden.
Creación de Colecciones
Seleccionando Colecciones
Unnesting
Nesting
Colecciones - ORACLE
Hay dos tipos de Colecciones
◦ VARRAYs

CREATE TYPE myvarr IS VARRAY(10) OF INTEGER;

◦ Tablas Anidadas

CREATE TYPE typename AS TABLE OF datatype;


Colecciones - ORACLE
CREATE TYPE person_typ AS OBJECT (
idno NUMBER,
name VARCHAR2(30),
phone VARCHAR2(20),
MAP MEMBER FUNCTION get_idno RETURN NUMBER,
MEMBER PROCEDURE display_details ( SELF IN OUT NOCOPY person_typ
) );
/

CREATE TYPE people_typ AS TABLE OF person_typ;


VARRAY - ORACLE
CREATE TYPE phone_typ AS OBJECT (
country_code VARCHAR2(2),
area_code VARCHAR2(3),
ph_number VARCHAR2(7));
/
CREATE TYPE phone_varray_typ AS VARRAY(5) OF phone_typ;
VARRAY - ORACLE
CREATE TABLE dept_phone_list (
dept_no NUMBER(5),
phone_list phone_varray_typ);

INSERT INTO dept_phone_list VALUES (


100,
phone_varray_typ(
phone_typ ('01', '650', '5550123'),
phone_typ ('01', '650', '5550148'),
phone_typ ('01', '650', '5550192')));
Multi Nivel - ORACLE
CREATE TYPE location_typ AS OBJECT ( CREATE TYPE nt_location_typ AS TABLE OF
location_typ; -- nested table type
location_id NUMBER(4),
/
street_address VARCHAR2(40),
CREATE TYPE country_typ AS OBJECT (
postal_code VARCHAR2(12),
country_id CHAR(2),
city VARCHAR2(30),
country_name VARCHAR2(40),
state_province VARCHAR2(25));
locations nt_location_typ); --
/ inner nested table
/
CREATE TYPE nt_country_typ AS TABLE OF
country_typ; -- multilevel collection
type
/
Multi Nivel - ORACLE
CREATE TABLE region_tab (
region_id NUMBER,
region_name VARCHAR2(25),
countries nt_country_typ) -- outer nested table
NESTED TABLE countries STORE AS nt_countries_tab
(NESTED TABLE locations STORE AS nt_locations_tab);
Colecciones - ORACLE
SELECT d.dept_emps
FROM department_persons d;

DEPT_EMPS(IDNO, NAME, PHONE)


-----------------------------------------------------------
--
PEOPLE_TYP(PERSON_TYP(1, 'John Smith', '1-650-555-0135'),
PERSON_TYP(2, 'Diane Smith', '1-650-555-0135'))
Colecciones - ORACLE
SELECT *
FROM TABLE(SELECT d.dept_emps
FROM department_persons d
WHERE d.dept_no = 101);
La subquery debe retornar una colección
Solo se puede devolver una fila
El subquery solo puede tener una sola colección
Colecciones - ORACLE
SELECT r.region_name, c.country_name, l.location_id
FROM region_tab r, TABLE(r.countries) c, TABLE(c.locations) l;

REGION_NAME COUNTRY_NAME LOCATION_ID


------------------------- ---------------------------------------- -----------
Europe Italy 1000
Europe Italy 1100
Europe Switzerland 2900
Europe Switzerland 3000
Europe United Kingdom 2400
Europe United Kingdom 2500
Europe United Kingdom 2600
Referencias e Identificadores
Se pueden definir referencia a otras tablas
desde los objetos
Además, se pueden crear identificadores para
los mismos ya sea generados por el usuario o
por el sistema
Expresiones de Rutas
El estándar permite navegar dentro de los
objetos
Dependiendo de la base de datos, puede ser
con -> o con .
Lenguajes Persistentes
Los lenguajes de programación extienden los Los objetos se pueden definir persistentes
constructures para implementar la capa ◦ En la clase
persistente ◦ En la creación del objeto
El programador puede manipular la capa ◦ Marcando los objetos persistentes
persistente sin necesidad de convertir las ◦ Si el objeto es alcanzado por otro que sea
cosas a SQL persistente
Persistencia de Objetos
Los grados de persistencia van desde: Versiones persistentes de lenguajes de
◦ Intraprocedure, solo durante la ejecución de un Programación
procedimiento ◦ C++
◦ Intraprogram, durante la ejecución de un ◦ ODMG C++
programa ◦ Object Store
◦ Interprograma, durante la ejecución de multiples ◦ JAVA
programas pero sin salvar al disco ◦ Java Database Objets (JDO)
◦ Persistent, guardando la información
permanentmente
Object – Relational Mapping
Object-Relational Mapping (ORM) crean sistemas encima de las bases de datos relacionales
Permiten guardar y leer objetos desde la base de datos
◦ Construyen las relacionales y las mantienen
◦ Generan automáticamente todas los SQLs necesarios para lidiar con la base de datos

Hibernate ORM es un ejemplo de uno de estos sistemas para JAVA


Entre las limitaciones están
◦ El overhead de procesar los statements

You might also like