A few weeks ago, a project I was working on needed a list of French towns, sorted by department and by region. So I went looking into the official data, and I found a list of towns with names, postal codes, gps coordinates, departments, but no regions. And a list of departments. And another list of regions, with their corresponding departments. A few hours later, I compiled all this (non developer friendly) lists into three big SQL insert queries, corresponding to the following schema :
town (id, name, postalCode, department_id #)
department (id, name, postalCode, region_id #)
region (id, name, code)