В теории еще можно попробовать графы и связанные списки. Вроде бы избыточно в рамках todo. Хотя, если ковырять в сторону связей между подзадачами разных задач, то может будет и уместно. Например, у задачи "поужинать" есть подзадача "сходить в магаз за гречкой", а у другой задачи (независимой) есть подзадача "сходить в магаз за туалетной бумагой". Если приложение подскажет совместить эти две подзадачи, будет неплохо. Я бы через связанные таблицы решал, но только потому, что с графами и связанными списками не работал.