Whenever you want to maintain the history of a many-to-many association (or relationship type), such as hasPermission
, you have to turn it into a class, such as PermissionByUser
, with attributes for the time interval that defines the valid-time of a specific link (or relationship), such as MichelReap-hasPermission-DeleteUser. So, you get a model like the following:
Replacing a many-to-many association with a class and two many-to-one associations is a well-known pattern (see, for instance, chapter 5 of my tutorial) . Notice that the "dots" at the User
side and at the Permission
side denote corresponding reference properties (user
and permission
) to be added to the PermissionByUser
class.