I am working on a project where I need to have data inherit at variable depths, and then be able to return any descendants of a particular piece of data. I am working with geographical regions, so I was thinking about having a “Region” table, and have everything from “North America” to individual neighborhoods such as “Bronx”. So, if someone types in “North America”, they should also receive results for “Bronx” because “Bronx” is a descendant of “North America” by means of the relationship
North America->United States->New York(State)->New York(City)->Bronx
In my DB I was planning on having the Region table link back to itself with a table that specifies a parent/child relationship between Regions. Here is an example of what I would propose:

Any help would be greatly appreciated!
Do you dont need a new table. A foreign key in major table is enough.
This is my approach:
First problem, design data schema: I keep hierarchis with a foreign key to parent row. It is simply. You have an example with hiererchy regions here:
Second problem, retrieve ascendants/descendants: As you explain, problems comes with select: select some region and all descendants os ascendants. To solve this you should to create a new tree table. This table contains pairs: al combination to a person with all they ancestors (and itself):
Noticie that with this structure is easy to query hierarchies. Sample: all descendants of some region:
You can play with distance to get only sub-regions, sub-sub-regions, …
Last problem, keep tree: tree must be all time up to data. You should automatize this: a trigger over
regionor a store procedure for CRUD operations,