К сожалению, код защищен моей работой, поэтому я не могу поделиться им.
Мой коллега создал фрагмент кода, предназначенный для выбора данных из реляционной базы данных, содержащей древовидные структуры в реляционном формате.
Примером древовидной структуры является что-то вроде:
{
"top_level_node": {
"meta_info_1": "meta_info_keyword1",
"meta_info_2": "meta_info_keyword2",
"meta_info_3": "meta_info_keyword3",
"meta_info_4": "unique string of data",
"main_container": {
"container_attribute": "container_attribute_keyword",
"sub_container_1": {
"container_attribute": "container_attribute_keyword",
"pattern_1": {
"pattern_property_1": "pattern_property_1_keyword",
"pattern_property_2": "pattern_property_2_keyword",
"pattern_property_3": "unique string of data"
},
"pattern_2": {
"pattern_property_1": "pattern_property_1_keyword",
"pattern_property_2": "pattern_property_2_keyword",
"pattern_property_3": "unique string of data"
}
},
"pattern_3": {
"pattern_property_1": "pattern_property_1_keyword",
"pattern_property_2": "pattern_property_2_keyword",
"pattern_property_3": "unique string of data"
}
}
}
}
Код, который создал мой коллега, включает в себя сначала выполнение рекурсивного запроса CTE из 50 строк, который производит все данные, необходимые в деревев линейном формате (1 фрагмент данных на строку).
Затем мой коллега взял эти линейные данные в строках и обработал их с помощью рекурсивной функции PHP для восстановления древовидной структуры из данных.
Я пытался сказать, что это неправильный подход, потому что:
Данные уже имеют формат (реляционные таблицы БД), который можно использовать для восстановления древовидной структуры с помощью рекурсивногоФункция PHP и простые запросы, чтобы выбрать каждый кусок данных, как вы идете.Я утверждаю, что это проще для чтения и требует только одного рекурсивного цикла.
Это не чувствительная ко времени операция, мы перестраиваем дерево данных для «процесса компиляции»что произойдет, может быть, один раз в месяц.Я утверждаю, что поскольку время здесь не важно, рекурсивный запрос CTE практически не дает преимуществ.
Запрос чрезвычайно длинный и сложный для чтения, если кто-то хочет понять, что такое код phpделает, они должны сначала понять запрос.Я утверждаю, что рекурсия должна быть в коде, а запросы должны быть простыми и легкими для понимания того, что они получают.
Я утверждаю, что теоретически здесь требуется только один фрагмент рекурсии- либо рекурсивный в SQL, либо рекурсивный в PHP.Я утверждаю, что рекурсию в PHP легче понять, а рекурсия в SQL не способна перестроить древовидную структуру без большого запроса.
Я прав?Почему, почему нет?Я ошибся?Почему, почему нет?Имеет ли смысл выполнять рекурсивный запрос для преобразования данных из реляционного формата в линейный формат, а затем выполнять другую рекурсивную функцию для преобразования линейных данных в дерево?