Структура сущности и таблица самостоятельных привязков
-
25-10-2019 - |
Вопрос
Мне нужно иметь базу данных, которая начинается с таблицы, называемой «Пользователь», которая должна самостоятельно ссылаться и будет иметь очень глубокий график связанных объектов. Это должно быть похоже на левую сторону изображения ниже (игнорируйте правую сторону).
Мне также нужно будет пройти через этот график как вверх, так и вниз, чтобы рассчитать проценты, итоги и т. Д. Другими словами, мне нужно в некоторых случаях травзировать весь график.
Возможно ли это и/или как это делается? Можно ли быть сделанным правильно в операторе LINQ? Примеры?
РЕДАКТИРОВАТЬ:Я в основном пытаюсь создать сценарий сетевого маркетинга и должен рассчитать заработок каждого человека.
Примеры:
- Чтобы иметь возможность калалировать общие продажи для каждого пользователя при конкретном пользователе (поэтому у каждого пользователя будет какой -то доход).
- Рассчитайте комиссию на определенном уровне дерева (например, если у топового человека было по 3 человека ниже, каждый из которых продал продукт за 1 доллар, а комиссия составила 50%, то было бы 1,50 доллара.)
- Если я запросил изображение выше (слева) для "B", я должен получить "B, H, I, J, N, O"
Надеюсь, это поможет: s
Решение
Вы не можете пересечь все дерево, используя только LINQ таким образом, чтобы это было бы переводится в отдельный запрос SQL (или их постоянное количество). Вы можете сделать это либо с одним запросом для каждого уровня, либо с одним запросом, который ограничен определенным количеством уровней (но такой запрос станет действительно большим со многими уровнями).
В T-SQL (я полагаю, вы используете MS SQL Server), вы можете сделать это, используя рекурсивные общие выражения таблицы. Анкет Должно быть возможно поместить это в хранимую процедуру, которую вы можете использовать из LINQ, чтобы получить информацию, которую вы действительно хотите.
Подводя итог, ваши варианты:
- Не используйте LINQ, просто SQL с рекурсивным CTE
- Используйте рекурсивный CTE в хранимой процедуре от LINQ
- Используйте LINQ, создав один запрос для каждого уровня
- Используйте Ugly Linq Query Limited только несколькими уровнями
Другие советы
Я знаю, что это поздно, но если вы посмотрите на направленные алгоритмы графика, вы можете обойти рекурсивные проблемы. Проверьте эти 2 статьи:
http://www.sitepoint.com/hierarchical-data-database/
http://www.codeproject.com/articles/22824/a-model-to-represent-directed-aticclic-graphs-dag-o