Relationships provide a good way to accelerate the modeling through the column propagation mechanism as detailed in section Relationships in chapter 4. But despite being of great utility, relationships have some limitations that can cause a delay in the design in very specific cases, one of them being related to the many-to-many relationships. Since this kind of link implicitly creates an intermediate table between the two entities that compose it there is no possibility to do complex operations over the generated table like add triggers, indexes, rules, or even create other relationships involving it.
Fortunately, in order to work around this situation, pgModeler implements a feature that converts the many-to-many relationship into two new one-to-many relationships that connect the intermediate table to the others that composed the converted relationship. To give a detailed explanation, observe the following image.
The sample image above shows a many-to-many relationship in its original form connecting the
table_b, also the relationship contains two attributes called
attrib2 which are part of the intermediate table named
table_c. In order to proceed with the conversion, the user must right-click the relationship and select the
Convert action. Once done that the result will be similar to the next image.
As you can see two new relationships were created: one that connects the
table_c and another that connects
table_c. This approach keeps untouched the semantics of the many-to-many relationship but on the other hand, it gives the user the chance to handle the
table_c in all possible ways. Also, note that the relationship attributes
attrib2 are now explicitly part of the
table_c, in the same way, you are free to manipulate these objects.
Finally, note that in the above image, both relationships were created in the form of identifier relationships this is because in the many-to-many the primary key of the intermediate table is composed of the foreign key columns which, in the new arrangement, can be achieved by the use of identifier relationships. Again, you have the freedom to change even the new relationship configurations as you wish.