La Agregación es una relación “parte de un todo” entre dos clases.  El UML te permite especificar dos tipos de agregación: débiles o agregaciones compartidas y fuertes o agregaciones compuestas. La agregación débil te permite modelar una relación “parte de un todo” en la cual un objeto  posee otro objeto, pero sin embargo, otros objetos pueden poseer ese objeto también. La composición te permite modelar la relación “parte de un todo” donde un objeto posee exclusivamente el otro objeto.

El UML representa la agregación con un diamante cerca de la clase que es “propietaria”, dentro de la línea de asociación entre las clases. Una agregación débil tiene un diamante transparente, mientras que la agregación fuerte tiene un diamante relleno de color negro. La figura 1 muestra dos relaciones de agregación. La primera describe la relación débil entre una imagen fotográfica y una persona. La segunda muestra la agregación fuerte entre una persona y su identificación(como se identifica una persona).

figura7_11Figura 1

La agregación describe la situación en la cual un objeto(entidad) agrega algún otro objeto(entidad). En este caso, una foto agrega un conjunto de personas. Pero también, alguna persona puede aparecer en más de una foto. La multiplicidad "*" hace esto explícito. Dada esta semántica, no existe pertenencia: La foto no es propietaria de la persona, y la persona no desaparece( al menos desde la base de datos) cuando se elimina la foto.

La agregación fuerte, por el otro lado, es bastante explícita acerca de la pertenencia. Tu identificas a una personas con uno o mas documentos identificatorios(p.e. carné), y la persona es propietaria de aquellos documentos. Si la persona desaparece(fallece), los documentos desaparecen. Tú, de este modo, identificas los documentos identificatorios por su relación hacia la persona. Sólo un rol en una asociación puede tener la marca de agregación. Por definición, sólo un objeto puede “poseer” al otro objeto. En una asociación n-aria con dos o más clases asociadas  no puede haber una agregación [UML Semantics Version 1.1]. Una agregación débil, por definición, debe tener una multiplicidad de 1, 1…1 o 0…1 en los roles correspondientes al objeto propietario.

La agregación fuerte es crítica para el modelamiento de los datos porque estas representan las relaciones débiles. Traducido dentro de un esquema conceptual para una base de datos relacional u objeto-relacional, una agregación fuerte se transforma en una clave foránea que es parte de la clave primaria del objeto dependiente(en este caso, el documento de identificación). Incluso en bases de datos orientadas a objeto, existe una implicancia en la eliminación en cascada: en el caso de borrar la agregación, todas las partes agregadas desaparecen también. Esto a su vez se traduce hacia el interior en una especificación de eliminación en cascada o un trigger sobre la tabla en el esquema conceptual.

Nota:Apuntes obtenidos del libro Database Design for Smarties, Robert Muller