Вы сохраняете выбранные населенные пункты для пользователей и все. Если надо узнать, допустим, в каком регионе наибольшее количество выбранных регионов для определенного пользователя, используйте region_id из settlements
Регин тоже выбрать можно, по логике, это тип всё нас пункты. Отдельно таблица регионов спарсилась так. По сути, её можно было бы хранить в нас пунктах. И на фронт отдавать с фильтрацией, что у региона нет родителя
В идеале, конечно, на каждый тип нас пункта отдельную таблицу создать и ссылаться на родительскую, но тогда бы было таблиц 50. Та и, я не нашёл парсера, который бы создавал такую таблицу с реестра
Тогда, скорее всего, вам нужно просто, добавлять записи в таблицу users_settlements для каждого населенного пункта, если пользователь выбрал целый регион. Это решение в лоб. Возможно, есть другие варианты
Значит отдельно выбранные регионы и выбранные нас пункты. Ну понятно, что если выбран регион, тогда сразу все нас пункты этого региона считаются выбранными