Имея таблицу (AccountId, ParentId NULL), мы хотим иметь возможность быстро найти: 1. Главный родительский ID (accountId, где ParentId равен null). 2. Все дети для данного идентификатора учетной записи.
С CTE это довольно просто. Однако мы не можем сохранить CTE в индексированном представлении, что снижает производительность. Мы обдумывали некоторые другие идеи, такие как сохранение пути (id1/id2/id3) в другом поле, но это кажется хакерским.
Мы думали о триггере, который бы сохранял «главный» идентификатор в каждой строке, но мы не уверены, как это будет работать в середине цепочки (1 владеет 2, владеет 3, но затем 2 передает в 7). Это также не решает запрос «найти всех детей».
Есть предположения? Мы используем SQL 2008 R2, но можем перейти на SQL 2012.