Там на самом деле сильно больше жопных мест, чем вы думаете. Так навскидку:
- у одного дома могут быть РАЗНЫЕ индексы (например, если в нем есть гос.организация - у нее может быть выделенный индекс)
- уникально идентифицировать связку город-улица-дом нельзя вообще - потому что бывают случаи когда в 1 городе 2 улицы с одинаковым названием (а то и больше). Соответственно - разные индексы.
Если отвечать прям про БД - то тут вопрос с другой стороны - а как вы списки полей то заполняете? Как у вас хранится список домов для улицы города.
Если отвечать про реализацию, то:
- добавляем необязательное поле - "район".
- если район не указан - в индекс подставляем индекс города (письмо дойдет все равно - так можно делать, не уточняя конкретный индекс)
- если район указан - достаем индекс района
- даем возможность ввести свой индекс (для узких кейсов)
В любом случае - почта если что разберется.