UML DATA PROFILE Mª José Reig Tarazona Victoria Torres Bosch Facultad de Informática - Universidad Politécnica de Valencia Resumen El desarrollo de una aplicación de base de datos requiere la existencia de una estrecha relación entre los desarrolladores de software y el equipo de desarrollo de la base de datos. Para que un proyecto tenga éxito éste debe estar marcado por una visión compartida y una comunicación clara de cada uno de los detalles del proyecto. Los desarrolladores de software utilizan herramientas de desarrollo orientada a objetos y usan el modelo lógico de clases para representar una visión global de la aplicación, mientras que el equipo de desarrollo de base de datos diseñan, modelan, construyen y optimizan la base de datos. Las áreas de interfaz y superposición entre estas dos distintas responsabilidades a menudo representan el aspecto más desafiante en el desarrollo de una aplicación de base de datos. Es por ello que surge la necesidad del uso de un lenguaje estándar, que permita el mapeo de objetos a base de datos relacionales, y que ayude a resolver todos estos obstáculos con los que el equipo de trabajo se va a ir encontrando a lo largo de la vida del proyecto. Para realizar esta tarea se debe entender ambos paradigmas y sus diferencias y entonces hacer un equilibrio inteligente basado en ese conocimiento. Introducción ¿Por qué aparece la necesidad del mapeo de objetos a base de datos relacionales? Por una razón, la tecnología orientada a objetos, tal como Java, es el entorno más común de desarrollo aplicado a los nuevos sistemas de software. También, las bases de datos relacionales son todavía el modelo preferido para almacenar información persistente y es probable que esto siga durante bastante tiempo. Una vez demostrada la necesidad de un lenguaje estándar que permita la comunicación entre los distintos miembros del equipo de proyecto llega el momento de describir con detalle el perfil de Modelado de Datos para UML incluyendo ejemplos para cada uno de los conceptos detallados. Una vez familiarizados con todos estos conceptos hay que establecer una relación entre el modelo de la aplicación y el de los datos de forma que se resuelva este desafiante aspecto que determinará el éxito o el fracaso de un proyecto. Perfil de Modelado de Datos para UML 1 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia El poder de UML no está limitado al desarrollo de software orientado a objetos. Más y más, UML está siendo aplicado a otras áreas del desarrollo de software, tales como el modelado de datos, mejorando la habilidad de los profesionales para comunicar sus necesidades y contribuciones a el resto del equipo. Los analistas de datos, primero reúnen los datos de la documentación de los requerimientos. Las Bases de Datos tradicionalmente han sido descritas en una notación llamada Diagramas Entidad Relación. Sin embargo, al realizar el modelo físico de datos se debe expresar una descripción detallada de la base de datos. Esto se hace usando el Data Modeling Profile del Rational para UML. Las bases de datos orientadas a objetos son soportadas por UML a través del modelado de clases persistentes. El Data Modeling Profile para UML no está todavía aprobado por OMG. El Data Modeling Profile de UML. Este documento [3] describe en detalle el Data Modeling Profile para el UML implementado por el Rational Rose Data Modeler, incluyendo descriptores y ejemplos para cada concepto, incluyendo bases de datos, esquemas, tablas, claves, índices, relaciones, columnas, restricciones y disparadores. Base de Datos. La Base de Datos es el sistema para el almacenaje de datos y el acceso controlado a los datos almacenados. Ésto es el elemento más grande que una base de datos soporta. La base de datos relacional es un estándar soportado por el Data Modeling UML Profile. Una base de datos relacional objeto, una extensión de las relacional, es también soportada por UML Profile. El estereotipo <<Database>> usado como un componente UML, define una base de datos. Como un componente de base de datos debe tener un nombre. En la vista del componente, una base de datos es un elemento tarjeta dependiente , desde el que se hace referencia al tipo de la base de datos. Un icono puede representar el estereotipo como se muestra a continuación. Las tres posibles representaciones de un componente Base de Datos son: 2 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia La completa descripción del modelo de la base de datos, para ser usada para recuperar y almacenar datos, es almacenada en un esquema dentro de la base de datos. El esquema es la unidad más grande con la que se puede trabajar. El estereotipo <<Schema>> en un modelo UML representa un esquema de base de datos. En el navegador un esquema se muestra como un paquete En un diagrama la representación es un paquete con el estereotipo Schema. Notar que puede ser más que un esquema asociado a la base de datos. 3 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia Tablas. Una tabla es la estructura de modelado básica de una base da datos relacional. Representa un conjunto de tuplas de la misma estructura, también llamadas filas. Cada una de estas tuplas contiene datos. La información acerca de la estructura de una tabla esta almacenada en la base de datos. Una clase con el estereotipo <<Table>> representa una tabla relacional en un esquema de una base de datos. En el navegador una tabla se representa por una símbolo “tabla”. La representación en un diagrama usa el estereotipo Table y el estereotipo Icon. Insertando la tabla en el paquete esquema se crea la asociación de una tabla a un esquema. Claves. Las claves se usan para acceder a las tablas. Las claves primarias identifican de manera única a una fila de una tabla, mientras que las claves ajenas son un acceso a datos en otras tablas relacionadas. Las claves se representan como una restricción y como un valor marcado sobre una columna. La clave primaria usa una marca PK delante de la columna, como se muestra a continuación: 4 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia En un diagrama, las marcas PK representan las claves primarias, y la operación estereotipada PK es la restricción de la clave primaria. Una clave ajena representa una columna, la cual es una parte de una relación con otra tabla. Una marca FK representa la clave ajena. Esto genera la restricción de clave ajena, la cual se representa por un estereotipo FK sobre una operación. Indices. Un índice es una estructura de datos física que acelera el acceso a los datos. Esto no cambia la calidad o la cantidad de datos recuperados. Un índice puede incluir múltiples columnas o solo una. El índice no existe en la vista lógica. El estereotipo Index sobre una operación representa una restricción para un índice. La representación en diagrama usa el estereotipo Index delante de la operación. 5 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia La restricción del índice especifica la columna incluida y opcionalmente la única del índice. Relaciones. Una dependencia de cualquier clase entre tablas en un modelo de datos se llama relación. Una relación es un resumen de una asociación estereotipada y un conjunto de claves primarias y ajenas. Cada relación es entre una tabla padre y otra tabla hijo, donde una tabla padre debe tener una clave primaria definida. La tabla hijo crea una columna que es la clave ajena y una restricción para indicar la tabla padre. Una asociación no identificada representa una relación entre dos tablas independientes. La clave ajena de la tabla hijo no contiene todas las columnas de claves primarias. Una relación identificada es una relación entre dos tablas dependientes, donde la tabla hijo no puede existir sin la tabla padre. Todas las claves primarias de la tabla padre se transforman en columnas de claves ajenas y primarias en la tabla hijo. 6 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia Una relación tiene dos multiplicidades asociadas a ella. Éstas definen la multiplicidad de una tabla asociada a otra. Es posible asignar más de una relación entre dos tablas usando diferentes multiplicidadesCada relación creada importa las claves de la tabla padre a la tabla hijo. Columnas. Una tabla contiene columnas las cuales son atributos marcados. Las columnas pueden contener datos cuando están instanciadas como una fila. Una columna debe tener un tipo de datos definido. Una columna puede ser o persistente o computada. Las columnas computadas están definidas por una expresión. Las columnas persistente pueden ser marcadas como claves primarias, columnas anulables y columnas únicas. Pueden contener un valor por defecto. Las restricciones pueden ser revisadas para cada columna. Tipo de Datos. Al soportar bases de datos relacionales requiere el soporte de tipos de datos estándar. Ejemplos de tipos de datos son char, date, float, long, number, nvarchar2, raw, varchar2. Restricciones. Una restricción es una regla aplicada a la estructura de la base de datos. Esta regla extiende la estructura y puede ser aplicada a columnas y/o tablas. Todas las restricciones están definidas como operaciones estereotipadas. Todas las restricciones descritas abajo están implementadas aquí en una clase. Clave Primaria. La restricción de clave primaria define la clave primaria como una regla en la tabla. 7 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia Clave Ajena. La restricción de clava ajena define la clave ajena como una regla en la tabla. Disparadores. Un disparador es una actividad ejecutada por el DBMS como un efecto de una modificación de una tabla. El estereotipo Trigger sobre una operación representa el disparo sobre una tabla. El disparador se muestra como un estereotipo Trigger sobre la operación Un ejemplo de un disparador es la longitud de una inserción en otra tabla en el caso donde el balance es menor que 0 o mayor que 100.000. Valor Valido. La restricción de valor valido revisa el valor de los datos de acuerdo a una expresión dada. El estereotipo Check sobre una operación representa la restricción de la validación. Un ejemplo de la restricción es BALANCE>0. 8 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia Unicidad. La restricción de unicidad asegura que cada fila contiene un valor diferente en una columna. Es estereotipo Unique representa la restricción de uncidad. La restricción de unicidad puede ser aplicada sobre columnas compuestas o simples. Resumen. Con el Data Modeling Profile para UML, soporta completamente las necesidades del modelado de datos. Admite el soporte de desarrollo de software y modelado de datos con un lenguaje unificado. Usando el UML Data Modeling Profile, Rational Rose Data Moduler unifica el equipo de desarrollo de software con una simple herramienta. Cómo mapear objetos a una base de datos relaciona En esta sección se describen las técnicas fundamentales requeridas para mapear de forma exitosa los objetos a bases de datos relacionales. Mapeo de atributos a columnas Implementación de la herencia en una base de datos relacional Mapeo de asociaciones, agregaciones y composiciones Implementación de relaciones Mapeo de atributos a columnas Los atributos de una clase pueden mapearse en cero o en una serie de columnas en una base de datos relacional. Es importante tener presente que no todos los atributos son persistentes, por lo tanto no todos serán almacenados en la base de datos. Además, algunos atributos hacen referencia a objetos, lo que quiere decir que se trata de una definición recursiva: un atributo puede mapearse tanto en cero como en una serie de columnas. También es posible que varios atributos se mapeen en una única columna de una tabla. (Por ej. Una clase representando un código postal (C.P.) puede tener tres atributos numéricos, representando cada uno de ellos una sección del C.P. completo. Sin embargo, el C.P. debe ser almacenado en una columna en la tabla de direcciones.) Implementación de la herencia en una base de datos relacional El concepto de herencia sigue diferentes caminos cuando se salvan objetos en una base de datos relacional. La cuestión se reduce a entender cómo organizar los atributos heredados en el modelo persistente. La forma en que se resuelve este 9 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia punto puede tener un impacto importante en el diseño del sistema. Hay tres soluciones fundamentales para el mapeo de la herencia en bases de datos relacionales y para entenderlas hay que discutir el equilibrio entre el mapeo del diagrama de clases. Mapeo de clases a tablas Excepto en bases de datos muy simples, nunca habrá clases que se mapeen directamente en una tabla. A continuación se describen tres estrategias para la implementación de estructuras de herencia en una base de datos relacional: Usando una entidad para una estructura completa de clases de herencia. Usando una entidad para una clase concreta Usando una entidad por clase. Usando una entidad por una estructura completa de clases de herencia Con este enfoque, la estructura completa de herencia se mapea en una tabla, donde todos los atributos de todas las clases en la jerarquía son almacenados. La ventaja de este enfoque es que es simple, el polimorfismo está soportado cuando una subclase cambia de rol, y es posible acceder de forma ad hoc a toda la información que se necesita desde una misma tabla. Las desventajas son que cada vez que se añade un nuevo atributo en cualquier nivel de la jerarquía dicho atributo hay que añadirlo a la tabla. Esto hace que aumente la dependencia entre las clases de la jerarquía, ya que si se comete un error al añadir un atributo, éste podría afectar a todas las clases de la jerarquía, además de las subclases de cualquier clase a la que pertenezca dicho atributo. Esto, potencialmente desperdicia una gran cantidad de espacio en la base de datos. También, hay que añadir una columna para indicar a qué subclase pertenece cada una de las filas de la tabla. Este enfoque funciona bien cuando la jerarquía de subclases no es muy amplia, ya que en caso contrario esta solución se hace inviable. Usando una entidad por cada clase concreta En esta solución cada entidad incluye tanto los atributos propios de la clase como los heredados. La gran ventaja en este caso es que todavía es bastante fácil realizar consultas ad hoc, debido al hecho de que toda la información que se necesita sobre una clase dada está almacenada en una única tabla. Sin embargo, este enfoque cuenta con varias desventajas. Una de ellas es que cuando se modifica una clase hay que modificar su tabla y la tabla de cada una de sus subclases (mucho trabajo si tenemos en cuenta que la estructura puede ser muy grande). Otra es que cuando un objeto cambia de rol hay que copiar toda la información referida al objeto en la tabla apropiada y asignarle un nuevo identificador (mucho trabajo de nuevo). Tercera, es que es difícil mantener múltiples roles y además mantener integridad de los datos, por ej. ¿Dónde almacenaríamos el nombre de un estudiante que a la vez es un profesor? 10 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia Usando una entidad por clase Con este enfoque se crea una tabla por cada clase, con los atributos que hacen referencia a la identificación del objeto y los atributos específicos de cada clase. La principal ventaja de esta solución es que es la más cercana al concepto de orientación a objetos. Soporta polimorfismo ya que es posible mantener filas en las apropiadas tablas para cada uno de los roles que un objeto puede tener. Además es muy fácil modificar superclases y añadir nuevas subclases porque lo único que hay que hacer es añadir o modificar una tabla. Aunque como veremos ahora, también cuenta con varias desventajas. En primer lugar hay demasiadas tablas en la base de datos (una por cada clase, además de aquellas que nos permitirán mantener las relaciones entre tablas). En segundo lugar, se tarda mucho en leer y escribir información usando esta técnica ya que se deberá acceder a múltiples tablas. Este problema se puede rebajar si se organiza la base de datos de forma inteligente, poniendo cada tabla dentro de una jerarquía de clases en diferentes soportes físicos. Tercero y último es que la recuperación de datos ad hoc es difícil, a menos que se añadan vistas que simulen las tablas requeridas. Comparación de estrategias Factores a considerar Una tabla por Una tabla por Una tabla por jerarquía clase concreta clase Ad hoc Simple Medio Medio/Dificil Fácil implementación Simple Medio Difícil Fácil acceso a los datos Simple Simple Medio/Simple Dependencia entre clases Muy alto Alto bajo Velocidad de acceso a los Rápido Rápido Medio/Rápido datos Soporta polimorfismo Medio Bajo Alto Mapeo de asociaciones, agregaciones y composiciones No solo hay que mapear los objetos en la base de datos, también hay que mapear las relaciones el las cuales los objetos están involucrados. Existen cuatro tipos de relaciones en las cuales un objeto puede estar involucrado: herencia, asociación, agregación y composición. Para mapear estas relaciones de forma correcta hay que entender las diferencias entre ellas, cómo implementar relaciones de forma general y cómo implementar relaciones muchos a muchos en particular. Diferencias entre asociación, agregación y composición Desde la perspectiva de las bases de datos, la única diferencia entre una asociación y una agregación o composición es cómo de fuerte es dicha relación entre los objetos. En una agregación y una composición cada cosa que se haga a la 11 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia totalidad de la base de datos, casi siempre conlleva a una modificación de cada una de las partes, sin embargo no ocurre esto en la asociación. Desde el punto de vista de la base de datos, una agregación o composición y una asociación son diferentes en el hecho de que con la agregación normalmente se quiere leer en la parte cuando se lee en el total, sin embargo, con una asociación no es siempre tan obvio lo que se necesita hacer. Lo mismo ocurre a la hora de salvar y borrar objetos en la base de datos. Implementación de relaciones en bases de datos relacionales Las relaciones en bases de datos relacionales están mantenidas a través de claves ajenas. Una clave ajena es uno o más atributos que aparecen en una tabla en la cual deben formar parte de ella, o es coincidente con la clave de otra tabla. Las claves ajenas permiten relacionar una tabla con una fila de otra tabla. Para implementar relaciones uno a muchos y uno a uno hay que incluir la clave de una de las tablas en la otra tabla. Implementación de muchos a muchos Para implementar relaciones muchos a muchos se necesita el concepto de tabla asociativa, una entidad cuyo propósito es mantener la asociación entre dos o más tablas en una base relacional. En bases de datos relacionales los atributos contenidos en una tabla asociativa son tradicionalmente una combinación de las claves involucradas en la relación. El nombre de una tabla asociativa es normalmente la combinación de los nombre de las tablas que se están asociando o el nombre de la asociación que implementa. Conclusiones La potencia de UML no está limitada al desarrollo de software orientado a objetos. Cada vez más, UML se está aplicando a otras áreas de desarrollo de software como el modelado de datos, mejorando la habilidad de los miembros del equipo de comunicar sus necesidades y el poder ser valoradas por el resto del equipo. Referencias [1] Mapping objects to relational databases [2] Mapping Object to Data Models with the UML [2] Towards a UML Profile for a Relational Persistence Model [3] White Paper: The UML Data Modeling Profile. [4] The Unified Modeling Language. Column from Magnus Penker President of Astrakan Strategic Training AB, Sweden 12 Laboratorio de Sistemas de Información Facultad de Informática Universidad Politécnica de Valencia