powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ищу структуру данных для хранения информации о sql-запросах
25 сообщений из 50, страница 2 из 2
Ищу структуру данных для хранения информации о sql-запросах
    #38539162
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo,

Уже давным давно во многих продуктах юзеру дается возможность мастерить свои запросы - посмотрите для примера Микрософ ЦРМ)
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38539216
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spvadiminfo,

Уже давным давно во многих продуктах юзеру дается возможность мастерить свои запросы - посмотрите для примера Микрософ ЦРМ)
К сожалению, нет под рукой.

Это именно не система отчетов? В которой заранее созданно много разных представлений, а юзер только выбирает и накладывает фильтры?
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38539667
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo,

нет - это обычное рабочее место любого юзера - в нем можно используя мастер запросов уточнить критерии запроса по связанным сущностям, сохранить его и использовать при просмотре данной сущности и редактировать если надо изменить
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38539965
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spvadiminfo,

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

Скорее всего, все таки надо, наверное, увидеть, чтобы понять разницу между "нет - это обычное рабочее место любого юзера" и "да - это обычное рабочее место любого юзера", т.е. разновидность старой доброй системы отчетов, обогащенной мастерами.
Т.е. не совсем ясно на сколько "любого юзера" и на сколько отлично от QBE (не другой ли способ оного же). В Аксцессе QBE тоже обогащен мастерами. Тоже рабочее место, но наверное не "любого" юзера, а все же особенного.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38540068
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ему надо хранить расположение оконцев, стрелочек и ключиков, а вы про sql, простихосподи.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38540079
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в PMA оказывается есть такая шняга. Недавно заметил и понял откуда берутся такого рода снимки экранов. Умора. Пять минут растаскивал оконца, растащить не смог, а как там провести стрелочки вообще не понял. Еще в период программирования на десктопе Абсцесс просто заколебывал своим неутомимым стремлением подсунуть мне конструктор вместо окна с запросами.

Но самая конечно мякотка это вопрос как запузырить в эти квадратики поле вроде:

coalesce(`art`.`price_discounted`, ceil( `art`.`price_retail`*`art`.`retail_discount`/10)*10) as `price_discounted`
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38540172
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerЕму надо хранить расположение оконцев, стрелочек и ключиков...

Это, звучит, несколько не созвучно с темой топика и, возможнно, не так интересненько. А там кто знает.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38540203
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ настолько очевиден что я и заподозрил неладное.

spvadiminfo,

мне нужна структура хранящая метаданные запроса по которым можно легко сгенерировать вью или сформировать динамический скуль.

В MySql оно хранится в INFORMATION_SCHEMA главным образом. Оттудова и достаются данные для SHOW CREATE TABLE например.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38541196
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

пожалуйста, не придумывайте за меня разные бредни, и не прилично в присутсвии еще живого человека говорить в третьем лице - это обычно делают необразованные люди!
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38542719
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Боюсь готового решения вы не найдете, придется делать свое.
У нас мы используем самописное хранение SQL в XML (вообще можно хранить хоть в чем, сам запрос в программе храниться в POJO классах, а там уже сериализовать уже можно во что угодно).

Код: xml
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.
<!-- выбирать всех Иваоновых Иванов родившихся с 1960-года, будет выбираться только ФИО--!>
        <queryInfo tableName="person">
            <columns fullColumnName="person_id"  isSelect="false"/>
            <columns fullColumnName="lastname" whereComparison="eq" value="ИВАНОВ"/>
            <columns fullColumnName="firstname" whereComparison="eq" value="ИВАН"/>
            <columns fullColumnName="patronymic" />
            <columns fullColumnName="datebirth" isSelect="false" whereComparison="gt" value="01.01.1960"/>
        </queryInfo>

<!-- посчитать количество сгруппированное по фамилии. --!>
        <queryInfo tableName="person">
            <columns fullColumnName="person_id" groupType="count"/>
            <columns fullColumnName="lastname" />
        </queryInfo>

<!-- выбрать персоны работающие в отделе разработки. --!>
        <queryInfo tableName="person">
            <columns fullColumnName="person_id" />
            <columns fullColumnName="lastname" />
            <columns fullColumnName="firstname" />
            <columns fullColumnName="department_id.department.deparment_name" whereComparison="eq" value="отдел разработки"  />
        </queryInfo>

<!-- выбрать персоны без отделов. --!>
        <queryInfo tableName="person">
            <columns fullColumnName="person_id" />
            <columns fullColumnName="lastname" />
            <columns fullColumnName="firstname" />
            <columns fullColumnName="department_id.+department.deparment_name" whereComparison="is_null"  />
        </queryInfo>
    


Самая основное как записываются поля. не четными идут название полей, четными название таблиц. Таким образом строятся join.
'+' означает left join.

Исходники к сожалению я дать не могу, но может сама идея вам пригодиться.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38542914
R7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
R7
Гость
olzhasСамая основное как записываются поля. не четными идут название полей, четными название таблиц. Таким образом строятся join.
'+' означает left join.
А вот это зря.
Вы создали документ, чтобы хранить структуру. И в самих полях еще храните структуры, связанные с документом. И еще привязываетесь, даже не к очередностям, а к четностям/нечетностям.
По феншую, это выносится в структуру документа, дабы не нарушать самого смысла XML.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544151
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhas,

такую тип хранения не удовлетворяет - я не могу валидировать ни поля ни сущности в запросе - они все в тексте и если я буду что-то менять в структуре данных - данный способ молча проглотит и выдаст ошибку при попытке выборки
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544478
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R7,

Не совсем понял что вы имеете в виду. XML хранит запрос. То что название поля имеет такой сложный вид?! так это адрес колонки, относительно текущей таблицы.

sp,
Валидация есть, в данном случая я просто показал как это хранится. При загрузке происходит валидация, по структуре БД, данные берутся из connection.getMetaData().getXXX().
Например
Код: xml
1.
<queryInfo tableName="person">

, наличие таблицы проверяется connection.getMetaData().getTables() + проверка на доступ к этой таблице.

Код: xml
1.
<columns fullColumnName="lastname" />


через connection.getMetaData().getColumns();

Код: xml
1.
<columns fullColumnName="department_id.+department.deparment_name" whereComparison="is_null"  />


Делаем fullColumnName.split("\\.") получаем массив сток, в которой по очереди идут название колонки по которой идет связь и название таблицы куда ссылаемся, последней строкой будет то поле которое должно быт в выборке. Опят таки правильность названия таблиц и колоном можно узнать через выше описанные методы.

Зная название таблицы, его поля и название связанной таблицы, через connection.getMetaData().getExportedKeys() можем узнать на название поля в связанной таблице, что бы в дальней чем построить Join. так же тут проверяется что связь вообще есть.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544488
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olzhas,

Такое в xml структуру влезет? :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from (
  select d2.cnt * d.cnt + (select case when dummy = 'X' then 1 else 0 end from dual) cnt
  from (select count(*) cnt from dual) d
  left join (select dummy, count(*) cnt from dual group by dummy) d2 on d2.cnt = d.cnt
  cross join dual
  join dual d3 on exists (select null from dual where 1 = d.cnt)
)
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544516
Гхостикolzhas,

Такое в xml структуру влезет? :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from (
  select d2.cnt * d.cnt + (select case when dummy = 'X' then 1 else 0 end from dual) cnt
  from (select count(*) cnt from dual) d
  left join (select dummy, count(*) cnt from dual group by dummy) d2 on d2.cnt = d.cnt
  cross join dual
  join dual d3 on exists (select null from dual where 1 = d.cnt)
)


(задумчиво)...я бы GROUP BY и UNION добавил для разнообразия
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544522
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гхостик,
нет не влезет, но оно и не нужно, мы не пытались сделать полную замену sql.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544779
dymka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже делаем подобный велосипед.
Пользователь выбирает только колонки, и фильтры.
На БД хранятся метаданные - из какой вьюхи колонку брать, как соединять, агрегировать итп.
Сам запрос устроен в виде XML - похоже как у olzhas. Так проще его сериализовать и самое главное - десериализовать.
Запрос выполняет вьюха на сервере строя по XML-запросу и метаданным SQL-запрос и выполняя его в динамике.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544824
Я так понимаю. что у автора стоит другая задача. Сейчас корректность запросов проверяется динамически, а он хочет забацать нечто типа статической проверки запросов по отношению к схеме данных. Точнее даже наоборот - схемы (которая может меняться) по отношению к существующим запросам. Поменяли таблицу - проверяем все связанные с нею запросы (если таковые есть), что, мол, имена присутствуют, типы совпадают.

В этом смысле варианты с XML решения не дают, конечно.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38544979
R7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
R7
Гость
olzhasR7,

Не совсем понял что вы имеете в виду. XML хранит запрос. То что название поля имеет такой сложный вид?! так это адрес колонки, относительно текущей таблицы.
Ничего такого не имел. Просто совет.
Понятия "нормализация слабоструктурированных данных" нет. Наверное, потому что туда применима нормализация данных вообще. Вот у вас нарушена 1НФ. Вы разбираете XML, а потом еще раз парсите строки из полученных данных. Работает, ну и нормально. Я видел, где и в названия атрибутов запихивали инфу тип данных.
А вот еслиб у вас было нечто вроде (схематично. пример вообще не правильный. тут джойн принадлежит columns, а не queryInfo):
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        <queryInfo tableName="person">
            <columns fullColumnName="person_id" />
            <columns fullColumnName="lastname" />
            <columns fullColumnName="firstname" />
            <columns ColumnName="department_id" alias="deparment_name">
                <join kind="left" source="department">               
                    <linkcolumn ColumnName="deparment_name"/>
                    <whereComparison="is_null">
                </join>
            </columns>
        </queryInfo>


1. Это было бы понятно стороннему разработчику сторонней программы.
2. Вы бы получали все нужные данные для построения запроса только разбором XML.
3. Как следствие из 2, в случае изменения схемы БД, такие XML легко апдейтятся.

И если смотреть на структуру "нормализованного" XML, то понятно, куда ему расти и развиваться. Например, значением атрибута source может быть не таблица а линк на полноценный queryInfo (или сразу вложенный нод queryInfo)
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38545080
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R7,
Изначально в первом варианте мы хранили запрос в древовидной структуре, как вы и описали
вот пример.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<preparedQueries name="center_replic_node">
        <captions language="RU" caption="Репликация"/>
        <queryRequestTable linkTableName="center_replic_node" linkColumnName="id_university,oper_type">
            <selectColumns columnName="id_university,oper_type" isSelect="true"/>
            <selectColumns columnName="oper_type" filterComparison="eq" isSelect="true"/>
            <selectColumns columnName="ip_adress" isSelect="true"/>
            <selectColumns columnName="oper_datetime" isSelect="true" filterComparison="lt"/>
            <selectColumns columnName="status" isSelect="true" filterComparison="eq"/>
            <selectColumns columnName="id_university" filterComparison="eq" isSelect="false" orderByIndex="1">
                <foreignQueryRequestTables linkTableName="universities" linkColumnName="id_university" joinType="right">
                    <selectColumns columnName="nameru" isSelect="true"/>
                    <selectColumns columnName="mylabel"  isSelect="true" filterComparison="eq"/>
                </foreignQueryRequestTables>
            </selectColumns>
        </queryRequestTable>
    </preparedQueries>



Но отказались по нескольким причинам.
1. в древовидной структуре нельзя (без создания дополнительных атрибутов) задать порядок столбцов, в отличии от линейного где выбираемые столбцы идут по порядку.
2. Чисто визуально линейный вариант выглядит удобнее, одно поле описывается одной строчкой. читается легче.
3. в UI список, удобнее дерева. Долго объяснять почему, просто поверите.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38545097
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимо пробегал...Я так понимаю. что у автора стоит другая задача. Сейчас корректность запросов проверяется динамически, а он хочет забацать нечто типа статической проверки запросов по отношению к схеме данных. Точнее даже наоборот - схемы (которая может меняться) по отношению к существующим запросам. Поменяли таблицу - проверяем все связанные с нею запросы (если таковые есть), что, мол, имена присутствуют, типы совпадают.

В этом смысле варианты с XML решения не дают, конечно.

XML это просто способ хранения. В конечном итоге ХМЛ сериализуется(конечно не простым JAXB, чуть посложнее) в класс Query. В которых есть ссылки на классы QueryColumn, Table, Column, Reference и тд. Хотите переименовать таблиц или колонку, без проблем. меняем поле table.tablename и сериализуем Query, получаем xml c правильным названием таблицы.
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38545121
R7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
R7
Гость
olzhas,

Вангую. Вернетесь к прошлому варианту. )
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38545168
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R7,

и того мало будет
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38545615
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо пробегал...Я так понимаю. что у автора стоит другая задача. Сейчас корректность запросов проверяется динамически, а он хочет забацать нечто типа статической проверки запросов по отношению к схеме данных. Точнее даже наоборот - схемы (которая может меняться) по отношению к существующим запросам. Поменяли таблицу - проверяем все связанные с нею запросы (если таковые есть), что, мол, имена присутствуют, типы совпадают.

В этом смысле варианты с XML решения не дают, конечно.
+1
...
Рейтинг: 0 / 0
Ищу структуру данных для хранения информации о sql-запросах
    #38545779
spМимо пробегал.......
+1
Я тем же самым занимаюсь. У меня парсится входное SQLвыражение, вытаскиваются все встреченные имена с их признаками и это всё запихивается в одну таблицу. Городить структуры типа "одна таблица для таблиц, другая - для атрибутов" мне показалось ненужным.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ищу структуру данных для хранения информации о sql-запросах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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