I am designing a database that handles users, accounts and projects with the following relationships and constraints:
- An account has many users
- A user belongs to many accounts
- An account has many projects
- A project belongs to only one account
- A user collaborates in many projects (redundant note: each one of them belonging to its own account).
In other words, a user can collaborate in many projects of the same account. But since a user can belong to several accounts, thus a user can collaborate in many projects of several accounts. This leads me to a ternary collaborates relationship:
After reading a couple of papers about converting ternary relationships into binary relationships I came up with the following equivalent relationships:
Two question arises here:
Is this conversion correct? I have found that I have to add additional checks at application level to handle insertions. For instance, before adding a new
(User,Project)
I have to check that the user belongs to the same account that the project belongs to.Is it really necessary to establish the relationship between
Account
andUser
? Once the relationship betweenUser
andProject
has been added, couldn't we know the account a user belongs to by accessing the project?
Thanks!!