|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Добрий день! К сожалению ничего не нашел, может куда направите. :) Есть плоска таблица с полями Name1, Name2, Name3, Name4, Name5, Name6, ... Каждое поле Name это отдельный уровень. Нужно это преобразовать в иерархическую таблицу Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Сейчас я делаю для каждого уровня отдельный Insert. Сложность еще состоит в том, что некоторые уровни (Name{N}) могут быть пустыми, следовательно, этот уровень нужно пропустить при добавлении в HIERARCHICAL. В этом случае количество Insert-ов для следующих уровней увеличивается в 2 раза. Кроме того. Сейчас я удаляю все в HIERARCHICAL, а потом создаю наново, но это плохо. Мне нужны ID для дальнейшего использования, а они каждый раз при Insert будут (могут быть) разные. Конечно это тоже можно сделать Insert только новых и Delete отсутствующих, но это еще усложняет обновление HIERARCHICAL. Может будут какие-то идеи упрощения всего этого процесса? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 16:57 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiWМожет будут какие-то идеи упрощения всего этого процесса? Использовать PL/SQL для преобразования данных. Старую таблицу удалить чтобы этот процесс был одноразовым. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 17:02 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо! Буду думать как это решить на PL/SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 17:11 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Есть плоска таблица с полями Name1, Name2, Name3, Name4, Name5, Name6, ... ... Может будут какие-то идеи упрощения всего этого процесса? Это если я правильно понял суть задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 17:16 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Может будут какие-то идеи упрощения всего этого процесса? SergiiW Мне нужны ID для дальнейшего использования, а они каждый раз при Insert будут (могут быть) разные. Конечно это тоже можно сделать Insert только новых и Delete отсутствующих, но это еще усложняет обновление HIERARCHICAL. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 17:53 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Что-то типа такого нужно? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 20:40 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Сложность еще состоит в том, что некоторые уровни (Name{N}) могут быть пустыми, следовательно, этот уровень нужно пропустить при добавлении в HIERARCHICAL. Не уверен что понял. Понял так: Name{N} пустой значит Name{N + 1} пустой и Name{N + 2} пустой и.т.д. ибо число полей плоской таблицы есть MAX(N). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 21:09 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Перемудрил. Все что нужно это пронумеровать строки плоской таблицы + LATERAL/CROSS APPLY: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 21:37 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY Перемудрил. Код: plsql 1.
Для сохранения id-шников нужен merge по пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 23:09 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Elic Для сохранения id-шников нужен merge по пути. Не понял. Ты имеешь ввиду строки плоской таблицы связаны и Вася во всех строках плоской таблицы это один и тот-же Вася? SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 01:24 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
А, ты имеешь ввиду "Мне нужны ID для дальнейшего использования, а они каждый раз при Insert будут (могут быть) разные". Это решается добавлением уникального поля к плоской таблице вместо ROWNUM: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
Поскольку таблица не может иметь больше 1000 полей иерархия из плоской таблицы не может иметь более 1000 уровней. Так-что HIERARCHY_ID * 1000 до HIERARCHY_ID * 1000 + 999 покрывает все возможные уровни и гарантирует каждый раз при insert ID/PID не будут меняться. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 01:56 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Ну а для оптимизации я бы добавил поле версия в обе таблицы: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128.
Добавим новую иерархию и изменим существующую: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 03:02 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW, А зачем вообще все это нужно? Вы же понимаете, что хоть плоская таблица и менее "гибкая", но более эффективная для получения родительских и дочерних узлов? Ну, и может проще вьюху тогда уж сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 03:38 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Спасибо всем за ответы! Не ожидал такого участия. :) Буду читать и анализировать. SY Не уверен что понял. Понял так: Name{N} пустой значит Name{N + 1} пустой и Name{N + 2} пустой и.т.д. Например если Name3 пусто, то Name4 будет связано с родителем Name2. Но нужно признать, что, на сегодня, только одно поле Name3 может быть пустое. Все остальные поля должны быть заполнены. Есть другие нюанси, которые я упустил. :( Количество записей 1-2 млн. Обновлять нужно каждый день. Sayan MalakshinovНу, и может проще вьюху тогда уж сделать? Нужно работать с деревом, а вьюха не будет достаточно быстрой для отображения в интерфейсе. По крайней мере, у меня ничего не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 08:04 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW, Иерархическая таблица обычно в разы, а иногда и на порядки хуже для работы с деревьями, например при указанной высоте 6 для получения предков получится минимум 12 логических чтений (6 раз индекс + 6 к таблице), а с плоской всего 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 08:28 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
При большом объёме обычно как раз оптимизируют путем создания плоских мвьюх по иерархическим таблицам ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 08:30 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Sayan Malakshinov, Мне нужно идти от родителя. Для иерархический это просто. Код: plsql 1.
это, обычно, 5-20 записей. Для плоской нужно указывать всех родителей. Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 11:50 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiWДля плоской нужно указывать всех родителей. У вас реально задача на поиск всех поддеревьев с заданным именем? Даже с указанием всех родителей и индексом на каждое поле это всё равно получается быстрее и проще, чем в иерархии. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 14:11 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Sayan Malakshinov, Мне нужно идти от родителя. Для иерархический это просто. Код: plsql 1.
это, обычно, 5-20 записей. Для плоской нужно указывать всех родителей. Код: plsql 1.
ID, LVL, NAME, LVL0, LVL1, LVL2, LVL3, LVL4, LVL5, LVL6, LVL7, LVL8, LVL9 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 14:41 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Даже с указанием всех родителей и индексом на каждое поле это всё равно получается быстрее и проще, чем в иерархии. Я даже возразить ничего не могу, так как для меня очевидно, что иерархическая таблица во много раз проще и быстрее. Для нее нужно указать только PID, а для плоской всех родителей в текстовом виде. Реально у меня быстродействие на несколько порядков больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 16:07 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Sayan Malakshinov у вас какая-то странная и непонятная плоская таблица ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 16:08 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiWЯ даже возразить ничего не могу, так как для меня очевидно, что иерархическая таблица во много раз проще и быстрее. А для некоторых очевидно, что солнце вращается вокруг плоской земли... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 16:09 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Я бы сделал примерно так: unpivot + rownumber(), потом отсортировать по какому-нибудь старому полю + NameN, rownumber() становится id, rownumber() предыдущей строки использовать как parent_id. Вроде относительно просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 16:16 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Elic RTFM MERGE ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 16:24 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Что-то типа такого нужно? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 16:35 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Еще раз спасибо, именно то что нужно было бы, если бы не не постоянные ID. Но идея великолепная! Код в моем примере дает постоянные ID и не требует unpivot, аналитику, итд. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 18:17 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY Код в моем примере дает постоянные ID и не требует unpivot, аналитику, итд. Но у меня есть сомнения в по поводу постоянности ID. Плоская таблица каждый день создается наново. Я там ничего хранить не могу, я только ее читаю как есть. Насколько я понимаю, обеспечить постоянство ID можно только сравнивая плоскую таблицу с иерархической. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 19:10 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Sayan Malakshinov При большом объёме обычно как раз оптимизируют путем создания плоских мвьюх по иерархическим таблицам И меня не получалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 21:02 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Но у меня есть сомнения в по поводу постоянности ID. Плоская таблица каждый день создается наново. Я там ничего хранить не могу, я только ее читаю как есть. Т.е. плоская таблица каждый день создается наново a иерархическая нет? Если да, то я бы вместо HIERARCHY_ID, VERSION как в моем примере добавил бы HIERARCHY_HASH в обе таблицы и заполнял это поле через DBMS_CRYPTO.HASH хешируя NAME1 || '|' || NAME || '|' || NAME3... ( если | может встречаться в NAME то замени | на символ который встречаться не может). Таким образом ты получишь постоянные ID для той-же самой иерархии. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 00:34 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Elic Sayan Malakshinov При большом объёме обычно как раз оптимизируют путем создания плоских мвьюх по иерархическим таблицам И меня не получалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 02:04 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Sayan Malakshinov к сожалению, нет, тк on commit требует выполнения условий для fast refreshable, а connect-by в этом списке ограничений Почему-же? Простое в лоб MV дает и fast refresh и on commit. Все что нам нужно знать это max возможную глубину иерархии. Например 4 для таблицы EMP: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151.
Конечно self-join таблицы max возможная глубина иерархия раз не шашечки, но едет. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 03:11 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY Все что нам нужно знать это max возможную глубину иерархии. Более того, connect by размножает строки, например для получения прямых связей: Код: plsql 1. 2. 3. 4. 5. 6. 7.
SY Конечно self-join таблицы max возможная глубина иерархия раз не шашечки, но едет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 07:46 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY Почему-же? Простое в лоб MV дает и fast refresh и on commit. Все что нам нужно знать это max возможную глубину иерархии. Например 4 для таблицы EMP: Обычно делается что-то типа такого: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Что это дает:
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
мы получим: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
А при попытке вставить элемент более глубокого уровня получим ошибку: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Полный скрипт для тестов тут: https://gist.github.com/xtender/7d2449f3132624bf4b2819a4a4c01c87 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 09:33 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY Т.е. плоская таблица каждый день создается наново a иерархическая нет? SY DBMS_CRYPTO.HASH хешируя NAME1 || '|' || NAME || '|' || NAME3... Думаю, это ничего не даст. Мне нужно не ID всей строки, а ID Name1, ID - Name2 (с учетом родителя), ... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 12:35 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW Мне нужно не ID всей строки, а ID Name1, ID - Name2 (с учетом родителя), ... Вы б привели пример Вашей плоской таблицы, напр для emp.ename, плоская таблица выглядит ... зы если "ID" символьное, не поможет .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 12:55 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Stax Вы б привели пример Вашей плоской таблицы, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 13:10 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
Еще раз спасибо всем за помощь! Свою задачу с вашей помощью я решил. Кратко: 1. Сделал View V_FH на основе запроса Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
2. Удаление через временную таблицу Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
3. Обновление для каждого уровня отдельно 3.1 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
3.2 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
3.3 ... Написал пост и понял, что PID в View не нужен. Можно без этого поля обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 13:37 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW, Создаем таблицы: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Заполняем плоскую: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
В иерархию добавляем только новое: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Имеем: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Удаляем все из плоской и заполняем тем-же плюс новая иерархия: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Выполняем NERGE: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
Имеем: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 15:26 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY, Спасибо! Интересное решение, но есть несколько но. 1. Оно более сложно для восприятия, понимания, по крайней мере для меня, и, соответственно, мне или другим будет сложнее его поддерживать. Даже несмотря на то, что оно может быть более универсальное и содержать меньше кода. Возможно, это субъективное мнение потому, что не я создавал этот код. 2. Отсутствует удаление записей, которых нет в плоской таблице. 3. ID не уникальное. То есть, выборки по ID или по PID будут проблематичны. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 17:44 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SergiiW SY, Спасибо! Интересное решение, но есть несколько но. 1. Оно более сложно для восприятия, понимания, по крайней мере для меня, и, соответственно, мне или другим будет сложнее его поддерживать. Даже несмотря на то, что оно может быть более универсальное и содержать меньше кода. Возможно, это субъективное мнение потому, что не я создавал этот код. 2. Отсутствует удаление записей, которых нет в плоской таблице. 3. ID не уникальное. То есть, выборки по ID или по PID будут проблематичны. 1. Все что используется в решении это хеш имен для проверки есть ли в HIERARCHICAL такая иерархия и самый обыкновенный MERGE так-что даже если у тебя с этим сложности то другим не будет сложнее его поддерживать разве-что они тоже entry level. 2. Ну так добавь это в MERGE или просто выполни Код: plsql 1. 2. 3. 4. 5. 6.
3. Все ID/PID уникальные в пределах иерархии. Сколько бы раз мы бы ни создавали иерархию из той-же плоской 'MISHA', 'MASHA', 'PASHA', NULL, 'GOSHA','KESHA' всегда MISHA получит ID = 1 а GOSHA получит ID = 5. Кроме того ID/PID это artificial key и привязка к нему превращает их в natural keys. Зачем привязываться к ID/PID если у нас есть имена? Приведи пример (словами) что ищется в таблице HIERARCHICAL. Например, найти непосредственных родителей Васи во всех иерархиях. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 19:50 |
|
Плоскую таблицу преобразовать в Иерархическую
|
|||
---|---|---|---|
#18+
SY, ORA-00904: "DBMS_CRYPTO"."HASH": invalid identifier ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 21:52 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1879660]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
112ms |
get topic data: |
2ms |
get forum data: |
0ms |
get page messages: |
780ms |
get tp. blocked users: |
0ms |
others: | 276ms |
total: | 1194ms |
0 / 0 |