Мне нужно создать структуру таблицы «диспетчер задач», где задача может зависеть от других задач. Например, я могу иметь следующие задачи:Структура таблицы MySQL для приложения диспетчера задач с зависимостями задач
TASK A: independent
TASK B: independent
TASK C: can not start before TASK B is finished
TASK D: independenet
TESK E: can not start before TASK C and TASK E are finished
Каждая задача имеет стандартные свойства (started_by, assigned_to, due_date, описание, статус). Я хочу, чтобы иметь структуру таблицы, которая позволила бы мне сделать этот запрос легко:
- Выберите открытые задачи всех пользовательских, но выбрать только те, кто уже может быть запущен (то есть в приведенном выше сценарии ЗАДАЧА С и Е не может быть выбранных здесь, пока задачи зависимостей не будут завершены).
В настоящее время мое решение иметь 2 таблицы:
- задачи: таблицы, которые содержат задачи записи
- task_dependencies: таблица, которая содержит задачу к задаче зависимостей (ID, TASK_ID, dependent_task_id)
Мой текущий запрос для вышеуказанного сценария и моей текущей структуры таблицы выглядит следующим образом:
SELECT description, from_unixtime(date_due)
FROM tasks
WHERE
assigned_user_id = 751
AND status_id = 'Q'
AND id NOT
IN (
SELECT TD.task_id
FROM task_dependencies TD
INNER JOIN tasks T ON TD.dependent_task_id = T.id
AND T.status_id = 'Q')
ORDER BY date_due
-- status 'Q' = new uncompleted task
Это дает мне правильный результат, но это правильный путь, или я должен улучшить структуру таблицы и/или запрос?
Здесь также SQL fiddle для вышеуказанного сценария.
У меня есть решение, реализованное на основе моего вопроса выше с небольшими изменениями. Я посмотрю, что вы предложили. Спасибо, что вызвали это. –