sábado, 24 de septiembre de 2011

Diseño de bases de datos OO por transformación EER-OO

DISEÑO DE BASE DE DATOS OO POR TRANSFORMACIÓN EER-OO
Objetos complejos estructurados, no estructurados
Un sistema de BDOO debe poder dar cabida a diferentes tipos de datos, desde los más sencillos a objetos más complejos, todos ellos de pueden resumir en estos ocho:
Tipo abstracto para construir otros tipos. Permite construir nuevos tipos a partir de caracteres, float, enteros. Por ejemplo: punteros, números complejos, cadenas de bits…
  • Array. Son matrices de elementos de datos, como los que podemos encontrar en innumerables aplicaciones científicas.
  • Secuencia de tipo: Insertar elementos en una matriz en cualquier posición.
  • Tuplas: Forma natural de representar las propiedades de una entidad.
  • Conjunto: Forma natural de representar los grupos del mundo real.
  • Funciones: Para crear, modificar y borrar otros objetos
  • Uniones: Elementos de datos que pueden tomar diferentes valores de los diferentes tipos, es decir, matrices heterogéneas.
  • Composición recursiva del resto de tipos, se utiliza para representar objetos complejos, tales como documentos.
Extensibilidad de tipos
El conjunto de tipos predefinidos que aporta el sistema de base de datos debe ser extensible mediante algún mecanismo que permita definir tipos nuevos. No debe haber distinción en cuanto al uso de los tipos definidos por el sistema y los extendidos.

SGBDOO (Sistema Gestor de Base de Datos Orientada a Objetos)

Sistema Gestor de Datos Orientadas a Objetos

Las aplicaciones de las bases de datos en áreas como el diseño asistido por computadora, la ingeniería de software y el procesamiento de documentos no se ajustan al conjunto de suposiciones que se hacen para aplicaciones del estilo de procesamiento de datos. El modelo de datos orientado a objetos se ha propuesto para tratar algunos de estos nuevos tipos de aplicaciones.
El modelo de bases de datos orientado a objetos es una adaptación a los sistemas de bases de datos. Se basa en el concepto de encapsulamiento de datos y código que opera sobre estos en un objeto. Los objetos estructurados se agrupan en clases. El conjunto de clases esta estructurado en sub y superclases basado en una extensión del concepto ISA del modelo Entidad – Relación. Puesto que el valor de un dato en un objeto también es un objeto, es posible representar el contenido del objeto dando como resultado un objeto compuesto.
El propósito de los sistemas de bases de datos es la gestión de grandes cantidades de información. Las primeras bases de datos surgieron del desarrollo de los sistemas de gestión de archivos. Estos sistemas primero evolucionaron en bases de datos de red o en bases de datos jerárquicas y, más tarde, en bases de datos relacionales.
Estructuras de objetos

   El modelo orientado a objetos se basa en encapsular código y datos en una única unidad, llamada objeto. El interfaz entre un objeto y el resto del sistema se define mediante un conjunto de mensajes.
Un objeto tiene asociado:
  • un conjunto de variables que contienen los datos del objeto. El valor de cada variable es un objeto.
  • Un conjunto de mensajes a los que el objeto responde.
  • Un método, que es un trozo de código para implementar cada mensaje. Un método devuelve un valor como respuesta al mensaje.
    El término mensaje en un contexto orientado a objetos, no implica el uso de un mensaje físico en una red de computadoras, si no que se refiere al paso de solicitudes entre objetos sin tener en cuenta detalles específicos de implementación.
    La capacidad de modificar la definición de un objeto sin afectar al resto del sistema está considerada como una de las mayores ventajas del modelo de programación orientado a objetos.

Constructores de tipo
Todos los tipos de objetos tienen asociado por defecto un método que se encarga de construir nuevos objetos de ese. El nombre del método es el mismo que el nombre del tipo, y sus parámetros que tenemos en dicho método son los atributos del tipo de objetos.
Pueden ser:
  • Constructores de átomos
  • Constructores de tuplas
  • Constructores de conjuntos
Encapsulamiento de operaciones, métodos

Cada objeto contiene y define procedimientos (métodos) y la interfaz mediante la cual se puede acceder a él y otros objetos pueden manipularlo. La mayoría de los SGBDOO permite el acceso directo a los atributos incluyendo operaciones definidas por el propio SGBDOO las cuales leen y modifican los atributos para evitar que el usuario tenga que implementar una cantidad considerable de métodos cuyo único propósito sea el de leer y escribir los atributos de un objeto. Generalmente, los SGBDOO permiten al usuario especificar qué atributos y métodos son visibles en la interfaz del objeto y pueden invocarse desde afuera.
El encapsulamiento se centra en la implementación que da lugar al comportamiento observable de un objeto. El encapsulamiento se consigue a menudo mediante la ocultación de información, es decir, se basa en ocultar todos los secretos de un objeto que no contribuyen a sus características esenciales. El encapsulamiento
proporciona, por tanto, barreras explícitas entre abstracciones diferentes. Existen dos visiones diferentes del encapsulamiento[ATK89], la primera y original que es la del lenguaje de programación; y la segunda que es la adaptación de esa visión para la base de datos.

Las jerarquías de tipos, de clases y herencia

Jerarquía de tipos y clases

Existe las jerarquías de tipo, en las cuales más tipos especializados (subtipos) tienen todos sus atributos y todos los métodos de los tipos generalizados (supertipos), pero pueden agregar nuevos atributos y métodos particulares.
En una base de datos existen objetos que responden a los mismos mensajes, utilizan los mismos métodos y tienen variables del mismo nombre y tipo. Sería inútil definir cada uno de estos objetos por separado por lo tanto se agrupan los objetos similares para que formen una clase, a cada uno de estos objetos se le llama instancia de su clase. Todos los objetos de su clase comparten una definición común, aunque difieran en los valores asignados a las variables.
Así que básicamente las bases de datos orientados a objetos tienen la finalidad de agrupar aquellos elementos que sean semejantes en las entidades para formar un clase, dejando por separado aquellas que no lo son en otra clase.
Herencia

Las clases o tipos heredan de sus ancestros.
Ventajas de la herencia:
Diseño de Base de Datos OO por transformación EER-OO
 Para la transformación de EER-OO se usan los lenguajes:
Lenguaje ODL
El DDL o lenguaje de definición de datos, se utiliza para expresar la estructura y condiciones de integridad sobre el esquema de la base de datos. En una base de datos  relacional define las tablas, los atributos en la tabla, el dominio de los atributos y las  restricciones sobre un atributo o una tabla.
En un SGBDOO el DDL debe ser empleado para definir no sólo lo anteriormente mencionado, si no también para definir métodos, datos compuestos, relaciones ISA, herencia, etc.
El DDL propuesto por ODMG-93 – Estandarización de los sistemas de bases de datos orientados a objetos – denominado ODL pretende principalmente facilitar la portabilidad de los esquemas de las bases de datos. Este ODL no es un lenguaje de programación completo, define las propiedades y los prototipos de las operaciones de los tipos, pero no los métodos que implementan esas operaciones.
El ODL intenta definir tipos que puedan implementarse en diversos lenguajes de programación; no está por tanto ligado a la sintaxis concreta de un lenguaje de programación particular. De esta forma un esquema especificado en ODL puede ser soportado por cualquier SGBDOO que sea compatible con ODMG-93.
La sintaxis de ODL es una extensión de la del IDL ( Interface Definition Language) desarrollado por OMG como parte de CORBA (Common Object Request Broker Architecture).
Lenguaje OML
El lenguaje de manipulación es empleado para la elaboración de programas que permitan crear, modificar y borrar datos que constituyen la base de datos.
ODMG-93 no propone un OML estándar, simplemente sugiere que este lenguaje sea la extensión de un lenguaje de programación, de forma que se puedan realizar entre
otras las siguientes operaciones sobre la base de datos:
  • Œ Creación de un objeto
  • Œ Borrado de un objeto
  • Œ Modificación de un objeto
  • Œ Identificación de un objeto

Estructuras de objetos, constructores de tipos, Encapsulamiento de operaciones, métodos y persistencia

Estructuras de objetos

   El modelo orientado a objetos se basa en encapsular código y datos en una única unidad, llamada objeto. El interfaz entre un objeto y el resto del sistema se define mediante un conjunto de mensajes.
Un objeto tiene asociado:
  • un conjunto de variables que contienen los datos del objeto. El valor de cada variable es un objeto.
  • Un conjunto de mensajes a los que el objeto responde.
  • Un método, que es un trozo de código para implementar cada mensaje. Un método devuelve un valor como respuesta al mensaje.
    El término mensaje en un contexto orientado a objetos, no implica el uso de un mensaje físico en una red de computadoras, si no que se refiere al paso de solicitudes entre objetos sin tener en cuenta detalles específicos de implementación.
    La capacidad de modificar la definición de un objeto sin afectar al resto del sistema está considerada como una de las mayores ventajas del modelo de programación orientado a objetos.

Constructores de tipo
Todos los tipos de objetos tienen asociado por defecto un método que se encarga de construir nuevos objetos de ese. El nombre del método es el mismo que el nombre del tipo, y sus parámetros que tenemos en dicho método son los atributos del tipo de objetos.
Pueden ser:
  • Constructores de átomos
  • Constructores de tuplas
  • Constructores de conjuntos
Encapsulamiento de operaciones, métodos

Cada objeto contiene y define procedimientos (métodos) y la interfaz mediante la cual se puede acceder a él y otros objetos pueden manipularlo. La mayoría de los SGBDOO permite el acceso directo a los atributos incluyendo operaciones definidas por el propio SGBDOO las cuales leen y modifican los atributos para evitar que el usuario tenga que implementar una cantidad considerable de métodos cuyo único propósito sea el de leer y escribir los atributos de un objeto. Generalmente, los SGBDOO permiten al usuario especificar qué atributos y métodos son visibles en la interfaz del objeto y pueden invocarse desde afuera.
El encapsulamiento se centra en la implementación que da lugar al comportamiento observable de un objeto. El encapsulamiento se consigue a menudo mediante la ocultación de información, es decir, se basa en ocultar todos los secretos de un objeto que no contribuyen a sus características esenciales. El encapsulamiento
proporciona, por tanto, barreras explícitas entre abstracciones diferentes. Existen dos visiones diferentes del encapsulamiento[ATK89], la primera y original que es la del lenguaje de programación; y la segunda que es la adaptación de esa visión para la base de datos.
Desde el punto de vista de las bases de datos, esto se traduce en el hecho de que un objeto abarca operaciones y datos, pero con una diferencia. En las bases de datos no está claro si la parte estructural es parte de la interfaz (depende del sistema), mientras que en los lenguajes de programación la estructura de datos es claramente parte de la implementación y no de la interfaz.
Como se puede observar, el encapsulamiento proporciona una forma lógica de independencia de los datos, ya que se puede cambiar la implementación de un tipo sin cambiar ninguno de los programas que usan ese tipo.
Persistencia
La persistencia es una de las características que los SGBDOO heredan tanto de los SGBD como del modelo de objetos. La diferencia está en que la persistencia proporcionada por el SGBD tradicional, se refiere únicamente a la conservación de los datos, mientras que la persistencia heredada del modelo de objetos hace referencia no sólo a la conservación del estado de un objeto, si no también a la conservación de la clase, que debe trascender a cualquier programa individual, de forma que todos los programas interpreten de la misma manera el estado almacenado.
Se puede distinguir entre:
  • ŒPersistencia en el espacio, que hace referencia al hecho de que los objetos creados en una máquina puedan llevarse a otra, y que incluso puedan tener representaciones diferentes en diferentes máquinas.
  • Persistencia en el tiempo, hace referencia a la cualidad de los objetos de sobrevivir a la ejecución del proceso que los creó

Uso de las categorías y la categorización

EL USO DE LAS CATEGORÍAS

Es posible llegar a la misma jerarquía o red desde otra dirección. En tal caso el proceso conlleva generalización en vez de especialización y corresponde a una síntesis conceptual bottom-up. En términos estructurales, las jerarquías o redes resultantes de ambos procesos puede se idénticas; la única diferencia radica en la manera o el orden en que se especifican las clases y subclases del esquema.
En la práctica, es frecuente que no se utilice solamente especialización o solamente generalización, sino una combinación de ambos procesos. En este caso, se incorporan continuamente nuevas clases a la jerarquía o la red según se van haciendo visibles para usuarios y diseñadores.
Categorías y Categorización

Una categoría es una subclase de la unión de dos o más superclases que pueden tener diferentes claves ya que pueden representar diferentes entidades. En este caso es necesario sintetizar una clave subrogada, que identifique cada una de las ocurrencias de la categoría y que será heredada como clave foránea por cada una de las superclases. Por cuestiones de eficiencia a la hora de realizar los joins entre la categoría y sus correspondientes clases, se añadirá un atributo a la tabla de la categoría que exprese a que subclase pertenece cada túpla en particular.

Modelado de datos con especialización y generalización

Como es lógico, las restricciones correctas vienen dadas por la naturaleza del problema real aplicado a cada especialización, sin embargo, la generalización en una superclase suele ser total, ya que la superclase se deriva de las subclases y, por tanto, contiene sólo ocurrencias de entidad que están en las subclases.
  •  Reglas de inserción y borrado para Especialización y Generalización
Como consecuencia de las restricciones definidas anteriormente, aparecen reglas para la inserción y borrado de Especialización (y Generalización). Algunas de esas reglas son las siguientes:
  • Borrar una tupla de una superclase implica el borrado automático en todas las subclases a las que pertenezca.
  • Insertar una tupla en una superclase implica que tiene que ser obligatoriamente insertada en todas las subclases definidas por predicado en las que satisfaga el predicado de definición.
  • Insertar una tupla en una superclase de una especialización total implica una inserción obligatoria en al menos una de las subclases de la especialización.
  •  Jerarquías de Especialización, Red de Especialización y Herencia Múltiple.
Una subclase puede, a su vez, tener más subclases especificadas a partir de ella, formando una jerarquía o red de especializaciones. Una jerarquía de especialización tiene la restricción cada subclase participa (como subclase) en una relación clase/subclase. Como contraste, para una red de especialización una subclase puede ser subclase en mas de una relación clase/subclase.
En tal red o jerarquía de especialización, una subclase hereda no solamente los atributos de su superclase directa, sino también todos los de sus predecesores hasta la raíz.
Una subclase con más de una superclase se llama subclase compartida. Hay que tener en cuenta que una subclase compartida implica una red; si no existen subclases compartidas estaremos en presencia de una jerarquía en vez de una red.
Aunque se ha utilizado la especialización para definir estos conceptos, la generalización es igualmente aplicable a estos. Por tanto podremos hablar de la misma forma de jerarquía de generalización y red de generalización.
  • Diseño Top-down frente a Bottom-up
En el proceso de especialización, solemos empezar con una entidad y a continuación definimos las subclases de la entidad mediante especializaciones sucesivas; esto es, definimos repetitivamente más agrupamientos específicos a partir de la entidad. Esta especialización sucesiva corresponde a un proceso de refinamiento conceptual top-down durante el diseño del esquema conceptual.
Es posible llegar a la misma jerarquía o red desde otra dirección. En tal caso el proceso conlleva generalización en vez de especialización y corresponde a una síntesis conceptual bottom-up. En términos estructurales, las jerarquías o redes resultantes de ambos procesos puede se idénticas; la única diferencia radica en la manera o el orden en que se especifican las clases y subclases del esquema.
En la práctica, es frecuente que no se utilice solamente especialización o solamente generalización, sino una combinación de ambos procesos. En este caso, se incorporan continuamente nuevas clases a la jerarquía o la red según se van haciendo visibles para usuarios y diseñadores.
Categorías y Categorización

Una categoría es una subclase de la unión de dos o más superclases que pueden tener diferentes claves ya que pueden representar diferentes entidades. En este caso es necesario sintetizar una clave subrogada, que identifique cada una de las ocurrencias de la categoría y que será heredada como clave foránea por cada una de las superclases. Por cuestiones de eficiencia a la hora de realizar los joins entre la categoría y sus correspondientes clases, se añadirá un atributo a la tabla de la categoría que exprese a que subclase pertenece cada túpla en particular.