Как правильно сделать иерархию данных по домам, помещениям, абонентам?
Необходимо каким-то образом хранить данные по домам, группам помещений (жил./нежил.), помещениям (жил./нежил.), комнатам. К любому из этих (кроме групп помещений) узлов может быть привязан абонент и приборы учета (счетчики).
Абоненты лежат в отдельной БД (перс. данные и прочее), дома в другой, а приборы в 3-ей.
Как это можно сделать, чтобы еще и через EF Core было адекватно управлять этим? Планируем модульный монолит + ddd по возможности.
Пока 1 из вариантов - некая таблица locations, которая будет лежать копией в каждой бд, где она нужна, там хранить такие колонки:
id|house_id|non_res_group_id|res_group_id|non_res_id|res_id|room_id
либо id|parent_type|parent_id
В каждой сущности, которая может быть привязана к узлу назначать только location_id из этой таблицы, т.е. абонент привязан к локации с id = 5, которая привязана к дому с id = 1
Но так же еще должна быть возможность накинуть на каждый узел свои доп. данные в виде услуг, свойств и прочего, но, я так полагаю, там будет точно так же как и с абонентом, например, просто ссылка на конкретный location, но проблема в том, что свойства и прочие вещи с корня дерева имеют наименьший приоритет, если у дома стоит свойство тест
, а потом установили на 1 абонента в доме тест
с другим значением, то значение с абонента должно иметь приоритет над домовым.
Есть ли варианты лучше?
Очень схематично выглядит так (но тут забыли добавить комнату в жил. помещение, которое в группе), на блоках внизу показано какая доп. информация может быть на каждом узле: