viernes, 15 de junio de 2012

Bases de datos Objeto Relacional


Base de datos Objeto-Relacional

Introducción  
Las bases de datos hoy por hoy son una parte esencial de cualquier sistema de información que se precie de ser llamado así, las bases de datos se han convertido en una parte del diario vivir y los ejemplos son claros en los negocios, en las compañías, en las instituciones tanto públicas como privadas, en la red internet etc. Las bases de datos se han convertido una de las herramientas más difundidas en la actual sociedad de la información, utilizadas como fuentes secundarias en cuanto recuperación y almacenamiento de información en todos los campos ha nivel científico, social, económico, político y cultural.
De esta manera la Ciencia de la Información, ha desarrollado una producción científica importante a nivel mundial, la cual ha utilizado las bases de datos, como repositorio de almacenamiento y difusión de información.
Un poco de historia
Los sistemas de gestión base de datos objeto-relacional se ha desarrollado a partir de la década de los 90. En el estudio de cómo aplicar los conceptos de programación orientada a objetos en las bases de datos relacionales. Quizás el más notable de estos proyectos de investigación fue el de Michael Stonebraker que fue dirigido por Postgres ( Universidad de California en Berkeley habría sido). Este estudio se ha convertido en las cabeceras de los dos productos. Es decir, Ilustra y Postgress .
En la década de 1990, aparecieron los primeros productos comerciales. Estos productos comerciales incluyen los siguientes.
  • Illustra [un] (Sistemas de Información)
  • (Omnisciencia Corporation)
  • UniSQL
Concepto
Una base de datos es básicamente es un contenedor de datos (algo en donde se guarda la información), así como de los métodos para almacenar y recuperar información de estos. Las bases de datos no son cosas físicas: son abstracciones que permiten la implementación de un sistema de base de datos.
Se definen los siguientes modelos de base de datos según wiki pedía:

·         Bases de datos jerárquicas

·         Base de datos de red

·         Bases de datos transaccionales

·         Bases de datos relacionales

·         Bases de datos multidimensionales

·         Base de datos objeto relacional

·         Bases de datos documentales

·         Bases de datos deductivas


Este blog trata lo que es una base de datos orientada a objetos o objeto relacional

Base de datos objeto relacional


El modelo de base de datos objeto-relacional integra los conceptos de la tradicional base de datos relacional y los conceptos de paradigma de objetos que se utiliza en la programación orientada  a objetos (POO).
El objetivo de este concepto es poder aplicar la tecnología madura de bases de datos relacionales sobre la organización de los datos complejos es decir datos de texto e imagen, mapas, datos en el rango de audio etc. Las bases de datos Objeto-relacional  son compatibles con estos objetos de datos y las operaciones de mayor complejidad.
En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la definición de la base de datos. Una operación (llamada función) se especifica en dos partes. La interfaz (o signatura) de una operación incluye el nombre de la operación y los tipos de datos de sus argumentos (o parámetros). La implementación (o método) de la operación se especifica separadamente y puede modificarse sin afectar la interfaz. Los programas de aplicación de los usuarios pueden operar sobre los datos invocando a dichas operaciones a través de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse independencia entre programas y operaciones.
SQL:2003, es el estándar de SQL92 ampliado, soporta los conceptos orientados a objetos y mantiene la compatibilidad con SQL92.

Características
Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del paradigma de objetos:
·         Encapsulación - Propiedad que permite ocultar la información al resto de los objetos, impidiendo así accesos incorrectos o conflictos.
·         Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases.
·         Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a distintos tipos de objetos.
En una base de datos objeto relacional los dominios de dicha base de datos ya no son sólo atómicos por esta  razón no cumplen la 1FN debido a que las tuplas también pueden ser una relación, que llevará a la creación de una relación de relaciones es asi que no se puede aplicar el concepto de normalización. Esto porque ni siquiera se puede aplicar la primera forma normal y como consecuencia ni la segunda, ni tercera etc.
De este modo, se genera la posibilidad de guardar objetos más complejos en una sola tabla con referencias a otras relaciones, con lo que se acerca más al paradigma de programación orientada a objetos.
Veamos más de cerca  las características de estos datos complejos:
Colecciones: También conocidos como conjuntos, este tipo de datos clasifican los arrays y los conjuntos en que los elementos pueden aparecer varias veces.
Tipos estructurados: Los tipos estructurados permiten representación directa de los atributos compuestos en los diagramas entidad-relación.
Objetos de gran tamaño: Desde ya hace varios años que se necesita almacenar datos con atributos muy grandes (Varios Mbytes), como libros, canciones, etc. E incluso aún más grandes; como mapas de alta resolución, video, etc. que puede llegar fácilmente a los Gbytes.
Los objetos en la base de datos constan de dos partes:

1. Atributos: Datos, meta-datos e información de localización.

2. Métodos: Son funciones cuyos parámetros son los atributos del objeto.

Ejemplo
Los objetos de video constan de atributos como formato, dimensiones, tipo de compresión, número de colores, frame y bit rate, duración y comentarios.

Herramientas
Algunas herramientas que podemos citar para el manejo de estas base de datos objeto-relacional son las siguientes:
Oracle interMedia
El manejador de bases de datos objeto-relacional Oracle 8i ofrece una extensión llamada interMedia para el manejo de tipos de datos complejos: imágenes, audio y video. Además, en el manejo de texto se ofrecen nuevas funcionalidades:soporte de diferentes formatos (Word, Acrobat, HTML, Wordperfect, etc.), búsquedas respecto a temas, uso de palabras parciales y análisis de proximidad de documentos entre otras.

IBM DB2 Video Extender

La base de datos objeto-relacional DB2 Universal Database posee
Extenders: extensiones para la definición de objetos de imágenes, audio, video y texto así como funciones especiales para su manejo disponibles a través del lenguaje SQL.
Las funcionalidades mas notables de estas extensiones son el sistema
QBIC para la búsqueda de imágenes a través de su contenido (histograma, color promedio y textura) y la detección automática de escenas de video (encontrando diferencias significativas entre tramas), ambos resultados guardados en
"catálogos" o índices.

Informix Video Foundation DataBlade Module
Esta extensión del Informix Dynamic Server permite guardar y manipular información de video y meta-datos asociados en dos categorías: atributos físicos del video y descripciones abstractas de su contenido.
Entornos
Actualmente Oracle 10g soporta el manejo de este tipo de base de datos
También existen otros gestores de base de datos aptos para este como Postrgess o LORDCBD. 

 
Ejercicios de ejemplo

Para ilustrar mejor la idea en esta parte realizaremos algunos ejercicios de prueba.
Para este ejemplo utilizaremos Oracle 10g.
Tipos definidos por el usuario
Para crear tipos definidos por el usuario utilizaremos la orden create type que es en si un objeto. En el siguiente ejemplo se creara el tipo dirección formado de tres atributos calle, ciudad y código postal cada uno de los cuales son un tipo de dato:
create type direccion as object
(
calle varchar(25),
ciudad varchar(20),
codigo_post number(5)
);
Oracle debería responder con el mensaje “Tipo creado”
Veamos cómo queda:


Ahora veamos cómo se usa. Se crea una tabla donde una de las columnas se define con el tipo anterior, a esta columna se le define como objeto columna


Insertemos algunos en la tabla persona datos para ver qué sucede
insert into persona values('juan','av burgaleta 777','02/01/2001')

Como vemos nos Oracle nos lanza un mensaje de error se esperaba tipo de dato dirección y se ha obtenido un char eso es porque ya definimos direc como dirección entonces debería ser del siguiente modo
insert into persona values('juan',direccion('av burgaleta 777','La Paz',1111),'02/01/2001');
y nos lanza el mensaje de “1 fila(s) insertada(s).”
 
Si asemos una simple consulta la estilo select * from persona esta no funcionra bien deberá ser del siguiente :
 
select nombre_ape,p.FECHA_NAC,p.DIREC.calle,p.DIREC.ciudad,p.DIREC.codigo_post
from persona p
 
 


Tipo colección
Las base de datos relacionales orientadas a objetos puedes permitir el almacenamiento de colecciones de elementos en una única columna. Tal es el caso de los vectores o arrays  en Oracle que son similares los de C o Java que permiten almacenar un conjunto de elementos, todos del mismo tipo, y cada elemento tiene un índice asociado; y las tablas anidadas que permiten almacenar en una columna de una tabla otra tabla.
Para crear una colección de elementos se usa también la orden create type como muestra el siguiente ejemplo:
Primero creamos  un varray de nombre telefono
create type telefono as varray(3) of varchar2(10)
Luego lo incorporamos su uso a una tabla llamada coleccion.
Create table coleccion
(
id number(2),
telef telefono
)
Insertando datos insert into coleccion values (1, telefono('73222496', '72534788', '73324567')) y aplicando la consulta select c.id, c.TELEF from coleccion c usando ‘toad ’  () obtenemos algo parecido  a esto
ID TELEF      
---------- ------------
         1 TELEF(732224
           96; 72534788
           ; 73324567)

Tablas anidadas
Una tabla anidad esta formada por una colección de elementos, todos del mismo tipo. La tabla anidada esta contenida en una columna del tipo de esta columna debe ser un tipo de objeto existente en la base de datos. Ejemplo:
create type tabla_anidada as table of direccion;
A continuacion se define una columna de una tabla con le tipo tabla anidad creada anteriormente.
create table eje_tabla_anidada
(
id number(2),
apellido varchar2(35),
direc tabla_anidada
)
nested table direc store as direc_anidada;
 La parte nested table identifica el nombre de la columna que contendrá la tabla y la parte store as especifica el nombre de la actual anidada.


Conclusiones
Si uno quiere manejar las tipos de datos complejos en una base de datos tendrá que tener en cuenta el diseño de una base datos objeto-relacionales por encima de una base de datos relacional ya que como vimos estas se pueden adaptarse mejor a estos tipo de datos.