You are on page 1of 19

Diseo e Implementacin de Bases de Datos

ODL

se utiliza para definir las interfaces de los tipos de objetos, permitiendo la definicin de las firmas de las operaciones y no su implementacin. Principios
Soporta la semntica completa del modelo de objetos

de ODMG Independiente del lenguaje de programacin Extensible (nuevas funcionalidades, optimizaciones fsicas) No se usa para la manipulacin de datos.

El

modelado de estado est definido por una interface. Consta de definir o modelar lo siguiente:
Atributos Relaciones.
attribute tipoDeDato nombreAtributo relationship tipoDeDato nombreRelacion inverse nombreClaseRef::nombreRelacionInv

Una

interface es la especificacin abstracta del comportamiento de un tipo de objeto.


Las propiedades de estado de una interface no

pueden ser heredadas. No se pueden instanciar objetos de una interface.

Ejemplo

de definicin de interface.

interface Date:Object { enum weekday {sun,mon,tue,wed,thu,fri,sat}; enum Month {jan,feb,,nov,dec} unsigned short year(); unsigned short month(); unsigned short day(); boolean is_equal(in Date other_date); }

Una

clase es la especificacin del comportamiento abstracto y estado de un tipo de objeto.


Una clase es instanciable. Soporta la relacin extends, de tal manera que se

hereda tambin los atributos de la clase. La herencia mltiple por la relacin extends no es permitida.

Ejemplo

de definicin de clase

class Person (extent people) { attribute string name; attribute struct Address {unsigned short number, string street, string city_name} address; relationship Person spouse inverse Person::spouse; relationship set<Person> children inverse Person::parents; relationship list<Person> parents inverse Person::children; void birth (in string name); boolean marriage (in string person_name) raises (no_such_person); unsigned short ancestors (out set<Person> all_ancestors) raises (no_such_person); void move (in string new_address); };

Es

el lenguaje de consulta del estndar ODMG. Puede integrarse a algunos lenguajes de programacin como C++, SmallTalk y Java.
OQL regresa objetos o colecciones de objetos de sus

consultas, que son compatibles con los lenguajes a los que se integra.
Su

sintaxis es muy similar a SQL con algunas adiciones especiales para la orientacin a objetos.

El

clsico selectfromwhere.
SELECTd.nombre FROM d in departamentos WHERE d.colegio = Ingeniera

Para

cada consulta se requiere un punto de entrada a base de datos.


En

el ejemplo anterior departamentos es el punto de entrada.

Estas

variables son definidas en cualquier consulta OQL donde se reference a una coleccin.
En el ejemplo anterior la variable iteradora era d.

Personifica a cada objeto de la coleccin departamentos

Las

variables iteradoras pueden refinirse de las siguientes formas:


d in departamentos departamentos d departamentos as d

Estas

expresiones son utilizadas para especificar la ruta a los atributos y objetos en un punto de entrada. Inician en el nombre un objeto persistente o su iterador.
Ser seguido cero o mas relaciones o atributos

conectadas por un punto.


departamentos.jefe.nombre
d.jefe.apPaterno.

Una

consulta nombrada en OQL se puede ver como el concepto de vista en una base de datos relacional.
El nombre de la consulta nombrada debe ser

nico. Una vez creada la consulta persistir hasta que sea borrada o redefinida. Incluso la definicin de la vista puede contener parmetros.

Ejemplo
define tiene_tutor(nombre_tutor) as select s from s in estudiantes where s.tutor.nombre = nombre_tutor.

Una

vez definida la consulta, esta puede ser usada como un objeto mas en otra consulta.

Sabemos

con una consulta de OQL regresa una coleccin de objetos. Qu pasa si la coleccin regresada solo contiene un elemento?
El operador element puede usarse para tomar

dicho elemento de la consulta.


element ( select d from d in departamentos where d.nombre = Ingeniera de Software )

OQL

soporta varias funciones de agregacin para aplicarlas a colecciones.


min, max, count, sum, avg.

Ejemplo:
avg ( select s.calif from s in estudiantes where s.cveGrupo = ACB123 )

OQL

contiene algunos operadores de pertenencia y cuantificacin.


(e in c) => es true si e est en la coleccin c (for all e in c: b) => es true si todos los elementos de c satisfacen b (exists e in c: b) es true si por lo menos un elemento e satisface b

Ejemplo

de pertenencia:

select s.nombreCompleto.nombre s.nombreCompleto.apPaterno from s in estudiantes where CS101 in ( select c.curso.clave from c in s.seccionesCompletadas )

OQL

provee operadores para extraer una sub-coleccin y concatenar 2 listas, as como para ordenar los resultados. Ejemplo
first(select struct (facultad: f.nombre.apPaterno, salario: f.salario) from f in facultad ordered by f.salario desc)

Tal

como SQL lo hace, tambin OQL soporta el operador group by. Ejemplo:
select nomTutor, prom: avg (select calif from e in estudiates) from s in estudiantes group by nomDepto: s.tutor.nombre

You might also like