Etiquetas

domingo, 2 de diciembre de 2012




Bases de datos orientadas a objetos
Unidad No. 7



Visión General


Una base de datos es una colección de datos que puede constituirse de forma que sus contenidos puedan permitirse el encapsular, tramitarse y renovarse sencillamente, elementos de datos, sus características, atributos y el código que opera sobre ellos en elementos complejos llamados objetos.


Las base de datos están constituida por objetos, que pueden ser de muy diversos tipos, y sobre los cuales se encuentran definidas unas operaciones donde interactúan y se integran con las de un lenguaje de programación orientado a objetos, es decir, que los componentes de la base de datos son objetos de los lenguajes de programación además que este tipo de base de datos están diseñadas para trabajar con lenguajes orientados a objetos también manipulan datos complejos de forma rápida y segura.

¿Con que fin se crearon este tipo de bases de datos?


Las bases de datos orientadas a objetos se crearon para tratar de satisfacer las necesidades de estas nuevas aplicaciones. La orientación a objetos ofrece flexibilidad para manejar algunos de estos requisitos y no esta limitada por los tipos de datos y los lenguajes de consulta de los sistemas de bases de datos tradicionales
.

Tipos de datos complejos


Dentro de lo que llamamos tipos de datos complejos podemos definir los siguientes:


Colecciones

También conocidos como conjuntos, este tipo de datos clasifican los arrays y los conjuntos en que los elementos pueden aparecer varias veces.


Objetos de gran tamaño


Muchas aplicaciones actuales de bases de datos necesitan almacenar atributos  grandes  tales como la fotografía de una persona, o muy grandes que  incluso  pueden llegar a los Gbytes, proporciona por tanto nuevos tipos de datos para objetos de gran tamaño para datos de caracteres (clob) y binarios (blob)


Tipos estructurados


Los tipos estructurados permiten la representación directa de atributos  compuestos de los diagramas E-R. Un tipo estructurado puede tener métodos definidos sobre él. Los métodos se declaran como parte de la dentición de tipos de un tipo estructurado.


Constructores


Cada tipo estructurado tiene un constructor sin argumentos, que establece los atributos a sus valores predefinidos. Cualquiera otra función constructora tiene que crearse explícitamente. Puede haber más de una constructora para el mismo tipo estructurado


Herencia en SQL


Los esquemas de las bases de datos orientadas a objetos suelen necesitar gran número de clases. Frecuentemente, sin embargo, varias de las clases  son parecidas entre si. Son parecidas porque definen iguales atributos y métodos. No son idénticas porque cada clase define, además, atributos y/o métodos que no comparte con las demás.

Por esa razón es conveniente definir una representación de los atributos y métodos comunes en un solo lugar. Esto puede hacerse creando una nueva clase, que contendrá solo las características comunes, y redefiniendo las clases originales como especializaciones de la nueva clase.






Ejemplo:



En el ejemplo de código siguiente, “Vehicle” se define como la clase raíz y se han implementado los pasos anteriores para describir la jerarquía para LINQ. En la ilustración siguiente se muestran las relaciones.








Herencia en tablas


La herencia de tablas permite al programador crear tablas de base de datos que heredan de otras tablas de la misma forma que las clases pueden heredar de otras clases en los lenguajes orientados a objetos. La herencia de tablas es una forma sencilla de que dos o más tablas compartan información en una única tabla padre. 



Este diagrama expresa de manera grafica que significa la herencia en tablas.


Tipos de arreglo multiconjunto en SQL



El tipo de datos MULTISET es una colección de datos parecido al tipo existente ARRAY pero sin un orden implícito.

Un multiconjunto es una colección de elementos del mismo tipo, sin orden y permitiendo la existencia de elementos repetidos. El tipo de elemento puede ser cualquier otro tipo de SQL.
Por ejemplo, INTEGER MULTISET indica el tipo de un valor del multiconjunto cuyo tipo de elemento es INTEGER.

El tipo de elemento también podría ser otro tipo de colección, que permitiera colecciones anidadas. Un multiconjunto es una colección ilimitada, sin cardinalidad máxima definida. Esto no significa, sin embargo, que el usuario puede insertar elementos en un multiconjunto sin límite, solamente que el estándar no indica que debería haber un límite.

Esto es análogo a las tablas, que no tienen declarado un número máximo de filas. Los valores de un tipo MULTISET pueden crearse enumerando sus elementos o mediante una sentencia ; por ejemplo, MULTISET[1, 2, 3, 4] o
MULTISET(SELECT nivel FROM cursos).

El tipo MULTISET tiene operaciones para convertir un multiconjunto en un array o en otro multiconjunto cuyos elementos sean de un tipo compatible, para eliminar duplicados del multiconjunto, para devolver el número de elementos de un multiconjunto dado, y para volver el elemento de un multiconjunto que sólo tiene un elemento.

Además, también soporta la unión, intersección y diferencia entre multiconjuntos, así como tres nuevas funciones de agregación para crear un multiconjunto del valor del argumento en cada fila de un grupo (COLLECT), para crear la unión de multiconjuntos del valor del multiconjunto de cada fila de un grupo (FUSION) y para crear la intersección de multiconjuntos del valor del multiconjunto de cada fila de un grupo

MULTISET UNION

El operador multiset UNION nos devuelve los valores de ambas tablas anidadas en una única tabla anidada.
select num multiset union num_tab_typ(1) num from num_tab;

select num multiset union num a from num_tab;

Se puede incluir la clausula DISTINCT para que la unión devuelva valores no repetidos

select num multiset union distinct num_tab_typ(1) num fromnum_tab;

MULTISET INTERSECT

El operador multiset INTERSECT nos devuelve valores comunes de dos tablas anidadas.
Usando una tabla anidada con el valor 1 puede devolver el conjunto vacío si el 1 no existe, y una tabla anidada con el valor si si que existe.
select num multiset intersect num_tab_typ(1) num from num_tab;

MULTISET EXCEPT

El operador multiset EXCEPT nos devuelve valores de una tabla anidada que no existan en otra tabla anidada. Por ejemplo la siguiente consulta devuelve una tabla anidada con los valores originales excepto el valor 1
select num multiset except num_tab_typ(1) num from num_tab;
select num_tab_typ(1,1,2,3) MULTISET EXCEPT num_tab_typ(1,2) fromdual;


Identidad de los objetos y tipos de referencia en SQL



Los lenguajes orientados a objetos ofrecen la posibilidad de hacer referencia a objetos. Los atributos de un tipo dado pueden servir de referencia para los objetos de un tipo concreto. Por ejemplo, en SQL se puede definir el tipo Departamento con el campo nombre y el campo director, que es una referencia al tipo Persona, y la tabla departamentos del tipo Departamento, de la manera siguiente:



create type Departamento(

nombre varchar(20),

director ref(Persona) scope personas)


create table departamentos of Departamento


En este caso, la referencia está restringida a las tuplas de la tabla personas. La restricción del ámbito de referencia a las tuplas de una tabla es obligatoria en SQL, y hace que las referencias se comporten como las claves externas

La tabla a la que hace referencia debe tener un atributo que guarde el identificador para cada tupla. Ese atributo, denominado atributo autorreferenciable (self-referential attribute), se declara añadiendo una cláusula ref is a la instrucción create table:



create table personas of Persona

ref is id_persona system generated


En este caso, id_persona es el nombre del atributo, no una palabra clave, y la instrucción system generated especifica que la base de datos genera de manera automática el identificador.
Para inicializar el atributo de referencia hay que obtener el identificador de la tupla a la que se va a hacer referencia. Se puede conseguir el valor del identificador de la tupla mediante una consulta. Por tanto, para crear una tupla con el valor de referencia, primero se puede crear la tupla con una referencia nula y luego definir la referencia de manera independiente:



insert into departamentos

values (‘CS’, null)

update departamentos set director = (select p.id_persona

from persona as p

where nombre = ‘Martín’)

where nombre = ‘CS’


Implementación de las características O-R


Los sistemas de bases de datos relacionales orientadas a objetos son básicamente extensiones de los sistemas de bases de datos relacionales ya existentes. Las modificaciones resultan claramente necesarias en muchos niveles del sistema de base de datos.
Las interfaces de programas de aplicación como ODBC y JDBC se han extendido para recuperar y almacenar tipos estructurados; por ejemplo, JDBC ofrece el método getObject() que devuelve un objeto Java Struct, a partir del cual se pueden extraer los componentes del tipo estructurado. También es posible asociar clases de Java con tipos estructurados de SQL, y JDCB puede realizar conversiones entre los tipos.