|
Представление иерархии
|
|||
---|---|---|---|
#18+
graycode Снова бредовая постановка и бредовые выводы ... ты эту тему зачем создал? Я создал эту тему, чтобы научиться делать "невозможное" - передать в представление параметр. С помощью участников научился такое делать для моего частного случая, также Вячеслав нашел у меня ошибку, которую я сам мог бы не найти - эта ошибка не проявляется в моих условиях, из-за особенности структур данных. Теперь я зная о ситуациях, когда внешние джойны сложных иерарчических структур нужно строить снизу вверх, чтобы избежать коллапса веток без листьев. (это где-то в середине темы). Построение дерева снизу вверх может быть естественным для спецов SQL, но совершенно неинтуитивно для процедурных языков, где обход происходит с вершины. Теперь вместо длинного и некрасивого обращения к представлению, которое повторяется во многих местах и также требует правки при добавлении нового типа в параметре поиска Код: plsql 1. 2. 3. 4. 5.
У меня получилось коротко и элегантно, все сложности бизнес-связок между разными таблицами документами спрятана в представлении. Я не показал команду сортировки, для простоты чтения. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
В понедельник популяризую это представление, теперь навигация по сложной иерархии документов стала тривиальной: "спроси вьюху". Надо хорошее имя для этой вьюхи придумать. KUCHA_MALA_V? DOCUMAP_V? NAVIDOC_V? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2020, 19:02 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL, авторчтобы научиться делать "невозможное" - передать в представление параметр В большинстве случаев это не требуется, кроме того Oracle умеет проваливать предикат внутрь представления, если возникла крайняя необходимость, то можно сделать так как рекомендовал andrey_anonymous, есть еще пара вариантов, о которых тебе лучше пока не знать)) В остальном твои сообщения бессвязный поток сознания, без структуры и примера данных вообще не имеющий смысла, очень похоже что архитектура трешовая, а то что ты поверх нее наваял еще трешовее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2020, 19:13 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
Было несколько комментариев, которые намекали что создание запроса, связывающего все основные таблицы бизнеса согласно их взаимоотношениям - это вредно. Я хочу эту мысль перевернуть. Мне кажется, что создание такого запроса - это наоборот, очень полезное упражнение (даже если запрос крайне неэффективен и не может использоваться в боевом коде) Такой запрос собственно содержит ДНК и карту всей бизнес-системы для понимания и анализа. В отсутствие его, изучение взаимоотношений между таблицами происходит на уровне секвенирования ДНК - наблюдаются отдельные связующие операции, которые со временем формируют в голове приблизительную картину что привязано куда и как. На одних внешних ключах такую картину не нарисовать, из-за обилия представлений, нужно смотреть код. Подкину идею на работе, написать такой убер-запрос. Костяк я уже сделал, осталось обернуть вокруг него оставшуюся сотню таблиц и вьюх. Такой "эталон" скорее всего будет медленным, но зато позволит легко плодить юнит-тесты для быстрого боевого кода. Если результаты не совпали - у кого-то ошибка требующая исправления. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2020, 19:30 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL Такой запрос собственно содержит ДНК Да, для обучения сойдет. В дальнейшей работе, если такой запрос встретится, будет естественная реакция "у тебя ошибка в ДНК". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2020, 19:49 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
dmdmdm НеофитSQL Такой запрос собственно содержит ДНК Да, для обучения сойдет. В дальнейшей работе, если такой запрос встретится, будет естественная реакция "у тебя ошибка в ДНК". Лол, я теперь знаю как это представление назвать. BUSINESS_DNA ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2020, 20:32 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL создание такого запроса - это наоборот, очень полезное упражнение Цель какая у этого упражнения? Получить бессвязную кашу с дублями всего на всё, ради устранения которых потом приходится наворачивать довольно дорогое устранение дублей? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 09:43 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL Тут бы пригодились параметризованные представления, но Оракл таких пока не придумал, поэтому придется без них. Таки придумал - SQL_MACRO ( https://docs.oracle.com/en/database/oracle/oracle-database/20/lnpls/plsql-language-elements.html#GUID-292C3A17-2A4B-4EFB-AD38-68DF6380E5F7) Эмуляции параметризованного представления через глобальную переменную или таблицо-функцию не устраивают. Чем pipelined-функция не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 13:31 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
PuM256, У него 11-я версия, но и для нее были решения, однако давать ему в руки их не стоит, по крайней мере сейчас)) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 13:37 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
booby если собрать собрать все, что вы понаписали в топике, то получится, что вы работу нескольких различных задач хотите обеспечить единственным универсальным интерфейсом. Да, похоже на то. Когда я впервые столкнулся с СУБД, у меня тоже было подобное желание, затащить привычные (в прикладном программировании) подходы в SQL — универсальные параметрические запросы и представления, абстрактные функции, в которые передаются имена таблиц и столбцов. В большинстве случаев в SQL это не нужно и даже явно противопоказано. В SQL длинная портянка запроса с повторяющимися фрагментами может быть эффективнее. Не нужно библиотечные подходы тащить непосредственно в SQL. Их можно применять в серверном коде, но и то с учетом множества особенностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 14:10 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
PuM256 Чем pipelined-функция не устраивает? Оптимизатор не умеет оптимизировать сквозь функцию, поэтому вью предпочтительнее. Сравните: Select col1 from table(func(3)) Против Select col1 from VIEW_V where col2 = 3 В первом случае табличная функция посчитает все колонки, и все кроме одной будут выкинуты. Во втором, ненужные колонки даже не считаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 18:39 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
env НеофитSQL создание такого запроса - это наоборот, очень полезное упражнение Цель какая у этого упражнения? Получить бессвязную кашу с дублями всего на всё, ради устранения которых потом приходится наворачивать довольно дорогое устранение дублей? "Бессвязная каша с дублями" называется табличное представление графа. Повторение ожидается для всех узлов кроме листьев. Это свойство такого преобразования. Табличное представление графа, в отличие от кучи значений собранных по union, обладает полезным свойством эквивалентности - по нему можно восстановить структуру графа. (Если граф напрягает, думайте про дерево) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 18:45 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL в отличие от кучи значений собранных по union ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 19:00 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL ... Табличное представление графа, в отличие от кучи значений собранных по union... мда... Не важно, сколько вам лет. В ребёнка вас превращает неостановимое желание использовать в речи слова, смысла которых вы не понимаете. А ведь я почти поверил, читая 22224458 , что "наверно вы все сделали правильно" , и стер длинный пост про cohesion. Кратко так: он у вас есть, только имени ему нет. У вас спрут какой-то, а не cohesion, источник ошибок (это если вам не нравится термин "задвоение", но, похоже, вы не понимаете, о чём речь) и гарант головной боли для следующего несчастного. А необходимый вам atomic cohesion, по вашему рассказу судя, ничто лучше, чем union all не обеспечит. Кроме того, он же, union all, почти автоматический, то есть - полуавтоматический, гарант low coupling между серверной и клиентской частью кода. Как-то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 20:16 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
booby, Ваше возмущение одинаково применимо к мировому атласу. "Тут все собрано в одном месте, трудно понимать" "надо по кусочкам". У меня новая цель - создать карту мира для чтения, понимания и тестирования. Предыдущая цель - лёгкая навигация между шестью типами документов. У меня это получилось одним представлением, кто-то писал бы шесть, почти одинаковых. Мне мой метод нравится больше, кому-то наоборот. Мой запрос может оказаться сложный и не быстрый, но функции мастер-карты он будет выполнять хорошо, я надеюсь. А для вас у меня вопрос: где вы держите схему взаимосвязей всех таблиц и представлений системы? - в визио чертеже архитектуры, безнадежно устаревшем? - в голове? - каждый раз смотрите в разные места в коде, чтобы вспомнить? Если у вас появился новый коллега, как вы но ожидаете в структуре связок разобраться? Я своему покажу эту самую карту мира на две страницы, с секциями и комментариями. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 21:11 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL где вы держите схему взаимосвязей всех таблиц и представлений системы? Для этого есть множество инструментов реверсивного вынимания схемы данных со всеми взаимосвязями и комментариями ко всем объектам и связям (если они прописаны в БД, в Оракле такое есть). Т.е. это всегда актуально, именно в любой момент. Кстати, если в твоей схеме 10 табличек для одного пользователя, то их можно и помнить :) Реальные схемы содержат тысячи (а то и десятки тысяч) объектов схемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 21:27 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL А для вас у меня вопрос: где вы держите схему взаимосвязей всех таблиц и представлений системы? - в визио чертеже архитектуры, безнадежно устаревшем? - в голове? - каждый раз смотрите в разные места в коде, чтобы вспомнить? Если у вас появился новый коллега, как вы но ожидаете в структуре связок разобраться? Я своему покажу эту самую карту мира на две страницы, с секциями и комментариями. Ты про data modeling tools что нибудь слышал? В нормальных конторах запрос на любые изменения (логические или физические) базы идут к data modeler (это может быть тот-же DBA) который вместе BA (business analyst) рассматривают запрос, отклоняют или утверждают (возможно с поправками) затем data modeler вносит изменения в model и генерирует DDL. И это не столько для базы сколько для бизнеса. Ведь это позволяет контролировать что тот-же самый business term всегда получает то-же имя поля во всех базах и если business term name or/and logic изменилась мы всегда знаем где менять. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 21:58 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL ... А для вас у меня вопрос: где вы держите схему взаимосвязей всех таблиц и представлений системы? - в визио чертеже архитектуры, безнадежно устаревшем? - в голове? - каждый раз смотрите в разные места в коде, чтобы вспомнить? к сожалению, персонально я - в коде. Это не самый лучший, но и не самый худший вариант. НеофитSQL Если у вас появился новый коллега, как вы но ожидаете в структуре связок разобраться? Я своему покажу эту самую карту мира на две страницы, с секциями и комментариями. Разрешите вы мне, или нет, но вот эту херню, я уже просто не буду комментировать... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 22:26 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
SY Ты про data modeling tools что нибудь слышал? В нормальных конторах запрос на любые изменения (логические или физические) базы идут к data modeler (это может быть тот-же DBA) который вместе BA (business analyst) рассматривают запрос, отклоняют или утверждают (возможно с поправками) затем data modeler вносит изменения в model и генерирует DDL. И это не столько для базы сколько для бизнеса. Ведь это позволяет контролировать что тот-же самый business term всегда получает то-же имя поля во всех базах и если business term name or/and logic изменилась мы всегда знаем где менять. SY. Догадывался о существовании таких тулз, но не видел и не пользовался. Совершенно естественно что "в нормальных конторах" составление и обновление модели делают люди (DBA & DA), которые в теме пока не отметились, или я не заметил. В нормальных конторах также наверное есть тестеры, тест менеджеры и тест планы. Я много работал в таких "нормальных конторах" где процесс накатан, и на каждую задачу уже есть и роль, и человек. Сейчас у меня ситуация иная, где процесса нет, модели нет, и все мои хотелки придется реализовывать самому, не обладая знаниями ДБА (с БА у меня в порядке). Кто-то видел, как выгладит модель простой схемы? Можете показать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 23:47 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
Правильный Вася НеофитSQL где вы держите схему взаимосвязей всех таблиц и представлений системы? Для этого есть множество инструментов реверсивного вынимания схемы данных со всеми взаимосвязями и комментариями ко всем объектам и связям (если они прописаны в БД, в Оракле такое есть). Т.е. это всегда актуально, именно в любой момент. Кстати, если в твоей схеме 10 табличек для одного пользователя, то их можно и помнить :) Реальные схемы содержат тысячи (а то и десятки тысяч) объектов схемы. Такое было бы просто замечательно. Можно имена одного-двух таких инструментов, совместимых с Ораклом? У меня в схеме около 400 таблиц и представлений. Я пока еще не знаю всех деталей их взаимодействия, и у меня нет гарантий что во фрагменте кода, где я смотрю их связку между собой, не содержится ошибка. Поэтому если нужно узнать достоверно, обычно смотрю код в трех разных местах. Пока все совпадало, что радует. Промежуточный итог: - над SY есть ДБА/прочие, контролирующие архитектуру схемы. Все изменения идут через них, и у них всегда можно получить правдивую модель схемы. - Правильный Вася знает про существование автоматических инструментов. Непонятно, пользовался ли. - у booby нет модели, но он может прочитать код и посмотреть как таблицы взаимодействуют, если возник вопрос. Как справляются другие члены его команды, непонятно. - неофит тоже читает код (т.к. в компании нет архитекторов и детальной документации), и одновременно составляет модель схемы в форме SQL запроса; такой подход вызывает общее негодование. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 00:03 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL PuM256 Чем pipelined-функция не устраивает? Оптимизатор не умеет оптимизировать сквозь функцию, поэтому вью предпочтительнее. Сравните: Select col1 from table(func(3)) Против Select col1 from VIEW_V where col2 = 3 В первом случае табличная функция посчитает все колонки, и все кроме одной будут выкинуты. Во втором, ненужные колонки даже не считаются. Оптимизатору SQL абсолютно без разницы, где находится SQL - сам по себе, в анонимном блоке или в функции. Сравнение некорректное, так как не показаны внутренности func. А можно, например, так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 09:49 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL Можно имена одного-двух таких инструментов, совместимых с Ораклом Power Designer, Visual Paradigm, ERwin и т.п., дальше нагуглите по аналогии. Ещё раз, ваш "граф", при связях один ко многим даст нелепое размножение данных, по которому нет никакого смысла пытаться что-то понять. Union all в этом контексте был бы куда уместнее. Хотите сделать понятную систему - вытащите объекты через reverse engineering, причешите имена таблиц и полей по доменам данных, прорисуйте необходимые связи. И все последующие изменения вносите через модель. з.ы. Как же мне жаль несчастного, которому потом придётся в этом всём разбираться... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 09:52 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
PuM256 НеофитSQL пропущено... Оптимизатор не умеет оптимизировать сквозь функцию, поэтому вью предпочтительнее. Сравните: Select col1 from table(func(3)) Против Select col1 from VIEW_V where col2 = 3 В первом случае табличная функция посчитает все колонки, и все кроме одной будут выкинуты. Во втором, ненужные колонки даже не считаются. Оптимизатору SQL абсолютно без разницы, где находится SQL - сам по себе, в анонимном блоке или в функции. Сравнение некорректное, так как не показаны внутренности func. А можно, например, так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
А когда мне потребуется col3, или другие колонки из таблицы? Плодить эти функции? В таблице пара десятков вычисляемых колонок. View позволяет вычислять только то, что нужно запросу. Табличная функция будет вычислять все, т.к. не знает что нужно, а что нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 22:26 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
env НеофитSQL Можно имена одного-двух таких инструментов, совместимых с Ораклом Power Designer, Visual Paradigm, ERwin и т.п., дальше нагуглите по аналогии. Ещё раз, ваш "граф", при связях один ко многим даст нелепое размножение данных, по которому нет никакого смысла пытаться что-то понять. Union all в этом контексте был бы куда уместнее. Хотите сделать понятную систему - вытащите объекты через reverse engineering, причешите имена таблиц и полей по доменам данных, прорисуйте необходимые связи. И все последующие изменения вносите через модель. з.ы. Как же мне жаль несчастного, которому потом придётся в этом всём разбираться... А почему вы сами так не делаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 22:27 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
НеофитSQL А почему вы сами так не делаете? Потому что это неудобно. Проработав с системой некоторое время осознаете, что никакие диаграммы Вам уже особо не нужны. А сгенерировать приличный DDL из диаграммера - часто проблема. Следствие - придется удвоить усилия, чтобы вести одновременно диаграмму и физическую схему данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 22:46 |
|
Представление иерархии
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL А почему вы сами так не делаете? Потому что это неудобно. Проработав с системой некоторое время осознаете, что никакие диаграммы Вам уже особо не нужны. А сгенерировать приличный DDL из диаграммера - часто проблема. Следствие - придется удвоить усилия, чтобы вести одновременно диаграмму и физическую схему данных. Я не подозревал, что вы вместе работаете.. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 22:47 |
|
|
start [/forum/topic.php?fid=52&msg=40014724&tid=1880747]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 167ms |
0 / 0 |