Bases de Datos Orientadas a Objetos
Los modelos de bases de datos tradicionales (relacional, red
y jerárquico) han sido capaces de satisfacer con éxito las necesidades, en
cuanto a bases de datos, de las aplicaciones de gestión tradicionales. Sin
embargo, presentan algunas deficiencias cuando se trata de aplicaciones más
complejas o sofisticadas como, por ejemplo, el diseño y fabricación en ingeniería
(CAD/CAM, CIM), los experimentos cientificos, los sistemas de información geografica
o los sistemas multimedia. Los requerimientos y las características de estas
nuevas aplicaciones difieren en gran medida de las típicas aplicaciones de gestión:
la estructura de los objetos es más compleja, las transacciones son de larga duración,
se necesitan nuevos tipos de datos para almacenar imágenes y textos, y hace
falta definir operaciones no estándar, especıficas para cada aplicación.
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 está limitada por los tipos de
datos y los lenguajes de consulta de los sistemas de bases de datos
tradicionales. Una característica clave de las bases de datos orientadas a
objetos es la potencia que proporcionan al diseñador al permitirle especificar tanto
la estructura de objetos complejos, como las operaciones que se pueden aplicar
sobre dichos objetos.
Tipos de datos complejos
Colecciones
Los conjuntos son ejemplares de los tipos colección. Otros
ejemplares son los arrays y los multiconjuntos (es decir, colecciones sin orden
donde un elemento puede aparecer varias veces). Las siguientes definiciones de atributos
ilustran la declaración de un array:
array-autores varchar(20) array [10]
array-autores es un array de hasta 10 nombres de autor
Se puede acceder a los elementos del array especificando el índice
del array, por ejemplo:
array-autores[1]
Objetos de gran tamaño (LOB)
Muchas aplicaciones actuales de bases de datos necesitan
almacenar atributos grandes (del orden de varios Kbytes), tales como la fotografía
de una persona, o muy grandes (del orden de varios Mbytes o incluso Gbytes), tales
como imágenes médicas de alta resolución o clips de video. SQL proporciona por
tanto nuevos tipos de datos para objetos de gran tamaño para datos de
caracteres (clob) y binarios (blob). Las letras “lob” en estos tipos de datos
son acrónimos de “LargeObject” (objeto grande). Los objetos grandes se usan
normalmente en aplicaciones externas, y tiene poco sentido extraerlos completamente
en SQL. En su lugar, una aplicación conseguiría un “localizador” de un objeto
grande y lo usaría para manipularlo desde el lenguaje anfitrión.
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
Hay que definir funciones constructoras para crear valores de
tipos estructurados. En SQL y en muchos otros lenguajes se utiliza una función con
el mismo nombre que un tipo estructurado como función constructora. De manera
predeterminada, cada tipo estructurado tiene un constructor sin argumentos, que
establece los atributos a sus valores predefinidos. Cualquier otra función
constructora tiene que crearse explícitamente. Puede haber más de una
constructora para el mismo tipo estructurado; aunque tengan el mismo nombre,
solo tienen que ser distinguibles por el número de argumentos y sus tipos.
Herencia
La herencia puede hallarse en el nivel de los tipos o en el
nivel de las tablas. En primer lugar se considerara la herencia de los tipos y después
en el nivel de las tablas.
Herencia de tipos
Los tipos derivados heredan los atributos de superclase. Los
métodos también se heredan por sus subtipos, al igual que los atributos. Sin
embargo, un subtipo puede redefinir el efecto de un método declarandolo de
nuevo. Esto se conoce como sobre-escritura (overriding) del método.
Herencia de tablas
Las subtablas en SQL se corresponden con la noción del
modelo E-R de la especialización y la generalización. Por tanto, cada atributo
presente en una supertabla debe estar también presente en las subtablas. Además,
cuando se declaran subtablas derivadas de una supertabla, cada tupla presente
en una subtablas también esta presentes en la supertabla. En principio, serıa
posible la herencia múltiple tanto en tipos como en tablas, pero ANSI SQL no lo
soporta. Las subtablas pueden guardarse de manera eficiente sin replica de todos
los campos heredados de una de las dos
siguientes formas:
Cada tabla almacena la clave primaria (que se puede heredar
de una tabla padre) y los atributos definidos localmente.
Los atributos heredados (aparte de la clave primaria) no
hace falta guardarlos y pueden obtenerse mediante una reunión con la supertabla
basada en la clave primaria.
Cada tabla almacena todos los atributos heredados y definidos
localmente, cuando se inserta una tupla se almacena solo en la subtabla en la
que se inserta y su presencia se infiere en cada supertabla. El acceso a todos
los atributos de una tupla es más rápido, dado que no se requiere una reunión.
Tipos de arreglo
multiconjunto en sql
SQL soporta dos tipos de conjuntos
arrays y multiconjuntos. Un multiconjunto es un conjunto no ordenado, en el que
cada elemento puede aparecer varias veces. Los multiconjuntos son como los
conjuntos, salvo que os conjuntos permiten que cada elemento aparezca,
como mucho una vez. Supóngase que se desea registrar información sobre libros,
incluido un conjunto de palabras clave para cada libro, además se desea
almacenar el nombre de los autores de un libro en forma de array, a diferencia
de los elementos de los multiconjuntos, los elementos de los arrays están
ordenados, de modo que se puede distinguir el primer autor del segundo, etc.
Estos se pueden definir como arrays y como multiconjuntos:
Créate type Editor as(nombre varchar(20),
sucursal varchar(20))
créate type Libro as (titulo
varchar(20),
array_autores varchar (20) array [10],
fecha_publicacion date,
editor Editor,
conjunto_palabras_clave varchar(20)[multiset]
create table libro
of Libro
La primera instrucción
define el tipo denominado Editor, que tiene dos componentes: nombre y sucursal.
La segunda
instrucción define el tipo estructurado Libro, que contiene título, un array_autores,
que es un array de hasta de diez nombres de autor, una fecha de publicación,
un editor y un multiconjunto de palabras clave. Finamente se crea la
tablalibros, que contiene las tuplas del tipo libro.
Identidad de los objetos
El concepto de la identidad de los objetos tiene una relación
interesante con los punteros de los lenguajes de programación. Una manera
sencilla de conseguir una identidad intrínseca es utilizar los punteros a las
ubicaciones físicas de almacenamiento. En concreto, en muchos lenguajes
orientados a objetos como C++, los identificadores de los objetos son en realidad
punteros internos de la memoria. Sin embargo, la asociación de los objetos con
ubicaciones físicas de almacenamiento puede variar con el tiempo. Hay varios
grados de permanencia de las identidades:
Dentro de los procedimientos: La identidad solo persiste
durante la ejecución de un único procedimiento. Un ejemplo de la identidad
dentro de los procedimientos son las variables locales del interior de los
procedimientos.
Dentro de los programas: La identidad solo persiste durante
la ejecución de un único programa o una única consulta. Un ejemplo de la identidad
dentro de los programas son las variables globales de los lenguajes de programación.
Los punteros de la memoria principal o de la memoria virtual solo ofrecen
identidad dentro de los programas.
Entre programas: La identidad persiste de una ejecución del
programa a otra. Los punteros a los datos del sistema de archivos del disco
ofrecen identidad entre los programas, pero pueden cambiar si se modifica la
manera en que los datos se guardan en el sistema de archivos.
Persistente: La identidad no solo persiste entre las
ejecuciones del programa sino también entre las reorganizaciones estructurales
de los datos. Es la forma persistente de la identidad necesaria para los
sistemas orientados a objetos.
Implementación de las características O-R
La orientación a objetos constituye una nueva forma de
pensar acerca de problemas empleando modelos que se han organizado tomando como
base conceptos del mundo real. Los modelos orientados a objetos son útiles para
comprender problemas, comunicarse con expertos en esa aplicación, modelar
empresas, preparar documentación y diseñar programas y bases de datos.
El beneficio principal no es un tiempo de desarrollo más
reducido, el desarrollo orientado a objetos puede requerir más tiempo que el
desarrollo convencional porque se pretende que promueva la reutilización futura
y la reducción de los posteriores errores y el futuro mantenimiento. Las bases de datos orientadas a objetos unen dos
tecnologías:
La de las bases de datos y la de los lenguajes orientados a
objetos. Los LPOO aportan gran capacidad en la manipulación de datos, pero no
implementan el almacenamiento y consulta de grandes volúmenes de datos.
Por el contrario, las bases de datos convencionales aportan
un dominio de las técnicas de almacenamiento y consulta de grandes volúmenes de
datos, aunque su capacidad de manipulación es limitada. Las bases de datos orientadas a objetos pretenden unir la
capacidad de manipulación de datos de los LPOO con la capacidad de
almacenamiento y consulta de los SGBD.
No hay comentarios:
Publicar un comentario