Из комментариев на ОП:
Я не хотел иметь много классов адресов для каждого родительского типа. Нет, я не хочу, чтобы запрос / переход от адреса к родителю.
Есть ли в вашей доменной логике или рабочих процессах что-то, из-за чего несколько родителей делят один и тот же адрес реальным сценарием? Например, будет ли тот факт, что адреса общего доступа когда-либо будут отображаться в пользовательском интерфейсе важным способом, если они одновременно не будут входить в систему и обмениваться информацией лицом к лицу?
Если нет, я не уверен, что это действительно имеет значение, если два идентичных адреса имеют один и тот же идентификатор или нет, и я не уверен, что потенциальное дублирование данных имеет значение.
В этом случае я рекомендую KISS.
Создайте три отдельные таблицы сопоставления, не занимайтесь наследованием и назовите это готовым:)
SupplierToAddressMap:
SupplierId AddressId
CustomerToAddressMap:
CustomerId AddressId
EmployeeToAddressMap:
EmployeeId AddressId