В
Task
должны быть ссылки не на
User
, а на
Project_User (id)
. Ведь задания создавать и выполнять могут только те, кто работает с проектом.
создается чат, принадлежащий этому проекту
А почему у вас наоборот? К одному чату привязаны несколько проектов.
Если чат ограничивается участниками проекта, то можно удалить
Chat
, а в
Message
должна ссылаться на
Project
и
Project_User (id)
.
И в
Project_User
должна быть ссылка на отдельную таблицу
Role (ID, Name)
. Не надо нарушать третью нормальную форму.
Предлагаю универсальную структуру
Chat
:
ID
Name
. "Игра", например.
Project
Проект, "Игра, шарики", например. Если NULL - общий.
Role
Роль - групповой по роли, "Игра, шарики, тестер", например. Если NULL - общий для проекта. Если и проект NULL - общий по роли. "Игра, тестер", например.