Концептуально, ваша проблема решается путем рассмотрения списка задач как упорядоченной совокупности элементов списка задач, которые являются задачами или (другими) списками задач, как описано следующей диаграммой классов:
Схема БД, реализующая эту концептуальную модель, обеспечивается следующими схемами таблиц (где PK / FK = первичные / внешние ключи и? = Необязательно):
tasklists( PK id, name)
tasks( PK id, name)
tasklistitems(
FK tasklist REF tasklists,
seq_no,
FK taskitem? REF tasks,
FK tasklistitem? REF tasklists
)
так что каждая строка tasklistitems
связана со списком задач через свой первый атрибут (внешний ключ) и ссылается на задачу или список задач через соответствующие необязательные атрибуты внешнего ключа taskitem
и tasklistitem
.
Обратите внимание, что атрибут порядкового номера элементов списка задач реализует их порядок.