Elgg provee un Modelo de Datos que nos permite abstraernos totalmente de la base de datos.

Proporciona un modelo de datos unificado llamado Entidad-Atributo-Valor (EAV), el cual esta basado en unidades atómicas de datos llamado "Entidades".

Como se puede ver en la imagen, en Elgg todo se basa en una Entidad (ElggEntity).

Los usuarios, son entidades, los grupos también son entidades, incluso el sitio mismo, es una entidad.

Hay 4 tipos de Entidades que son especialización de la entidad principal ElggEntity, son:

  • ElggUser (Usuarios): Todos los usuarios en el sitio son una entidad de tipo ElggUser.
  • ElggSite (Sitio): El sitio es un objeto con sus propiedades.
  • ElggGroup (Grupos): En una entidad que contiene/agrupa otras entidades. Un grupo esta compuesto, por miembros que son los usuarios. Puede contener diferentes entidades, como ser blogs, archivos, foros, que son creados dentro del grupo.
  • ElggObject (Objetos): en la red social cualquier otro tipo de contenido que se genera es mediante un objeto. Ejemplo de objetos son blogs, archivos, bookmarks.

Mediante estas 4 entidades podemos modelar cualquier tipo de funcionalidad en Elgg. Estas entidades especificas, tienen su clase y funciones asociadas.

Estas entidades se pueden extender para agregar información a las mismas de 2 maneras:

  • Metadata (Metadatos): los metadatos son propiedades que se pueden asignar a una entidad. Añadiendo información adicional a la misma. Por ejemplo, en el caso de un usuario, puede ser fecha de nacimiento o nacionalidad.
  • Annotations (Anotaciones): las anotaciones son utilizadas para realizar un feedback sobre una entidad. Por ejemplo, si hablamos de una entrada de blog, los comentarios y ratings al blog, son anotaciones.

Un ejemplo mas claro entre anotaciones y metadatos son:

  • Los metadatos son propiedades únicas de una entidad, que en este caso solo el creador de esa entidad tiene la posibilidad de asignarlos.
  • Las anotaciones, son el feedback que se proporciona a la entidad, lo puede realizar cualquier usuario. Las anotaciones ademas tienen funciones definidas para obtener la suma, cantidad, o promedio de las mismas.

Las Entidades también puede relacionerse entre si, y la relaciones son direccionales. Para crear una relación es necesario un nombre de relación y dos entidades.

Un ejemplo de relación en una sola dirección es cuando un usuario es miembro de un grupo, se crea la relación 'member' entre usuario y grupo.

Un ejemplo de relación es en dos direcciones es la amistad, en cual se crea una relación de amistad del usuario 1 y usuario 2, y viceversa.

Cualquier nueva funcionalidad la vamos a modelar mediante estas entidades. Las cuales incluyen métodos y funciones de persistencia y acceso a datos de la base de datos. Significa que no es mas necesario realizar consultas manualmente, ni tener que crear nuevas tablas, cuando necesitamos una nueva funcionalidad en el sitio.

Espero que les haya gustado este post.

Happy Elgg Coding

 

Diego Gallardo