один и тот же идентификатор для каждого человека с одинаковым адресом
Самое простое решение - вообще не создавать идентификатор, а просто использовать адрес в качестве своего идентификатора.Очевидно, это уже уникально.
Если вы хотите сгенерировать число для каждого адреса, самый простой стандартный способ сделать это в SQL - это соединить таблицу с самим собой (на самом деле только адреса) ипосчитай сколько придет "до".Приблизительно:
select name, A.addr, count(*) as ID
from T as A
join (select distinct addr from T) as B
on B.addr <= A.addr
group by name, A.addr
При этом будет получен идентификатор один для наименьшего адреса, 2 для следующего и так далее.
Почти каждая СУБД также имеет некоторую функцию автоинкремента для генерации номеров строк.