Я разрабатываю базу данных, которая обрабатывает пользователей, учетные записи и проекты со следующими отношениями и ограничениями:
- Аккаунт имеет много пользователей
- Пользователь принадлежит многим учетным записям
- У аккаунта много проектов
- Проект принадлежит только одному аккаунту
- Пользователь участвует во многих проектах (лишнее примечание: каждый из них принадлежит своей учетной записи).
Другими словами, пользователь может сотрудничать во многих проектах одной и той же учетной записи. Но поскольку пользователь может принадлежать нескольким учетным записям, то пользователь может сотрудничать во многих проектах нескольких учетных записей. Это приводит меня к троичной связи collaborates:
Прочитав пару статей о преобразовании троичных отношений в бинарные, я пришел к следующим эквивалентным отношениям:
Тут возникает два вопроса:
Правильно ли это преобразование? Я обнаружил, что мне нужно добавить дополнительные проверки на уровне приложения для обработки вставок. Например, перед добавлением нового
(User,Project)
я должен убедиться, что пользователь принадлежит к той же учетной записи, которой принадлежит проект.Действительно ли необходимо устанавливать связь между
Account
иUser
? Как только отношения междуUser
иProject
будут добавлены, не можем ли мы узнать, к какой учетной записи принадлежит пользователь, получив доступ к проекту?
Спасибо!!