powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Представление иерархии
25 сообщений из 58, страница 2 из 3
Представление иерархии
    #40014013
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
graycode
Снова бредовая постановка и бредовые выводы ... ты эту тему зачем создал?


Я создал эту тему, чтобы научиться делать "невозможное" - передать в представление параметр.

С помощью участников научился такое делать для моего частного случая, также Вячеслав нашел у меня ошибку, которую я сам мог бы не найти - эта ошибка не проявляется в моих условиях, из-за особенности структур данных. Теперь я зная о ситуациях, когда внешние джойны сложных иерарчических структур нужно строить снизу вверх, чтобы избежать коллапса веток без листьев. (это где-то в середине темы).
Построение дерева снизу вверх может быть естественным для спецов SQL, но совершенно неинтуитивно для процедурных языков, где обход происходит с вершины.

Теперь вместо длинного и некрасивого обращения к представлению, которое повторяется во многих местах и также требует правки при добавлении нового типа в параметре поиска
Код: plsql
1.
2.
3.
4.
5.
 where 
             :id = idOrder or
             :id = idSpelunk or
             :id = idWaterSki or
             :id = idClimb



У меня получилось коротко и элегантно, все сложности бизнес-связок между разными таблицами документами спрятана в представлении. Я не показал команду сортировки, для простоты чтения.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from DOCSPILE_V where idDocument = :id  -- выдать все документы связанные с :id (клиент, или заказ, или жалоба, или ...)
...
select distinct numOrder from DOCSPILE_V where idDocument = :idClient -- перечислить номера всех заказов клиента
...
select distinct numInvoice from DOCSPILE_V where idDocument = :idOrder -- перечислить номера всех инвойсов данного заказа
...
-- получить клиента по инвойсу, цепочка инвойс->исполнение->заказ->клиент известна представлению
-- у инвойса всегда ровно один клиент, поэтому тут просто.
select idClient into l_ClientId from DOCSPILE_V where idDocument = l_InvoiceId; 



В понедельник популяризую это представление, теперь навигация по сложной иерархии документов стала тривиальной: "спроси вьюху".

Надо хорошее имя для этой вьюхи придумать. KUCHA_MALA_V? DOCUMAP_V? NAVIDOC_V?
...
Рейтинг: 0 / 0
Представление иерархии
    #40014017
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

авторчтобы научиться делать "невозможное" - передать в представление параметр
В большинстве случаев это не требуется, кроме того Oracle умеет проваливать предикат внутрь представления, если возникла крайняя необходимость, то можно сделать так как рекомендовал andrey_anonymous, есть еще пара вариантов, о которых тебе лучше пока не знать))

В остальном твои сообщения бессвязный поток сознания, без структуры и примера данных вообще не имеющий смысла, очень похоже что архитектура трешовая, а то что ты поверх нее наваял еще трешовее.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014021
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Было несколько комментариев, которые намекали что создание запроса, связывающего все основные таблицы бизнеса согласно их взаимоотношениям - это вредно.

Я хочу эту мысль перевернуть. Мне кажется, что создание такого запроса - это наоборот, очень полезное упражнение (даже если запрос крайне неэффективен и не может использоваться в боевом коде)

Такой запрос собственно содержит ДНК и карту всей бизнес-системы для понимания и анализа.

В отсутствие его, изучение взаимоотношений между таблицами происходит на уровне секвенирования ДНК - наблюдаются отдельные связующие операции, которые со временем формируют в голове приблизительную картину что привязано куда и как.
На одних внешних ключах такую картину не нарисовать, из-за обилия представлений, нужно смотреть код.

Подкину идею на работе, написать такой убер-запрос. Костяк я уже сделал, осталось обернуть вокруг него оставшуюся сотню таблиц и вьюх.

Такой "эталон" скорее всего будет медленным, но зато позволит легко плодить юнит-тесты для быстрого боевого кода. Если результаты не совпали - у кого-то ошибка требующая исправления.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014027
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Такой запрос собственно содержит ДНК


Да, для обучения сойдет.

В дальнейшей работе, если такой запрос встретится, будет естественная реакция "у тебя ошибка в ДНК".
...
Рейтинг: 0 / 0
Представление иерархии
    #40014034
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm
НеофитSQL
Такой запрос собственно содержит ДНК


Да, для обучения сойдет.

В дальнейшей работе, если такой запрос встретится, будет естественная реакция "у тебя ошибка в ДНК".


Лол, я теперь знаю как это представление назвать.

BUSINESS_DNA
...
Рейтинг: 0 / 0
Представление иерархии
    #40014122
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
создание такого запроса - это наоборот, очень полезное упражнение

Цель какая у этого упражнения? Получить бессвязную кашу с дублями всего на всё, ради устранения которых потом приходится наворачивать довольно дорогое устранение дублей?
...
Рейтинг: 0 / 0
Представление иерархии
    #40014259
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неофит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-функция не устраивает?
...
Рейтинг: 0 / 0
Представление иерархии
    #40014267
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256,

У него 11-я версия, но и для нее были решения, однако давать ему в руки их не стоит, по крайней мере сейчас))
...
Рейтинг: 0 / 0
Представление иерархии
    #40014303
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
если собрать собрать все, что вы понаписали в топике, то получится, что вы работу нескольких различных задач хотите обеспечить единственным универсальным интерфейсом.

Да, похоже на то.
Когда я впервые столкнулся с СУБД, у меня тоже было подобное желание, затащить привычные (в прикладном программировании) подходы в SQL — универсальные параметрические запросы и представления, абстрактные функции, в которые передаются имена таблиц и столбцов.
В большинстве случаев в SQL это не нужно и даже явно противопоказано. В SQL длинная портянка запроса с повторяющимися фрагментами может быть эффективнее.
Не нужно библиотечные подходы тащить непосредственно в SQL. Их можно применять в серверном коде, но и то с учетом множества особенностей.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014513
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256

Чем pipelined-функция не устраивает?


Оптимизатор не умеет оптимизировать сквозь функцию, поэтому вью предпочтительнее.

Сравните:

Select col1 from table(func(3))

Против

Select col1 from VIEW_V where col2 = 3

В первом случае табличная функция посчитает все колонки, и все кроме одной будут выкинуты.

Во втором, ненужные колонки даже не считаются.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014520
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
создание такого запроса - это наоборот, очень полезное упражнение

Цель какая у этого упражнения? Получить бессвязную кашу с дублями всего на всё, ради устранения которых потом приходится наворачивать довольно дорогое устранение дублей?


"Бессвязная каша с дублями" называется табличное представление графа. Повторение ожидается для всех узлов кроме листьев. Это свойство такого преобразования.

Табличное представление графа, в отличие от кучи значений собранных по union, обладает полезным свойством эквивалентности - по нему можно восстановить структуру графа.

(Если граф напрягает, думайте про дерево)
...
Рейтинг: 0 / 0
Представление иерархии
    #40014533
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
в отличие от кучи значений собранных по union
...
Рейтинг: 0 / 0
Представление иерархии
    #40014563
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
...
Табличное представление графа, в отличие от кучи значений собранных по union...


мда...
Не важно, сколько вам лет.
В ребёнка вас превращает неостановимое желание использовать в речи слова, смысла которых вы не понимаете.
А ведь я почти поверил, читая 22224458 , что "наверно вы все сделали правильно" , и стер длинный пост про cohesion.

Кратко так: он у вас есть, только имени ему нет.
У вас спрут какой-то, а не cohesion, источник ошибок (это если вам не нравится термин "задвоение",
но, похоже, вы не понимаете, о чём речь) и гарант головной боли для следующего несчастного.

А необходимый вам atomic cohesion, по вашему рассказу судя, ничто лучше, чем union all не обеспечит.
Кроме того, он же, union all, почти автоматический, то есть - полуавтоматический,
гарант low coupling между серверной и клиентской частью кода.

Как-то так...
...
Рейтинг: 0 / 0
Представление иерархии
    #40014584
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,


Ваше возмущение одинаково применимо к мировому атласу.

"Тут все собрано в одном месте, трудно понимать" "надо по кусочкам".

У меня новая цель - создать карту мира для чтения, понимания и тестирования.

Предыдущая цель - лёгкая навигация между шестью типами документов. У меня это получилось одним представлением, кто-то писал бы шесть, почти одинаковых. Мне мой метод нравится больше, кому-то наоборот.

Мой запрос может оказаться сложный и не быстрый, но функции мастер-карты он будет выполнять хорошо, я надеюсь.

А для вас у меня вопрос: где вы держите схему взаимосвязей всех таблиц и представлений системы?
- в визио чертеже архитектуры, безнадежно устаревшем?
- в голове?
- каждый раз смотрите в разные места в коде, чтобы вспомнить?

Если у вас появился новый коллега, как вы но ожидаете в структуре связок разобраться? Я своему покажу эту самую карту мира на две страницы, с секциями и комментариями.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014590
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
где вы держите схему взаимосвязей всех таблиц и представлений системы?

Для этого есть множество инструментов реверсивного вынимания схемы данных со всеми взаимосвязями и комментариями ко всем объектам и связям (если они прописаны в БД, в Оракле такое есть).
Т.е. это всегда актуально, именно в любой момент.

Кстати, если в твоей схеме 10 табличек для одного пользователя, то их можно и помнить :)
Реальные схемы содержат тысячи (а то и десятки тысяч) объектов схемы.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014603
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL


А для вас у меня вопрос: где вы держите схему взаимосвязей всех таблиц и представлений системы?
- в визио чертеже архитектуры, безнадежно устаревшем?
- в голове?
- каждый раз смотрите в разные места в коде, чтобы вспомнить?

Если у вас появился новый коллега, как вы но ожидаете в структуре связок разобраться? Я своему покажу эту самую карту мира на две страницы, с секциями и комментариями.


Ты про data modeling tools что нибудь слышал? В нормальных конторах запрос на любые изменения (логические или физические) базы идут к data modeler (это может быть тот-же DBA) который вместе BA (business analyst) рассматривают запрос, отклоняют или утверждают (возможно с поправками) затем data modeler вносит изменения в model и генерирует DDL. И это не столько для базы сколько для бизнеса. Ведь это позволяет контролировать что тот-же самый business term всегда получает то-же имя поля во всех базах и если business term name or/and logic изменилась мы всегда знаем где менять.

SY.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014618
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
...
А для вас у меня вопрос: где вы держите схему взаимосвязей всех таблиц и представлений системы?
- в визио чертеже архитектуры, безнадежно устаревшем?
- в голове?
- каждый раз смотрите в разные места в коде, чтобы вспомнить?

к сожалению, персонально я - в коде.
Это не самый лучший, но и не самый худший вариант.

НеофитSQL

Если у вас появился новый коллега, как вы но ожидаете в структуре связок разобраться? Я своему покажу эту самую карту мира на две страницы, с секциями и комментариями.

Разрешите вы мне, или нет, но вот эту херню, я уже просто не буду комментировать...
...
Рейтинг: 0 / 0
Представление иерархии
    #40014648
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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), которые в теме пока не отметились, или я не заметил. В нормальных конторах также наверное есть тестеры, тест менеджеры и тест планы. Я много работал в таких "нормальных конторах" где процесс накатан, и на каждую задачу уже есть и роль, и человек.

Сейчас у меня ситуация иная, где процесса нет, модели нет, и все мои хотелки придется реализовывать самому, не обладая знаниями ДБА (с БА у меня в порядке).

Кто-то видел, как выгладит модель простой схемы? Можете показать?
...
Рейтинг: 0 / 0
Представление иерархии
    #40014654
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася
НеофитSQL
где вы держите схему взаимосвязей всех таблиц и представлений системы?

Для этого есть множество инструментов реверсивного вынимания схемы данных со всеми взаимосвязями и комментариями ко всем объектам и связям (если они прописаны в БД, в Оракле такое есть).
Т.е. это всегда актуально, именно в любой момент.

Кстати, если в твоей схеме 10 табличек для одного пользователя, то их можно и помнить :)
Реальные схемы содержат тысячи (а то и десятки тысяч) объектов схемы.


Такое было бы просто замечательно. Можно имена одного-двух таких инструментов, совместимых с Ораклом?

У меня в схеме около 400 таблиц и представлений. Я пока еще не знаю всех деталей их взаимодействия,
и у меня нет гарантий что во фрагменте кода, где я смотрю их связку между собой, не содержится ошибка.
Поэтому если нужно узнать достоверно, обычно смотрю код в трех разных местах. Пока все совпадало, что радует.

Промежуточный итог:
- над SY есть ДБА/прочие, контролирующие архитектуру схемы. Все изменения идут через них, и у них всегда можно получить правдивую модель схемы.
- Правильный Вася знает про существование автоматических инструментов. Непонятно, пользовался ли.
- у booby нет модели, но он может прочитать код и посмотреть как таблицы взаимодействуют, если возник вопрос. Как справляются другие члены его команды, непонятно.
- неофит тоже читает код (т.к. в компании нет архитекторов и детальной документации), и одновременно составляет модель схемы в форме SQL запроса; такой подход вызывает общее негодование.
...
Рейтинг: 0 / 0
Представление иерархии
    #40014724
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неофит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.
Create Or Replace Function func(iNum In Number) Return tt Pipelined As
Begin
  For cur In (Select col1 From t Where col2 = iNum) Loop
    Pipe Row(tr(cur.col1));   
  End Loop;
  Return;
End;
/
...
Рейтинг: 0 / 0
Представление иерархии
    #40014726
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Можно имена одного-двух таких инструментов, совместимых с Ораклом

Power Designer, Visual Paradigm, ERwin и т.п., дальше нагуглите по аналогии.

Ещё раз, ваш "граф", при связях один ко многим даст нелепое размножение данных, по которому нет никакого смысла пытаться что-то понять. Union all в этом контексте был бы куда уместнее.

Хотите сделать понятную систему - вытащите объекты через reverse engineering, причешите имена таблиц и полей по доменам данных, прорисуйте необходимые связи. И все последующие изменения вносите через модель.

з.ы. Как же мне жаль несчастного, которому потом придётся в этом всём разбираться...
...
Рейтинг: 0 / 0
Представление иерархии
    #40015083
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
Create Or Replace Function func(iNum In Number) Return tt Pipelined As
Begin
  For cur In (Select col1 From t Where col2 = iNum) Loop
    Pipe Row(tr(cur.col1));   
  End Loop;
  Return;
End;
/



А когда мне потребуется col3, или другие колонки из таблицы? Плодить эти функции? В таблице пара десятков вычисляемых колонок.

View позволяет вычислять только то, что нужно запросу. Табличная функция будет вычислять все, т.к. не знает что нужно, а что нет.
...
Рейтинг: 0 / 0
Представление иерархии
    #40015084
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
Можно имена одного-двух таких инструментов, совместимых с Ораклом

Power Designer, Visual Paradigm, ERwin и т.п., дальше нагуглите по аналогии.

Ещё раз, ваш "граф", при связях один ко многим даст нелепое размножение данных, по которому нет никакого смысла пытаться что-то понять. Union all в этом контексте был бы куда уместнее.

Хотите сделать понятную систему - вытащите объекты через reverse engineering, причешите имена таблиц и полей по доменам данных, прорисуйте необходимые связи. И все последующие изменения вносите через модель.

з.ы. Как же мне жаль несчастного, которому потом придётся в этом всём разбираться...


А почему вы сами так не делаете?
...
Рейтинг: 0 / 0
Представление иерархии
    #40015090
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

А почему вы сами так не делаете?

Потому что это неудобно.
Проработав с системой некоторое время осознаете, что никакие диаграммы Вам уже особо не нужны.
А сгенерировать приличный DDL из диаграммера - часто проблема.
Следствие - придется удвоить усилия, чтобы вести одновременно диаграмму и физическую схему данных.
...
Рейтинг: 0 / 0
Представление иерархии
    #40015091
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
НеофитSQL

А почему вы сами так не делаете?

Потому что это неудобно.
Проработав с системой некоторое время осознаете, что никакие диаграммы Вам уже особо не нужны.
А сгенерировать приличный DDL из диаграммера - часто проблема.
Следствие - придется удвоить усилия, чтобы вести одновременно диаграмму и физическую схему данных.


Я не подозревал, что вы вместе работаете..
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Представление иерархии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]