Я разрабатываю приложение, которое будет использовать Oracle , и у нас есть эта иерархия отделов , которую нам необходимо отобразить в нашей базе данных. Что-то похожее на это (я уверен, что вы все знаете, о чем я говорю, но на всякий случай я включу часть ERD):
Таким образом, в нем будут храниться данные, которые выглядят так:
[1 | 0]
[2 | 1]
[3 | 2]
[4 | 2]
Другими словами:
Department 1
|__Department 2
|___Department 3
|___Department 4
И так далее ...
Это увеличит количество записей, требуемых в таблице, и к данным можно получить доступ с помощью команды CONNECT BY , имеющей только 1 запись на отдел. Обычно мы рассматриваем эту древовидную структуру как решение, но в этом новом приложении производительность является критической, поэтому мне было интересно, что, если у меня будет уплощенная таблица, которая будет выглядеть следующим образом.
[1 | 0]
[2 | 1]
[3 | 1]
[3 | 2]
[4 | 1]
[4 | 2]
Это позволяет вам иметь очень очевидные отношения без необходимости знать родительский Департамент для данного ребенка, чтобы знать, каковы его департаменты верхней иерархии. Но это увеличивает объем необходимых данных, так как вам нужна запись для каждого уровня, на котором находится Департамент, а это означает, что если у нас есть уровень Департамента на 15 ниже верхнего уровня, нам потребуется 15 записей для него.
Департамент довольно большой, так что это может оказаться огромной таблицей (около 2 миллионов записей).
Хорошо, так что после краткого вступления, это вопрос; Кто-то на самом деле пробовал это, чтобы сказать мне, что быстрее / дешевле для БД между этими двумя вариантами: огромный плоский стол или маленький дерево?