How to model hierarchical data in SQL - adjacency list vs nested set vs materialized path?