Modelo entidad-relación
Una asociación es un vínculo que tiene un significado específico entre varias entidades. En nuestro ejemplo, la asociación pedido es un vínculo evidente entre las entidades artículos y clientes, mientras que la asociación entrega establece el vínculo semántico entre las entidades artículos y proveedores.
También en nuestro ejemplo (Figura 3), el precio unitario es un atributo de la entidad artículo, el nombre de la familia es un atributo de la entidad cliente, la cantidad del pedido es un atributo de la asociación pedido y la fecha de entrega es un atributo de la asociación entrega.
Una cardinalidad mínima de 1 debe estar justificada por el hecho de que los individuos de la entidad en cuestión necesitan la asociación para existir (un cliente no existe hasta que ha pedido algo, por lo que la cardinalidad mínima de la entidad cliente en la asociación de pedidos es 1). En todos los demás casos, la cardinalidad mínima es 0 (es el caso de una lista preestablecida de elementos, por ejemplo).
Dicho esto, la discusión sobre una cardinalidad mínima de 0 o 1 sólo es realmente interesante cuando la cardinalidad máxima es 1. Veremos de hecho durante la traducción hacia un esquema relacional (sección “Traducción de un MCD a un MLDR”), que cuando la cardinalidad máxima es n, no podemos hacer la diferencia entre una cardinalidad mínima de 0 y una cardinalidad mínima de 1.
Curso de modelo de entidad-asociación
Puede utilizar anotaciones de datos para configurar cómo se asocian las propiedades de navegación en las entidades dependientes y primarias. Esto se suele hacer cuando hay varios pares de propiedades de navegación entre dos tipos de entidad.
El tipo de CLR utilizado para unir convencionalmente los tipos de entidad puede cambiar en futuras versiones para mejorar el rendimiento. No dependa del tipo de unión Dictionary<string, object> a menos que se haya configurado explícitamente, como se describe en la siguiente sección.
Ejemplo de modelo de asociación de entidades
El objeto es una entidad con existencia propia. La asociación es un vínculo o relación entre objetos sin existencia propia. La propiedad es la pieza más pequeña de información que describe un objeto o una asociación.
Las personas, los libros y los coches son ejemplos de tipos de entidades. En el caso de una persona, por ejemplo, la información asociada (es decir, las propiedades), como el nombre y los apellidos, no cambian de naturaleza.
Definición 8 – Identificador, clave – Un identificador (o clave) de un tipo de entidad o tipo de asociación consiste en uno o más de sus atributos que deben tener un valor único para cada entidad o asociación de ese tipo.
Esta colección contiene al menos un tipo de entidad (véase el apartado 2.3.2 Asociación reflexiva), pero puede contener más, se habla entonces de tipo de asociación n-ario (cuando n=2 se habla de tipo de asociación binario, cuando n=3 de tipo de asociación ternario…).
Figura 2.6: Ejemplo de asociaciones plurales entre un tipo de entidad Persona y un tipo de entidad Libro. En este diagrama, un tipo de asociación nos permite modelar que la gente escribe libros y otro que la gente critica (en el sentido de la crítica literaria) libros.
Definición del modelo de entidad-asociación
Recordad que al principio del juego de Doctrine2 os prometí cosas como <?php $article->getComments(). Bueno, ¡eso es lo que haremos aquí!
Tomemos un ejemplo sencillo, de nuevo los comentarios de una entrada de blog. Tienes una tabla de comentarios y una tabla de artículos. Para crear una relación entre estas dos tablas, naturalmente pondrá una columna article_id en la tabla de comentarios. Por lo tanto, la tabla de comentarios es la propietaria de la relación, ya que contiene la columna de enlace article_id. Bastante sencillo al final! No vayas a crear una columna article_id por mí
Tienes una tabla de artículos, otra tabla de categorías, pero sobre todo necesitas una tabla article_category que vincule las dos. Esta tabla de enlace contiene sólo dos columnas: article_id y category_id.
En Doctrine2, los objetos no son simples tablas, sino ArrayCollections, por lo que tendrás que definir el atributo como tal en el constructor. Un ArrayCollection es un objeto utilizado por Doctrine2, que tiene todas las propiedades de un array normal. Puedes hacer un foreach