Why are there two database tables to handle taxonomy terms structure
taxonomy_term_data is the base table for the taxonomy entity type. It holds ID, property and bundle data for that entity type.

taxonomy_term_hierarchy holds the parent/child relationship between taxonomy terms (which of course can be multiple in nature).

You can't store the data for anything more than a one-to-one relationship in the same table, hence the split into two.