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