users // пользователи
u_id;
u_name;
u_еще_что_либо;
documents // документы
d_id;
d_name; // название документа, как оно будет отображаться в таск-листе
d_path; // путь и реальное наименование документа.
tasks // задания
t_id;
u_id; // текущий исполнитель задания
t_title; // заголовок задания
t_deskriptopnd; // описание задания
t_status; // статус задания
task_notices // комментарии к задаче, в процессе выполнения они 100% будут
tn_id
t_id; // id задачи
u_id; // id юзера, который данный комент написал.
tn_text;
tasks_documents // прикрепленные к заданию файлы (любые)
t_id;
d_id;
tasks_history // история выполнения задачи (денормализованая таблица)
h_id;
h_date; // дада/время
t_id; // id задачи
u_id; // кому в данный момент принадлежала
t_status; // в каком статусе в этот момент находилась.
Таким образом, к задаче можно цеплять любое количество файлов.
Файлы можно хранить где угодно, но, лучше всего, конечно, в одном центральном месте, меньше гемороя будет.
Файлы должны быть только для чтения. Можно прикрепить новый файл к задаче (или новую версию файла), но нельзя удалять / изменять уже прикрепленный к задаче файл.
Комментарии к задаче только для чтения.
Один и тот же файл можно цеплять к любому количеству задач.
У задачи можно менять статусы (что является стандартом. Открыта / В обработке / Вопрос к другому сотруднику / Ответ / Закрыто / Отменено и т.п.)
Задачу перенаправлять другому сотруднику (тоже обычное явление, если идет групповая разработка)
И, конечно же,
протокол иначе никогда не найдется виновный, почему опять просрали дедлайн
_____________
[продано копирайтерам]