Best practice for parent child relation
This is a bit late, but the previous answers don't provide the third alternative which is both flexible and normalized. 

All tasks should be kept in a Task table, because subtasks after all are just tasks. 

The relationship between tasks should be stored in a second table that has columns to identify the parent/sub task relationship based on a foreign-key relationship with the Tasks table, and which together would form a composite primary key. 

Tasks


id
title
description
start_date
end_date


TaskRelationships


parent_task_id
sub_task_id


In order to find the parent tasks of a given task you can query the sub_task_id column. To find the sub-tasks of a given task search the parent_task_id column. 

This structure has the added benefit of having the flexibility to add as many parent tasks to a task as your wish.