powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Выбор СУБД для небольшой Java-утилиты
325 сообщений из 325, показаны все 13 страниц
Выбор СУБД для небольшой Java-утилиты
    #38239907
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю некую консольную аппликацию, (утилитка для работы с файлами определенных типов, расположенными в репозитории). Приложение однопользовательское, работает на локальной машине.
Необходима СУБД (либо какое-нибудь комбинированное решение), которая могла бы хранить обычные реляционные данные (несколько таблиц, связанных между собой), позволять обращаться к ним (запросы, апдейты, делеты и т.д.) и (самое главное) хранить их в файлах в каком-нибудь человеко-читаемом виде (XML, JSON, etc).
Зачем такой изврат? Для того, чтобы эти файлы (или файл) поддавались версионированию, мерджу и т.д. и чтобы пользователь мог отредактировать их самостоятельно, без приложения.

1. Пробовал JAXB, загружаю xml-файлы в классы, но дальше проблема как с этими классами работать, как делать запросы и выборки.
2. Есть идея заюзать inmemory-database (например HSQLDB) через ORM (например Hibernate) и сеарелизовать все это дело в xml-файлы, но как то навороченно получается.

В общем прошу совета.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38239920
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЗачем такой изврат?
действительно изврат.
Какое отношение СУБД имеет к сабжу.
Вы думаете XML нравится пользователю?
Даже у MS другое мнение.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38239942
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hibernate вроде умеет XML.
Не много не понятны пожелания. Нужно гонять данные в XML и базу? Какие проблемы вообще?
Любые XML сериализаторы и ORM подойдут.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38239943
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же не понятно как "выбор реляицонной СУБД" связан с документами?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38239948
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.oracle.com/technetwork/java/javadb/overview/index.html
OracleJava DB is Oracle's supported distribution of the Apache Derby open source database. It supports standard ANSI/ISO SQL through the JDBC and Java EE APIs. Java DB is included in the JDK
уже же в коробке лежит?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38239958
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, извините. недочитал
автор (самое главное) хранить их в файлах в каком-нибудь человеко-читаемом виде (XML, JSON, etc).
Зачем такой изврат ? Для того, чтобы эти файлы (или файл) поддавались версионированию, мерджу и т.д. и чтобы пользователь мог отредактировать их самостоятельно, без приложения.

Еще наверное и само приложение должно быть в человекочитаемом виде. Чтобы пользователь мог отредактировать.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240041
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

он хочет чтоб при коммите этой "бд" в систему контроле версий можно было сравнивать контент в текстовых файлах бд руками
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240052
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагманон хочет чтоб при коммите этой "бд" в систему контроле версий можно было сравнивать контент в текстовых файлах бд руками
Ахтунг! Телепаты в топике! :)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240128
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманBlazkowicz,
он хочет чтоб при коммите этой "бд" в систему контроле версий можно было сравнивать контент в текстовых файлах бд руками
угу. Т.е. для программистов пишет)). Особенно когда строки местами поменяются.
И чего только программист для программиста не придумает.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240295
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманBlazkowicz,

он хочет чтоб при коммите этой "бд" в систему контроле версий можно было сравнивать контент в текстовых файлах бд руками
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240299
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманBlazkowicz,

он хочет чтоб при коммите этой "бд" в систему контроле версий можно было сравнивать контент в текстовых файлах бд руками

Так точно.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240312
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123угу. Т.е. для программистов пишет)).
Пишу для себя, но если окажется кому то полезной то был бы рад.



Petro123И чего только программист для программиста не придумает.
Небольшая консольная утилитка для управления исходным кодом баз данных (DML, DDL и т.д.), если интересно могу рассказать вкратце (не сочтите за оффтоп или самопиар).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240399
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЛагманBlazkowicz,

он хочет чтоб при коммите этой "бд" в систему контроле версий можно было сравнивать контент в текстовых файлах бд руками

Так точно.
А RDBMS тогда зачем? Документ-ориентированые NoSQL базы не подходят?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240454
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМаксим Нпропущено...


Так точно.
А RDBMS тогда зачем? Документ-ориентированые NoSQL базы не подходят?

Это я с горяча... NoSQL можно попробовать. Только вот что? чтобы java-based, embeded и все такое?
Щупал OrientDB, но она (насколько я понял) не умеет с xml-json работать. Т.е. хранить его в качестве value можно, а вот запросы делать...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240491
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ННебольшая консольная утилитка для управления исходным кодом баз данных (DML, DDL и т.д.), если интересно могу рассказать вкратце (не сочтите за оффтоп или самопиар).
В соседний форум - Разработка ИС. Там точно скажут нужно или нет.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240503
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,

а чо бы с git как нить через опно не поработать?
Это чисто теоретический вброс, но
1) версионность есть
2) коммиты, апдейты, мержи и прочее есть
3) хранить можно хоть в папе карло
4) сравнивать между собой xml - легко
5) пользователь может делать вообще чо угодно, хоть на голове прыгать.

хотя.при чем тут java (
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240512
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НДелаю некую консольную аппликацию, (утилитка для работы с файлами определенных типов, расположенными в репозитории). Приложение однопользовательское, работает на локальной машине.
Необходима СУБД (либо какое-нибудь комбинированное решение), которая могла бы хранить обычные реляционные данные (несколько таблиц, связанных между собой), позволять обращаться к ним (запросы, апдейты, делеты и т.д.) и (самое главное) хранить их в файлах в каком-нибудь человеко-читаемом виде (XML, JSON, etc).
Зачем такой изврат? Для того, чтобы эти файлы (или файл) поддавались версионированию, мерджу и т.д. и чтобы пользователь мог отредактировать их самостоятельно, без приложения.
[...]
Максим ННебольшая консольная утилитка для управления исходным кодом баз данных (DML, DDL и т.д.), если интересно могу рассказать вкратце (не сочтите за оффтоп или самопиар).


Может быть есть смысл посмотреть на Fossil . Он всё хранит в sqlite-базе, с ней можно работать самостоятельно, и можно реализовать свой функционал, которого не хватает в этой системе контроля версий (и не только). Может быть и какой-нибудь JFossil появится в дополнение к JGit-у.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240579
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим ННебольшая консольная утилитка для управления исходным кодом баз данных (DML, DDL и т.д.), если интересно могу рассказать вкратце (не сочтите за оффтоп или самопиар).
В соседний форум - Разработка ИС. Там точно скажут нужно или нет.

Задавал уже, правда в Проектирование БД:

http://www.sql.ru/forum/actualthread.aspx?tid=1005902

правда без результатно.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240580
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну не знаю.
Я б лучше для гитов все написал бы загрузчик-выгрузчик данных из RBD в пакет csv файлов, данных - наверное не запредельно много?
через jdbc выливать - заливать - кода на копейки?
а все остальное как удобно. Или даже в эксель через POI.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240650
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НPetro123пропущено...

В соседний форум - Разработка ИС. Там точно скажут нужно или нет.

Задавал уже, правда в Проектирование БД:

http://www.sql.ru/forum/actualthread.aspx?tid=1005902

правда без результатно.

Имхо, здесь задета немалая и неоднозначная тема, где нет никакой универсальности. Отсюда и нулевая активность в соответствующем профильном разделе. В этой сфере разброд и шатание. У каждого свои СУБД, со своей спецификой, свои инструменты разработки, разные команды со своими особенностями, разные целевые продукты и т.д. и т.п. В своей практике процесс разработки баз повёрнут в несколько иную сторону так, чтобы имеющиеся системы контроля версий помогали также, как и для остальных исходников. Грубо говоря, ведётся каталог исходников для создания/обновления баз (DDL, DML и пр.), со своими особенностями и под свои потребности. Нужны свои тулзы, которые, как минимум, на основе этого каталога позволяют создать базу с нуля (или сгенерировать скрипты для этого), а также позволяют накатить изменения на любую целевую базу. Вся история изменений и т.д. ведётся, фактически, также как и остальные исходники. И откровенно говоря, гораздо лучше, к примеру, сравнивать программистский текст, скажем, в виде операторов "create table ...", с нужными комментариями и пр., чем пялиться в XML/JSon и т.п.

Я как-то задавался подобным вопросом здесь , там правда речь про FireBird, но тамошнее обсуждение подойдёт под любую SQL-СУБД. Есть там и связанные ссылки по проблеме.

И кстати:
Максим Н...NoSQL можно попробовать. Только вот что? чтобы java-based, embeded и все такое?
Щупал OrientDB, но она (насколько я понял) не умеет с xml-json работать. Т.е. хранить его в качестве value можно, а вот запросы делать...

Я её раньше как-то щупал, была глючная и ломала базы. Её как-то обсуждали здесь , там же рассматривались её конкуренты. Интересно, сейчас её активно пилят, продвижения в плане надёжности имеются ?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38240882
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,

Спасибо за коммент, за ссылки.


PSV100И откровенно говоря, гораздо лучше, к примеру, сравнивать программистский текст, скажем, в виде операторов "create table ...", с нужными комментариями и пр., чем пялиться в XML/JSon и т.п.

Сгласен, я и не собираюсь затирать исходники в xml/json, он мне нужен только для описания структуры sql-файлов.

PSV100Имхо, здесь задета немалая и неоднозначная тема, где нет никакой универсальности. Отсюда и нулевая активность в соответствующем профильном разделе. В этой сфере разброд и шатание. У каждого свои СУБД, со своей спецификой, свои инструменты разработки, разные команды со своими особенностями, разные целевые продукты и т.д. и т.п.

Снова согласен. Однако, не смотря на эти разные специфики раработчики в большинстве случае пользуются ограниченными средствами своей любимой визуальной IDE, которая (по большому счету) умеет только то, что выдирать sql-скрипты создания объектов из БД (причем самымми разными и извращенными методами, можно сравнить это с декомпиляцией исполняемых файлов) и отображать их в скромненьком дереве, структура, типы объектов и другие настройки которого жестко зашиты в программу.


PSV100Я её раньше как-то щупал, была глючная и ломала базы. Её как-то обсуждали здесь, там же рассматривались её конкуренты. Интересно, сейчас её активно пилят, продвижения в плане надёжности имеются ?
Информации по ней достаточно мало, это и отпугивает.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38241105
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,Много говорится о бестпрактис хранения исходников БД в СКВ, причем каждый объект - это отдельный файл и т.д.

Так же есть множество модных (и не очень) деплойеров и changhe manager'ов, которые позволяют управлять изменениями кода БД, собирать дифф-скрипты, накатывать на базы и контроллировать все это дело (Liquibase, dbdeploy, etc).

А есть какая-либо тулза, которая помогала бы непосредственно управлять самим исходным кодом, например:
- Могла набросать каркас из папок и файлов для хранения исходных кодов объектов;

======== PSQDeveloper - пр.клик - создать DDL \ DML

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

=== там же

- контроллировать актуальность хранимых объектов, т.е. следить за тем, что если был удален пользователь, то и все его объекты так же должны пропасть из текущей версии. Если грохнули таблицу, то также удалились ее индексы (которые так же хранятся в отдельных файлах и имеют свою историю изменения).

== ты перепутал ORM с РСУБД. Объекты завися от маппинга. Вариантов маппинга - миллион. Индексы при грохании таблицы удаляются автоматически - если они в БД. Или они где?

imho аффтар! Есть куча идей, которые нужны _многим_ и можно _заработать_
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38241536
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Много говорится о бестпрактис хранения исходников БД в СКВ, причем каждый объект - это отдельный файл и т.д.

Так же есть множество модных (и не очень) деплойеров и changhe manager'ов, которые позволяют управлять изменениями кода БД, собирать дифф-скрипты,
накатывать на базы и контроллировать все это дело (Liquibase, dbdeploy, etc).

А есть какая-либо тулза, которая помогала бы непосредственно управлять самим исходным кодом, например:
- Могла набросать каркас из папок и файлов для хранения исходных кодов объектов;

======== PSQDeveloper - пр.клик - создать DDL \ DML


1. Это СУБД зависимое решение, что если у меня другая СУБД? И (если вы про PLSQLDeveloper), то он еще виндовый и платный.
2. Это GUI, это дело не автоматизируешь и не заскриптуешь (по крайней мере нормально).
3. Это будет уже не совсем ваш код, которым был создан тот или иной объект БД, а DDL\DML будет взят из недр базы
(сшит на основании системных таблиц/представлений, где хранится его описание).
Вроде бы и не страшно, я тоже так думал, пока не столкнулся с этим более тесно,
и сделал для себя несколько выводов, если интересно можно прочитать здесь - http://www.sql.ru/forum/actualthread.aspx?tid=927233



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

=== там же



Средтва IDE (помимо всех прочих недостатков) тупо работают с кодом объектов, созданых в БД, и даже чего то могут с ним делать, но они абсолютно
не осведомлены о логике вашего приложения БД, им на это глубоко всеравно. Они не могут выделить среди всего набора объектов схемы, те объекты,
которые объеденены логически между собой (модули, подмодули и т.д.), а разбиение на схемы, не всегда устраивает.
А что если в моей базе есть свои собственные типы объекты, например включение репликации для некоторых объектов, либо другие какие угодно конструкции.
Или если некоторые объекты должны создаваться не напрямую DML/DDL'ем, а через специальные процедуры-обертки, с регистрацией и т.д.
Например таблицы создаются не напрямую CREATE TABLE'ом, а через обертку (да и такое бывает), а обертка уже создает таблицу в зависимости от настроек
системы, прав и других обстоятельств.
Или для разных баз у меня может отличаться DML (значения справочников, тестовые данные и т.д.), и даже DDL.
Например есть таблица, на тестовом серваке должны быть одни данные в ней, на нагрузочном другие, на продакшене третьи и т.д.
И вот тут то и начинаются проблемы со сборкой базы, а для того чтобы развернуть новую базу делается дамп с одного из продакшенов с "вырезанием"
"не нужных" данных, добавлением "нужных" и т.д. тут возможны варианты.



- контроллировать актуальность хранимых объектов, т.е. следить за тем, что если был удален пользователь, то и все его объекты так же
должны пропасть из текущей версии. Если грохнули таблицу, то также удалились ее индексы (которые так же хранятся в отдельных файлах и
имеют свою историю изменения).

== ты перепутал ORM с РСУБД. Объекты завися от маппинга. Вариантов маппинга - миллион. Индексы при грохании таблицы удаляются
автоматически - если они в БД. Или они где?


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


Я имею ввиду немного другой подход к разработке БД, т.е. не "наклацать кнопок в ГУИ, выгрузить дамп", а работать непосредственно
с исходным кодом объектов БД, версионировать его, логически структурировать его и плясать именно от него, от кода.
И вот данная тулза как раз и должна это делать.

Но возможно это все перфекционизм...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38241555
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЯ имею ввиду немного другой подход к разработке БД, т.е. не "наклацать кнопок в ГУИ, выгрузить дамп", а работать непосредственно
с исходным кодом объектов БД, версионировать его, логически структурировать его и плясать именно от него, от кода.
И вот данная тулза как раз и должна это делать.
Как работать без IDE и ГУИ?
Приведи ВИ \ Прецендент.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38241765
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НЯ имею ввиду немного другой подход к разработке БД, т.е. не "наклацать кнопок в ГУИ, выгрузить дамп", а работать непосредственно
с исходным кодом объектов БД, версионировать его, логически структурировать его и плясать именно от него, от кода.
И вот данная тулза как раз и должна это делать.
Как работать без IDE и ГУИ?
Приведи ВИ \ Прецендент.

Я не хотел сказать, что использовать GUI/IDE это плохо.
Не в коем случае, я и сам ими пользуюсь.
Вопрос в том что на эти инструменты слишком много возлагается полномочий.

ИМХО
есть вещи с которыми они здорово справляются: редактирование кода (со всеми понтами, автокомплитами и т.д.), дебагеры и т.д.
А есть те, для которых они мало подходят. В частности хранение объектов БД и их описаний (они выковыривают это из базы), сборкой скриптов (и др., что я описывал в предыдущем скрипте).
Смысл в том, чтобы хранить объекты в том виде, в котором удобно и как удобно, орагинизовать собственную структуру, а не так как предоставляют это ИДЕшки.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38241839
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим, у меня есть подозрение, что Вы просто неоптимально ими пользуетесь. 3 года разработки под OEBS, PL/SQL Developer, TortoiseSVN, DataPump, Формз и Репортс. - Личный опыт.
Долго сопротивлялся идее босса - "не выдумывайте свое, учитесь пользоваться готовыми, проверенными решениями".

Удачи в разработке.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38241912
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovМаксим, у меня есть подозрение, что Вы просто неоптимально ими пользуетесь. 3 года разработки под OEBS, PL/SQL Developer, TortoiseSVN, DataPump, Формз и Репортс. - Личный опыт.
Долго сопротивлялся идее босса - "не выдумывайте свое, учитесь пользоваться готовыми, проверенными решениями".

Удачи в разработке.
+1

аффтар!
Ведь ещё есть для взрослых:
AllFusion ERwin Data Modeler (ранее: ERwin)
http://www.interface.ru/fset.asp?Url=/ca/erwin.htm
вместе с его Merge и многопользователской работой по сети для одного проекта
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242019
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим Н...
1. Это СУБД зависимое решение, что если у меня другая СУБД? И (если вы про PLSQLDeveloper), то он еще виндовый и платный.
2. Это GUI, это дело не автоматизируешь и не заскриптуешь (по крайней мере нормально).
...

Под FireBird есть IDE: IBExpert, он может скриптоваться. У него (кроме типового функционала) есть хорошая фишка - он сам занимается полным разбором текста SQL, полностью его понимает, может, скажем, сравнить объекты в БД, объект с его SQL-кодом, сами SQL-скрипты и пр., и выдавать diff-ы, к примеру. Кое-как можно всякого запрограмлять себе, но всё равно, ограниченно. В этом плане ничего мощнее под другие СУБД как-то не попадалось, как GUI-IDE (там, кстати, есть и консольные утилиты).

А в целом, все выше по постам перечисленные проблемы знакомы. Плюс у меня имеется историческая специфика, где много логики внутри базы (т.е. есть не только таблицы), много целевых баз для постоянной модификации, которые не являются как бы копией по метаданным относительно эталона (т.е. может быть только часть прикладных модулей, на местах свои разработчики могут расширять или изменять функционал и пр.). Именно поэтому в своё время и пришли к тому, что базу данных нужно именно полноценно программировать (под свои нужды). Готового решения не нашли, всякие ORM-ы, визуальные моделеры и пр. далеки до нужного функционала.
Максим Н...
Сгласен, я и не собираюсь затирать исходники в xml/json, он мне нужен только для описания структуры sql-файлов.
...

У нас, кстати, как-то задолбало то, что нужно ещё и вести некое дополнительное описание структуры SQL-проектов. Выкрутились через стандарты именования, т.е. строго предопределенная структура каталогов (папок), свои принципы для именования объектов в БД и для имён SQL-файлов и пр. (т.е. стандарты всё-равно нужны, и лучше когда они реально помогают, но не всё можно отразить только через имена, к примеру, зависимости между SQL-файлами у нас может быть прописана в спец-комментариях).

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

Если универсальная утилита должна не зависит от СУБД, то, имхо, совсем тяжко. Тут, похоже, только синтаксис комментариев может быть общий у разных СУБД, остальное мрак. Может быть и есть смысл ввести спец-комментарии в текст SQL. Например, упомянутый IBExpert чуть расширяет язык, где в т.ч., например, через комментарии можно указать условия для выполнения команд. Или та конторка, чей файлик со стандартом разработки я выкладывал (см. выше) также делилась и препроцессором, который обрабатывал SQL-скрипты с комментариями-ключами для условной компиляции, и на выходе выдавал готовый скрипт (если есть желание, могу поделиться им).

А так, действительно, не хватает удобного инструмента, который на основе набора SQL-исходников делал бы и накаты изменений, и откаты, и создание с нуля, и сравнение и т.д. и т.п. Хотя бы для базиса требуется создание базы с нуля и накатывание изменений на существующую. Причём с учётом зависимостей, наличия настраиваемых условий. И если уж ориентироваться на ручное программирование, то желательно изобретение некоего своего DSL, где бы в дополнение к основному тексту SQL, специфичному под конкретный сервер, нужно добавить универсальное SQL-расширение: настроечные параметры, условия для выполнения, зависимости между SQL-файлами (как модулями проекта), универсальные операторы включения/вызова скриптов (а-ля input/import/uses и т.п.). Возможно, пусть это будет внутри комментариев, если проще реализовать (или чтобы "левые" операторы не ломали исходный SQL, иначе всегда требуется предобработка, если текст подавать для стандартного инструментария при сервере). Можно подкрепить ведением документации а-ля pldoc . Связываться с правкой того же XML вручную - как-то нет желания. Если, скажем, нужен XML для какого-нибудь liquibase, то пусть он формируется автоматически.

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

Как-то так.

PSV100Я её раньше как-то щупал, была глючная и ломала базы. Её как-то обсуждали здесь, там же рассматривались её конкуренты. Интересно, сейчас её активно пилят, продвижения в плане надёжности имеются ?

Максим НИнформации по ней достаточно мало, это и отпугивает.

Ага, OrientDB концептуально интересна, но в плане технической реализации настораживает.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242098
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В той теме в стартовом посте приложен архив, где есть пример некоего стандарта для разработки. В своё время он дал толчок для действий.
В той теме в качестве варианта 4 вы изложили абсолютно правильный вариант разработки. Чем он вас не устраивает?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242102
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим, у меня есть подозрение, что Вы просто неоптимально ими пользуетесь.
Том Кайт писал, что использует для разработки только vi, sqlplus и rlwrap.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242106
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо нужен какой-то скрипт ddl/dml, который при исполнении транслируется в язык конкретной субд, сильно похожий на liquibase (а может там уже есть такая трансляция?).
Манипулировать "объектами" СУБД, путем текстоподобного сравнения не корректно, потому что не покрывает такой простой случай например как переименование поля.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242125
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому нужен ЯП он есть в Егwin'e.
Только это все таки инструмент не Jav'иста а Разработчика Бд..
Велосипед.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242200
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovМаксим, у меня есть подозрение, что Вы просто неоптимально ими пользуетесь. 3 года разработки под OEBS, PL/SQL Developer, TortoiseSVN, DataPump, Формз и Репортс. - Личный опыт.
Долго сопротивлялся идее босса - "не выдумывайте свое, учитесь пользоваться готовыми, проверенными решениями".

Удачи в разработке.

Может и не оптимально, может чего то основоплогающего не помогаю, вот и пристаю к людям на форумах, спасибо вам :)

Но я не говорю о каком либо заменителе, или о кардинально новом подходе, не говорю, что все инструменты плохие, а мой (который есть у меня в основном пока только в голове) хороший.
Это просто небольшая утилитка, которая может помочь (а может и не помочь) разработчикам БД в организации хранения и управления исходным кодом объектов.
Особенно если это не одна боевая база, а например тиражируемое приложение, когда нужно обновлять и поддерживать их сразу несколько, когда нужно иметь возможность быстро развернуть новую свежую базу с нужными характеристиками.
На одной из моих работ поддерживали и разрабатывали приложение у которого было 200+ баз, однотипных, но каждая со своими особенностями, со своим набором справочных данных и т.д. Здесь разработка уже не сводилась к прощелкиванию в дизайнере и выгрузке дампов.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242203
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪТом Кайт писал, что использует для разработки только vi, sqlplus и rlwrap.

Ага, и в современном vim-е из коробки есть универсальный плагин для работы с SQL-серверами, правда лично я его не использовал.

Йуный джавистЪВ той теме в качестве варианта 4 вы изложили абсолютно правильный вариант разработки. Чем он вас не устраивает?

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

А в качестве универсального тулза, имхо, на первый этап нужна генерация SQL-скриптов на основе каталога исходников. Например, пусть есть каталог исходников. Его логическая структура как-то предопределена, скажем, выделены некие логические SQL-модули, как простой вариант - сама структура папок определяет модули-подмодули (типа какие-то пакеты), или структура проектов описана как-то отдельно. Тулзе дали команду сформировать sql-скрипт для создании базы с нуля, но при этом указали, что нужны только модули XX и YY. Тулза должна понять, что нужно выгребать текст для этих модулей, но т.к. эти модуля имеют некую зависимость от модуля ZZ (скажем, общие справочники, вычисления и пр.), то она также должна вычислить какую часть из ZZ нужно подхватить, и дальше разрулить зависимости. Или дали команду сформировать скрипт для наката изменений в базу. Тулза должна определить, какие модули установлены в базе, их версии, и на основе скриптов для наката изменений (из того же каталога исходников) должна сформировать нужный скрипт (или их структуру), опять же с учётом указанных целевых модулей и их зависимостей. Тулзе не важно, что прописано в самих sql-файлах. Скажем, таблицы можно создавать через явные "create table ..." или где-то будет реализация какой-то хранимки, которая выполняет всякие вычисления/анализ и сама занимается генерацией текстов нужных SQL. Тулза должна понимать некие правила как соединять/обрабатывать исходные sql-файлы, правила задаются под сервер СУБД (или проект). Зависимости, например, проще указывать между sql-файлами, вида import <такой-то файл/ы> (или что-то подобное). Можно в начале файла, как псевдо-SQL оператор или в виде спец-комментария (особенно, если ещё будет система вида java-доков). Или зависимости тоже где-то отдельно прописываются (хотя, чем проще, тем лучше). Как бонус, м.б. есть некая потребность в препроцессоре, где на основе спецкомментариев можно делать свои вычисления, с учётом возможных параметров настроек для проекта, конкретной команды запуска и т.п. Полезно, если СУБД не имеет развитых средств для SQL-логики (к примеру, нет операторов вида: if <условие> then <что-то create>), или нужен универсальный код под разные СУБД/проекты.
Как-то так.


А вообще-то, согласно той темы, хочется варианта 1, когда есть единая платформа разработки под все нужды. Всякие ORM-ы нужного варианта не дают, в большинстве случаев кроме таблиц они мало о чём знают, в качестве управления базой смогут сделать drop всему и create всё заново. Остальное sql-лить ручками. Некоторые дают немного програмлять, например, в виде классов-миграций с методами up/down до нужных версий, но всё-равно это только малая часть потребностей (и то не фонтан), от sql не избавляют.

Когда-то под jvm попался проектик на кложуре, типа мечта. Ссылку потерял, быстро найти не получилось (и названия не помню), да и когда смотрел он, похоже, был уже заброшен, функционал был в зачаточном состоянии, и то, больше задекларирован только. Это некий аналог Clojure -> JavaScript, т.е. Clojure -> SQL, в частности всё затачивалось под postgres, причём не только работа с таблицами, но и остальные объекты (триггеры, функции и пр.). Т.е. пишется всё на одном коде, и сервер приложения, и база програмляется, с версиями, генерируется код как для модификации таблиц, так и для остального (но ограниченно, конечно). Но, опять же, это не очень универсально, и даже специфично, ибо, прежде всего, это кложура, т.е. лисп.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242216
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Vladimir BaskakovМаксим, у меня есть подозрение, что Вы просто неоптимально ими пользуетесь. 3 года разработки под OEBS, PL/SQL Developer, TortoiseSVN, DataPump, Формз и Репортс. - Личный опыт.
Долго сопротивлялся идее босса - "не выдумывайте свое, учитесь пользоваться готовыми, проверенными решениями".

Удачи в разработке.
+1

аффтар!
Ведь ещё есть для взрослых:
AllFusion ERwin Data Modeler (ранее: ERwin)
http://www.interface.ru/fset.asp?Url=/ca/erwin.htm
вместе с его Merge и многопользователской работой по сети для одного проекта

Ну это совсем для взрослых, я еще не дорос.


А мерджи это вообще дело очень спорное, бд-зависимое и вообще неблагодарное.
Может к каким то задачам и подойдет (наверняка), но не панацея (как и любой другой инструмент).
Тем более, что вариантов обновления объектов может быть очень много, и они могут зависить от логики приложения, а не только от синтаксиса СУБД.

И я никогда не понимал, как можно визуально надизайнить таблички, если в оракловой (например) документации сухое схематичное описание оператора "create table" состовляет около 20 страниц? И это уже не говоря про кластерные таблицы и другие особенности, которыми обладает каждая СУБД.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242221
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ той теме в стартовом посте приложен архив, где есть пример некоего стандарта для разработки. В своё время он дал толчок для действий.
В той теме в качестве варианта 4 вы изложили абсолютно правильный вариант разработки. Чем он вас не устраивает?

Мне тоже близок этот вариант, но для этого, имхо, нужен хороший регламент и хороший инструмент, который бы все это дело поддерживал.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242285
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор. Тулзе дали команду сформировать sql-скрипт для создании базы с нуля, но при этом указали, что нужны только модули XX и YY. Тулза должна понять, что нужно выгребать текст для этих модулей, но т.к. эти модуля имеют некую зависимость от модуля ZZ (скажем, общие справочники, вычисления и пр.), то она также должна вычислить какую часть из ZZ нужно подхватить, и дальше разрулить зависимости.
Такая тулза есть, называется make, ну или аналоги. Пример мейкфайла:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
%.sql:
	cat $@ >> result.sql

foo.sql: bar.sql qux.sql
bar.sql: baz.sql
quux.sql: bar.sql

RELEASE: foo.sql


Этот файл значит, что foo.sql зависит от bar.sql и qux.sql, bar.sql зависит от baz.sql, а quux.sql от bar.sql. Таким образом прописываете все зависимости. В релиз должен попасть модуль foo.sql со всеми зависимостями (включая транзитивные).
Теперь, чтобы получить релиз, запускаете
Код: sql
1.
make --always-make RELEASE


И получаете итоговый скрипт в файле result.sql. В этом файле будет только тот код, который вытягивается по зависимостям (quux.sql туда не попадет), и в нужном порядке.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242292
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ,

Интересно, но я думаю PSV100 говорил об автоматическом выявлении зависимостей, а это уже немного сложнее.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242302
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Йуный джавистЪТом Кайт писал, что использует для разработки только vi, sqlplus и rlwrap.

Ага, и в современном vim-е из коробки есть универсальный плагин для работы с SQL-серверами, правда лично я его не использовал.


Для Oracle есть Vim-плагин Vorax, хорошая штука.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242624
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НPetro123пропущено...

+1

аффтар!
Ведь ещё есть для взрослых:
AllFusion ERwin Data Modeler (ранее: ERwin)
http://www.interface.ru/fset.asp?Url=/ca/erwin.htm
вместе с его Merge и многопользователской работой по сети для одного проекта

Ну это совсем для взрослых, я еще не дорос.


А мерджи это вообще дело очень спорное, бд-зависимое и вообще неблагодарное.
Может к каким то задачам и подойдет (наверняка), но не панацея (как и любой другой инструмент).
Тем более, что вариантов обновления объектов может быть очень много, и они могут зависить от логики приложения, а не только от синтаксиса СУБД.

И я никогда не понимал, как можно визуально надизайнить таблички, если в оракловой (например) документации сухое схематичное описание оператора "create table" состовляет около 20 страниц? И это уже не говоря про кластерные таблицы и другие особенности, которыми обладает каждая СУБД.
странные вы люди.
Есть инструмент крупной фирмы, которая на рынке была и в первом и во втором тысячилетии.
ErWin (младшей версии)
Он как раз и делает скрипты независимо от БД по модели. Есть обратный процесс реинжинеринг.
Делай свою утилиту....
Этот тоже самое что делать свой Dream для дизайна HTML.
ЗЫ.
В начале топика ты про мерже и писал....как о Цели.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242716
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123странные вы люди.
Есть инструмент крупной фирмы, которая на рынке была и в первом и во втором тысячилетии.
ErWin (младшей версии)
Он как раз и делает скрипты независимо от БД по модели. Есть обратный процесс реинжинеринг.
Делай свою утилиту....
Этот тоже самое что делать свой Dream для дизайна HTML.
ЗЫ.
В начале топика ты про мерже и писал....как о Цели.
+ 100500
Есть еще аналогичные продукты - например PowerDesigner или Database Visual Architect. И разработать какой-то аналог даже в первом приближении - это не "небольшая Java-утилита". В частности, например, получить разностный скрипт по 2-м моделям - аналог diff в терминах SQL. В общем случае весьма не триваальная вещь...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242753
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В частности, например, получить разностный скрипт по 2-м моделям - аналог diff в терминах SQL. В общем случае весьма не триваальная вещь...
Зачем это может понадобиться?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242755
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123странные вы люди.
Есть инструмент крупной фирмы, которая на рынке была и в первом и во втором тысячилетии.
ErWin (младшей версии)
Он как раз и делает скрипты независимо от БД по модели. Есть обратный процесс реинжинеринг.
Делай свою утилиту....
Этот тоже самое что делать свой Dream для дизайна HTML.
ЗЫ.
В начале топика ты про мерже и писал....как о Цели.

Наверняка ErWin это отличная вещь, которая избавит от многих проблем разработки БД, я по этому поводу и не спорю.
Но не везде есть возможность ею воспользоваться.
Если проект уже давно разрабатывается (с использованием других средств и методик) и там нет уже ни времени, ни возможности, а самое главное резона, внедрять ErWin (как в моем случае), то возникает множество описанных и ненадуманных мною проблем (хотя я думаю и с ErWin они тоже будут возникать, но утверждать не берусь, я с ним не знаком, пока).
Либо если разрабатывается БД для мелких и средних приложений, либо для опен сурс, вобщем когда нет возможности приобрести лицензию.

И самое главное, я говорю о совершенно другом инструменте нежели ErWin (или любые другие дизайнеры, ИДЕ, ГУИ, мерджеры и т.д.).
Не предпологается генерировать скрипты, делать мерджи и т.д., это задача программиста и специализированных средств, я говорю только об управлении уже полученными скриптами и о их структуризации.
И то что эта утилита теоретически может быть полезна (но я это не утверждаю, практика покажет, если не заброшу) в проектах где БД именно программируются, где работают с исходниками, собирают различные версии и т.д.

ЗЫ
Возможно в начале топика ввел в заблуждение, но о мердже я не писал, это целью не было и не будет.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242771
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100У нас, кстати, как-то задолбало то, что нужно ещё и вести некое дополнительное описание структуры SQL-проектов. Выкрутились через стандарты именования, т.е. строго предопределенная структура каталогов (папок), свои принципы для именования объектов в БД и для имён SQL-файлов и пр. (т.е. стандарты всё-равно нужны, и лучше когда они реально помогают, но не всё можно отразить только через имена, к примеру, зависимости между SQL-файлами у нас может быть прописана в спец-комментариях).

Я как раз собиался хранить описание проекта в xml'ях. Например отдельно документ с типами объектов и документ с модулями.
О привязке к именам тоже подумаю.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242816
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,

Я так понял, речь идет о системы миграции схемы БД. Чем плохи существующие решения - liquebase и dbmaintener ?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242820
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ частности, например, получить разностный скрипт по 2-м моделям - аналог diff в терминах SQL. В общем случае весьма не триваальная вещь...
Зачем это может понадобиться?
Вообще-то так работают с этими инструментами. Была модель A. Поменяли ее на модель B. Генерим скрипт на конверт модели A в модель B. Скрипт в версию и далее по цепочке.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38242884
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvМаксим Н,

Я так понял, речь идет о системы миграции схемы БД. Чем плохи существующие решения - liquebase и dbmaintener ?

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

Я так понял, речь идет о системы миграции схемы БД. Чем плохи существующие решения - liquebase и dbmaintener ?

Нет, не о ней. Просто об утилитке, которая поможет организовать удобное и продуманное хранение исходников БД, и дальнейшую работу с ними.
А уже к этому всему можно и инструменты миграции применять и все что угодно.
А что еще можно делать с исходниками БД, кроме как миграции (т.е. изменения схемы)?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38243183
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvМаксим Нпропущено...


Нет, не о ней. Просто об утилитке, которая поможет организовать удобное и продуманное хранение исходников БД, и дальнейшую работу с ними.
А уже к этому всему можно и инструменты миграции применять и все что угодно.
А что еще можно делать с исходниками БД, кроме как миграции (т.е. изменения схемы)?

Вроде здесь объяснил вкратце - 14235151 .
Если не понятно расскажу более подробно.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38243436
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,

я стесняюсь спросить, но разве ваша задача не решается просто структурой каталогов и натравливанием git или mercurial ?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38243459
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НLeonidvМаксим Н,

Я так понял, речь идет о системы миграции схемы БД. Чем плохи существующие решения - liquebase и dbmaintener ?

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

я стесняюсь спросить, но разве ваша задача не решается просто структурой каталогов и натравливанием git или mercurial ?

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

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

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



ПС
Об идее хранения информации о каждом файле в какой-нибудь бд или файле я действительно уже отказался, незачем, все и так лежит в репозитории.

Пока остановился на 2-х конфигурационных xml-файлах:
1. типы объектов БД (из каких файлов состоит, в каких папках находится и т.д.)
2. модули приложения БД
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38243841
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovМаксим Нпропущено...


Нет, не о ней. Просто об утилитке, которая поможет организовать удобное и продуманное хранение исходников БД, и дальнейшую работу с ними.
А уже к этому всему можно и инструменты миграции применять и все что угодно.
Я конечно ужасный зануда, но по поводу исходников есть же версионники, с методичками по их использованию?



Хороший вопрос, думаю в предыдущем посте ( 14243675 ) я на него ответил.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38243856
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
- скриптов должна быть пара - накат и откат
- скрипты группируют не по таблицам, а по атомарности - версии.
Т.е. имя папки - версия.
Для того чтобы не путали - есть системы контроля версий, сборщики, тестировщики, руководители проектов.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244343
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪ...
Такая тулза есть, называется make, ну или аналоги. Пример мейкфайла:
...

Кстати, в своё время думали и над make-ом, а также к нему и си-шный препроцессор или аналог прикрутить. Но не нашли счастья в таком решении.


Я не приветствую здесь некоторую иронию в сторону автора этой темы, лично я разделяю его взгляды и попытки упростить жизнь. Ещё раз обращаю внимание, что речь идёт о существенных и тяжёлых проблемах при разработке БД, но с которыми, имхо, немалая часть разработчиков может и не сталкивалась в своей практике (возможно, лишь пока). Например, в моём случае есть огромные проблемы, когда целевая рабочая база для обновления не является условной копией (по метаданным) исходной эталонной (используемой при разработке). Т.е., как правило, чаще всего целевая база лишь некое подмножество исходного эталона, содержит только часть прикладных логических модулей (при этом взаимосвязанных). Кроме того, разработчики на местах могут расширять функционал, или вносить свои изменения. Причём существует вариантность одного и того же функционала в разных целевых базах, скажем, структура одной и той же таблицы отличается в зависимости от потребностей в каждом конкретном случае на местах, или код какого-нибудь триггера везде разный и т.д. и т.п. Утяжеляет ситуацию то, что целевых баз немалое количество, и процесс разработки/обновления, фактически, беспрерывный. Да и сами базы содержат немало логики внутри (такова историческая особенность), т.е. далеко не только таблицы с индексами, да и объектов в базе далеко не одна сотня и более. В этом случае многие стандартные/популярные средства вокруг серверов СУБД мало эффективны/неудобны или вовсе неработоспособны. В такой ситуации лично у меня большая нелюбовь ко всяким визуальным дизайнерам, от них гораздо больше мороки, чем пользы. Многие популярные средства для миграций типа liquebase, dbmaintener, dbdeploy и т.д. тоже хреновые помощники, ибо часто они не умеют работать с хранимками, триггерами и пр. (во всяком случае, адекватно) или требуют для этого того же ручного SQL-кодирования. Кроме того, они сами по себе нуждаются в некоем механизме для целеуказания, т.е. готовить "в лоб" вручную для них XML/json/sql-файлы и пр., требуемых на их входе, неудобно/проблематично.

Это часть айсберга, сам по себе и процесс разработки БД требует эффективности. Я хочу попытаться поделиться (упрощённо) со своими идеями насчёт некоего универсального тулза для облегчения жизни, с учётом своего опыта и уже имеющихся решений. Вокруг этого тулза частенько летают мысли, но до конкретных действий всё дело не доходит. Может быть, автору этой темы что-то пригодится для своих потуг, а если будет критика и конструктив, то буду весьма признателен.

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

Итак, всё рассчитано на разработку SQL-исходников "вручную", с некоторыми помогалками (об этом ниже). Глобально исходники делятся на две части: для создания БД с нуля, назовём её как create-часть, и исходники для изменения БД (накаты версий) - update-часть.

Забегая вперёд скажу, что я не буду говорить об операции отмены изменений, т.е. об откате версий. Прежде всего, по опыту - системы миграций используются в 99.99% случаев для наката последних изменений, т.е. для приведения базы в текущее актуальное состояние. Если требуется откаты изменений, то фактически это вырождается к созданию соответствующих новых правок в БД, и, как правило, всегда требует отдельной работы ручной кувалдой (ибо далеко не всегда просто это сделать). К тому же не всегда можно адекватно в общем случае отобразить парную операцию отката, скажем, для операции drop такой-то столбец в таблице - как для него написать парный откат, т.е. alter такой-то таблицы, где добавили столбец, но как восстановить данные? Т.е. требуются дополнительные телодвижения, специфичные для конкретного случая. Но на представленных здесь принципах вполне похоже реализуется и автоматическая операция отката, тем более закладывается возможность дополнительного программирования (см. ниже). Так что некий автоматический откат возможен, но я на нём не акцентирую отдельного внимания с целью здешнего упрощения.

Итак, структура исходников важна. Предлагается sql-файлы располагать по подкаталогам в зависимости от логического деления функционала, т.е. выделять некие логические модули (типовое решение для многих случаев). При этом крайне желательно выделять каждый объект в БД или группу крепко связанных друг с другом объектов в каждом отдельном SQL-файле (но важно не смешивать объекты разных функциональных типов). Например, можно вместе указать парочку таблиц, которые друг без друга ни как. Можно вместе с таблицей поместить и её индексы, а в то же время может возникать потребность указать некоторые индексы отдельно, скажем, в другом прикладном модуле (т.е. индексы должны создаваться только при наличии в БД определенного модуля) и т.д. В "create-части" в SQL-файлах указываются операции DDL для создания объектов, причём всегда в текущем актуальном состоянии.

"update"-часть содержит точно такую же структуру каталогов, как и "create-часть", и содержит sql-файлы для наката (возможно и отката) изменений в БД. При этом update-файл как бы является парным для соответствующего create-файла (т.е. некий аналог си-шного заголовка и его c/cpp-реализации). Внутри update-файла содержатся DDL-операции для модификации созданного объекта, в нужной последовательности с метками версий, при этом есть копия DDL для самого первого варианта облика этого объекта (т.е. стартовый DDL). Примерно так (для таблицы):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#ver 2013-04-29.000

create table ...    -- здесь исходный оператор (нулевая или базовая версия объекта)


#ver 2013-04-29.001

alter table ...     -- новая версия 001


#ver 2013-04-29.002

alter table ...;     -- новая версия 002
alter table ...;



Синтаксис меток, что там должно быть указано - номер, дата, автор и т.д. - пока опускаем (всё должно настраиваться). При этом парный create-файл на данный момент должен содержать оператор "create table ..." согласно последней версии.

Сейчас подобный подход используется на практике, но за исключением истории изменений. Сейчас каждая правка объектов оформляется отдельными файлами, формируется его спец-имя (содержащая инфу про версию), складываются изменения в спец-каталоги (в зависимости от дат, версий и пр., в общем, есть по-всякому). Мне кажется, что концептуально иметь только два файла - "create" и "update", т.е. как некий аналог си-шной разработки - проще, меньше плодятся файлы, к тому же в одном файле сразу можно изучить всю историю и т.д. Не исключено, что историю можно разделять на два и более файлов, главное, чтобы тулза понимала.

Не все create-файлы могут иметь парный свой "update". Например, плодить текст процедуры/триггера как-то геморно, явно размазывая его по истории. В этом случае лучше поступать также как с обычными исходниками приложений, т.е. править только create-файл, он всегда содержит текущую версию. Если нужно получить какую-то версию, то извлекаем её из системы контроля версий исходников, в т.ч. можно извлечь в сторонке сразу весь набор sql-каталога требуемой версии. Когда тулза делает накаты изменений, то она должна понимать, что явной истории (update-файла) может не быть. В этом случае важно иметь правильный DDL-оператор (вида, "create or replace/alter ...", т.е. выполняемый многократно).

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

Тулза должна иметь как минимум две операции: создание базы с нуля и выполнить накат изменений. Для создания базы обрабатываются create-файлы, для накатов - update-файлы, с учётом того, что их может и не быть, и сам create-файл есть последняя версия. Естественно, внутри БД необходимы специфичные таблицы, где будут фиксироваться проведенные действия, в т.ч. и версии примененных sql-файлов (а точнее, версии действий внутри этих файлов). Кроме того, важно, чтобы была возможность выполнять частичные операции, т.е. отдельно в разрезе прикладных модулей. К примеру, обновить модули/подмодули только XX и YY, при этом тулза должна понять, что, например, модуля YY ещё нет в целевой базе, соответственно для него нужен "create". Или тулза должна понять при обновлении, что база содержит только модуля XX и YY, остальные в неё вносить нельзя. И т.д.

Для тулса важно понять как строить последовательность действий. Для этого ей важно понимать тип sql-файла, т.е. что в нём может содержаться. Для этого можно применить несколько способов:

- через стандарты именования файлов. К примеру, файлы для создания/модификации таблиц можно задать как-то так: xx_foo_tbl.sql, где "xx" - имя прикладного модуля/подмодуля, "foo" - имя таблицы, "tbl" - признак, что это таблица. Или таблицы не имеют суффикса, а все остальные имеют: sp - stored procedure, biu_03 - триггер before insert or update position 3 (добавляется к имени таблицы) и т.д. Или через расширения: xx_foo.tbl, или двойное - xx_foo.tbl.sql
Короче говоря, всё настраивается;

- с помощью дополнительного описания в виде каких-то файлов проекта, свой DSL-велосипед или стандарт а-ля XML/json;

- с помощью явного управления файлами, к примеру, некоего оператора "input/include <файл>" (что часто имеется во многих sql-тулсах).

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

Если тулса сама строит последовательность действий, то она должна понимать, что, например, сначала нужно выполнить глобальные объявления (типы/домены, переменные и пр.), затем, скажем, создать таблицы, потом - заголовки процедур/функций/пакетов или что-то в этом роде, затем - их тела и т.д., триггеры, где-то под конец строить индексы, выполнять пользовательские вычисления (тот же insert данных в таблицы) и т.д. Короче говоря, это настраивается, как минимум, эти правила СУБД-зависимые.

Чтобы правильно выполнять все выкрутасы выше важно понимать зависимость между прикладными модулями. Задать можно по-разному. Частично что-то можно понять автоматически через инфу в метаданных у БД, т.е. зависимость между таблицами, какие таблицы использует такая то хранимка и т.д. Но это не та зависимость, эти механизмы лишь могут помочь для указания зависимости между своими логическими sql-модулями. К тому же, часто нет технической связи между объектами внутри БД согласно метаданным, но эти объекты используются приложением/сервером приложений, поэтому логические связи нужно указывать явно (или через помощников, об этом далее). И, если, скажем, указали, что модуль XX требует для своей жизни модуля YY, то тулса должна не забыть, что если ей при операции не указали явно модуль YY, то она должна его учитывать, причём в первую очередь, ну и все связи по цепочке.
Сами связи можно указывать, к примеру, в файлах проекта, если они используются. Или, если стремиться к минимуму, то можно прописывать внутри исходников. Пусть файл вида "xxx.sql" (без лишних суффиксов/префиксов и пр.) означает логическое объявление самого модуля XXX, где, как правило, будет соответствующая описательная документация, некие глобальные объявления, настроечные вычисления и т.п. И где-то, пусть в начале, будет указан спец-оператор вида:

#uses YY, ZZ

(или import (хотя это как бы не то), using, require или что-то по вкусу). Зависимости указываются в разрезе логических единиц, т.е. модулей/подмодулей, которыми и оперируют в рамках создания/обновления баз.

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

- препроцессор. Вполне сгодится по си-шным мотивам: #if, #ifdef, #elif, #else, #endif, #define, некий #undef и пр.

Т.е. даётся возможность для условной компиляции, использованию макросов (в т.ч. с параметрами), можно реализовать некие настроечные параметры, задаваемые в исходниках и чьи значения можно устанавливать/переопределять через ключи в командах тулсы. Как это может выглядеть - см. ниже;

- средства для автогенерации кода. На своей практике неплохо прижился подход, как в Cog - кодогенератор под питон. Вот картинка оттуда:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// This is my C++ file.
...
/*[[[cog
import cog
fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']
for fn in fnames:
    cog.outl("void %s();" % fn)
]]]*/
//[[[end]]]
...



Что превращается в:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// This is my C++ file.
...
/*[[[cog
import cog
fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']
for fn in fnames:
    cog.outl("void %s();" % fn)
]]]*/
void DoSomething();
void DoAnotherThing();
void DoLastThing();
//[[[end]]]
...



Думаю, идея понятна. Питон не обязателен, можно задействовать что угодно. Есть смысл подогнать синтаксис под препроцессор и увязать с прочими внутренними командами, т.е. как-то так:
Код: sql
1.
2.
3.
4.
5.
  #[[
      <код> 
  ]]
  ...
  #go  -- как аналог go или "/" во многих sql-консолях



В общем, синтаксис нужно адаптировать, чтобы не было конфликтов с глобальным SQL. Возможно, что всё внутреннее для тулсы нужно именовать со своего внутреннего префикса, как это делают ряд универсальных инструментов, вида SQL Workbench/J . Пока сказанное только концепт, сейчас это не важно.

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

Также в тулсе очень не помешает поддержка документации на основе комментариев. Я уже давал пример: pldoc . Вместо синтаксиса JavaDoc можно воспользоваться из LuaDoc, т.к. есть близость комментариев: "--" вместо "//".

А если ещё будет поддержка средств для форматирования текста - вообще замечательно.


Теперь о том, в каком соусе всё это (возможно) нужно. Если говорить о реализации под java, то ядро системы должно быть относительно независимо, т.е. иметь потенциал для создания как самостоятельного приложения (под консоль), так и куда-то встраиваться. Желательно иметь возможность для создания плагинов для всяких IDE, не помешает связь с уже имеющимися там плагинами для работы с SQL-серверами. Плюс желательна реализация самостоятельного сервера, по типу сервера в эмакс или JEdit, чтобы он висел себе и реагировал на команды, постоянно не перезапускаясь, не разрывал соединение с базой и т.д. Иными словами закладывается возможность работы как в командной строке, так и интерактивно из редакторов/IDE. Например, в своём любимом редакторе выделил текст, клацнул - и текст преобразовался - т.е. получил кодогенерацию. Или из редактора выполняешь запросы к базе с учётом обработки препроцессора, или получаешь обработанный текст запроса, и т.д. и т.п.

При этом важно иметь расширяющийся функционал, в виде каких-то бинарных плагинов, а также в виде поддержки скриптования, как на BeanShell-е (чтобы "скриптовать" на самой java как языке), так и остального груви, руби, питона и пр. Это даст потенциал для создания универсальных плагинов под разные СУБД, библиотек/фреймворков и т.д. (хотя если вдруг проект потенциально пойдёт в жизнь, то потребность в развитии будет аховая, особенно если развивать интерактивную часть, типовые БД-консольные команды будут обязательными, форматированный вывод в виде текста, XML, HTML и т.д., хочется и автокомплита). Очень помогает (или фактически обязателен) для плагинов набор API для парсинга текста (он всё-равно есть в потрохах), чтобы анализировать имеющийся sql-текст и т.д.

Вот такой концептуальный взгляд. В своё время много думалось над потенциальном упрощением, о некой реализации по мотивам крутых sql-инструментов. Например, реализовать полный разбор SQL. Тогда, скажем, есть возможность упростить написание "update"-части, сократив её до минимума. Например, тулса может сделать разбор оператора "create table ..." в sql-исходнике, с учётом препроцессора и кодогенерации, сравнить с тем, что есть в базе и выполнить или сформировать нужные "alter table ...". Вроде гораздо меньше писанины при разработке в итоге, но есть и минусы:

- реализация полноценного и всеобхватывающего разбора SQL - задача неслабая, особенно под разные СУБД;
- не всегда существует один единственный способ для операций, скажем, те же таблицы можно создавать по-разному, в т.ч. и через процедуры на сервере, которые сами генерируют текст SQL-кода и его исполняют (если СУБД такое позволяет). Иными словами тогда необходимо вводить ограничения для sql-вольности (хотя те же препроцессор с кодогенерацией частично облегчают жизнь);
- операции по обновлению баз становятся непростыми (по технической реализации), довольно медленными, в некоторых случаях легко получить неприемлемое время для update базы, а то и вовсе всё может загнуться.

А представленный текущий вариант имеет недостаток: весьма проблематично выявить, что после внесения изменений в базу их никто не правил, каждый следующий накат опирается на то, что состояние базы такое же, как и после внесения последних изменений. Проблема решается дополнительными телодвижениями, к примеру, можно создать базу из исходников, с учётом всех нужных настроек и сравнить с тем (через стандартный/типовой придворный инструментарий), что есть в рабочей базе (в её копии) после актуального наката.



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


Ниже я даю ссылку на архив, где есть пример SQL-препроцессора. Делала его когда-то некая конторка "Олис" в лохматых 90-х, он простой, но не потерял своей актуальности, это пример, как можно выкручиваться. В архиве также документик-проект по некоему стандарту проектирования БД от тех же авторов. Якобы всё заточено под InterBase, но там фактически только одна особенность: обрабатывается команда input <путь\файл>, в остальном - к SQL тулса нетральна. Есть особенность в синтаксисе самих директив и макросов препроцессора, ибо делалось по подобию Delphi. Сейчас сайта авторов давно нет, раньше всё было свободно доступным, поэтому надеюсь, что авторы заочно не против публикации их труда.

P.S. Сорри, что много букв (меня самого задолбало набирать). Сорри, что возможно это и офтоп, хотя эта тема форума пошла в такое русло. Просто подобные темы задевают за живое, ибо адекватного решения проблем пока нет.

Скачать: SQLPrecompile
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244380
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая тулза https://code.google.com/p/sqlmake/ под оракл, может быть вам будет интересно (я не пользовался).
Вообще, конечно, у вас жесткая задача: разные СУБД, разные сборки одного продукта.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244439
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪЕсть такая тулза https://code.google.com/p/sqlmake/ под оракл, может быть вам будет интересно (я не пользовался).

Ага, спасибо. Посмотрю. На первый взгляд хорошо то, что нет лишней XML-лабуды.

Йуный джавистЪВообще, конечно, у вас жесткая задача: разные СУБД, разные сборки одного продукта.
Это да. Но основная проблема имеется с FireBird, ибо много инсталяций и каждая со своей особенностью. Если бы была потребность (а она и есть) в реализации этих продуктов одновременно под разные СУБД - то это полная вешалка, неподъёмная (поэтому и нет реализаций). Остальные проекты под другие СУБД имеют, фактически, индивидуальный характер для конкретного заказчика, поэтому меньше гемора.

В качестве лирического офтопа. Если отбросить то, что процесс выбора СУБД в большинстве случаев - политический процесс, а уж потом технический, то я мечтаю о ликвидации зоопарка СУБД самым кардинальным способом - принять единую платформу без возможности качать права. Вроде как развиваемые технологии типа NoSQL дают некую пока туманную перспективу, и что-то есть привлекательное (концептуально), как та же упомянутая OrientDB (которая даже с транзакциями), но опять же, популярный их принцип schema-less, т.е. нет жёсткого каталога схем данных, тоже настораживает. С одной стороны - дают необходимую гибкость, это да, но с другой - тоже повод поломать голову над тем, как этот каталог реализовать самому. Я недавно наткнулся на такой проектик: Animotron , где интересно решают проблемы (точнее пытаются) разработки под той же джавой, в частности, есть и привлекательные способы для организации обработки данных, в данном случае графовых (проект работает поверх Neo4J, но концептуально такой подход применим и под другие соответствующие СУБД). Рекомендую глянуть, кому интересна эта проблематика.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244584
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,

Большое спасибо за полезный пост.


авторИтак, всё рассчитано на разработку SQL-исходников "вручную", с некоторыми помогалками (об этом ниже). Глобально исходники делятся на две части: для создания БД с нуля, назовём её как create-часть, и исходники для изменения БД (накаты версий) - update-часть.
Согласен. Но вот update-часть я думал возложить на спец. средства (liquibase, etc), продумать интеграцию с ними.
Но дальше будет видно.

авторИтак, структура исходников важна. Предлагается sql-файлы располагать по подкаталогам в зависимости от логического деления функционала, т.е. выделять некие логические модули (типовое решение для многих случаев). При этом крайне желательно выделять каждый объект в БД или группу крепко связанных друг с другом объектов в каждом отдельном SQL-файле (но важно не смешивать объекты разных функциональных типов). Например, можно вместе указать парочку таблиц, которые друг без друга ни как. Можно вместе с таблицей поместить и её индексы, а в то же время может возникать потребность указать некоторые индексы отдельно, скажем, в другом прикладном модуле (т.е. индексы должны создаваться только при наличии в БД определенного модуля) и т.д. В "create-части" в SQL-файлах указываются операции DDL для создания объектов, причём всегда в текущем актуальном состоянии.
Снова согласен. Еще думал оставить свободу размещения объектов (как и многие другие вещи) полностью за пользователем. Т.е. чисто теоретически можно хранить все исходники в одном единственном файле, и собирать любой билд именно из него.


авторТулза должна иметь как минимум две операции: создание базы с нуля и выполнить накат изменений. Для создания базы обрабатываются create-файлы, для накатов - update-файлы, с учётом того, что их может и не быть, и сам create-файл есть последняя версия.

Я думал об "опциях сборки", т.е. пользователь может определить свои собственные сборки, например:
1. Собрать продакшн-базу (достать скрипты таблиц, констрейнтов, индексов, процедур, заполнение боевыми данными и т.д., в нужном порядке)
2. Собрать тестовую базу (так же как и в 1, только с заполнением тестовыми данными)
3. Собрать какую либо специфическую базу (тоже самое, но например с другим набором пользователей, и соответственно грантов, справочных данных и др.);
3. Обновить тестовые данные на тестовом сервере - очищаются все рабочие таблицы (точнее достается соответствующий подготовленный скрипт(ы)) и достаются все dml, которые заполняют таблицы тестовыми данными. Своеобразный рефреш тестовых данных;
4. Достать все индексы для модуля ХХ;
5. Достать все скрипты для заполнения таблиц-справочников;
6. И т.д. в зависимости от потребностей пользователя.

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


Вот небольшой пример описания проекта.
Описывается каждый тип объектов БД.
Каждый тип объектов может иметь (а может и не иметь) дочерние элементы. Например тип "таблица", дочерние элементы: первичный ключ, ФК, констрейнты, индексы, триггеры, гранты, данные, тестовые данные и т.д. Тип "хранимая процедура", дочерние элементы: гранты, юнит тесты и т.д.
Теоретически вложенность может быть любой, не только 2-х уровневой (если надо конечно).

Пример описания типа "таблица":
Код: 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.
<DBObjType  name="tables" shortName="t"
description="simple user tables" file="table.sql" folder="${object_name}_tbl" start_text="" stop_text="">
  <ChildObjects>
    <name>indexes</name>
    <file>${object_name}_indexes.sql</file>
    <folder>${parent_folder}/indexes/</folder>
    <start_text></start_text>
    <stop_text></stop_text>
  </ChildObjects>
  <ChildObjects>
    <name>test_data</name>
    <file>${object_name}_data.sql</file>
    <folder>${parent_folder}/</folder>
    <start_text>/*** test data dml ***/</start_text>
    <stop_text>/*** end test data dml***/</stop_text>
  </ChildObjects>
  <ChildObjects>
    <name>production_data</name>
    <file>${object_name}_data.sql</file>
    <folder>${parent_folder}/</folder>
    <start_text>/*** production data dml ***/</start_text>
    <stop_text>/*** end production data dml***/</stop_text>
  </ChildObjects>
</DBObjType>



Имеем таблицу, хранящуюся в папке с имненм это таблицы и суффиксом tbl.
У таблицы есть индексы, хранящиеся в одном файле в подпапке indexes.
Так же есть ДМЛ для наполнения справочников нужными данными, тестовыми и боевыми соответственно, хранятся в корневой папке таблицы в файле с именем "имя таблицы"_data.sql, разделенные специальным указанным комментарием.

Постараюсь поскорее выложить первые версии кода, можно будет повертеть и пощупать на деле.



Идея про препроцессор тоже понравилась. Надо подумать.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244605
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЯ думал об "опциях сборки", т.е. пользователь может определить свои собственные сборки, например:
1. Собрать продакшн-базу (достать скрипты таблиц, констрейнтов, индексов, процедур, заполнение боевыми данными и т.д., в нужном порядке)
2. Собрать тестовую базу (так же как и в 1, только с заполнением тестовыми данными)
3. Собрать какую либо специфическую базу (тоже самое, но например с другим набором пользователей, и соответственно грантов, справочных данных и др.);
3. Обновить тестовые данные на тестовом сервере - очищаются все рабочие таблицы (точнее достается соответствующий подготовленный скрипт(ы)) и достаются все dml, которые заполняют таблицы тестовыми данными. Своеобразный рефреш тестовых данных;
4. Достать все индексы для модуля ХХ;
5. Достать все скрипты для заполнения таблиц-справочников;
6. И т.д. в зависимости от потребностей пользователя.

Опции сборки в вашем понимании решаются с помощью фильтров в dbmaintainer, проблема не линейного версионирования там тоже решена очень гибко.

ПМСМ, для описания таблиц РСУБД лучше SQL (DDL) вы все равно ничего не найдете.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244680
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЯ думал об "опциях сборки", т.е. пользователь может определить свои собственные сборки, например:
1. Собрать продакшн-базу (достать скрипты таблиц, констрейнтов, индексов, процедур, заполнение боевыми данными и т.д., в нужном порядке)Рабочая база не собирается. Она создаётся один раз и наполняется реальными данными пользователя.2. Собрать тестовую базу (так же как и в 1, только с заполнением тестовыми данными)Тестовая база не собирается. Она получается восстановлением одного из бэкапов рабочей базы на тестовом стенде.3. Собрать какую либо специфическую базу (тоже самое, но например с другим набором пользователей, и соответственно грантов, справочных данных и др.);Раздача прав - элемент настройки системы . И делается не расписыванием кучи "create user ..." или/и "grant ... to ...", а в человеческом UI, предусмотренном разработчиком для администраторов системы. Особенно, с учётом того, что АБД и администратор системы - могут быть, а часто будут, два совершенно разных человека.3. Обновить тестовые данные на тестовом сервере - очищаются все рабочие таблицы"Да за это убивать надо!" (ц) старый анекдот.
Обновление структуры БД выполняется с реальными данными.
Именно проверка корректности обновления структуры на реальных данных реальных клиентов и представляет основную заботу и головную боль разработчика СУБД.
"Магия данных", знаете ли, страшная сила.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244713
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvОпции сборки в вашем понимании решаются с помощью фильтров в dbmaintainer, проблема не линейного версионирования там тоже решена очень гибко.


А ткните пожалуйста в доку маинтейнера по поводу фильтров, а то не нашел.


LeonidvПМСМ, для описания таблиц РСУБД лучше SQL (DDL) вы все равно ничего не найдете.

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

Я перепутал термин. У них это называется qualifier
http://www.dbmaintain.org/tutorial.html#Qualifier_inclusion__exclusion
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38244832
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНапример, в моём случае есть огромные проблемы, когда целевая рабочая база для обновления не является условной копией (по метаданным) исходной эталонной (используемой при разработке). Т.е., как правило, чаще всего целевая база лишь некое подмножество исходного эталона, содержит только часть прикладных логических модулей (при этом взаимосвязанных). Кроме того, разработчики на местах могут расширять функционал, или вносить свои изменения. Причём существует вариантность одного и того же функционала в разных целевых базах, скажем, структура одной и той же таблицы отличается в зависимости от потребностей в каждом конкретном случае на местах, или код какого-нибудь триггера везде разный и т.д. и т.п. Утяжеляет ситуацию то, что целевых баз немалое количество, и процесс разработки/обновления, фактически, беспрерывный.
Управлять изменениями на такого рода проектах можно только путем интеграции системы хранения версий кода с системой управления бизнес-требованиями. Нужно эффективно понимать - какие требования реализует тот или иной код, какой код реализует требования.
Но это тоже не самоцель - с точки зрения управления проектом полезно довешивать аналитики - кто и сколько времени разрабатывал, сколько было багов и какой критичности.
ТЕ условно говоря - чего стоила разработка ф-ций.

Если система автора позволяет накапливать и агрегировать такого рода информацию, и эффективно ориентироваться в ней - это хорошая, полезная, востребованная разработка.

ТЕ сложность в том, что чисто-програмистские тулзы - хорошо, но мало. На мой взгляд.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245129
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovУправлять изменениями на такого рода проектах можно только путем интеграции системы хранения версий кода с системой управления бизнес-требованиями.
Вы про системы типа CaliberRM?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245222
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovУправлять изменениями на такого рода проектах можно только путем интеграции системы хранения версий кода с системой управления бизнес-требованиями. Нужно эффективно понимать - какие требования реализует тот или иной код, какой код реализует требования.
Но это тоже не самоцель - с точки зрения управления проектом полезно довешивать аналитики - кто и сколько времени разрабатывал, сколько было багов и какой критичности.
ТЕ условно говоря - чего стоила разработка ф-ций.

Если система автора позволяет накапливать и агрегировать такого рода информацию, и эффективно ориентироваться в ней - это хорошая, полезная, востребованная разработка.

ТЕ сложность в том, что чисто-програмистские тулзы - хорошо, но мало. На мой взгляд.

Какой-то явной аналитики не предполагается. Основная цель - это дать возможность вести SQL-разработку на основе уже годами проверенных методик и с использованием сопутствующего инструментария, т.е. точно также, как и крупные java/c++ и т.д. проекты. Поэтому, системы контроля версий исходников, багтрекеры, пожелания пользователей, управление задачами, wiki и документация по проектам и т.д. - всё к услугам, точно также, как и для остальной не SQL-разработки. Если есть какая-то система аналитики поверх соответствующей инфраструктуры, то велком ту анализ, какой душе угодно.

Хотя лично в моей практике какой-то политический анализ пригоден только для одного случая. В моём коллективе, к счастью, никаких корпоративных маразмов нет, а вот у заказчиков иногда случаются. Некоторые начальники считают, что процесс разработки и сопровождения/поддержки систем со стороны разработчика означает только то, что представители исполнителя должны с утра до вечера и каждый день присутствовать у них на предприятии. Поэтому они начинают вести подробнейшую "аналитику удовлетворения своих бизнес-требований", с посекудным учётом и пр. В ответ получают подробнейшую "бизнес-аналитику" с нашей стороны, где фиксируется каждый телефонный звонок, каждый чих и т.д. И вместо человеческих отношений, оперативного реагирования по телефону, экстренной помощи (когда нужно всё бросить и спасать заказчика, у которого стало производство, или где продукцию не могут отгружать и т.д.) имеется долгая и нудная официальная переписка-отписка, никаких устных отношений и т.д. и т.п. Короче, это лирика, имхо, многим знакома.

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

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

Я как-то хреново знаком с методиками количественного и качественного анализа, ибо на практике пока не нагибало. Если кто-то укажет, в какую сторону смотреть, то может и есть смысл подумать над какой-то потенциальной поддержкой чего-то. Собственно, речь идёт о том, чем можно дополнить типовые управленческие данные о проектах (баги, списки задач, требования и т.д.) на основе анализа SQL-кода.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245429
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим Н...
Я думал об "опциях сборки", т.е. пользователь может определить свои собственные сборки, например:
1. Собрать продакшн-базу (достать скрипты таблиц, констрейнтов, индексов, процедур, заполнение боевыми данными и т.д., в нужном порядке)
...
Вот небольшой пример описания проекта.
Описывается каждый тип объектов БД.
...


Здесь выше правильно подметили насчёт dbmaintainer, он вроде как нечто подобное и реализует. Требует sql-файлы предопределенной структуры и через спец-имена файлов может их включать/исключать из сборки. Теоретически для него можно генерировать файлы на входе (но с учётом того, что он отслеживает их изменение). Я по нему не спец, нас он не устроил.

Максим НИдея про препроцессор тоже понравилась. Надо подумать.


Рекомендую подумать. Даже тот препроцессор, который я выложил, в своём таком виде позволяет удобно решать не мало проблем. У него есть неудобства: он только под винду и не совсем консольный. Он у нас активно юзается, рядом с ним живёт самопальная система для кодогенерации (по описанным в том посте мотивам, вместо питона свой специфичный DSL, используемый для многих задач). Т.е. у нас такой зоопарк - отдельные тулзы для первичной обработки каталога исходников SQL, которые готовят выборку файлов, делают кодогенерацию, формируют обвязку для входа на препроцессор, запускается препроцессор, дальше на основе выхлопа работают тулзы для выполнения sql-скриптов и пр. Всё костыльно повязано. Поэтому есть потребность в своей реализации с нуля, гармоничной, с учётом наработанных граблей. У препроцессора, как такового, есть некие специфичные проблемы насчёт макросов, как и у си-шного - т.е. это банальная текстовая подстановка, без контроля синтаксиса, типов данных и т.п. Но по опыту, в SQL-кодировании нет потребности в их огромном количестве, т.е. нет почвы для злоупотребления. Препроцессор гармонично дополняется кодогенерацией, т.к. в одних случаях проще/удобнее написать условную компиляцию, где-то простой макрос, где-то как-то нагенерить и т.д. Поэтому нужно всё, с одним согласующимся синтаксисом, с расширенным охватом вычислений (к примеру, в условных директивах компиляции нужны полноценные вычисления, не только анализ define-имён). При этом необязательно то, что код по генерации будет громоздким внутри sql-файла. Т.е. в большинстве случаев он оформляется как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
#[ my_generate_func(...) ]
create table ANY_TABLE (
    COLUMN1  ANY_DOMAIN,  -- описание столбца ...
    ...
);
#go 2013-04-30 14:00 Vasja Pupkin - 31247328473247238



Т.е. указывается вызов функции/процедуры, сама функция где-то реализована в своем скрипт-файле. Желательно фиксировать моменты, когда чего-то генерили, с контрольными сумами, чтобы в случае чего понимать, что после генерации код правился ручками (кстати, также нужно контролировать и версии update-накатов, чтобы не было случайных правок текста после отправки поезда). Очень приятно, когда есть возможность интерактивно в редакторе на месте по одному клику быстро генерить код. Фактически, эта фишка становится, прежде всего, удобной помогалкой для ручной SQL-долбайки, а уж потом для какой-то генерации кода на основе вариантов сборки. У нас много чего приятно генерируется, причём как SQL-кода (на основе данных из БД, на базе кода прикладного приложения, где первично может описываться модель данных, и пр.), так и кода приложений (на основе БД, SQL-кода и др. - есть наработки для лёгкого разбора текста, достойные для простого скриптования).

Неоднозначен выбор языка для скриптовой кодогенерации. Если сделать неограниченную вольность и полный зоопарк, то тоже это не ахти. По опыту использованию других продуктов, тех же текстовых редакторов, не кайф, когда есть куча плагинов, что-то на встроенном велосипеде, что-то на питонах с руби и т.д., и это ещё всё одновременно запускается (а то и перезапускается на каждый чих). Иногда влом или нет времени с чем-то разбираться, где нет опыта. Т.е. зоопарк ограничивает наборы универсального кода для широкого применения среди масс. Если ограничиться BeanShell или груви - то это якобы расчёт только для джавистов. Есть смысл оставить только один вариант - простой язычок, lua-подобный, близкий к некоему универсальному SQL (т.е. к процедурным расширениям), т.к. это именно SQL-разработка. Есть некие наработки, но тут может большую роль сыграть техническая реализация, ибо может проще/быстрее взять груви и не морочить никому голову.
В случаях, когда нужны масштабные "фреймворки", типа универсальное дополнение под какой-то сервер СУБД, то проще и лучше делать бинарный плагин, на привычных средствах, с отладчиками и т.д.

В общем, как-то так. Это просто к слову, если вдруг имеется чуть больший интерес.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245520
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"Магия данных", знаете ли, страшная сила.
Конечно страшная. Есть еще слой нормативно-справочной информации, плотно увязанный с кодом, есть описания доп-реквизитов сущностей (в ОЕБС - "гибкие поля"). Они тоже увязаны.
Все это поддерживается вместе со структурой БД.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245763
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovВсе это поддерживается вместе со структурой БД."Программа не умнее своего создателя".
Если задекларировано одно, а в реальных данных оказалось другое - будет плохо.
И хорошо ещё, если клиент обнаружит это на (своём) тестовом стенде.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245778
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovМаксим НЯ думал об "опциях сборки", т.е. пользователь может определить свои собственные сборки, например:
1. Собрать продакшн-базу (достать скрипты таблиц, констрейнтов, индексов, процедур, заполнение боевыми данными и т.д., в нужном порядке)Рабочая база не собирается. Она создаётся один раз и наполняется реальными данными пользователя.2. Собрать тестовую базу (так же как и в 1, только с заполнением тестовыми данными)Тестовая база не собирается. Она получается восстановлением одного из бэкапов рабочей базы на тестовом стенде.3. Собрать какую либо специфическую базу (тоже самое, но например с другим набором пользователей, и соответственно грантов, справочных данных и др.);Раздача прав - элемент настройки системы . И делается не расписыванием кучи "create user ..." или/и "grant ... to ...", а в человеческом UI, предусмотренном разработчиком для администраторов системы. Особенно, с учётом того, что АБД и администратор системы - могут быть, а часто будут, два совершенно разных человека.3. Обновить тестовые данные на тестовом сервере - очищаются все рабочие таблицы"Да за это убивать надо!" (ц) старый анекдот.
Обновление структуры БД выполняется с реальными данными.
Именно проверка корректности обновления структуры на реальных данных реальных клиентов и представляет основную заботу и головную боль разработчика СУБД.
"Магия данных", знаете ли, страшная сила.

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

авторРабочая база не собирается. Она создаётся один раз и наполняется реальными данными пользователя.

Разве процесс создания и ее сборки из исходников, хранящихся в СКВ, это не одно и то же?
А как же ночные билды?

авторТестовая база не собирается. Она получается восстановлением одного из бэкапов рабочей базы на тестовом стенде.
За частую разработчики не имеют никакого доступа к продакшн-базам (коммерческая тайна, соображения безопасности, 152-й фз и т.д.), не говоря уже о рабочих бэкапах и т.д.

авторРаздача прав - элемент настройки системы. И делается не расписыванием кучи "create user ..." или/и "grant ... to ...", а в человеческом UI, предусмотренном разработчиком для администраторов системы. Особенно, с учётом того, что АБД и администратор системы - могут быть, а часто будут, два совершенно разных человека.
На счет интерфейса согласен, но это если говорить о дополнительной настройке и сопровождении рабочей базы у заказчика (возможно самим разработчиком). Причем приложения часто не используют родную базовскую систему авторизации, а юзают что то свое. Я же говорю о системных грантах, системных пользователях, для разработчиков, тестировщиков администраторов и т.д. Кто то может править процедуры, кто то таблицы, кто то только для отдельных модулей и т.д.

автор"Да за это убивать надо!" (ц) старый анекдот.
Обновление структуры БД выполняется с реальными данными.
Именно проверка корректности обновления структуры на реальных данных реальных клиентов и представляет основную заботу и головную боль разработчика СУБД.
"Магия данных", знаете ли, страшная сила.
Про реальные данные я уже написал. И почему не может быть скриптов, которые обновляют тестовые данные (да и вообще всю структуру), покореженные разработчиками и тестировщиками за рабочий день? Причем данные могут совершенно разные, из разных баз и т.д. Почему я не могу собрать свежую версию базы (у которой еще нет рабочего дампа, нет релизы), развернуть на отдельной машине например для тестов?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245780
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovУправлять изменениями на такого рода проектах можно только путем интеграции системы хранения версий кода с системой управления бизнес-требованиями. Нужно эффективно понимать - какие требования реализует тот или иной код, какой код реализует требования.
Но это тоже не самоцель - с точки зрения управления проектом полезно довешивать аналитики - кто и сколько времени разрабатывал, сколько было багов и какой критичности.
ТЕ условно говоря - чего стоила разработка ф-ций.

Если система автора позволяет накапливать и агрегировать такого рода информацию, и эффективно ориентироваться в ней - это хорошая, полезная, востребованная разработка.

ТЕ сложность в том, что чисто-програмистские тулзы - хорошо, но мало. На мой взгляд.

Если честно я об этом не думал и не совсем себе представляю как это могло бы выглядеть технически, но если вдруг дело пойдет и возникнет реальная потребность, то можно подумать.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245790
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
- скриптов должна быть пара - накат и откат
С этим согласен.

Petro123- скрипты группируют не по таблицам, а по атомарности - версии.
Т.е. имя папки - версия.

А вот это не очент понял.
Если вы говорите о готвом патче (альтере объектов) для конкретной боевой базы, то да.
Но есть еще текущее состояние базы, тот код из которого можно собрать актуальную версию (ну или любую другую, используя возможности СКВ).
И здесь удобно хранить объекты в какой-либо структуре, иметь возможность удобного доступа к ним, контроля, модификации с учетом бизнесс логики приложения, внутренних правил разработчиков, поддержания нескольких веток (например базовой и нескольких побочных) и т.д.

Вот есть бумага интересная по этому поводу, пункт "Source files".
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245806
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvОпции сборки в вашем понимании решаются с помощью фильтров в dbmaintainer
Спасибо, ознакомился.
Похоже, но навреное не то. Да можно помечать имена файлов метками и потом управлять сборкой на их основе. Ну и на сколько я понял это все.
Нет возможности задания структуры проекта, модулей, структуры хранения каждого типа файлов. Нет возможности контроля за этим делом. Если будет несколько фильтров, то имя файла уже будет тяжело читаемым для человека. Метка распространяется на весь файл целиком, нельзя выделить его часть.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245852
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ННет возможности задания структуры проекта, модулей, структуры хранения каждого типа файлов.
Это решается средствами типа maven, при большом желании.

Непонятно, какие именно файлы кроме sql вы будете хранить если уже решили, что все это sql.
Максим ННет возможности контроля за этим делом. Если будет несколько фильтров, то имя файла уже будет тяжело читаемым для человека.

В принципе, да. Но зачем вам несколько меток? Там можно на основе каталогов много чего полезного сделать, в том числе и версионирование.

Максим НМетка распространяется на весь файл целиком, нельзя выделить его часть.
Ну так несколько файлов.

В общем, мне лично не понятно, что вы хотите делать и какие цели преследуюте, но понятно, что имеющиеся инструменты вы в полной мере не изучили.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245948
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv,

авторЭто решается средствами типа maven, при большом желании.
В точку. Я как раз начинал с Ant'а (потом даже пробовал заюзать Thor)(Maven наверное тоже подошел бы, но он имхо немного для других целей...). И меня даже устраивало.
Например был у меня таргет, который создавал структуру каталогов для типа объекта "таблица". В нем были определены элементы(файлы):
- сам ДДЛ таблицы;
- отдельно ПК, ФК, констрейнты;
- сиквенсы (они же генераторы);
- индексы;
- тестовые данные;
- боевые данные (если это справочник например);
- что то еще.

Т.о. я мог запустить этот таргет, указав имя таблицы, и он создавал мне готовый каркас для хранения таблички. Потом я мог (не задумываясь, что в каком файле лежит) получить исходный код создания всей таблицы (таблиц), получить только тестовые данные, получить только ДДЛ (без ФК и ПК, чтобы например легко накатить таблицы на новую базу, не соблюдая их последовательность из-за ФК) ну и т.д., на что фантазии хватит.

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


авторНепонятно, какие именно файлы кроме sql вы будете хранить если уже решили, что все это sql.
Де нет, только SQL.

авторВ принципе, да. Но зачем вам несколько меток? Там можно на основе каталогов много чего полезного сделать,

Есть желание не просто пометить имена файлов, чтобы потом фильтровать их, а именно описать структуру всего проекта (на сколько это необходимо конечно). Чтобы при размещении нового объекта в СКВ, можно было сразу сгенерить структуру файлов и каталогов (заранее описанных и утвержденных) для его хранения. Возможность описать зависимости между объектами, т.е. если я удаляю пользователя из СКВ, то должны погрохаться (или пометиться к удалению) все его гранты на его объекты (понятно, что при накатке в базе все гранты и так автоматически погрохаются, но СКВ об этом не узнает).
Т.е. тулза, которая поможет привить культуру работы с исходниками БД в данном проекте (например для нового сотрудника).

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


авторв том числе и версионирование.

Версионирование и миграцию я как бы особо и не рассматривал (пока по крайней мере), т.к. знаю, что есть готовые инструменты типа liquebase, dbmaintainer и т.д. они заточены под это, я же говорю о другом.

Смысл в том, чтобы орагнизовать работу с текущими объектами БД. Т.е. как в какой-нибудь GUI IDE, в правой части экрана маячит дерево, в котором можно добраться до любого элемента, посмотреть его код, сделать правку, посмотреть его зависимые элементы на специальных вкладках (гранты, ФК, ПК, содержимое, триггера и т.д.).
Все очень удобно и комфортно, по началу, но есть минусы (я в принципе об этом писал, но попробую еще раз):
- это совершенно не настраивается, как разработчики зашили так и есть;
- ИДЕ совершенно ничего не знает о логике вашего приложения;
- (имхо самый главный) ИДЕ выковыривает исходный код объектов из системных представлений (это похоже на декомпиляцию приложения, я тут когда то изливался на эту тему, если интересно можно глянуть )
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245968
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,

Ты упорно хочешь разделить по живому таблицу и FK по разным файлам.
Тогда как по рознь не живут.
У тебя ложки и вилки в разных ящиках на кухне?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38245972
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Любовь к ООП это диагноз.
А вот в РСУБД ооп не пускают. И это правильно))))) LOL
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246053
Шаров Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н1. Пробовал JAXB, загружаю xml-файлы в классы, но дальше проблема как с этими классами работать, как делать запросы и выборки.
2. Есть идея заюзать inmemory-database (например HSQLDB) через ORM (например Hibernate) и сеарелизовать все это дело в xml-файлы, но как то навороченно получается.
В общем прошу совета.

Есть возможность делать запросы к объектам при помощи XPATH.

То есть ты загружаешь при помощи JAXB из XML в JavaBean, а потом по объектной модели делаешь запросы XPath (аккуратно). Я столкнулся с тем, что при больших объектных деревьях, лучще использовать абсолютные пути, например, не пользоваться // и *.
Ну и сортировки по-моему в XPATH нету.

Код: java
1.
2.
3.
4.
5.
                // beanObject - корень твоего объекта
		JXPathContext content = JXPathContext.newContext( beanObject );
                
                // XPATH - язык запросов к XML 
		Object o = content.selectSingleNode(xpath);



Подробнее см. api org.apache.commons.jxpath.JXPathContext от appache.

И ещё, если ты пишешь что-то универсальное, то в этом случае очень помогает BeanCommon.

Например,
Object value = PropertyUtils.getProperty("любой объект", "имя свойства")

Кстати "имя свойства" может быть и сложным.

Например,
"nsi.list[5].mapList(vasa).id"
В объекте в nsi есть объект со свойством list - массив или List, взять его 6-ой элемент в котором есть HashMap с именем mapList в котором есть ключ "vasa" а в значении объект со свойством id.

Подробнее см. api BeanCommon от appache.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246064
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
Ты упорно хочешь разделить по живому таблицу и FK по разным файлам.
Тогда как по рознь не живут.
Это как пример, яркий пример, у меня по этому поводу пунктик (а может быть даже целый пункт, бывает удобно развернуть базу, накатив таблицы, а потом ФК, не парясь с последовательностью, да и вообще мало ли какие случаи бывают). Но я не кого не заставляю так делать, просто показываю как можно будет сделать, гибкость, что можно хранить объекты как угодно где угодно, а потом без труда собрать, организовать в другую структуру и т.д. и т.п. Все это зависит от настройки, пртотипы xml-ин я уже показывал выше.

А то что в среднестатистической ИДЕ'шке при просмотре кода таблицы вам вываливается все с потрохами (тэйблспэйсами, параметрами хранения, триггерами индексами и прочими) это нормально?

Petro123У тебя ложки и вилки в разных ящиках на кухне?

В одном, но разделены перегородкой, слева вилки - справа ложки.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246102
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НPetro123У тебя ложки и вилки в разных ящиках на кухне?

В одном, но разделены перегородкой, слева вилки - справа ложки.
У меня тоже ))
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246104
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НLeonidv,

авторЭто решается средствами типа maven, при большом желании.
В точку. Я как раз начинал с Ant'а (потом даже пробовал заюзать Thor)(Maven наверное тоже подошел бы, но он имхо немного для других целей...).
Тут maven как раз хорошо подходит, хотя, конечно, там overhead'а будет слишком много.

В целом, я понял, что вы хотите. Спасибо за развернутый ответ.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246166
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Я и говорю, что в обычной схеме, fk в одном create table.
Ты их по файлам раскидывать сам будешь? И где тогда автоматизация?
Для ложек файл это ящик.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246183
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НРазве процесс создания и ее сборки из исходников, хранящихся в СКВ, это не одно и то же?
А как же ночные билды?Отделяйте процесс разработки от процесса тестирования. И "оба два" от реальной системы клиента.
У разработки и тестирования разные цели и разные задачи.
Одна из задач разработки - обеспечение оборачиваемости. А это противоречит одной из задач реальной системы - обеспечение стабильности. С тестированием всё ещё проще - его нельзя сокращать. Если есть баг, проявляющийся только после недели аптайма - можно не тестировать его исправление, но нельзя сократить время этого теста.За частую разработчики не имеют никакого доступа к продакшн-базам (коммерческая тайна, соображения безопасности, 152-й фз и т.д.), не говоря уже о рабочих бэкапах и т.д."Не имеют никакого доступа" ещё не значит "не могут получить".
Кроме того, в реальной системе, которая уже отчуждена и работает у клиента порядок будет именно таким, как расписал я.Я же говорю о системных грантах, системных пользователях, для разработчиков, тестировщиков администраторов и т.д. Кто то может править процедуры, кто то таблицы, кто то только для отдельных модулей и т.д.Ответьте на один простой вопрос - кто является владельцем схемы вашего приложения?И почему не может быть скриптов, которые обновляют тестовые данные (да и вообще всю структуру), покореженные разработчиками и тестировщиками за рабочий день?Зачем? Если разработчик или/и тестеровщик покорёжили что-то, это что-то создаётся с нуля или разворачивается из бэкапа. Без всяких хитроумных скриптов с неестественым интеллектом.Почему я не могу собрать свежую версию базы (у которой еще нет рабочего дампа, нет релизы), развернуть на отдельной машине например для тестов?Можете, но если "ещё нет рабочего дампа" это должно быть или создание нового эталона или обновление существующего.
В реальности должно быть и то и другое. Первое для новых клиентов, второе - для сущестующих.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246211
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
авторЗачем? Если разработчик или/и тестеровщик покорёжили что-то, это что-то создаётся с нуля или разворачивается из бэкапа. Без всяких хитроумных скриптов с неестественым интеллектом.
+1
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246261
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Я и говорю, что в обычной схеме, fk в одном create table.
Во многих РСУБД (про которые знаю) если создавать FK прямо в create table, то он получит сгенеренное непонятное имя, а вот если alter table'ом, то можно задать имя, оформленное по внутренним разработческим стандартам (если они есть) и во время ошибок ссылочной целостности точно знать с какой таблицей проблема.
Поэтому можно рассматривать (но опять же не обязательно) FK как отдельный именованный объект (тоже и с ПК и констрейнтами).
Ну и имхо здорово если есть возможность как то выделить отдельно эти вещи, отдельно накатить или не накатить.



Petro123 Ты их по файлам раскидывать сам будешь? И где тогда автоматизация?
По файлам не обязательно расскидывать, можно в одном, но выделив например комментариями.
Если предполагается ручное программирование (сторонником чего я являюсь), то нет никакого труда выделить отдельно ДДЛ таблицы и ее ФК, ПК в отдельные файлы или в отдельные операторы при создании таблицы.
Если чрез визуалку, то есть средства типа DBMS_METADATA (для других баз наверное тоже что то похожеее есть), которые позволяют сгенерить код соданного объекта в нужном виде.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246274
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
Любовь к ООП это диагноз.
А вот в РСУБД ооп не пускают. И это правильно))))) LOL

Не в ООП дело. Просто для меня странно сложившееся отношение к разработке БД.
Т.е. если например Java-программист разрабатывает пользовательский интерфейс и использует какой-либо визуальный построитель форм, то это считается не круто. Считается, что он плохо разбирается в этом вопросе, а с использованием билдера (и само собой нагенеренного кода) нельзя добиться большей гибкости и производительности. Ну а крутой специалист сделает все ручками, ну или по крайней мере будет в курсе какой код генерится, что имеено он делает, ну а где лучше написать самостоятельно.

А вот в мире БД надизайнить базу в навороченном визуальном интерфейсе, выгрузить сгенеренный код (или вообще целый дамп), иногда даже не задумываясь что там нагенерилось, и почему именно такой, это вполне нормально. Несмотря на то, что большинство СУБД обладают своим собственным языком, с широкими возможностями и особенностями, и визуальными средствами всех тонкостей не опишешь. Но многими разработчиками он воспринимается как некий низкоуровневый машинный код, на котором ИДЕ общается с СУБД.

Часто разработчикам приходится изучать не саму СУБД (или не только ее), а визуальный редактор для нее предназначенный, и зачастую сам этот редактор иногда и ассоциируется с СУБД. Люди становятся заложниками ИДЕшек.

Я уже молчу что эти среды делают с исходным кодом объектов, доставая его из потрохов базы. Это сравнимо с декомпиляцией приложения.
И такой подход навязывается многими инструментами, а вот инструментов с альтернативным подходом не так много.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246275
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров Сергей,

Спасибо большое, за JXPathContext отдельное.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246280
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н
А если в одном файле, т.к нужна очередность операторов. То получаем скрипт. Банальный скрипт. Хочешь один. ... или 15.
А еще нужно перенакатывать его. Поэтому пишут
CREATE REPLACE PROCEDURE.....
А еще пишут сначала мастер таблицу потом чилдрен потом fk а потом каскад.
И это все руками.
Ты же хочешь в одиночку GWT для бд написать.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246283
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

авторОтделяйте процесс разработки от процесса тестирования. И "оба два" от реальной системы клиента.
У разработки и тестирования разные цели и разные задачи.
Одна из задач разработки - обеспечение оборачиваемости. А это противоречит одной из задач реальной системы - обеспечение стабильности. С тестированием всё ещё проще - его нельзя сокращать. Если есть баг, проявляющийся только после недели аптайма - можно не тестировать его исправление, но нельзя сократить время этого теста.
Согласен, способов и целей сборки может быть много, в зависимости от приложения и от того как оно разрабатывается.

авторОтветьте на один простой вопрос - кто является владельцем схемы вашего приложения?
Я не говорю про конкретное приложение, а про общий случай.

авторЗачем? Если разработчик или/и тестеровщик покорёжили что-то, это что-то создаётся с нуля или разворачивается из бэкапа. Без всяких хитроумных скриптов с неестественым интеллектом.
Иногда процесс создания базы с нуля или развертывания из бэкапа (которого просто может и не быть еще, т.к. база в разработке) может быть весьма время затратным. Так что невижу ничего страшного просто накатить тестовые или (и) справочные данные на конкретные таблицы. Ну и не вижу в этих скриптах ничего хтроумного и неестественного, наоборот все просто как хозяйственное мыло - простые понятные скрипты с DML'ем лежат в СКВ и мы их просто достаем по необходимости для конкретных таблиц конкретного модуля.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246289
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
》 Люди становятся заложниками ИДЕшек.

Это что то новое. Расшифруй.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246290
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н
А если в одном файле, т.к нужна очередность операторов. То получаем скрипт. Банальный скрипт. Хочешь один. ... или 15.
А еще нужно перенакатывать его. Поэтому пишут
CREATE REPLACE PROCEDURE.....
А еще пишут сначала мастер таблицу потом чилдрен потом fk а потом каскад.
И это все руками.
Ты же хочешь в одиночку GWT для бд написать.

Очредность операторов это уже к вопросам сборки относится. Я предлагаю хранить объекты в структурированном виде в СКВ (причем в конф. файлах описанно что и где именно), а вот как их собирать в скрипт тут возможны любые варианты в зависимости от потребностей разработчика, это тоже настривается (я тут писал уже про опции сборки).

GWT не хочу, только нативный sql, но помочь хранить его организованно и структурированно.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246292
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
》 Люди становятся заложниками ИДЕшек.

Это что то новое. Расшифруй.

Сами ИДЕ навязвают способ работы с БД, нашел объект в дереве (обычно жестком и ненастраиваемом), наклацал кнопок и тут же этот объект изменился в подключенной базе (наживую получается), ну а потом предоставляются удобнейшие средства для того чтобы аккуратно выковырить код этого объекта и засунуть в дамп, или сделать diff скрипт с его предыдущей версией из другой базы.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246293
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Опять теория. У меня и сейчас скрипт в скв.
Пришел к тебе программист. Он уже знает SQL. Где ему писать очередность Одного объекта из 2 х таблиц с каскадом?
А потом расписаться за что? За спрингКонфиг и кучу файлов?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246295
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Про ide.
Не нравится вживую тогда erwin. Кто виноват что ты его пишешь но никогда не видел.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38246306
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
Про ide.
Не нравится вживую тогда erwin. Кто виноват что ты его пишешь но никогда не видел.

Принцип тот же самый что и с ИДЕшками, та же визуалка, та же кодогенерация.

erwin я не пишу, возможно я не могу нормально объяснить свою идею.
Чуть позже выложу ссылку на прототип, если есть интерес, тогда будет понятнее.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38249849
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н.........
Люди становятся заложниками ИДЕшек.
..............
Сами ИДЕ навязвают способ работы с БД
Максим! Вы хотите освободить от привычного и знакомого гнета ИДЕ заменив на непривычный - Вашей системы? Это хороший первый шаг к мировому господству. (шутка)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250184
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovМаксим Н.........
Люди становятся заложниками ИДЕшек.
..............
Сами ИДЕ навязвают способ работы с БД
Максим! Вы хотите освободить от привычного и знакомого гнета ИДЕ заменив на непривычный - Вашей системы? Это хороший первый шаг к мировому господству. (шутка)

Почему бы и нет?(шутка)

А если серьезно, мне просто нужен легкий и ненавязчивый инструмент, который подошел бы под вышеописанный способ работы с БД и ее кодом (которым я собственно и пользуюсь).
То что ИДЕ это абсолютное зло, я не говорил, да и не считаю так, сам активно пользуюсь (но по своему), а IBExpert иногда даже снится мне по ночам...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250206
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим На IBExpert иногда даже снится мне по ночам
вот ты выше и писал всё как в эксперте:
- прав клик на объекте таблица - свойства.
- индексы, права, поля, ограничения разложены по вкладкам.
- всё удобно и объектно.
То что изменения сразу на базу в реал-тайме - удобнее.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250476
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123вот ты выше и писал всё как в эксперте:
- прав клик на объекте таблица - свойства.
- индексы, права, поля, ограничения разложены по вкладкам.
- всё удобно и объектно.

Petro123То что изменения сразу на базу в реал-тайме - удобнее.

Не всегда так удобнее. Собственно, потенциальный инструментарий автора этой темы не заменяет типовые IDE-DB, а дополняет их, т.к. в большинстве случаев всякие IDE не занимаются ведением каталога исходников. У нас в команде большинство так и работают - через IDE в реал-тайм вносят правки в базу, из логов операций или прочих других режимов достают тексты SQL, чего там IDE нагенерировала, и переносят их в sql-файлы проекта (не всегда это приемлемо, т.к. IDE генерирует тексты по своим правилам (частенько плохо или вовсе ненастраиваемым), что даёт неудобства для полноценного ведения проекта, поэтому есть и свои генерилки текстов). Лично я предпочитаю по возможности sql-ить в текстовом редакторе.

Другое дело, что не всех и всегда нагибает жизнь, многим SQL-каталог и не нужен, и Максим Н правильно подметил, что некоторые СУБД знают только на уровне IDE для нее, для них IDE и СУБД - фактически, синонимы.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250485
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим Н[...]
Пример описания типа "таблица":
Код: xml
1.
2.
3.
4.
...
    <start_text>/*** test data dml ***/</start_text>
    <stop_text>/*** end test data dml***/</stop_text>
...



Планируется ли какой-то синтаксический разбор текста или только на уровне поиска/регулярок ?

Почему спрашиваю. Я всё больше и больше задумываюсь над свои тулзом, о котором говорил выше по постам, и прихожу к выводу, что не плохо бы иметь потенциал для снижения количества sql-файлов в проекте. При большом количестве объектов в БД и прочего кода как-то напрягает принцип разработки, когда каждый объект и прочий чих оформляется в отдельном файле, получается многовато файлов, причём частенько с небольшим (относительно) количеством кода. В соответствующем посте я указывал на деление sql-проекта по логическим модулям/подмодулям, в идеале при таком подходе хотелось бы иметь только один sql-файл модуля и его возможную историю изменений (парный update-файл). Для этого нужно делать кое-какой разбор текста: понимать DDL-операторы - create/replace/alter объектов, понимать заголовок хранимой процедуры/функции и пропускать тело, разделять sql-операторы, пропускать комментарии и т.д. Задача немалая, но вполне подъёмная, минус - СУБД-зависимая. Подобный разбор текста всё-равно нужен, если, скажем, делать поддержку комментариев-доков.


Какие-то потуги в плане разбора текста планируются или всё как можно проще ?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250549
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100т.к. в большинстве случаев всякие IDE не занимаются ведением каталога исходников.
Давай по терминам.
- Что такое каталог исходников? Такого даже на Java нет.
Есть - проект. Так?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250558
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
просто ты пытаешься собрать всё в кучу.
Если есть МОДЕЛЬ, то она описывается в Проекте.
- Правка проекта только через IDE Модели.
А на выходе у Модели можно генерировать хоть скрипт, хоть музыкальный файл.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250573
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100что не плохо бы иметь потенциал для снижения количества sql-файлов в проекте.
В проекте не надо НИ одного SQL файла.
Если сможешь конечно).
Проект можно хранить в бинарном \ текстовом ini и XML файле.
.....
Только, проще SQL ты не придумаешь свой ЯП для БД.
Не взлетит.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250757
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Только, проще SQL ты не придумаешь свой ЯП для БД.
Не взлетит.

Я как раз и не собираюсь изобретать SQL, мне нужен инструментарий, который облегчает жизнь при программировании непосредственно на самом "нативном" SQL для конкретной СУБД. Говоря о sql-проектах я не имею в виду "классические" проекты для java или С++ и пр. Проект - он же каталог исходников или SQL-каталог - это набор текстовых sql-файлов (плюс какие-то другие по потребности), на основе которого можно создать БД (можно сказать, что это результат "компиляции" исходников). Иными словами - это некое текстовое представление Базы Данных. Кроме создания БД есть потребность и в другом, включая внесение изменений в существующие базы согласно исходникам.

Я уже выкладывал здесь SQL-препроцессор, где в качестве демки есть простой примерчик подобного sql-проекта. Выложу этот же пример отдельно - скачать:
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250915
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Я как раз и не собираюсь изобретать SQL, мне нужен инструментарий, который облегчает жизнь при программировании непосредственно на самом "нативном" SQL для конкретной СУБД. Говоря о sql-проектах я не имею в виду "классические" проекты для java или С++ и пр. Проект - он же каталог исходников или SQL-каталог - это набор текстовых sql-файлов (плюс какие-то другие по потребности), на основе которого можно создать БД (можно сказать, что это результат "компиляции" исходников). Иными словами - это некое текстовое представление Базы Данных. Кроме создания БД есть потребность и в другом, включая внесение изменений в существующие базы согласно исходникам.

Э-э-э вообще-то SQL - это скорее декларативный ЯП.
Соответственно к нему не применимы те методы разработки, как в "обычных" ЯП.
Сама по себе БД, является и "исходником", и "скомпилированным приложением".
Причем "текстовое представление" БД делается в любой SQL БД одной командой.
То о чем вы говорите, называется дамп БД.
Зачем нужна лишняя сущность?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38250997
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Максим Н[...]
Пример описания типа "таблица":
Код: xml
1.
2.
3.
4.
...
    <start_text>/*** test data dml ***/</start_text>
    <stop_text>/*** end test data dml***/</stop_text>
...



Планируется ли какой-то синтаксический разбор текста или только на уровне поиска/регулярок ?

Почему спрашиваю. Я всё больше и больше задумываюсь над свои тулзом, о котором говорил выше по постам, и прихожу к выводу, что не плохо бы иметь потенциал для снижения количества sql-файлов в проекте. При большом количестве объектов в БД и прочего кода как-то напрягает принцип разработки, когда каждый объект и прочий чих оформляется в отдельном файле, получается многовато файлов, причём частенько с небольшим (относительно) количеством кода. В соответствующем посте я указывал на деление sql-проекта по логическим модулям/подмодулям, в идеале при таком подходе хотелось бы иметь только один sql-файл модуля и его возможную историю изменений (парный update-файл). Для этого нужно делать кое-какой разбор текста: понимать DDL-операторы - create/replace/alter объектов, понимать заголовок хранимой процедуры/функции и пропускать тело, разделять sql-операторы, пропускать комментарии и т.д. Задача немалая, но вполне подъёмная, минус - СУБД-зависимая. Подобный разбор текста всё-равно нужен, если, скажем, делать поддержку комментариев-доков.


Какие-то потуги в плане разбора текста планируются или всё как можно проще ?

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

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



Тулза планируется как абсолютно открытая естественно, уже лежит на ГитХабе, но пока не показываю, стыдно, сыро еще. Т.е. если у кого-то вдруг будет желание/потребность, то можно будет доработать, изменить, добавить, убрать, вобщем что угодно.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38251230
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего сильно боятся? Ну поругает кто. Зато быстрее повскрываются баги, хотелки.
Пока даже концептуально не очень понятно.
Я представляю себе нечто похожее на ant-скрипт. Куда пихаютсся изменения в базе, и который можно ==накатить от версии до версии==.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38251305
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Я уже выкладывал здесь SQL-препроцессор
ну вот, представь себе.
Что ты пишешь одну Программу.exe сразу на 2-х ЯП - Java и ПлемениМумбоЮмбо.
Причём пытаешься всё это конверитровать-синхронизировать по типу Мастер-Мастер.
.....
Ведь по сути ты вторгаешься в область деятельности - "Разработка СУБД". Это не Java программист. И подходы (IDE\ЯП) там другие.
...
Впрочем, удачи !
Каждый в жизни писал свою 1С )).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38251345
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давайте sql расширять с помощью php.
А что - язык довольно богатый, с объектами даже, его много кто знает, куча дешевых учебников. Расширяемый.
всяко лучше маргинальных M4?
Ну или по мотивам его сделать новый = PSP: Psp Sql Preprocessor.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38251999
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgulЭ-э-э вообще-то SQL - это скорее декларативный ЯП.
Соответственно к нему не применимы те методы разработки, как в "обычных" ЯП.
Сама по себе БД, является и "исходником", и "скомпилированным приложением".
Причем "текстовое представление" БД делается в любой SQL БД одной командой.
То о чем вы говорите, называется дамп БД.
Зачем нужна лишняя сущность?

Здесь я уже говорил о причинах, почему иногда не работают типовые подходы в разработке БД и стандартный инструментарий. Если кратко, главный затык - есть потребность в вариантности функционала. К тому же и автор этой темы неоднократно описывал проблемы, с которыми пытается бороться, в т.ч. и насчёт стандартных дампов, например: здесь , здесь , а здесь статейку накатал.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252006
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovА чего сильно боятся? Ну поругает кто. Зато быстрее повскрываются баги, хотелки.
Пока даже концептуально не очень понятно.
Я представляю себе нечто похожее на ant-скрипт. Куда пихаютсся изменения в базе, и который можно ==накатить от версии до версии==.

Насчёт ant-ов автор уже писал .
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252029
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ну вот, представь себе.
Что ты пишешь одну Программу.exe сразу на 2-х ЯП - Java и ПлемениМумбоЮмбо.
Причём пытаешься всё это конверитровать-синхронизировать по типу Мастер-Мастер.
.....
Ведь по сути ты вторгаешься в область деятельности - "Разработка СУБД". Это не Java программист. И подходы (IDE\ЯП) там другие.
...
Каждый в жизни писал свою 1С )).

Да, всё так и есть. У нас давно своя "1С", со своим языком ПлемениМумбоЮмбо, плюс активное SQL-кодирование (с помогалками), что в т.ч. даёт низкий порог вхождения для подключения разработчиков на местах при необходимости (и не редко это требуется), и существенно облегчает им жизнь (и нам самим тоже). Вместо Java функциональный костяк реализован на Delphi (истоки проекта ещё с 90-х). И именно такое решение позволяет уже далеко не один год вести постоянную разработку и сопровождение систем силами небольшой команды, имея не одну сотню инсталяций, причём все они разные (за редким исключением), со своим функциональным составом и особенностями в каждом конкретном случае, и частенько у клиентов не одна база, с распределенными функционалом и данными. При этом немалая часть прикладной логики требуется держать внутри базы, т.к. большая часть работы ведётся в двухуровневом клиент-сервер, рядом может быть прикручен сервер приложений, с возможным торчанием наружу в инет, есть потребность в связке с другими 1С/акцаптами/R3/оракл-апликухами и прочим зоопарком местного софта и т.д. Короче говоря, нужен контроль данных, доступа, да и производительность тоже не на последнем месте, и пр. Если бы для наших имеющихся java- и net-проектов стояла бы подобная задача, то это было бы полная опа. Собственно, у нас далеко не один год делаются попытки переезда на новые рельсы, но пока безрезультатно, до хрена технических и политических проблем. И откровенно говоря, у меня на таких задачах возникает огромное желание закопать java (как языковую платформу), со всеми её XML-довесками и хибернейтами и прочими ORM, неудобны и решения вида iBatis, очень заморочно копаться "в лоб" в различных sql-генераторах вида java-sql-generator , не вижу счастья в попытках а-ля link, в т.ч. и те, что есть в Scala, и пр. Фактически, под мои потребности нужно лепить свой DSL и брать библиотеку вида ASM и вперёд генерить байт-код под jvm. Но это всё офтоп в другую сторону.

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

Petro123Впрочем, удачи!

Спасибо.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252070
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
всё что написали, видно что круто.
НО. Как всегда, у нас велика роль личности.
Вот у вас в команде не взлюбили ErWin и тому подобные продукты.
Т.к. видно что вы их НЕ знаете. И лепите аналогичный КроссБазовый велосипед
Это личное дело вашего архитектора и руководителя проектов.
IMHO
>есть потребность в вариантности функционала
= это сферический конь в вакууме.
По поводу ваших ссылок выше - там нет "Обзор готового" как учат в ВУЗах.
По поводу блога-статьи - разместите на хабре. Там вам сразу "укажут" ))
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252277
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123PSV100,
всё что написали, видно что круто.
НО. Как всегда, у нас велика роль личности.
Вот у вас в команде не взлюбили ErWin и тому подобные продукты.
Т.к. видно что вы их НЕ знаете. И лепите аналогичный КроссБазовый велосипед
Это личное дело вашего архитектора и руководителя проектов.
IMHO
...

В своё время смотрели на ErWin и ряд других популярных Case-средств, действительно, у нас они не прижились. Есть технические проблемы (к примеру, в основном они плевали на Interbase/FireBird, которые для нас важны), так и куча банальных неудобств при разработке. Скажем, непонятно как задать у столбца таблицы тип/домен в зависимости от каких-то условий/настроек, или как задать состав столбцов разный согласно потребностям, или как задать разный код для процедуры/функции и т.д. Я не помню, что творилось в том же ErWin и не в курсе чего есть в последних версиях, но фактически для подобного в case-средствах обычно всегда требуется создавать новые модели. Выжить с десятками (или даже с сотнями) case-моделями я не представляю как. К тому же нет ничего реально полезного от визуального проектирования, таская мышкой объекты по экрану, особенно когда требуется одновременно отразить кучу связанных объектов, они все удобно не влазят на экран, видишь перед собой лес пересекающихся линий. Как-то не в кайф ковыряться в неудобных GUI-режимах, скажем, вводя структуры объектов в каком-нибудь гриде. Для нормального программиста операции с текстом в нормальном текстовом редакторе/IDE на порядок удобнее/проще и главное быстрее. У нас в проектах были (и есть) всякие дизайнеры форм/отчётов, под влиянием в своё время модных RAID-средств, как та же Delphi. Когда объектов стало тысячи, то их программирование (через удобный DSL) вытеснило их графическое рисование, и "программирование" БД гармонично дополняет сложившеюся картину. В ряде case-средств есть и свои 4GL-языки для программирования, но они всё равно привязаны к своему пониманию модели (не всегда удобному, см. выше), или фактически являются своим "1С".

Имхо, достоинство того же ErWin в том, что это фактически некий промышленный стандарт, на пару с связанным BPwin и прочими бизнес-моделяторами. У нас некоторые клиенты требовали из-за своих корпоративных стандартов case-модели для ErWin и чего-то ещё, ибо вся информационная структура якобы описывается и сопровождается в них. Есть какие-то соответствующие генерилки, но чего там именно есть я не в курсе, ибо сам не занимался этим. Но это не первичное проектирование/разработка, это сугубо конечный результат, формальность, включая и для самого заказчика.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252317
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123По поводу блога-статьи - разместите на хабре. Там вам сразу "укажут" ))

так?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252342
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим ННа первое время думаю сделать попроще, обойтись на уровне поиска/регулярок. В будущем можно будет расширить, например добавлением пользовательских расширений под конкретную БД (некий набор правил, который сможет распознать таблицу, процедуру и т.д.)

Кстати, в своё время намучались со всякими правилами для разбора текста. Были и регэкспы, и прочие фантазии для задания правил. Но всё таки прямое программирование под конкретные задачи оказалось гибче и проще. Были и попытки полноценного SQL-разбора, но мощный анализ на основе полной BNF/PEG и подобной грамматики с использованием генераторов парсеров типа lex/yacc/JavaCC и т.п. как-то геморно для такой задачи, всё таки это не SQL-сервер. В конечном итоге прижился такой вариант. Удобным оказался простой парсер, дающий поток токенов. Парсер динамически программно настраивается, т.е. ему указывается какие токены разбирать примерно в таком упрощенном виде:

parser.AddToken(" ");
parser.AddToken("\n");

и прочие разделители. Соответственно парсер будет через метод типа "GetNextToken" последовательно возвращать всё, что есть между разделителями и сами разделители. По потребности дополняются иные токены, как скобки, запятые и пр. Должна быть возможность задать токен в виде блока:

parser.AddBlock("/*", "*/")

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

Ну, например, я могу настроить парсер, чтобы он распознавал разделители текста (пробелы, переводы строк, табуляцию и пр.), спец-символы как запятая, скобки и т.д., понимал блоки-комментарии. При этом укажу, чтобы разделители и комментарии парсер игнорировал. Подам ему на вход текст:

/* это комментарий */
create table MY_TABLE(
COL1 TYPE1,
COL2 TYPE2
);

Циклически вызывая метод GetNextToken он последовательно вернёт все токены: "create", "table", "MY_TABLE", "(", "COL1" и т.д.

Это упрощённая примерная схемка (нужна, к примеру, дополнительная информация о положении токена в тексте и пр.), но думаю, что основная идея понятна. Так несложно организовать простой разбор текста, решая кучу постоянно возникающих задач, в том числе это и простое решение для какого-то лёгкого и быстрого скриптования (или своих бинарных программок).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252745
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100 Выжить с десятками (или даже с сотнями) case-моделями я не представляю как.Выжить с десятками (или даже с сотнями) case-моделями я не представляю как.
Ты о чем? Модель статична т.к. маппинг. Т.е. сколько моделей столько и проектов.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38252749
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,

1 Зачем разный состав столбцов для одного проекта. Приведи маппинг.
2 ты в курсе что там есть ЯП.?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38254016
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Максим ННа первое время думаю сделать попроще, обойтись на уровне поиска/регулярок. В будущем можно будет расширить, например добавлением пользовательских расширений под конкретную БД (некий набор правил, который сможет распознать таблицу, процедуру и т.д.)

Кстати, в своё время намучались со всякими правилами для разбора текста. Были и регэкспы, и прочие фантазии для задания правил. Но всё таки прямое программирование под конкретные задачи оказалось гибче и проще. Были и попытки полноценного SQL-разбора, но мощный анализ на основе полной BNF/PEG и подобной грамматики с использованием генераторов парсеров типа lex/yacc/JavaCC и т.п. как-то геморно для такой задачи, всё таки это не SQL-сервер. В конечном итоге прижился такой вариант. Удобным оказался простой парсер, дающий поток токенов. Парсер динамически программно настраивается, т.е. ему указывается какие токены разбирать примерно в таком упрощенном виде:

parser.AddToken(" ");
parser.AddToken("\n");

и прочие разделители. Соответственно парсер будет через метод типа "GetNextToken" последовательно возвращать всё, что есть между разделителями и сами разделители. По потребности дополняются иные токены, как скобки, запятые и пр. Должна быть возможность задать токен в виде блока:

parser.AddBlock("/*", "*/")

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

Ну, например, я могу настроить парсер, чтобы он распознавал разделители текста (пробелы, переводы строк, табуляцию и пр.), спец-символы как запятая, скобки и т.д., понимал блоки-комментарии. При этом укажу, чтобы разделители и комментарии парсер игнорировал. Подам ему на вход текст:

/* это комментарий */
create table MY_TABLE(
COL1 TYPE1,
COL2 TYPE2
);

Циклически вызывая метод GetNextToken он последовательно вернёт все токены: "create", "table", "MY_TABLE", "(", "COL1" и т.д.

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

Спасибо, учту обязательно.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38255548
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123PSV100Выжить с десятками (или даже с сотнями) case-моделями я не представляю как
Ты о чем? Модель статична т.к. маппинг. Т.е. сколько моделей столько и проектов.
...
1 Зачем разный состав столбцов для одного проекта. Приведи маппинг.
2 ты в курсе что там есть ЯП.?

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

Вообще-то, действительно, типовые case-средства хреново подходят для полноценного системного моделирования. Они заточены на создание именно статической единой модели, где задаются жёсткие статические связи и нет динамических связей/факторов. Фактически, они отражают лишь один из вариантов, или это лишь один результат системного анализа/проектирования. Причём в их же тесно связанной области - моделировании бизнес-процессов - кое-какие есть попытки быть поближе к реальной жизни, к примеру, в ARIS (где eEPC-нотация, сейчас это серьёзная альтернатива для классики типа BPWin/ErWin, IDEFхх и пр.) есть понятие вариантов бизнес-процессов, но вариантов связанных ER-моделей что-то не видно (хотя, м.б. я чего-то и не досмотрел).
Из-за проблем "статики" неудобны и классические ORM в джаве, да и в нет-е.

В советские времена была такая Р-технология - технология разработки программных систем, на основе идей Вельбицкого, Глушкова и др., изначально создавалась для ракетной промышленности. Там вместо зоопарка графнотаций (ER - для данных, блок-схемы или им подобные, или нынче вновь популярные типа Scratch - для алгоритмов, или UML, если алгоритмика мимо case-средства, и прочие диаграммы для потока работ, данных и т.д.) имеется одна нотация - Р-схемы, и для алгоритмов, и для структур данных, и для процессов и пр., где задумывались над тем, чтобы не только их созерцать, но и вменяемо вводить/создавать, где есть возможность для инвариантности, модульного разделения со взаимосвязями, были и свои системы контроля версий и контроль доступа, ведение документации и т.д. Жаль, что вместе с СССР всё загнулось. Современные case-средства и прочие ERP-монстры концептуально не добрались до тогдашнего уровня.
Но это всё офтоп.

Собственно, я хочу сказать, что не вижу почвы для какого-то спора вокруг ErWin и аналогичных case-средств. Здесь Максим Н, да и я, показали некий альтернативный подход в разработке БД - от "исходников", они первичны. Максим Н правильно подметил, что альтернативных инструментов мало, но они есть, значит и есть потребность в них. Лично для меня не стоит вопрос в потребности такого подхода, вопрос в том, как это удобно реализовать. Причём не только с позиции помощи для какого-то системного проектирования, но и для решения важных рутинных технических задач, с желательной поддержкой не только метаинформации по прикладной модели, но и включением в "проект" и других не-sql технических объектов (документация, файлы БД с закачиваемыми данными (для тех СУБД, где это возможно/удобно) или текстовые/бинарные/sqlite и пр. файлы для импорта/экспорта данных, shell/bat-скрипты и др.). Даже не помешает кошерная ситуация, когда для выполнения операций вместо последовательного запуска нескольких независимых процессов отработает один, без постоянного переконнекта, или когда есть минимальное количество перебора исходников программами.
Как-то так.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38255597
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
а почему тебя не понесло ещё дальше?
- Убрать статичное проектирование классов и "рожать" классы прямо на лету? В полную мощь использовать RTTI \ загрузу и изменение классов, добавление методов...
- Чего ты вдруг занялся СУБД, а не модификацией ООП модели?

СУБД для того заточена, чтобы статикой и 3-мя степенями нормализации Упростить Модель. Выделить главное.
Главное - технологиеческая простота. А не одна модель на 500 проектов.

Приведи маппинг 2-х проектов одновременно в одном проекте-модели.
А то одна теория пошла.
http://www.databaseanswers.org/data_models/
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38255675
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
Мейнстрим сейчас это декларативность. А это статика. Аннотации жестко гвоздями маппят модель.
Чтобы был проект Паровоз и проект Ракета. А не один проект ПаровозоРакетоМобиль.
Ведь лапша код же получается?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256027
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovдавайте sql расширять с помощью php.
А что - язык довольно богатый, с объектами даже, его много кто знает, куча дешевых учебников. Расширяемый.
всяко лучше маргинальных M4?
Ну или по мотивам его сделать новый = PSP: Psp Sql Preprocessor.

Уже есть!
PHP/PL для PostgreSQL
<:o)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256030
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100 Здесь я уже говорил о причинах, почему иногда не работают типовые подходы в разработке БД и стандартный инструментарий. Если кратко, главный затык - есть потребность в вариантности функционала. К тому же и автор этой темы неоднократно описывал проблемы, с которыми пытается бороться, в т.ч. и насчёт стандартных дампов, например: здесь , здесь , а здесь статейку накатал.

Кто мешает дамп БД ввести под контроль версии?!
Ну сели о-о-очень надо.
<:o)

P.S. Вообще-то разработка БД ведется ДО ее внедрения, на этапе проектирования.
Соответственно все изменения хранятся в различных ER и ERD диаграммах.
Если же говорить о данных, опять же, существует возможность снятия дампа части таблиц, а не всей БД.
И опять же лог транзакций. ;-)
Так что если хотите вести работу БД, по "рабоче крестьянски", то используете стандартные инструменты для ведения проекта и контроля версий.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256036
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100В том и дело, что плач начинается тогда, когда нет статической модели, когда есть несколько/много одновременно работающих вариантов проекта. К тому же есть потребность выделять части проекта как самостоятельные проекты/модели. Т.е. есть case-модель, где имеется всё-всё-всё, но есть одновременно работающие проекты, где размещены только необходимые функциональные части от общего. Оформлять каждую часть модели как независимые или отдельные проекты/модели нецелесообразно, т.к. часто они взаимосвязаны и существует некое общее функциональное ядро, необходимое всем.


Их есть у меня!

Любой SQL-сервер позволяет в рамках одной БД иметь несколько (как говорят в PostgreSQL) "схемы". В которой можно выделить отельные логические блоки. С одной стороны они достаточно автономны, с другой, достаточно легко позволяют обращаться к данным из другой "схемы".
Каждая "схема" статична (что логично), но их совокупность может быть динамичной.
Так что, все можно решить в рамках стандартных инструментов используя ужу готовые решения.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256058
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, все-таки, здесь изобретают Liquibase
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256094
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100В том и дело, что плач начинается тогда, когда нет статической модели, когда есть несколько/много одновременно работающих вариантов проекта. К тому же есть потребность выделять части проекта как самостоятельные проекты/модели. Т.е. есть case-модель, где имеется всё-всё-всё, но есть одновременно работающие проекты, где размещены только необходимые функциональные части от общего. Оформлять каждую часть модели как независимые или отдельные проекты/модели нецелесообразно, т.к. часто они взаимосвязаны и существует некое общее функциональное ядро, необходимое всем.

А это уже стратегия разработки и общения с заказчиками. Если каждая хотелка оплачена мешком баксов, то почему бы и да? всем оплаченным хотелкам.
ОЕБС внедряют модулями, затачивая под заказчика конкретного конфиг о доводя модуль напильником. Экономному заказчику - типовое решение - кушайте-с! как в анекдоте про автоматического парикмахера "так головы же у всех разные? - по первому разу- да". Щедрому заказчику - любой каприз за его ресурс.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256126
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманПо-моему, все-таки, здесь изобретают Liquibase
Никак нет
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256991
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovPSV100В том и дело, что плач начинается тогда, когда нет статической модели, когда есть несколько/много одновременно работающих вариантов проекта. К тому же есть потребность выделять части проекта как самостоятельные проекты/модели. Т.е. есть case-модель, где имеется всё-всё-всё, но есть одновременно работающие проекты, где размещены только необходимые функциональные части от общего. Оформлять каждую часть модели как независимые или отдельные проекты/модели нецелесообразно, т.к. часто они взаимосвязаны и существует некое общее функциональное ядро, необходимое всем.

А это уже стратегия разработки и общения с заказчиками. Если каждая хотелка оплачена мешком баксов, то почему бы и да? всем оплаченным хотелкам.
ОЕБС внедряют модулями, затачивая под заказчика конкретного конфиг о доводя модуль напильником. Экономному заказчику - типовое решение - кушайте-с! как в анекдоте про автоматического парикмахера "так головы же у всех разные? - по первому разу- да". Щедрому заказчику - любой каприз за его ресурс.

Да, всё так и есть. Мы как раз и выживаем, в основном, за счёт того, что свои типовые тиражируемые решения можем отшлифовать как нужно в каждом конкретном случае, плюс обвешивая специфичным функционалом, удовлетворяя все хотелки, с постоянным сопровождением и развитием. За исключением насчёт мешка баксов. У нас масштабы не уровня microsoft/oracle/sap и пр., и мы не можем скачать не один лям через откатинг и заниматься типовым бесконечным освоением бюджета разработкой/внедрением. Без адекватного инструментария можно обслужить 3-5, ну с десяток клиентов, дальше захлебнёшься и пойдёшь ко дну.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38256996
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123PSV100,
а почему тебя не понесло ещё дальше?
- Убрать статичное проектирование классов и "рожать" классы прямо на лету? В полную мощь использовать RTTI \ загрузу и изменение классов, добавление методов...
- Чего ты вдруг занялся СУБД, а не модификацией ООП модели?

Под net есть BLToolkit. Его основная фишка в том, что он активно генерирует код на лету. Собственно, он не уникален, вроде бы в том же хибере задекларировано, что он тоже чего-то там генерирует, но я в потрохах не разбирался. Генерация классов и методов на лету себя оправдывает по производительности, но речь идёт не о модификации ООП-модели, а о вспомогательной рутине для мапинга туда-сюда. Для своего "гибкого ООП" у нас есть свой ЯП. В рамках java-платформы пока этот вопрос исследуется. На сегодняшний день только у Кложуры замечен неплохой потенциал для подобных задач, но лисп, как конечный язык разработки, для нас неприемлем в большинстве случаев по ряду причин.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38257059
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
imho не туда.
- Большие системы делаются по другому. 2 модели + DSL. Одна модель - Ядро. Вторая модель сверху - предметная область = ERP.
Но очень долго и дорого.
Поэтому проще всё-таки иметь несколько проектов до скачка на ERP.
А что касается Net то там всё по другому))). "Это другая вселенная".
Т.е. тут очень трудно размежевать:
версия \ дрругой_продукт \ конфигурация_одного_продукта.
Я просто добавлял другому заказчику те-же фичи в СУБД, но снаружи у него был другой клиент и он их не видел. Т.е. модель в БД была одна для всех (многих).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38257073
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Приведи маппинг 2-х проектов одновременно в одном проекте-модели.

Здесь я выкладывал пример проекта. Там на основе одних и тех же исходников можно получить две версии БД - Shareware_Version и Free_Version, с разным функциональном составом, соответственно и получить две case-модели. Возможно этот демо-примерчик слабовато показателен в рамках какой-то динамичности ER-модели, т.к. там нет инвариантов структур таблиц. Попробуем пофантазировать. Там есть таблица "BOOKS" - некий список книг. Всего заранее никогда не предусмотришь, через какое-то время, когда проект работает в куче мест, какому-то клиенту захотелось иметь код ISBN ("кривости" проектирования исходного демо-примера опускаем, у него другая задача). Добавляется новое поле в таблицу, во всех инсталяциях вносятся соответствующие изменения. Причём обращаю внимание, что в подобных случаях никто не заморачивается какими-то версиями, поле добавляется всем, считая, что если кому-то оно не нужно, то это его воля, сегодня не нужно, а завтра дай. Далее, кому-то понадобилось удобно формировать заказы для своего поставщика, а у того есть своя кодировка книг, причём логика которой подогнана под тип Integer. Хорошо, добавили новое поле "ID_EXTERNAL" нужного типа. Другой заказчик тоже захотел пользоваться новой фишкой, но у его поставщика своя специфичная кодировка, на основе строки с буквами. Проанализировали уже имеющийся код, прикинули, что вроде как без особого гемора можно заменить тип столбца "ID_EXTERNAL" на строковый, как универсальный вариант, и хрен с тем, что индексы на основе Integer эффективнее. Но оказалось, что у какого-то заказчика уже имеется какой-то сторонний софт, который работает с теми же данными и уже прибит к типу Integer. Фигня, возникает потребность уже иметь две версии одного и того же поля "ID_EXTERNAL", и поддерживать их хотя бы какое-то время (но ничто постоянно так как временное). Типовой ООП-мейнстрим вынуждает в большинстве случаях реализовывать какой-то один универсальный вариант, не всё можно выразить через иерархии, связываться с разными классами как какими-то вариантами фактически одного и того же дюже геморно, и, к примеру, в конечном итоге мейнстрим вынудит поместить в таблицу "BOOKS" (по сравнению с исходной версией) столбец ISBN и столбцы "ID_EXT_INT" и "ID_EXT_CHAR" на каждый чих. Будет и соответствующий мапинг, причём как правило, всем фиолетово, что в ряде случаев из-за не использования данных будет напрасная обработка полей, коллекции будут напрасно хавать память и т.п., если вдруг и возникнут проблемы, то это уже сваливается на голову эксплуатирующих, пусть они занимаются "правильным" железом. К тому же отсутствие гибких динамических средств как в клиентском, так и в серверном коде может подталкивать к использованию не всегда оправданных универсальных средств. Например, потребовалось где-то группировка данных, но с разными вариантами на местах. Якобы чтобы быть от греха подальше, делают классическое дерево с произвольным уровнем вложенности, твори что хочешь, но на практике в данном случае более чем достаточно поддержки максимум 3-х уровней, просто есть разная их потребность (где-то структуризация не используется, где-то только группы, где-то плюс подгруппы и где-то максимум вид/тип/класс и группа с подгруппами). Или из-за разного набора столбцов для одного и того же в разных случаях в качестве альтернативы вместо впихивания всего в одну кучу прибегают к еntity–attribute–value model. Подобные решения могут помочь в одних случаях, но вылезти боком в других, включая и существенную просадку в производительности.
Я не говорю о том, что нужно всё оптимизировать на каждый чих, это невозможно. Но на практике при немалом количестве проектов и не на одной инсталяции с годами возникает куча нюансов, и жизнь заставляет в ряде случаев выкручиваться неожиданно по самое не могу, и хорошо, когда есть платформа для гибких выкрутасов.

Petro123PSV100,
Мейнстрим сейчас это декларативность. А это статика. Аннотации жестко гвоздями маппят модель.
Чтобы был проект Паровоз и проект Ракета. А не один проект ПаровозоРакетоМобиль.
Ведь лапша код же получается?

Да нет никакой лапши. Продолжим псевдо-пример. Через какое-то время кому-то понадобилась полноценная продавалка этих книг, с блэкджеком и шлюхами. Фактически появляется новый проект, назовём его "SALE", где будет управление запасами, поставщиками, покупателями и пр. (а точнее, проект будет обладать лишь частью этих функций). Исходный проектик фактически вырождается в некий справочник вокруг книг как товара, назовём его "SPR". Реорганизуем каталог исходников начального демо-примера, где разделим файлы согласно своим проектам по одноименным каталогам. Теперь соответствующий инструментарий (о котором здесь пытаются говорить) позволит для одних случаев создавать/модифицировать/разрабатывать и пр. те базы, где есть только справочник (как простейшая учётная система), так и те, где есть и "SALE", при этом этот "SALE" тесно повязан с "SPR". Далее, со временем появляется проект для производства этих книг - некий "PRODUCTION", оформляем его также рядом с остальными проектами. Как и "SALE", он тоже пользуется общим справочником из "SPR", а также в случае, если этот "PRODUCTION" в БД будет рядом жить с "SALE", то он и с ним будет дружить, к примеру, поставляя информацию о себестоимости в качестве закупочных цен. В свою очередь, каждый проект (или уже подпроект) будет дружить с элементами бухучёта, если и его подселят где-то. Наличие в БД разного состава проектов может влиять на структуру объектов в БД, например, для той же таблицы "BOOKS" будут созданы соответствующие foreign key в зависимости от того, есть ли в БД связанные таблицы согласно внедрённым проектам, или добавлены или нет какие-то триггеры и т.п. В реальной жизни кроме всяких общих справочников есть широкий общефункциональный слой - управление функциональными участками с контролем состояний и всякого доступа (в т.ч. это основа для генераций "grant"-ов), журналы для отслеживания изменений и т.д. и т.п. Причём не всегда допустимо, скажем, внедрять какой-то подпроект в целом виде. К примеру, пусть тот же "SPR" фактически превратился в широкую "schema", где живут общие справочники для остальных подпроектов. Но не всегда необходимо в базе держать весь зоопарк, скажем, если необходимо организовать рабочее место какого-то кассира, где используется своя локальная база, изредка синхронизируясь с каким-то сервером, и для этой задачки необходимо пару десятков таблиц, то сваливать в эту базу ещё сотни неиспользуемых объектов как-то некошерно (хоть и не смертельно).

Таким образом, наш каталог исходников вырождается в такую структуру:

- RootProject
|- SPR
|- SALE
|- PRODUCTION

Т.е. есть каталог проекта, в корне которого свои специфичные общие файлы (что именно - сейчас не важно) и по каждому подкаталогу распределены файлы подпроектов/модулей. На основе одних и тех же исходников можно управлять базами, где есть только SPR (точнее, его часть), где есть только SALE, где есть только PRODUCTION, так и возможно любое сочетание этих прикладных модулей, со своими вариантами (если инструментарий позволяет). Соответственно в каждом конкретном случае после настроек и всяких проектирований можно получить нужную case-модель, отражающую текущую сложившеюся ситуацию в каждом конкретном случае на каждом конкретном месте.

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

Теперь о том, если пытаться проектировать на основе ER- и подобных моделей. Опускаем потенциал для возможной инвариантности функционала (хотя на практике это может стать колом, что в своё время оттолкнуло от них, это кроме неподдержки нужных СУБД, отсутствия элементарного удобства в работе из-за соответствующих GUI-интерфейсов (но это вкусовщина)). Я уже очень давно не занимаюсь визуализацией, и откровенно говоря так и не постиг нирваны с case-средствами. Я не представляю как лучше поступать в таких случаях. Если лепить одну большую case-модель как единый проект, то сомневаюсь в том, что получится грамотно под свои нужды вырезать куски или обрабатывать частично, скорее всего, придётся опять мучительно програмлять для себя (и накой тратить не одну тыщу на визуальный инструмент, терпеть его причуды и опять по-своему пилить вручную (речь, конечно, не идёт о каких-то корпоративных заморочках)). Если лепить отдельные модели для каждого подпроекта, то возникает неоднозначность с общим функционалом, либо его нужно везде дублировать, либо выделять тоже отдельной моделью, но как-то отражать связи. Не помню, что там в ER, но вроде как в IDEF-стандартах есть некие абстрактные связи, когда стрелочки приходят ниоткуда и уходят в никуда (или куда душе угодно, и то это касательно процессов, насчёт данных уже не помню). Во всяком случае, насколько я помню, многие case-средства большие любители создавать некие условные виртуальные копии объектов, чтобы упростить визуальную компоновку на экране, уменьшая лес линий и пр. Возможно, через подобные копии что-то можно отразить (хотя это опять, фактически, дублирование функционала).
Собственно, если кто-то укажет на правильную методику в таких случаях, буду признателен.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38257131
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123PSV100,
imho не туда.
- Большие системы делаются по другому. 2 модели + DSL. Одна модель - Ядро. Вторая модель сверху - предметная область = ERP.
Но очень долго и дорого.
...

Да, так и есть. У нас есть своё базовое ядро + DSL для предметки. Существенным отличием от многих ERP-подобных, пожалуй, есть то, что мы стараемся поменьше отстраняться от SQL, поменьше прикладных абстракций высокого уровня. Так получилось исторически, к тому же это оказалось хорошим потенциалом для гибкости, относительно быстро решать те задачи, на которые не рассчитывали раньше или которые хренового поддерживает ядро. И свой DSL помогает для всякой sql-генерации. Минус - привязка к СУБД.

А рассматриваемые здесь потенциальные инструментарии не завязаны на конкретные клиентские платформы, это типа универсальные помощники.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38257678
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100А рассматриваемые здесь потенциальные инструментарии не завязаны на конкретные клиентские платформы, это типа универсальные помощники.
ну дак, и претензии тута, как к непрофессионализму.
(т.к. велосипед).

- Ты создал свой DSL, но в ErWin он есть:
вот как программисты пишут - пример:
http://www.sql.ru/forum/333496/erwin-i-generatory-dlya-ib?hl=erwin ? ?????????? ??? ib

Использование языка макрокоманд в AllFusion ERwin Data Modeler
http://www.interface.ru/home.asp?artId=999


ну, и наконец, ты говоришь, что много-много линий на проекте.
Почему тут их мало?
http://www.databaseanswers.org/data_models/customers_and_campaigns/index.htm
Конечно, если ты навалил в один проект всё подряд без модульности и предметки - то будет куча.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38257697
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100 клиенту захотелось иметь код ISBN

- выходит НОВАЯ версия 2.3.4 как сервера (папка скрипты), так и EXE\HTML (папка деплой\exe)
- а если у вас ERP то ядро старое, только на местах у заказчика - новая КОНФИГУРАЦИЯ.
авторникто не заморачивается какими-то версиями, поле добавляется всем,

- не так. Версия есть. А вот кому ставить новую или нет - нет проблем (скрипты ..\2.3.4 накатить).

PSV100 понадобилось удобно формировать заказы для своего поставщика, а у того есть своя кодировка книг, причём логика которой подогнана под тип Integer

- классификаторы \ импорт классификаторов \ перекодировка классификаторов \ ETL

не пиши так много. Что ещё непонятно?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38258167
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Имхо бессмысленный спор...

ERwin и прочие CASE-средства это крутая штука, без вопросов, никто с этим здесь не спорит.

Но существуют такие организации и люди, в них работающие (и их достаточно много), которые ну никак не могут их применять в своей работе.
У кого то исторически так сложилось, у кого то денег нет, а у кого то есть мощные и обоснованные аргументы по этому поводу (особенно при разработке т.н. data centric-приложений, там где на стороне базы, помимо табличек и жиденьких триггеров, сконцентрирована бизнес логика приложения).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38258200
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НPetro123,

Имхо бессмысленный спор...

ERwin и прочие CASE-средства это крутая штука, без вопросов, никто с этим здесь не спорит.

Но существуют такие организации и люди, в них работающие (и их достаточно много), которые ну никак не могут их применять в своей работе.
У кого то исторически так сложилось, у кого то денег нет, а у кого то есть мощные и обоснованные аргументы по этому поводу (особенно при разработке т.н. data centric-приложений, там где на стороне базы, помимо табличек и жиденьких триггеров, сконцентрирована бизнес логика приложения).
в том то и дело, что аргументов, я пока не видел.
- если БЛ в БД большая, то где она хранится? Без IDE ErrWin \ IBExpert \ PLSQLDeveloper в SQL папках?

То что исторически в Java с IDE по БД мало работают - я в курсе. Это специфика ОРМ и 3-х звенки.
А "data centric-приложений" - это тоже специфика в квадрате))
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38258366
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- если БЛ в БД большая, то где она хранится? Без IDE ErrWin \ IBExpert \ PLSQLDeveloper в SQL папках?

В sql-папках и файлах хранится исходный код объектов, что как бы вполне естественно - есть код (java, c++, sql, какой угодно) и он лежит в файликах в СКВ со всеми вытекающими (версионирование, бранчинг, слияние, сборка с разными опциями и многое другое). Каких то препонов использовать полюбившиеся IDE-шки, CASE-средства - НЕТ, на здоровье. А маааааленькая тулза поможет организовать структуру хранения это кода, его контрол и сборку.
Кто работает полностью с визуальными средствами разработки БД, выгружает дампы, генерит дифф скрипты, то пожалуйста, используйте дальше, кому как удобно.
Ну а тем разработчикам, для которых код объектов первостепенен, которые пляшут именно от него, программируют БД с помощью нативного SQL, версионируют его, делают различные сборки, ночные билды и т.д. тем возможно будет полезна эта утилита.
Как минимум ей буду пользоваться я.

Petro123А "data centric-приложений" - это тоже специфика в квадрате))

насчет квадрата не знаю, но специфика есть, приложения бывают достаточно сложными и визуалка может не удовлетворять требованиям.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38258404
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ННу а тем разработчикам, для которых код объектов первостепенен, которые пляшут именно от него, программируют БД с помощью нативного SQL, версионируют его, делают различные сборки, ночные билды и т.д. тем возможно будет полезна эта утилита.
Как минимум ей буду пользоваться я.
ok.... -1.... и на этом закончим.
Т.к. "код объекта" для РСУБД прекрасно используют IDE выше.
Наверно вы понимаете под этим термином что-то своё (невизуальное типа if-else).

Удачи!
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259023
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как добавляются колонки в таблицы
ALTER TABLE ADD ...........
- тут непонятно что версионировать.

DROP TABLE - CREATE TABLE ......
тут можно отслеживать как изменились скрипты создания таблиц от версии к версии, только с данными не вполне хорошо выходит....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259083
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ну дак, и претензии тута, как к непрофессионализму.
(т.к. велосипед).

- Ты создал свой DSL, но в ErWin он есть:
вот как программисты пишут - пример:
http://www.sql.ru/forum/333496/erwin-i-generatory-dlya-ib?hl=erwin ? ?????????? ??? ib

Использование языка макрокоманд в AllFusion ERwin Data Modeler
http://www.interface.ru/home.asp?artId=999


Совершенно разные вещи. Мой DSL - для прикладной модели проекта (описание моделей, построение интерфейсов, отчётов, обработка данных и пр.). Если речь идёт о представленных ранее препроцессоре и идеях на счёт кодогенерации, то это тоже разные решения. У препроцессора и макрогенераторов разные функции, а точнее они по разному решают задачи. Мои решения для кодогенерации не зависят ни отчего и предназначены для генерации любого произвольного текста в любом месте, не привязаны к какому-то IDE, для любой своей задачи, не только возле SQL и баз, что угодно и когда угодно. Такое решение позволяет, к примеру, генерировать sql-код не только на основе шаблонов, констант, метаинформации в БД (плюс то, что может дать API case-средства), но и на основе другого соседнего sql-кода, на основе прикладного DSL внутри клиентской части и пр., т.е. любые нужные произвольные вычисления. Также можно генерировать и клиентский программный код на основе sql/БД.

И кстати, я очень доволен, что у нас есть свой велосипед, как минимум, только из-за того, что даёт возможность работать в удобном для себя текстовом редакторе, со своими соответствующими плюшками, вместо GUI-IDE, позволяя непосредственно работать именно с текстом. К примеру, для меня, как программиста, приятнее/удобнее и быстрее, скажем, быстро подправить код в sql-файле вида:
Код: sql
1.
2.
3.
4.
5.
6.
create table ANY_TABLE(
    ...
    /* добавляем столбцы: */
    COL1 TYPE1,   --- это комментарий как описание для COL1
    COL2 TYPE2    --- описание COL2
);


дать команду и в соседнем буфере в файле с историей изменений сгенерировать DDL-текст для правки таблицы в виде операторов "alter table ..." и "comment on ...", которые тут же можно выполнить, добавить свои комментарии и т.д. Или в соседнем буфере вывалить список зависимостей объекта, причём как в базе, так и в клиентском коде. И т.д.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259089
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123PSV100клиенту захотелось иметь код ISBN
- выходит НОВАЯ версия 2.3.4 как сервера (папка скрипты), так и EXE\HTML (папка деплой\exe)
- а если у вас ERP то ядро старое, только на местах у заказчика - новая КОНФИГУРАЦИЯ.
PSV100никто не заморачивается какими-то версиями, поле добавляется всем,
- не так. Версия есть. А вот кому ставить новую или нет - нет проблем (скрипты ..\2.3.4 накатить).

Не всё так однозначно просто. Появился новый столбец "ISBN", затем "ID_EXTERNAL". В итоге имеем одновременно действующие версии:
- не используется ни один столбец;
- используется только "ISBN";
- используется только "ID_EXTERNAL";
- используется "ISBN" и "ID_EXTERNAL";

При нарастании нюансов получаем комбинаторный взрыв количества версий. При программировании "в лоб" на основе типового ORM можно быстро загнуться под разными ветками/версиями кода. Поэтому я и говорю о том, что в большинстве случаев будут везде применять один вариант. У нас в рамках "ERP"-проектов (где основная "версионность") работает свой DSL, который динамически автоматом подстраивается под настроенную конфигурацию. В БД на основе "ручного" (да и "IDE"-шного) SQL отслеживать каждых чих существенно более накладно, обычно не смертельно, что в каких-то случаях будет что-то лишнее в пределах разумного, тем более СУБД занимаются оптимизацией хранения данных, когда они NULL/пустые.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259090
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,

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

Хотя данные о кол-ве внедрений и размерах БД например, развеяли бы мои сомнения.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259099
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ну, и наконец, ты говоришь, что много-много линий на проекте.
Почему тут их мало?
http://www.databaseanswers.org/data_models/customers_and_campaigns/index.htm
...
не пиши так много. Что ещё непонятно?

Вот и не понятно как с этими моделями работать. Вопросов нет, когда один проект -> одна модель -> одна база. Но не понятно, когда есть связанные подпроекты.

По мотивам выше приведенных "эталонов". Пусть имеются разные модели для подпроектов, скажем, для 1) "кадры", 2) "зарплата", 3) "подотчётные лица и материально ответственные". Каждая модель имеет одну и ту же таблицу сотрудников Employees.

Во-первых, непонятно что делать, если нужно внести изменение в таблицу Employees. Получается, нужно открывать три модели и вручную править каждую.

Во-вторых, непонятно как вместить все три модели в одну базу, причём в разных вариантах, т.е. при любом сочетании прикладных модулей. Лично мне не нужно получить три таблицы Employees, заниматься синхронизацией и дублированием данных. Соответственно нужно опять велосипедить или макропрограмлять, для таблицы Employees писать код, где нужно проверять, есть ли уже такова в БД, причём нужно учитывать, что состав столбцов зависит от внедренных модулей. Причём этот код нужно разместить в каждой модели, и не исключено, что в каждой модели он может чуть отличаться.

Я правильно поступаю ? (Сдаётся мне, что проще всё влепить в одну ынтыпрайз-модель)

Далее, я не понимаю как "зарисовать" ситуацию выше на счёт "книг", т.е. как замоделить такой код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table books (
    id integer not null,
    author varchar(20) not null,
    book varchar(20) not null,
    price integer not null,
    k_vo integer not null,

    {$IF use_isbn}
    isbn  varchar(40) not null,
    {$ENDIF}

    {$IF use_id_ext}
    id_external {$IF ext_as_int} integer {$ELSE} varchar(20) {$ENDIF} not null,
    {$ENDIF}

    primary key (id)
);


Получается нужно вручную создать разные модели для каждого случая, где:

- нет столбцов isbn и id_external
- есть только isbn
- есть только id_external типа integer
- есть только id_external типа varchar
- есть isbn и id_external типа integer
- есть isbn и id_external типа varchar

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

И я не знаю как зарисовать разный набор столбцов внутри одной модели (собственно, это противоречит самой сути case-модели, т.к. это конкретный вариант или результат процесса проектирования в данный момент времени).

P.S. Собственно, мне не интересен спор вокруг именно case-средств как таковых, меня больше волнует поиск решения для удобной разработки БД. Буду признателен, если укажешь на правильную методику для работы пусть с тем же ErWin.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259139
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛагманPSV100,

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

Не совсем понятно о каком инструменте (и проблемах) идёт речь - об утилите от автора этой темы форума, об ErWin/Case (о которых выше постоянно говорили), или о моих предложениях насчёт способа разработки БД, которые были где-то раньше по постам ?

ЛагманХотя данные о кол-ве внедрений и размерах БД например, развеяли бы мои сомнения.

Если речь идёт о тиражируемых решениях (имеются также индивидуальные разработки с единственным внедрением, за редким исключением, соответственно с меньшими проблемами на счёт инвариантности и разного функционального состава), то в общей сложности обслуживается несколько сотен баз, но у одного заказчика может быть несколько баз (и даже не один десяток). Сама база может содержать от пары десятков таблиц до нескольких сотен объектов.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259166
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ok.... -1.... и на этом закончим.
Т.к. "код объекта" для РСУБД прекрасно используют IDE выше.

Как раз GUI-IDE не используют исходный код объекта. Они его генерируют, причём по своим правилам, не всегда приемлемым. Если для IDE подать sql-скрипт с кодом объекта, скажем, в виде оператора "create table ...", который будет удобно отформатирован, с документацией и комментариями и т.д., то IDE его прекрасно проглотит, т.е. выполнит. Но если "открыть" этот же объект (таблицу), скажем, из дерева объектов базы, то исходного кода уже не будет - получим "create table ..." в том виде, как захотелось IDE (на основе того, чего она может выжать из метаданных). Причём, скажем, если в БД сохраняется исходный код тела процедуры/триггера, то исходника заголовка может не быть (информация о входных/выходных параметрах, свойства триггера и пр. размазывается по метаданным).

(к тому же обычно IDE не обладают удобным текстовым редактором и удобным управлением средой уровня vim/emacs/Sublime/JEdit/по вкусу, лично для меня это не последний бонус).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259699
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется все проблемы от незнания "версионирования продуктов".
Я ведь отвечал на этот вопрос
PSV100Далее, я не понимаю как "зарисовать" ситуацию выше на счёт "книг", т.е. как замоделить такой код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table books (
    {$IF use_isbn}
    isbn  varchar(40) not null,
    {$ENDIF}

    {$IF use_id_ext}
    id_external {$IF ext_as_int} integer {$ELSE} varchar(20) {$ENDIF} not null,
    {$ENDIF}
);



Получается нужно вручную создать разные модели для каждого случая, где:

- нет столбцов isbn и id_external

== вер. 1.0

- есть только isbn

== вер. 1.1.0

- есть только id_external типа integer

== сфигали? Прыгнули через версию?

- есть только id_external типа varchar

== сфигали? Прыгнули через версию?

- есть isbn и id_external типа integer

== вер. 2.0.0

- есть isbn и id_external типа varchar

== вер. 2.1.0


ну и заодно напиши, какой код на клиенте, у заказиков, веб-сервисах, в хранимках? Наверно тоже с условиями:
Код: sql
1.
2.
3.
4.
5.
    {$IF use_id_ext}
    SELECT id, isbn  FROM
    {$ELSIF}
    SELECT id  FROM
    {$ENDIF}
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259706
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Petro123ok.... -1.... и на этом закончим.
Т.к. "код объекта" для РСУБД прекрасно используют IDE выше.

Как раз GUI-IDE не используют исходный код объекта. Они его генерируют, причём по своим правилам, не всегда приемлемым. Если для IDE подать sql-скрипт с кодом объекта, скажем, в виде оператора "create table ...", который будет удобно отформатирован, с документацией и комментариями и т.д., то IDE его прекрасно проглотит, т.е. выполнит. Но если "открыть" этот же объект (таблицу), скажем, из дерева объектов базы, то исходного кода уже не будет - получим "create table ..." в том виде, как захотелось IDE (на основе того, чего она может выжать из метаданных). Причём, скажем, если в БД сохраняется исходный код тела процедуры/триггера, то исходника заголовка может не быть (информация о входных/выходных параметрах, свойства триггера и пр. размазывается по метаданным).

(к тому же обычно IDE не обладают удобным текстовым редактором и удобным управлением средой уровня vim/emacs/Sublime/JEdit/по вкусу, лично для меня это не последний бонус).
опять много букв, но вся логическая цепочка от неверного посыла.
Поэтому, весь пост - в корзину.
ErWin генерирует код ровно так, как ты захочешь. Т.к. у каждого объекта есть окно - ручной код.
Есть кнопка - сгенерировать код. И т.д.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38259953
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати, я очень доволен, что у нас есть свой велосипед, как минимум, только из-за того, что даёт возможность работать в удобном для себя текстовом редакторе, со своими соответствующими плюшками, вместо GUI-IDE, позволяя непосредственно работать именно с текстом. К примеру, для меня, как программиста, приятнее/удобнее и быстрее, скажем, быстро подправить код в sql-файле вида:
Согласен, нормальный программист не станет по своей воле пользоваться IDE и вообще программами с GUI. Для разработки должно быть достаточно текстового редактора, юникс утилит и какой-нибудь билд системы. Если требуется что-то еще, то значит завелась гниль, которая в будущем скажется.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260055
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123опять много букв, но вся логическая цепочка от неверного посыла.
Поэтому, весь пост - в корзину.
ErWin генерирует код ровно так, как ты захочешь. Т.к. у каждого объекта есть окно - ручной код.
Есть кнопка - сгенерировать код. И т.д.

Т.е. альтернатив ERwin'у и подходу работы с СУБД им навязываемого предлагаемого - нет?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260063
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪв удобном для себя
дак у него нет конкуренции)
Один заказчик, 100 вариантных баз и никто кроме аффтора глубины не знает.
Можно до пенсии жить)).
Windows Must Die
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260109
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Йуный джавистЪпропущено...

дак у него нет конкуренции)
Один заказчик, 100 вариантных баз и никто кроме аффтора глубины не знает.
Можно до пенсии жить)).
Windows Must Die

Вот для этого и была робко предложена описываемая тулза
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260137
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НPetro123опять много букв, но вся логическая цепочка от неверного посыла.
Поэтому, весь пост - в корзину.
ErWin генерирует код ровно так, как ты захочешь. Т.к. у каждого объекта есть окно - ручной код.
Есть кнопка - сгенерировать код. И т.д.

Т.е. альтернатив ERwin'у и подходу работы с СУБД им навязываемого предлагаемого - нет?
а то же самое что Хибер и Спринг в Java.
Я говорил, что разработкой БД Java программист не занимается.
Чтобы написать свой 1С, надо хотя бы знать его (конкурента).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260225
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123мне кажется все проблемы от незнания "версионирования продуктов".
Я ведь отвечал на этот вопрос
...
- нет столбцов isbn и id_external

== вер. 1.0

- есть только isbn

== вер. 1.1.0

- есть только id_external типа integer

== сфигали? Прыгнули через версию?

- есть только id_external типа varchar

== сфигали? Прыгнули через версию?

- есть isbn и id_external типа integer

== вер. 2.0.0

- есть isbn и id_external типа varchar

== вер. 2.1.0

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

Petro123ну и заодно напиши, какой код на клиенте, у заказиков, веб-сервисах, в хранимках? Наверно тоже с условиями:
Код: sql
1.
2.
3.
4.
5.
{$IF use_id_ext}
SELECT id, isbn  FROM
{$ELSIF}
SELECT id  FROM
{$ENDIF}



Естественно, в клиентском для базы программном коде должна быть соответствующая технология. Внутри SQL-базы как раз препроцессор и выручает. SQL - штука декларативная, причём максимально прямолинейная (писать те же списки полей в операторах select, update и т.п. дюже геморно, без нормального редактора хреново), и у него фиговые средства для абстракций кода, несмотря на всякие процедурные расширения. Технологий вида дженериков, плюсовых шаблонов и прочего параметрического полиморфизма не наблюдается. Препроцессор напоминает разработку на С/С++/Freepascal/Delphi и т.п., где есть крупнейшие проекты, и народ ведь как-то выживает. Пример выше естественно искусственный. Все понимают, что если в одном месте ввели инвариантность, то она может повлечь за собой и другие выкрутасы в иных местах. Заниматься каждым чихом, с реальным основанием или без, весьма проблематично. И на практике я не могу сказать, что весь sql-код становиться исполосован директивами препроцессора или усыпан макросами, вовсе нет. Всё в пределах разумного (конечно, как и в любом программном коде, можно наделать себе граблей, везде нужно понимание и опыт). Для чего-то удобны директивы компиляции, где-то лучше макросы. Причём макросы помогают не только для инвариантности, но и для обобщения кода, к примеру, вокруг какой-то однотипной проверки или обработки данных, и пр. К тому же, препроцессор позволяет уменьшить потребность в "динамическом" SQL, когда в блоках кода вручную формируют строку как текст sql-запроса и запускают его через какой-нибудь "EXECUTE STATEMENT ...". Код с препроцессором как раз остаётся более декларативным, sql-подобным, и чаще более понятным.

Petro123ErWin генерирует код ровно так, как ты захочешь. Т.к. у каждого объекта есть окно - ручной код.
Есть кнопка - сгенерировать код. И т.д.

Не-не-не, спасибо. Я давно отказался от подобного GUI-программирования, и не только в рамках Case-средств. Ничего хорошего, когда целостный взаимосвязанный код размазан чёрт знает где, где-то в GUI-режиме для содержательного кода объекта, что-то где-то раскидано по макросах и формулах в куче GUI-мути, где-то по окошкам для всяких событий, где-то в каких-то формах со сложными структурами (деревья, списки, куча edit-виджетов). Когда начинаются какие-то грабли, то поехали ломать голову, клацаешь кучу режимов туда-сюда, чего-то не можешь найти или вспомнить и т.д. Особенно достаёт, когда какой-то режим реализован модально: открыл, что-то понадобилось иное, закрыл, полез в другое место, вернулся и опять открыл, снова ищешь исходную позицию. С матом плюёшь на это дело, пытаешься сохранить проект в каком-то текстовом экспортном варианте (XML, CSV, json или чего там есть), вручную ищешь чего нужно в тексте, пытаешься понять в какой GUI нужно лезть, или правишь текст сам и пытаешься импортировать обратно.

А Case-средства для меня вообще выглядят как разработка того же java-проекта, но с обратной стороны: первично нужно создавать JavaDoc-документацию, для этого вся среда состоит из Dreamweaver-подобного GUI для создания HTML, где нужно постепенно создавать разделы документации, дополняя каждый раздел соответствующими содержательными элементами. После того, как создали конкретный объект, например, документация для конкретного метода класса, появляется нужная кнопочка, клацаем и открываем окно для ввода непосредственно программного кода, причём только для одного конкретного метода, нужен другой метод - другая кнопочка (где тоже только свой метод). Есть отдельный объект со своим окошком для ввода полей класса, отдельное окно для ввода секции с import-ами. И т.д.

Я понимаю потребность в процессе именно ПРОЕКТИРОВАНИЯ информационной системы, но для этого нужны концептуально иные технологии, и это отдельная офтопная тема.

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

Действительно, лучше на этом и закончить.

P.S. Большое спасибо, а то мне показалось, что я опять чего-то не допонимаю в этих GUI/Case-ах.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260281
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Я понимаю потребность в процессе именно ПРОЕКТИРОВАНИЯ информационной системы, но для этого нужны концептуально иные технологии, и это отдельная офтопная тема.
методологии проектирования давно стандартизированы. Революции тут не сделать.
http://www.info-system.ru/designing/design.html
Версионированием продукта занимается Руководитель проекта. Ему без версий никуда.
Других подходов к версии я не знаю и не встречал.
Удачи!
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38260796
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123методологии проектирования давно стандартизированы. Революции тут не сделать.
http://www.info-system.ru/designing/design.html
Версионированием продукта занимается Руководитель проекта. Ему без версий никуда.
Других подходов к версии я не знаю и не встречал.
Удачи!


Могу поделиться ссылками по соответствующей проблематике:

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

И в целом, на тамошнем сайте есть форум вокруг ДРАКОН-а, это такой графический язык программирования. Там куча реально полезного материала по поводу кривости типовых Case/UML-средств и промышленных стандартов вида IDEF и пр., есть не мало адекватных альтернативных взглядов на всю эту кухню, и полно всякой информации на счёт проектирования, где реально есть чему поучиться;

- как-то выше по постам я говорил о древней, и, фактически, уже редко кому известной, Р-технологии. Здесь собраны все найденные материалы по ней, включая и живых свидетелей тех лет. Сами по себе Р-схемы интересны, и на мой взгляд, это редчайший случай, когда графическая система реально пригодна для практической разработки. Но основное, на что обращаю внимание, это материалы по поводу комплекса "РТК" - система для разработки (кое что есть и в самих постах той темы). О таком концептуальном уровне, именно системной, разработки лично я сегодня в 21 веке могу только мечтать, при этом всё на единой, и именно гармоничной, платформе;

- ты выше хотел понять, как создаются свои "1С". Вот здесь есть отличная тема по этому поводу. Тема большая, но я рекомендую изучить всё, правильно фильтруя мусор, которого там дофига, как обычно. Автор той темы поделился своим проектом, здесь можно скачать (вся инфа по нему в той же теме), это некая своя "1C" на коленке, система концептуально очень мощная, таких ещё нужно поискать. Ключевой момент - это въехать в принцип именно системного подхода, м.б. даже не с первого раза (кстати, здесь есть "первичные" взгляды того автора, и, в целом, на том сайте можно найти не мало толковых его мнений);

- в этой теме форума я как-то давал ссылку на проект Animotron, а также и в другой теме, где тот же Максим Н интересовался альтернативным инструментом. Надеюсь, что модераторы не против, если до кучи я продублирую ссылки и тут: здесь , здесь , здесь .
Это ещё один взгляд на свою "1С", особенно рекомендую обратить внимание на способы обработки данных.


Обсуждать эти материалы я никак не собираюсь, здесь это офтоп, и я не вижу никакого смысла в "велосипед/закопать/уже_всё_стандартизировано/убей_себя/-1" и прочем пескозакидательстве.
t
Вечерками, за бокальчиком коньяку, рекомендую почитать. Что-то в жизни пригодится.


P.S. "Машина теорий" А. Седов:
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38261379
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ссылки, с интересом ознакомился.

Интерес абстрактный, ибо
PSV100 Информации о Р-технологии крайне мало, а о практическом применении толком ничего и не найти .

В практическо-хомячковом ИТ оберона и дракона не видать. Если б они давали бизнес-преимущества, наверное неболшая банда супергуру навела бы шорох, уронив 1С, Сапы,Сасы, Аксапты и оебсы - все это разом.

Это как "молчание вселенной" - казалось бы - если б техноцивилизации нашего типа были б во вселенной - они должны бы наследить в радио-диапазоне эми. Но таковых следов нет...

Нет заметных следов дракона - оберона на хедхантере. Нет практически на SQL.RU. Где они - представители иного разума из голубой бутылки?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38261509
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovИнтерес абстрактный, ибо
да. На уровне кухонных разговоров академиков.
На sql_ru как раз самая практическая аудитория.
На земле работаем))).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262450
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совершенно неправильные выводы, совсем не в ту степь. Я не хотел заводить подобный разговор, но вынужден. Сразу извиняюсь за много букв в дальнейшем, ибо будут цитаты.

Мой основной посыл в том, что если действительно (а не просто так, поскольку постольку да как нибудь) интересует проблематика методологий проектирования, и если пока ещё нет собственного чувства ущербности современного ынтырпрайза и прочего мэйнстрима, то рекомендую изучать проблему не только по статьям от производителей мэйнстрим-стандартов и их продающих сторон. А также не только изучать опыт тех, кто эти стандарты использует на уровне корпоративных формальностей, где на самом деле реальная заинтересованность действующих лиц обычно не выше, чем "до лампочки", за исключением руководителей проектов и всякого начальства, и то, только в рамках бурной иллюзии своей деятельности, и согласно своему статусу они беспокоятся о наличии нужных средств и требуют их наполнения (теми же case-моделями). Реальная жёсткая практика у тех, кому стандарты проектирования действительны нужны как воздух, чтобы выжить. И, как правило, выжить на промышленных стандартах они не могут.

Я работаю в маленькой конторке, где все работают сами на себя, как работаешь - так и живёшь, нет корпоративного маразма. А выживаем как можем, и наелись как промышленного ...овна, так и своего (кстати, здесь раньше иронично смеялись над "PHP-SQL", а я час назад был снова благодарен своему велику - после тяжёлых разборов полётов, при котором в ряде мест в коде хранимок и триггеров был прилеплен вывод отладочных данных, мне было достаточно закомментировать одно место в конфигурации модуля и фактически сразу получил конечный код без отладок для эксплуатации). Поэтому я дал ссылки на те места, где рассматриваются проблемы, с которыми я сам нахлебался.

Речь не идёт о всяких оберонах, драконах и прочих разговоров академиков на кухне. Если кому интересны технические проблемы стандартов вида IDEF, UML, eEPC, Amber, всяких Workflow и прочих, то на том же обероновском сайте можно найти реально практичную инфу, включая и альтернативные попытки. Я же, в свою очередь, обращал внимание в целом на смысл применения промышленных стандартов (а точнее, на их БЕССМЫСЛЕННОСТЬ).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262459
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжу. В том посте я приводил ссылку на "наколенную 1С". Вот цитата от того автора, где очень чётко подмечена реальная картина на счёт бизнес-моделирования, а точнее "бизнес-описательства" (что на самом деле и есть вся суть этих стандартов):
История длинная, пересказывать её, наверное, нет смысла, оставлю только существенное. ... мы последовательно обходили руководителей/директоров предприятия объясняя/обосновывая им устройство системы/предприятия. Если руководитель понимал и мог представить, как это использовать в текущей деятельности, то "выкатывал белый шар", в противном случае... "шар был чёрный"... он же последний. Мы вполне успешно поговорили с производственниками, снабжением (он нам потом прислал своего сына... устраиваться на работу)... дошла очередь до планирования... Планирование на таком крупном предприятии, как Уралмаш (в хорошие годы там работало 55 000 чел.), занятие... занятное... :)
Мы пришли в плановый отдел чуть раньше времени, нас отвели в комнату, в центре которой стоял большой стол, и рабочие столы по периметру комнаты... штук 10-12... Всё это пространство было завалено листами бумаги... с диаграммами... описаний "бизнес-процессов". Такое обилие макулатуры навевало грустные размышления. Я неосторожно пошутил по поводу "бизнес-процессов", меня привычно не поняли... но когда пришёл руководитель, ему передали "остроту", сопроводив её своими комментариями. Тот покраснел (от крайнего неудовольствия) и сразу перешёл на повышенный тон. Минут тридцать он объяснял, что никто не представляет себе планирования на таком крупном предприятии. Номенклатура собственных деталей - несколько десятков тысяч, покупных - на порядок больше... Если на каком-то этапе на одном из участков не окажется [паршивых] болтов, то процесс встанет... прощай выручка, прибыль, премии и даже зарплаты... Никто [толком] не знает, что в данный момент находится на участках, на сколько хватит складских запасов по той или иной номенклатуре... Вёрстка общего производственного плана [с учётом бесконечных согласований] на следующий месяц может занимать более месяца, а в результате горят сроки исполнения заказов [заказчику нужно быстрее/ещё вчера, а производство очень неповоротливо]... И т.д. и т.п. Если кто-то работал на крупных [машиностроительных] предприятиях, тот, наверное, знает "стандартный" набор проблем, с которыми приходится сталкиваться руководителям. Трудности Уралмаша обусловлены ещё тем, что это мелкосерийное и порой позаказное производство, что выливается в малые размеры производственных партий и, соответственно, их большое количество, что, разумеется, не облегчает жизнь плановикам, производственникам, снабженцам... И без детального описания "бизнес-процессов" [как это сделано во всём цивилизованном мире] планировать не удастся, поэтому... шутки здесь неуместны. Он шумно выдохнул... было видно, что он устал и ему совсем не хочется тратить время на очередную PR-акцию... каких-то очередных автоматизаторов.

Рассказывать о системе, о моделях не имело смысла, поскольку это просто не стали бы слушать (или сделали бы вид, что прослушали). Поэтому я просто продолжил перечислять проблемы планирования, которые ещё не были озвучены, попутно связывая их в цепочку, расставляя их приоритеты и показывая внутренние зависимости/обусловленности и, наконец, возможные причины возникновения. Это подействовало... минут десять я говорил спокойно (стараясь попасть в интонации руководителя), потом стали перебивать вопросами. В какой-то момент говорить стало невозможно и вернулись к началу. Я им нарисовал схему многопередельного/многоцехового производства (всё тот же орграф, где вершинами являются макрооперации выполняемые цехом: литейный цех, кузнечный, штамповочный, мех. обработки и т.д., а ребрами являются межцеховые связи - передачи полуфабрикатов). Естественно, что связи являются слабыми и гибкими, то есть, их можно перестраивать при планировании производства конкретной продукции (например, для какой-то продукции не нужны кузнечные операции или, наоборот... нужны). Когда связи установлены, можно переходить к планированию, то есть, перемещению по связям полуфабрикатов. Если известен норматив времени выполнения какой-то операции, то зная объём партии, можно сказать сколько времени займёт выполнение этой операции над данной партией продукции. При этом планировать можно от конца к началу (от плановой даты выпуска продукции до даты запуска в производство - "тянущая" методика планирования) или от начала к концу (от даты запуска к дате выпуска - "толкающая" методика планирования). Таким образом, добавляем к плану выпуска/запуска всё новые партии продукции, в соответствии с приоритетами (срочные заказы, отстающие, обычные, "фоновые") до тех пор пока на одном из участков/цехов не произойдёт перегрузка. Перегрузка означает, что на участке/в цехе не хватает производственных мощностей для выпуска нужного объёма продукции (с учётом коэффициента загрузки, который в мелкосерийном машиностроении составляет 0,6 - 0,85 [чем выше, тем эффективнее используются производственные мощности], в Японии этот коэффициент держат на уровне 0,45 - 0,6 (двойной запас производственной мощности), в противном случае их пресловутый Канбан не работает, а стоит запас мощностей... дорого... половина оборудования простаивает без дела). Если план работы подходит к пределу (0,85), а сроки выпуска "горят", тогда следует подумать о повышении сменности (ввести дополнительные рабочие смены) и/или организацию и оплату сверхурочных работ. Выполнив планирование на уровне производства в целом, можно перейти к цеховому планированию. Нам уже известны объёмы работ, которые должен выполнить цех в плановом периоде, зная технологию производства в данном цехе, количество и размещение производственных мощностей, можно по той же схеме (теми же алгоритмами) выполнить внутрицеховое планирование.
Отдельно стоит вопрос о горизонте планирования, поскольку от момента запуска в производство до выпуска готовой продукции проходит порой не один месяц, и даже не один год... То есть, планирование работы начальных цехов по выпуску данной продукции происходит задолго до планирования работы сборочных/разборочных (конечных) цехов, в противном случае, сборщики просто останутся без работы. Также необходимо учитывать, что даже при мелкосерийном производстве, часть производственных подразделений могут работать в режиме средней и даже крупной серии (на одной буровой установке может быть несколько тысяч болтов - выпуск болтов - средняя серия, а сами буровые выпускаются мелкой серией).
Потом обсуждались вопросы нормирования, включая нормативы складских запасов, учёта остатков на рабочих местах/участках и пр. пр. ...
Через неделю мне позвонил мой знакомый и сказал, что на совете директоров Уралмаша докладывал руководитель отдела планирования по нашим моделям. Однако не прошло и трёх месяцев, и "москвичи" в очередной раз сменили руководство предприятием... Разруха, увы, продолжается... Но сам факт того, что работу любого предприятия можно выстроить сообразуясь с элементарной логикой, без каких-то анкет, рисования "бизнес-процессов" и прочих глупостей (а-ля ISO 9000:2000 и подобных)... вселяет надежду, что может быть одумаются... ещё...


Иными словами, все эти "бизнес-стандарты" и "case-модели" на самом деле ни разу не модель системы, это лишь некое отражение в каком-то виде (пусть в графическом) какого-то кусочка информационной модели, причём в единственном варианте, отражающем состояние дел на данный момент времени. Завтра поменяются внутренние связи или будет новое внешнее воздействие на предприятие как систему, всё - нужна новая case-модель, все эти case-ы не имеют или никак не отражают причинно-следственных связей. Речь выше шла о зарисовке процессов, всё это касается и их братьев - всяких ER-моделей данных, другой полукусочек модели.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262472
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь я обращаю внимание тех, кому действительно интересно. Ссылки на ту наколенную 1С я привёл не просто для примера, как может выглядеть продукт, речь не идёт о какой-то технической реализации как таковой, это не почва для какого-нибудь "Windows Must Die". Продукт интересен концептуально, построен совсем не по типовым принципам. В отличие от 1С, Сапов, Аксаптов и прочих монстров там как раз реализована полноценная модель предприятия, причём именно как система (согласно теории систем и системного подхода). Вот ключевая цитата самой сути:
Вроде бы эти вопросы мы уже обсуждали... и неоднократно. Ничего нового я не скажу. Вы правы, можно исходить из базовой модели жизненного цикла изделия/продукции: моделирование - проектирование/конструирование - планирование - разработка/создание - эксплуатация. Каждая стадия представима своим технологическим процессом. То есть, существует процесс моделирования, существует процесс проектирования и т.д. Любой процесс состоит из отдельных операций (в предельном случае может состоять из одной операции). Собственно, принципиальной разницы между процессом и операцией нет, любой процесс можно считать макрооперацией, а любую операцию можно рассматривать, как микропроцесс. На производстве этим часто пользуются, называя микропроцесс - типовым технологическим процессом, например. Подобная масштабируемость очень удобна, поскольку позволяет использовать одни и те же модели на микро- и макро-уровнях.
Любой технологический процесс представляет собой орграф (направленный граф), где вершины соответствуют технологическим операциям, а рёбра - передачам полуфабрикатов. На микроуровне (уровень предприятия) операции выполняются производственными мощностями данного предприятия, на макроуровне, операции выполняются на отдельных предприятиях (например, операция по выпуску тракторов выполняется тракторостроительным заводом [ЧТЗ, к примеру]). Аналогии по описанию микро- и макро-уровней можно приводить долго... но я их опущу, чтобы не уходить от темы.
Технологическая операция объединяет в себе три элемента (порождается ими): средства труда, предмет труда и, собственно, живой труд. Каждый элемент операции нормируется: нормы износа основных средств, нормы выработки/потребления, и нормы времени работы персонала. Помимо этого, есть нормативы и требования к самой тех. операции, которые не сводятся к её элементам (или сведение не является тривиальным). Нормироваться, например, может время выполнения тех. операции, которое, в общем случае, не равно времени работы оборудования и/или персонала. Требования к операции оформляются технологическим регламентом, где прописывается порядок выполнения операции и контроль выполнения и результатов.
Что мы сейчас имеем...
1. Стадии жизненного цикла, где каждая стадия - процесс, и связи между стадиями;
2. Структуру любого процесса;
3. Элементы, из которых состоит процесс, включая нормативы и требования к ним.
Как видите, всё достаточно строго/формально, единообразно и полиморфично... Всё сказанное можно довольно просто превратить в систему, которая позволяет контролировать жизненный цикл, планировать развитие изделия (вносить изменения, выпускать новые ревизии/версии, переходить к новым изделиям). В общем, даже структура БД для этой системы довольно проста.

Два слова о ролях... Под ролью обычно понимают поименованную совокупность действий. Например, роль технолога подразумевает, что человек умеет делать то-то, то-то и то-то... Роль образуется, исходя из общих/внешних требований, путём выделения в них специфических групп. Если говорить о программировании, то понятие ролей составляет основу для последующей классификации и порождения "иерархии классов/наследования объектов". С другой стороны роль - это группировка интерфейсов с вышестоящим уровнем на основе специфических признаков/свойств/качеств. Таким образом, верхний уровень системы задаёт требования своим подуровням, которые формируют на основании этих требований сущности. Понятие роли в данном контексте является ключевым и формальным.


Иными словами, там нет явного программирования проводок, документов и пр. и прямой их обработки "в лоб" (за рамками функционального ядра), там осуществляется непосредственное моделирование действующих процессов внутри предприятия как системы, со всеми связями и инвариантами. Понимание что такое "система" со стороны автора можно глянуть здесь (это не какой-то пиар, просто когда я писал вчерашний пост я вспомнил об этом человеке, чьи идеи я разделяю, и по памяти нашёл ссылки):
- Предприятие - открытая гибкая система
- Языки системы и система языков
- Программы | Системы
- ну и до кучи: Проблема описания абстракций предметной области

Выше приведенная наколенная 1С - пример результатов именно системного моделирования. Из ссылок выше можно понять, что современные мэйнстрим-ЯП не способны полноценно описать модель системы. А в документике на счёт "машины теорий" это проблема раскрыта более широко, и типовой набор "java-проект плюс HTML-документация плюс возможная wiki плюс ER-модель плюс возможная бизнес-описалка" - ни разу не модель системы. Ну и сама эта "машина" - тоже попытка полноценного, и именно проектирования (кстати, кто не в курсе на счёт таблиц решений (это лишь часть тамошнего моделирования) - книга и современная забава по мотивам).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262476
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На счёт умершей Р-технологии. Я специально обращал внимание на комплекс РТК. На мой взгляд, это эталон для полноценного системного проектирования. Нужно понять его сущность, на каких принципах он основан. Там есть (точнее было) всё что нужно, причём на грамотной архитектуре, которая правильно предопределяет процесс именно системной разработки. Нужно посмотреть на его структуру, как там всё разбивается на модули, как там всё взаимосвязано, как процесс проектирования осуществляется через правильный путь - от первоначальных описательных моделей через детализацию на уровне математических моделей и других строгих формальных описаний с верификацией до конкретного программного кода. Причём с наличием инвариантности, с учётом всех причинно-следственных связей (кроме того, что была поддержка вариантов модулей, можно обратить внимание на то, что даже Р-схемы для задания структур данных, описания процессов, графиков работ и пр., т.е. не только для алгоритмов, имели потенциал для указания вариантов). Плюс были прообразы сетевой разработки, контроль доступа, своя СКВ, документация, свои БД и пр.

Т.е. важен сам концептуальный принцип. Современных аналогов просто нет и вряд ли будет (но, я как и все, всего не знаю и всего в глаза не видел). И жаль, что загнулось. И даже, может быть, современный мэйнстрим был бы другим, если бы всё не закончилось вместе с союзом. Тогда у американцев ничего и близко такого не было. И их всякие IDEF-ы начали развиваться совсем не в ту сторону, плюс все их системы зарождались и т.д. в совсем иных условиях, в IBM-подобных конторах с жирными бюджетами на госзаказах со сплошным откатингом и страшной бюрократией. В советское время в оборонке и космичке (где всё зарождалось) работали интеллектуалы высокого уровня, выращенные на советском образовании, на энтузиазме, свойственном русской душе, и на неслабом чувстве патриотизма за свою Родину, особенно при соревнованиях с американцами. Тот же упомянутый дракон тоже не с потолка придумали. Решали сложнейшие задачи, когда в организации, где работает не одна тыща, есть куча инженеров, прекрасно знающие свою предметную область, но не могущие программировать, а есть программисты, которые не в зуб ногой в этой области, причём критически важной, где глюки и кривизна приводят к дорогостоящим катастрофам с возможными человеческими жертвами. Это вам не "мэйнстрим".
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262477
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, всё выше сказанное прошу принять как рекомендация к стремлению правильного системного подхода при проектировании, в любой области, не только в ERP-болоте. Большинство, или в большинстве случаев, програмляют как бы не задумываясь, и как бы естественным образом что-то проектируя у себя в голове. На соответствующих проектах может вжарить петух, и начнёшь метаться по сторонам в поисках нужной "машины теорий".

P.S. Сорри, просто тоже зацепила эта тема, как и разговоры вокруг правильной и удобной разработки БД.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262538
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100 Я работаю в маленькой конторке, где все работают сами на себя, как работаешь - так и живёшь, нет корпоративного маразма
Ну и хорошо, пусть в маленьких конторах опробуются новые хорошие подходы, потом люди из них разбредуться и перенесут накопленные знания в мэйнстрим. Это же и есть эволюция путем естественного отбора идей. Если там будет найдена, опробована и отлита пуля из серебра, это же будет счастье для всех. Корпоративный маразм - он же тоже. Окостеневшие приспособительные механизмы. Или он только кажется маразмом с определенного уровня, а с уровня выше - хорошее правильное решение. В интеграторах - там тоже борьба за каждый бакс. По итогам финреза премируют и депремируют и тд.
про сочетание жестких и гибких паттернов в биологии Конрад Лоренц писал, в ==Так называемом зле== и ==Оборотной стороне зеркала==

- если что-то было 5-10 лет назад хорошей оригинальной новостью, она должна была бы прокапать и отразится в хедхантерах уже вот. 5-10 лет назад говорить про IDEF-ы было модно. Как сейчас помню.... О чем говорят сейчас? Самый толковый (мегатолковый по моим понятиям) из моего окружения разраб-методолог... сейчас продает решения от одной из корпораций бобра-осла. Такой тренд, такой дух времени в моменте. Может ветер перемен и принесет новое?
Ну. подождем еще 10 лет, и коли не помрем - увидим, что учудит Всеблагая Эволюция...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38262774
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovНу и хорошо, пусть в маленьких конторах опробуются новые хорошие подходы, потом люди из них разбредуться и перенесут накопленные знания в мэйнстрим. Это же и есть эволюция путем естественного отбора идей. Если там будет найдена, опробована и отлита пуля из серебра, это же будет счастье для всех.

Думаю, серебряной пули не будет. Человек ленив по своей сути, он в вечном стремлении улучшить свою жизнь, и вечный поиск серебряной пули - двигатель прогресса. И вряд ли мы познаем счастья в некоем глобально условном мэйнстриме. Сейчас это настолько разбухшая махина, причём бабло-политическая, а уж потом какая-то техническая, и чем больше масса, тем больше инерция. Сейчас вроде наблюдается новый виток развития на основе того, чего уже было раньше. Вот в той же ARIS, что на основе eEPC, чувствуется, что люди как-то понимают, что в жизни то оно как-то не так, как все рисуют. Ввели хоть какие-то причинные связи (их принцип "событие -> функция -> событие"), есть намёки на варианты процессов, и т.п., но вроде на счёт моделирования данных прогресса нет. А хорошее старое настолько пылится на каких-то полках, что его фиг и заметишь. Лично я о Р-технологии узнал совершенно случайно. Причём, в ней удивило, что голову ломали не только над тем, как проектировать и разрабатывать системы, но и чтобы технологией можно было реально пользоваться. То, что ввели именно графические схемы - очень даже правильно. Тогда стояла задача дать возможность непрограммистам, инженерам и прикладным специалистам, непосредственно работать с тогдашнем "мэйнстримом", а это С/C++/Паскаль/Форт/Фортран и пр. Причём схемы имеют полноценную структурность (чего нет у всяких блок-схем), специально проектировались так, чтобы не дать возможность в одном месте иметь слишком много кода, всё должно распределяться, подталкивают к обобщению и детализации на более низких уровнях. При этом думали над тем, чтобы эти схемы можно было легко рисовать, на уровне ввода текстовых исходников. Конечно, они имеют свой специфический вид, свои проблемы, но те, кто пользовался, говорят, что было всё очень удобно, даже на тогдашних текстовых терминалах. Сейчас такая инженерная вычурность мало привлекательна для "цветастого" и прочего бизнес-попугайства. Я изредка ломаю голову, как эти схемы задействовать сейчас. Потребность в визуализации изредка имеется. Для технической разработки вокруг БД мы особо ничего не рисуем (в т.ч. мало лазим в GUI-тулзы, для ряда операций проще сгенерить удобный HTML, например, для сравнения таблиц, как здесь или здесь , или для сравнения данных - здесь и здесь , для схем думали задействовать типа что-то Graphviz или PlantUML по мотивам эмаксовой org-mode, но не срослось). А вот разборы полётов с людьми на местах имеются, и общий язык нужен. Кроме того, нам нужна новая платформа, есть мысли связать свой текстовый DSL с Р-схемами, причём инвертировать в одну и обратную форму. Пока всё обдумывается, на реализацию ресурсов ещё нет. Планируется под жабу, но пока дело дойдёт, то возможно уже нужно будет смотреть на новый Rust. JVM, конечно, штука мощная как техническая реализовалка благодаря своему уже имеющемуся широченному потенциалу на каждый чих, но всё-таки как техническая платформа Rust более привлекателен, как некий эрланг на стероидах (к сожалению, пока лишь концептуально, но надежды есть). А если вдруг родится своя полноценная "Р-технология на коленке", то чтобы она вдруг попала в какой-нибудь мэйнстрим, то нужно уж очень заинтересовать мазиловцев, как разработчиков Rust-а, а те, в свою очередь, должны уж очень привлечь гугл, тогда может быть. Это, конечно, гипотетический бред, но другого пути я не вижу. Вон мужики из немерля сколько лет работали со своим проектом и для себя (и тоже не от хорошей жизни), и только через jetbrains немерл сможет попасть в промышленность, если проект всё-таки реализуют.

Таков сегодня мэйнстрим.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265387
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот:
https://github.com/mgramin/LiWIDE

Не сообразил куда собранную версию выложить, поэтому пока положил в корень репозитория в папку bin (там пример конф. файла и стартовый шелл скрипт, батника еще нет, т.к. на Винде не запускал...).

Это больше пока как прототип, чтобы можно было пощупать и примерно увидеть в действии. Код соответствующий.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265560
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но сам факт того, что работу любого предприятия можно выстроить сообразуясь с элементарной логикой
А можно показать пример такого предприятия, на котором все так и выстроено? И чтобы оно именно работало.

=====================

Максим , А пояснения - что это и как. Ну джар. Ну лежит. В вики - 1 статья из которой совсем непонятно, зачем оно. 2 примера команды которая создает дерево каталогов.

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

В чем идея - вместо криэйт-тэйблов писать иксемельки? Руками? Это прогресс?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265635
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov,
+1

off ))
P2P-будущее
http://slon.ru/ipad/setevoy_razum_pervye_shagi-941035.xhtml
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265641
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovВ чем идея - вместо криэйт-тэйблов писать иксемельки? Руками? Это прогресс?
я мало встречал людей, умеющих писать сложные запросы (тюнить БД) и владеть ООП профессионально.
Ум заточен либо на то, либо на другое.
Поэтому появился ОРМ, и появляются наколенки.... вроде данной тулзы...
imho
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265684
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПланируется под жабу, но пока дело дойдёт, то возможно уже нужно будет смотреть на новый Rust
этих новых перспективных столько уже на стероидах позакопали.... у гугла - дарт и го.... тикли всякие - якобы на стероидах. Ребол всякий гениальный. Серверный джава скрипт с нодой жс. Скала... столько всего уже есть уже. еще один? Суета и томление духа. Сугубая имха. Люблю странно-маргинальное как принцип, но уже навевает тоску...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265726
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov,
угу. Окромя 3-х видов отношений 1-1, 1-8, 8-8 - ничего пока в новом тысячилетии не придумано).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38265740
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Vladimir Baskakov,
угу. Окромя 3-х видов отношений 1-1, 1-8, 8-8 - ничего пока в новом тысячилетии не придумано).

еще грят zero 2 many бываит
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38266157
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Vladimir Baskakov]
Максим , А пояснения - что это и как. Ну джар. Ну лежит. В вики - 1 статья из которой совсем непонятно, зачем оно. 2 примера команды которая создает дерево каталогов.

Согласен, пока сумбурно...
Подробные пояснения на конкретных примерах будут чууть попозже.
Пока в кратце:


Vladimir BaskakovЯ вот ораклист. люблю создавать сложнопартиционированные и индексированные таблицы. И как оно мне поможет писать и поддерживать код?

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

Vladimir Baskakovв оракловой документации на команду создания таблицы много-много страниц....

Золотые слова. Поэтому я искренне не понимаю как можно "дизайнить" БД визуально, через IDE, case и другие графические примочки... Так что данная тулза работает с чистым нативным sql'ем, вами написанном (ну или сгенеренным...).

Vladimir BaskakovКак Вашу тулзу использовать вместе с системой контроля версий. Ничего непонятно.

Весь код хранится в версионированных каталогох, никакой специальной интеграции нет.



Vladimir BaskakovВ чем идея - вместо криэйт-тэйблов писать иксемельки? Руками? Это прогресс?

Неет. Не вместо, а вместе. Т.е. все объекты создаются на чистом sql'е, таком каком вам надо. А в xml просто описываются типы объектов БД (тип таблица (состоит из элементов: ddl, sequence, indexes, test_data, гранты, production data, etc), тип хранимая процедура (элементы: ее ddl, гранты, юнит тесты и т.д.)). В xml-нике типа объекта описывается в каком виде будет хранится исходный код объекта (в разных файлах, в одном файле, в комбинированном, как угодно).
Так же эта штука может создать "болванку" (набор файлов и папок) для того или иного объекта, используя сниппеты, с автоподстановкой имени (пока только имени $dbObjName$) объекта.

Теоретически эту тулзу можно использовать для чего угодно (не только объекты БД), что хранится в файлах и имеет какую-либо структуру.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38266222
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НА в xml просто описываются типы объектов БД
сложнее всего описать связи, очерёдность, и вариантность:
http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_7002.htm
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38266289
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слышал, от людей, поддерживающих одну банковскую систему, что скрипт подъема от версии к версии накатывается 2-3 раза. Нормальная практика.... одни объекты создались, потом зависимые от них, потом - зависимые от зависимых....
У нас патчи делали сравнительно маленькими, и они накатывались сразу. Правда, иногда подъем от версии 1 до версии 10 приходилось делать последовательно накатывая промежуточные.

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

Так что я совсем совсем не понимаю, о чем речь.... Какой именно функционал про папочки и файлики поддерживает представленный софт.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38267014
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovНо сам факт того, что работу любого предприятия можно выстроить сообразуясь с элементарной логикой
А можно показать пример такого предприятия, на котором все так и выстроено? И чтобы оно именно работало.

Тут да, чем крупнее организация, тем больше заболоченная местность. Что касается той "наколенной 1С", то всё-таки там был реализован отличный концептуальный подход. Насколько я помню (на основе того, чего сам читал на форумах), эта система была установлена на нескольких предприятиях, причём промышленных, но относительно не больших. При этом моделированием процессов занимались сами плановики, бухгалтера и пр. спецы (при поддержке, конечно) на тестовых стендах. Деятельность той конторки в России и СНГ как-то не наладилась, вроде их прибрала к себе какая-то монстро-ERP корпорация из Китая или Тайвани или что-то в этом роде, и все их наработки и технологии обитают в тех краях.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38267020
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovПланируется под жабу, но пока дело дойдёт, то возможно уже нужно будет смотреть на новый Rust
этих новых перспективных столько уже на стероидах позакопали.... у гугла - дарт и го.... тикли всякие - якобы на стероидах. Ребол всякий гениальный. Серверный джава скрипт с нодой жс. Скала... столько всего уже есть уже. еще один? Суета и томление духа. Сугубая имха. Люблю странно-маргинальное как принцип, но уже навевает тоску...

Видимо, уже сказывается усталость от своей профессиональной деятельности. Ничего выше сказанное не закопано, наоборот, все развивается и используется. Согласен с тем, что зоопарк имеет и свой негатив, с этим нужно жить и выживать.

На счёт Rust-а. Имхо, на сегодня это фактически единственная альтернатива (потенциальная) для ряда С++-разработок, где можно потеснить эрланг. Go и D имеют существенные проблемы. Rust - это, всё таки, не виртуальная машина пусть даже с jit-ом, с правильной моделью памяти без жабских проблем со сборкой мусора и менее проблемным способом организации межпоточных/межпроцессных взаимодействий.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38267028
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovТак что я совсем совсем не понимаю, о чем речь.... Какой именно функционал про папочки и файлики поддерживает представленный софт.

Я всего до конца не осознаю, но насколько я понимаю, тулза может:

- на основе БД создать каталог исходников, причём по настроенным правилам;
- на основе каталога исходников выполнять ряд вспомогательных операций, таких как извлечение только какой-то нужной части, например, извлечь все "данные для таблиц" (весь набор операторов "insert ..." и подобное) в каком-то варианте или т.п.;
- на основе исходников выполнять создание БД, или генерировать sql-скрипты для этого, т.е. слепливать нужные sql-файлы (или части файла) в правильной последовательности, возможно лишь частичное создание БД, или только конкретных объектов.

А вот своего "инсталлятора" для внесения изменений в работающую базу вроде как не предполагается, для этого используются сторонние или стандартные инструменты.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38267056
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим Н,

я предлагаю на досуге подумать об ещё одном варианте решения задачи, если говорить о предлагаемой утилите как об универсальном инструменте (а такой инструмент, действительно, нужен). Разрабатываемый вариант вокруг XML имеет проблемы:

- только из-за наличия XML, как такового, многие даже не посмотрят на продукт. Он многих и так достал в той же джаве, некоторым как-то не в кайф ковыряться и в XML, и всё равно при этом писать sql-код (как, например, в Liquibase - что-то указывай в xml-операциях, а что тулза не понимает - пиши в sql). Замена на json, yaml и пр. ничего не даст, шило на мыло;

- описать реальную конфигурацию для конкретных проектов не совсем уж и простая задача, особенно, когда чего-то инструмент не понимает или не позволяет сделать, начинаются подгонка под имеющийся функционал (или приобретают ещё дополнительные костыли). Чтобы инструментом начали пользоваться уже в коробке с ним обязательно должен быть на слабый типовой набор заготовок, как предлагаемые варианты, скажем, на основе рекомендаций от "лучших умов", т.е. от придворных производителя SQL-сервера, или свои рекомендации, типа удобные для такой-то методики разработки БД, и т.д. С одной стороны, вроде как есть метаописание структуры проекта, т.е. формальное строгое описание стандарта разработки, что очень хорошо, но само по себе это описание несколько геморное, трудно составлять и читать/разбираться. В какой-то степени, такой подход напоминает составление стандарта программирования на той же джаве, но где в дополнение к обычному текстовому документу (требования и рекомендации, подкрепленные примерами кода) обязательно требуется строгое описание в виде BNF-грамматики ЯП.

Предлагаю попробовать подойти чуть с другой стороны. В тулзе в качестве универсального варианта уже сейчас предполагается использовать некие метки кода на основе "startText" и "stopText". Имеет смысл отталкиваться именно от них. Посмотри на текстовые редакторы (ну и др. IDE): в виме/эмаксе/Sublime/JEdit и пр. есть понятие меток кода, которые настраиваются, обычно через регэкспы, для конкретного синтаксиса языка и через них выполняется быстрая навигация по коду (типовой "goto symbol..."). По такому принципу нужен набор правил, где, например, на основе текста "create table MyTable ..." тулза поймёт, что это метка кода, где "MyTable" - имя метки, "create table" - даёт её тип (пусть будет "table"), на основе типов и имён можно понимать связи между метками. Фактически, нужно разрабатывать один набор правил для SQL, который применим ко всем любым проектам. И если покопаться во всяких sql-mode для эмакса и прочих, то уже можно нарыть основу для набора меток, причём под разные диалекты SQL. Можно ещё глянуть в сторону ctags и подобных.
Но есть но. Не всегда всё однозначно правильно определяется универсальным способом через те же регулярки. В текстовых редакторах эти метки - фактически, просто удобняшка для быстрой работы в редакторе. Если тулза должна однозначно всё правильно понимать, всегда генерить корректные sql-скрипты и пр., то желателен вариант по надёжнее. Без полноценного разбора текста (хотя бы упрощенного) очень проблематично. Можно ввести строго формальные метки в виде спец-комментариев (чего некое подобие предлагается уже сейчас в тех примерах на сайте). Или же ограничиться тем принципом, что в таком-то файле должен быть только такой-то объект (например, "create table" в одном файле, индексы - в другом и т.д., т.е. только один вариант "не sample"). Но тогда имеется ограниченность в структуре проекта, плюс не всегда удобно иметь кучу файлов, особенно мелких.

И если избавиться от XML, а точнее от обязательного наличия метаинформации о проекте, и на основе содержательного текста понимать, что находится внутри каждого конкретного sql-файла (а также, скажем, дополнительно понимать, что файлы могут распределяться по разным каталогам с целью логического деления на какие-то модули), то это существенно упростит использование инструментария. Тут, в принципе, есть почва для ведения каталога исходников в любой удобной форме, при этом как бы сразу можно подстроиться для использования и других инструментов (например, вести create-скрипты отдельно, рядом скрипты для накатов, или организовать структуру проекта под какой-нибудь DbMaintain и пр.).

В принципе, задекларированный функционал реализуем и на основе предложенной формы инструмента, но без дополнительной возни будет приятнее и гибче работать. Но проблема ещё и в самом функционале. Если ставить задачу обратного "реинженеринга", т.е. формирование каталога исходников на основе БД, то да, без метаописаний не обойтись, если говорить о супер-универсальности. Но здесь можно попробовать задавать правила в ином виде, скажем предусмотреть типовые варианты: лепить всё в один файл (абсолютно всё), распределять объекты по каждому файлу (что-то частично вместе, например, таблица вместе с индексами, триггеры - отдельно), создавать ли подкаталоги по типам объектов и т.д. Хотя не знаю, м.б. как раз всё и скатится к XML (лично я в своём планируемом тулзе собираюсь "вшить" единый вариант на основе разбиения исходников и объектов БД по логическим иерархическим модулям/подмодулям с зависимостями с использованием стандартов именования, что также даёт основу и для реинженеринга, ну и закладывается функционал пошире, а точнее для решения самых основных задач - создание БД, полное и частичное, накаты изменений, и уж потом всякие помогалки).

Такой вот вариантик.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38267165
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Vladimir Baskakov,
+1

off ))
P2P-будущее
http://slon.ru/ipad/setevoy_razum_pervye_shagi-941035.xhtml
Хм..., спасибо, но там летают не так высоко. Здесь на сайте добирались по выше, до самой технологической сингулярности
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268174
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Vladimir BaskakovТак что я совсем совсем не понимаю, о чем речь.... Какой именно функционал про папочки и файлики поддерживает представленный софт.

Я всего до конца не осознаю, но насколько я понимаю, тулза может:

- на основе БД создать каталог исходников, причём по настроенным правилам;
- на основе каталога исходников выполнять ряд вспомогательных операций, таких как извлечение только какой-то нужной части, например, извлечь все "данные для таблиц" (весь набор операторов "insert ..." и подобное) в каком-то варианте или т.п.;
- на основе исходников выполнять создание БД, или генерировать sql-скрипты для этого, т.е. слепливать нужные sql-файлы (или части файла) в правильной последовательности, возможно лишь частичное создание БД, или только конкретных объектов.

А вот своего "инсталлятора" для внесения изменений в работающую базу вроде как не предполагается, для этого используются сторонние или стандартные инструменты.

Еще одна из целей это стандартизировать разработку, например соблюдение внутрикорпаративных стандартов наименования объектов БД, структру расположения их в СКВ и пр.
Т.е. некий каркас, благодоря которому можно будет быстро въехать что к чему, как устроена разработка БД и т.д.

Часто бывает при работе с СКВ одни разработчики хранят таблицы целиком (с индексами и триггерами), трагие разбивают по файлам, одни используют наименование схемы, другие нет, причем все пользуются разными тулзами для выгрузки кода (страшное слово, согласен) и получается каша.

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

Например создаю я таблицу с помощью этой штуки, в результате получаю в СКВ папочку с именем таблицы (имя папки берется из шаблона и подставляется имя объекта вместо $ObjName$), в ней готовые папки/файлы с элементами таблицы (ddl, индексы, тригеры, ключи, тестовые данные). Причем эти файлы не обязательно буду пустыми, можно использовать сниппеты (snippetText), в которые подставятся имена ваших объектов.

А потом могу достать код (в любом виде, целиком, поэлементно, обернутым в оболочку какую-нибудь и т.д.) и скармливаю какому-нибудь sql экзекутору (sqlplus, psql, etc).

Т.е. имхо ничего криминального и противоестественного

Как то так.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268180
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Максим Н,

я предлагаю на досуге подумать об ещё одном варианте решения задачи, если говорить о предлагаемой утилите как об универсальном инструменте (а такой инструмент, действительно, нужен). Разрабатываемый вариант вокруг XML имеет проблемы:

- только из-за наличия XML, как такового, многие даже не посмотрят на продукт. Он многих и так достал в той же джаве, некоторым как-то не в кайф ковыряться и в XML, и всё равно при этом писать sql-код (как, например, в Liquibase - что-то указывай в xml-операциях, а что тулза не понимает - пиши в sql). Замена на json, yaml и пр. ничего не даст, шило на мыло;

- описать реальную конфигурацию для конкретных проектов не совсем уж и простая задача, особенно, когда чего-то инструмент не понимает или не позволяет сделать, начинаются подгонка под имеющийся функционал (или приобретают ещё дополнительные костыли). Чтобы инструментом начали пользоваться уже в коробке с ним обязательно должен быть на слабый типовой набор заготовок, как предлагаемые варианты, скажем, на основе рекомендаций от "лучших умов", т.е. от придворных производителя SQL-сервера, или свои рекомендации, типа удобные для такой-то методики разработки БД, и т.д. С одной стороны, вроде как есть метаописание структуры проекта, т.е. формальное строгое описание стандарта разработки, что очень хорошо, но само по себе это описание несколько геморное, трудно составлять и читать/разбираться. В какой-то степени, такой подход напоминает составление стандарта программирования на той же джаве, но где в дополнение к обычному текстовому документу (требования и рекомендации, подкрепленные примерами кода) обязательно требуется строгое описание в виде BNF-грамматики ЯП.

Предлагаю попробовать подойти чуть с другой стороны. В тулзе в качестве универсального варианта уже сейчас предполагается использовать некие метки кода на основе "startText" и "stopText". Имеет смысл отталкиваться именно от них. Посмотри на текстовые редакторы (ну и др. IDE): в виме/эмаксе/Sublime/JEdit и пр. есть понятие меток кода, которые настраиваются, обычно через регэкспы, для конкретного синтаксиса языка и через них выполняется быстрая навигация по коду (типовой "goto symbol..."). По такому принципу нужен набор правил, где, например, на основе текста "create table MyTable ..." тулза поймёт, что это метка кода, где "MyTable" - имя метки, "create table" - даёт её тип (пусть будет "table"), на основе типов и имён можно понимать связи между метками. Фактически, нужно разрабатывать один набор правил для SQL, который применим ко всем любым проектам. И если покопаться во всяких sql-mode для эмакса и прочих, то уже можно нарыть основу для набора меток, причём под разные диалекты SQL. Можно ещё глянуть в сторону ctags и подобных.
Но есть но. Не всегда всё однозначно правильно определяется универсальным способом через те же регулярки. В текстовых редакторах эти метки - фактически, просто удобняшка для быстрой работы в редакторе. Если тулза должна однозначно всё правильно понимать, всегда генерить корректные sql-скрипты и пр., то желателен вариант по надёжнее. Без полноценного разбора текста (хотя бы упрощенного) очень проблематично. Можно ввести строго формальные метки в виде спец-комментариев (чего некое подобие предлагается уже сейчас в тех примерах на сайте). Или же ограничиться тем принципом, что в таком-то файле должен быть только такой-то объект (например, "create table" в одном файле, индексы - в другом и т.д., т.е. только один вариант "не sample"). Но тогда имеется ограниченность в структуре проекта, плюс не всегда удобно иметь кучу файлов, особенно мелких.

И если избавиться от XML, а точнее от обязательного наличия метаинформации о проекте, и на основе содержательного текста понимать, что находится внутри каждого конкретного sql-файла (а также, скажем, дополнительно понимать, что файлы могут распределяться по разным каталогам с целью логического деления на какие-то модули), то это существенно упростит использование инструментария. Тут, в принципе, есть почва для ведения каталога исходников в любой удобной форме, при этом как бы сразу можно подстроиться для использования и других инструментов (например, вести create-скрипты отдельно, рядом скрипты для накатов, или организовать структуру проекта под какой-нибудь DbMaintain и пр.).

В принципе, задекларированный функционал реализуем и на основе предложенной формы инструмента, но без дополнительной возни будет приятнее и гибче работать. Но проблема ещё и в самом функционале. Если ставить задачу обратного "реинженеринга", т.е. формирование каталога исходников на основе БД, то да, без метаописаний не обойтись, если говорить о супер-универсальности. Но здесь можно попробовать задавать правила в ином виде, скажем предусмотреть типовые варианты: лепить всё в один файл (абсолютно всё), распределять объекты по каждому файлу (что-то частично вместе, например, таблица вместе с индексами, триггеры - отдельно), создавать ли подкаталоги по типам объектов и т.д. Хотя не знаю, м.б. как раз всё и скатится к XML (лично я в своём планируемом тулзе собираюсь "вшить" единый вариант на основе разбиения исходников и объектов БД по логическим иерархическим модулям/подмодулям с зависимостями с использованием стандартов именования, что также даёт основу и для реинженеринга, ну и закладывается функционал пошире, а точнее для решения самых основных задач - создание БД, полное и частичное, накаты изменений, и уж потом всякие помогалки).

Такой вот вариантик.


Согласен, "интеллектуально" выделять объекты из текста было бы круто. Надо будет попробовать как на практике это будет работать. Но тогда в любом случае вместо xml будут какие-то другие файлики, в которых будут хранится некоторые инструкции для поиска объектов в тексте и его свойств.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268190
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НА в xml просто описываются типы объектов БД
сложнее всего описать связи, очерёдность, и вариантность:
http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_7002.htm

Связи описывать не планируется (по крайней мере пока). Например у таблицы есть ПК и несколько ФК. Они хранятся в отдельно файле, или в том же где и таблица, но мы в любом случае точно знаем где и можем легко их идентифицировать. А больше ничего и не надо.

Если нужно узнать какие таблицы ссылаются на данную (являются дочерними), то можно вытащить код всех ФК'шек (примерно так: lwd -t table -n table1 table2 ... table3 -l -e fk) и например grep'ом в этом тексте поискать имя нужно таблицы. Ну или воспользоваться базой (системными таблицами или ИДЕ).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268203
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Нпричем все пользуются разными тулзами для выгрузки кода (страшное слово, согласен) и получается каша.
а бывает, одни пишут в Иклипсе, а другие в .....Notepad'e
Может их тоже построить? И запретить?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268220
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НСвязи описывать не планируется
ты не понял.
Если FK в файле1, а CREATE TABLE в файле2, а каскад в файле3, а PK в файле4

то в скрипте на создание они должны быть в определённом порядке.
При выключении объекта PK, объект FK и каскад тоже должны выключаться).
Это руками?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268241
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз уж мы пытаемся жонглировать разными атомарными sql конструкциями
- вот примерчик
Код: 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.
create table BBBB
(
  id                  INTEGER not null primary key,
  name_field_st       VARCHAR2(50) not null,
  valueHar            VARCHAR2(200)
);

alter table BBBB
  add foreign key (id)
  references CCCCC (cod) on delete cascade;

/

alter table BBBB add
(
F76 DATE, 
F76_IS NUMBER(1,0) DEFAULT 0 NOT NULL check(F76_IS in (0,1)),
F77 DATE, 
IS_PLAN      NUMBER(1) DEFAULT 0
);

ALTER TABLE BBBB (PASP_NUM VARCHAR2(254));


alter table BBBB
  add constraint CK_CHLD
  check (typ in (0,1,2));


______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268245
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- какие сущности-объекты в скрипте выше выделяет автор в отдельные файлы?
- сколько их типов будет в итоге в 1-ой версии утилиты?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268266
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНапример создаю я таблицу с помощью этой штуки, в результате получаю в СКВ папочку с именем таблицы (имя папки берется из шаблона и подставляется имя объекта вместо $ObjName$), в ней готовые папки/файлы с элементами таблицы (ddl, индексы, тригеры, ключи, тестовые данные). Причем эти файлы не обязательно буду пустыми, можно использовать сниппеты (snippetText), в которые подставятся имена ваших объектов.
а у нас как было.
говорят - раскладывать - вот так. Это - стандарт - см док-т такой-то, это - добрая традиция, которую новичкам нарушать не стоит, хотя в стандарте и нету. Желательно использовать среду разработки вот такую, автоформат кода настроить вот так. И прямо файлики с настройками в зубы. И все. Если кто-то выбивается - его поправляют. Не внемлет - ....
Но народ был добрый, понятливый. Все вняли. все привыкли, что если твой автоформат корежит чужой текст его использовать не надо. Для нормальной работы версионника. Совсем коряво уложенные папки не съедал установщик патчей, некриминальную кривоватость поправляли более опытные.

Ну и конечно шаблоны были с ==типовыми разработками под всякий случай==.
Скопипастил - и правь себе.

тулза проблему дисциплины разработки не решает - ее все равно надо насадить сверху, с инструкцией правильного использования.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38268394
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНа счёт Rust-а. Имхо, на сегодня это фактически единственная альтернатива (потенциальная) для ряда С++-разработок, где можно потеснить эрланг.
меня шефы как учили - пользуйся любой маргинальной фигней, но если будут баги - это будут именно твои баги, а не баги маргинальной фигни. Или ходи строем и пользуйся тулзами как все, тогда баги тулзы будут багами того, кто начальственно насадил ее использование. Теснить эрланг? было у меня желание его попользовать. Потом посмотрел на 8 байт на символ строки. А строк у меня тогда было много. и он сам потеснился в моем сознании... да и odbc запросы как-то не распаралелились. а именно их и надо было разбрасывать. Вот такой я туповатый ретроград(((((((. Впрочем - если тимлид скажет использовать эрланг - да с радостью почитаю, и поучусь, и запущу....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269113
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НСвязи описывать не планируется
ты не понял.
Если FK в файле1, а CREATE TABLE в файле2, а каскад в файле3, а PK в файле4

то в скрипте на создание они должны быть в определённом порядке.
При выключении объекта PK, объект FK и каскад тоже должны выключаться).
Это руками?

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

lwd -t table -n PERSON_TYPES PERSONS WORKS -e ddl pk fk indexes test_data

Т.е. сначала CREATE TABLE, а затем ключи, индексы и тестовые данные.

Для начала в описание объекта планирую добавить порядковое поле "priority", по которому можно ранжировать элементы.
А вообще я еще задумывался о т.н. шаблонах сборки, т.е. некие пользовательские структуры (тот же xml или что то другое, неважно), в которых будет описан порядок сборки жлементов для разных случаев.



Вот сферический пример для сборки скрипта создания 3-х связанных таблиц:

lwd -t table -n PERSON_TYPES PERSONS WORKS -e ddl pk
lwd -t table -n PERSON_TYPES PERSONS WORKS -e fk
lwd -t table -n PERSON_TYPES PERSONS WORKS -e test_data
lwd -t table -n PERSON_TYPES PERSONS WORKS -e indexes

В будущем можно попробовать оптимизировать это до одной команды.




По поводу выключения зависимых элементов при сборке, если честно, то не думал об этом, может стоит задуматься о возможности указывать зависимости в описании типов, если это понадобится.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269127
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123раз уж мы пытаемся жонглировать разными атомарными sql конструкциями
- вот примерчик
Код: 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.
create table BBBB
(
  id                  INTEGER not null primary key,
  name_field_st       VARCHAR2(50) not null,
  valueHar            VARCHAR2(200)
);

alter table BBBB
  add foreign key (id)
  references CCCCC (cod) on delete cascade;

/

alter table BBBB add
(
F76 DATE, 
F76_IS NUMBER(1,0) DEFAULT 0 NOT NULL check(F76_IS in (0,1)),
F77 DATE, 
IS_PLAN      NUMBER(1) DEFAULT 0
);

ALTER TABLE BBBB (PASP_NUM VARCHAR2(254));


alter table BBBB
  add constraint CK_CHLD
  check (typ in (0,1,2));


______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle


Как вариант (всего лишь один из многих), так:

Имеем тип "Таблица" и 3 элемента:

Элемент "DDL", в текущем (итоговом) состоянии:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table BBBB
(
  id                          INTEGER not null primary key,
  name_field_st       VARCHAR2(50) not null,
  valueHar               VARCHAR2(200),
  F76                       DATE, 
  F76_IS                  NUMBER(1,0) DEFAULT 0 NOT NULL check(F76_IS in (0,1)),
  F77 DATE, 
  IS_PLAN                NUMBER(1) DEFAULT 0,
  PASP_NUM            VARCHAR2(254)
);



Элемент "Форенкей":
Код: plsql
1.
2.
3.
  alter table BBBB
    add foreign key (id)
    references CCCCC (cod) on delete cascade;



Элемент "Первичный ключ":
Код: plsql
1.
2.
3.
  alter table BBBB
    add constraint CK_CHLD
    check (typ in (0,1,2));



Можно хранить в одном файле, можно в разных, кому как удобнее.


Или например объединить CREATE TABLE и PK в один элемент, форенкей в другой.

И т.д.

Зависит от задачи, потребностей и вкуса.


Хранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю. Для этого есть спец. средства, всякие миграторы, с их чэйнжсетами и др. Надо будет подумать как с ними подружиться, можеть объявлять элементы или еще как то, пока не знаю...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269134
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovавторНапример создаю я таблицу с помощью этой штуки, в результате получаю в СКВ папочку с именем таблицы (имя папки берется из шаблона и подставляется имя объекта вместо $ObjName$), в ней готовые папки/файлы с элементами таблицы (ddl, индексы, тригеры, ключи, тестовые данные). Причем эти файлы не обязательно буду пустыми, можно использовать сниппеты (snippetText), в которые подставятся имена ваших объектов.
а у нас как было.
говорят - раскладывать - вот так. Это - стандарт - см док-т такой-то, это - добрая традиция, которую новичкам нарушать не стоит, хотя в стандарте и нету. Желательно использовать среду разработки вот такую, автоформат кода настроить вот так. И прямо файлики с настройками в зубы. И все. Если кто-то выбивается - его поправляют. Не внемлет - ....
Но народ был добрый, понятливый. Все вняли. все привыкли, что если твой автоформат корежит чужой текст его использовать не надо. Для нормальной работы версионника. Совсем коряво уложенные папки не съедал установщик патчей, некриминальную кривоватость поправляли более опытные.

Ну и конечно шаблоны были с ==типовыми разработками под всякий случай==.
Скопипастил - и правь себе.

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

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


ПС была у меня еще идея конвертера, который сможет привести файлы, хранящиеся под одной структурой к файлам другой структуры...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269139
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Нпричем все пользуются разными тулзами для выгрузки кода (страшное слово, согласен) и получается каша.
а бывает, одни пишут в Иклипсе, а другие в .....Notepad'e
Может их тоже построить? И запретить?

Не не, я не предлагаю ничего запрещать и строить (куда мне там). Я и сам пользуюсь ИДЕ'шками. Просто предлагаю результат труда немного орагнизовать, структурировать, версионировать, задуматься о том, что за код генерят эти замечательные инструменты, как (а еще зачем...), ну и т.д. тут уже много об этом написано. Вот и все.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269481
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкакие либо средства для более быстрого анализа полученного кода
А что за средства анализа кода?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269489
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НМожно хранить в одном файле, можно в разных, кому как удобнее.
ну дак и будут разброд и шатания.
Ты будешь свой скрипт гладить по головке и разделять всё по файлам.
А те, кто ПИСАЛ такие скрипты, спросят: "Нафига лишняя работа?".
И вся твоя теория - насмарку. Ты не распарсишь те скрипты, которые пишут программисты (студенты).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269492
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НХранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю
Это как?
Это важнейший элемент апдейта БД у заказчика.....
Например, увеличился размер поля ИНН.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38269495
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Нто вручную организационно все отследить и переделать будет достаточно проблематично (в зависимости от проекта конечно).
код на SQL (кто его любит )) ) ничем не отличается от простынки кода на Java.
Как отслеживают код на Java без твоей утилиты?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270798
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovPSV100На счёт Rust-а. Имхо, на сегодня это фактически единственная альтернатива (потенциальная) для ряда С++-разработок, где можно потеснить эрланг.
меня шефы как учили - пользуйся любой маргинальной фигней, но если будут баги - это будут именно твои баги, а не баги маргинальной фигни. Или ходи строем и пользуйся тулзами как все, тогда баги тулзы будут багами того, кто начальственно насадил ее использование. Теснить эрланг? было у меня желание его попользовать. Потом посмотрел на 8 байт на символ строки. А строк у меня тогда было много. и он сам потеснился в моем сознании... да и odbc запросы как-то не распаралелились. а именно их и надо было разбрасывать. Вот такой я туповатый ретроград(((((((. Впрочем - если тимлид скажет использовать эрланг - да с радостью почитаю, и поучусь, и запущу....

В том и дело, что Эрланго-альтернатива не помешала бы. Вот здесь очень кратко и чётко собраны основные достоинства Эрланга (ну ещё здесь , к примеру), но и проблем вроде тоже хватает. Я его плотно не использовал, но насколько успел заметить, что не редко системы на его основе строятся по принципу С/С++ и прочих нативных подпорок, склеенных Эрлангом.

Ну, а на не промышленную платформу на соответствующих проектах, конечно, никто при здравом уме прыгать не будет (на сегодня в Rust-е только намёк на какую-то платформу).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270841
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovавторкакие либо средства для более быстрого анализа полученного кода
А что за средства анализа кода?
Ну например вы можете запустить данную тулзу (в будущем, я этого пока не делал) и увидеть какие файлы или части файлов не подходят ни под одно описание объектов, т.е. бесхозные. Проверить соответствие между описанием типов и уже созданными фалами конкретных объектов и т.д.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270855
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НДля начала в описание объекта планирую добавить порядковое поле "priority", по которому можно ранжировать элементы.
А вообще я еще задумывался о т.н. шаблонах сборки, т.е. некие пользовательские структуры (тот же xml или что то другое, неважно), в которых будет описан порядок сборки жлементов для разных случаев.
...
По поводу выключения зависимых элементов при сборке, если честно, то не думал об этом, может стоит задуматься о возможности указывать зависимости в описании типов, если это понадобится.
...
Хранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю. Для этого есть спец. средства, всякие миграторы, с их чэйнжсетами и др. Надо будет подумать как с ними подружиться, можеть объявлять элементы или еще как то, пока не знаю...
...
Смысл тулзы не только в том, чтобы выявлять косяки и давать разработчикам по шапке (хотя можно и так использовать).
В любом случае Регламент и прочие организационные мероприятия это здорово и без них естественно никуда, но когда под боком есть инструмент, который "поможет" сделать правильно и снизит уровень ошибки для разработчика, а для руководителя предоставит какие либо средства для более быстрого анализа полученного кода, думаю это не плохо. Тем более когда регламент изменяется (а от этого никто не застрахован), то вручную организационно все отследить и переделать будет достаточно проблематично (в зависимости от проекта конечно).

ПС была у меня еще идея конвертера, который сможет привести файлы, хранящиеся под одной структурой к файлам другой структуры...
...
Не не, я не предлагаю ничего запрещать и строить (куда мне там). Я и сам пользуюсь ИДЕ'шками. Просто предлагаю результат труда немного орагнизовать, структурировать, версионировать, задуматься о том, что за код генерят эти замечательные инструменты, как (а еще зачем...), ну и т.д. тут уже много об этом написано. Вот и все.


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

Все хотят как можно меньше возни и больше удобств. Рассмотрим тех, кто работает в GUI-DBIDE. Сначала нужно запустить в консоли jar-ник, чтобы создать новый объект, для чего будет создан файл с шаблоном и/или каталог, или в каком-то файле чего-то нового добавиться. Теперь в GUI нужно открыть этот файл, его редактировать, сохранить, выполнить и пр. Как правило, такая возня в GUI-IDE утомительна. DB-IDE, фактически, не занимаются ведением файловой структуры, обычно текстовые файлы для них - это просто импорт/экспорт содержимого текстового редактора в каком-то GUI-режиме. Поэтому, в основном, и предпочитают работать уже именно в GUI - где-то кликнули, на основе шаблонов для именования объектов вылазит какой-то режим, где вводят структуру таблицы или т.п., или создаётся в текстовом редакторе шаблон для правки содержимого будущего объекта, и т.д. Сразу всё сохраняется в БД, могут быть средства для организации проектов внутри БД (объединения объектов по своим кучам), свой контроль версий и история, распределение доступа по разработчикам и т.д. Одним словом, если уж GUI, то проще в нём же и ковыряться. Некоторые только ими и обходятся, натравили инструмент на сравнение двух баз - всё автоматом обновилось или создали скрипт для наката. Кто-то создаёт дамп БД, кладёт на всякий случай где-то рядом. Кто-то отдельно складывает sql-скрипты по папочкам, на основе утверждённого стандарта, или/и складывает скрипты для всяких накатов версий или для дополнительной обработки БД после создания или правки. Но в этом случае уже проще из GUI выгрызать нужные тексты и кидать их в файлы, т.к. GUI упрощает их создание (тут только контекстно-зависимый автокомплит может заставить работать именно с GUI). Но, обычно мало кого волнует в каком виде будут конечные тексты. Некоторым они просто нужны по принципу "чтобы было" (ну, может иногда СКВ дадут где-то конфликт правки одного и того же объекта, к примеру), в любом случае, отношение к ним где-то на уровне просто как списку команд, чтобы выполняли молча свои действия и всё, нет с ними работы как с первичным материалом.

Те, кто работает с SQL-исходниками именно как с исходным материалом. Обычно их заставляет жизнь, т.к. требуется широкий и гибкий функционал, некоторая инвариантность (не обязательно глобального функционала, например, нужно создавать БД с тестовыми или первичными данными в разных вариантах или без них и т.п.). Некоторым просто удобнее работать в текстовом редакторе или какой-то не DB-IDE, рядом с разработкой клиентской для базы части. И т.д. Короче говоря, задача создания новых файлов для новых объектов по определенным правилам при необходимости решается через редактор/IDE (и даже удобнее, скажем, дал команду - сформировался каталог с файлом, файл загрузился в буфер и сразу запустился интерактивный сниппет а-ля как в ТекстМейте). Задача удаления файлов или части файла согласно операции удаления объекта в БД автоматом решается лишь частично, не всегда есть только явные технические связи, частенько хватает и логических отношений, а всего сразу не наконфигурируешь. И задача реорганизации исходников в иную форму тоже автоматом выполнима лишь отчасти, опять же, если учитывать прикладную логику в проекте. Задачу верификации исходников очень и очень маловероятно решить только на универсальных настройках с ограниченным понятием отношений.

Иными словами, выше перечисленные задачи на практике второстепенны или имеются способы их решений (а ту же задачу анализа кода такой инструмент вряд ли решит или совсем чуть-чуть, но хоть что-то). Поэтому ради этих функций на такую утилиту вряд ли массово посмотрят. Основная задача при работе с sql-исходниками - это их "компиляция", т.е. создание БД и её модификация, плюс решение вспомогательной рутины. Более того, именно эта "компиляция" - ключевой момент, это основа основ для ведения каталога исходников, именно это и предопределяет всю пляску вокруг исходников, и часто диктует правила, как эти исходники оформлять. И если инструмент для исходников не обеспечивает решение для компиляции/сборки, то он мало будет востребован.

Ну а чтобы решить задачи компиляции/сборки через такую утилиту при её таком подходе, универсальном и настраиваемом, естественно требуется дальнейшее развитие. А вот развитие весьма проблематичное. Сейчас в конфигурационных настройках не хватает гибкости, кроме явной технической связи между элементами как объектами БД необходима "шаблонизация" для задания логики разбиения по прикладным модулям (это востребовано). Чтобы создавать БД необходимо понимать смысл каждого элемента, или нужна их взаимосвязь и нужно определять очерёдность создания элементов. Причём нужны настройки для очерёдности не только согласно их типам (т.е. сначала нужно создавать таблицы, затем индексы и отношения, заголовки процедур, пакетов и пр., затем их тела и т.д.), но и может потребоваться явная последовательность для элементов одного вида (например, правильно располагать какие-то блоки кода, которые выполняются после создания или накатов и т.п., или накаты через всякие alter-ы с возможной правкой отношений или связанных объектов, и т.д.). Поэтому, уже есть какая-то потребность в шаблонной последовательности (кроме явной организации элементов внутри файла), пусть будет нумерация на уровне файлов (т.е. 01_sqript1.sql, 02_script2.sql), и это должно как-то настраиваться. Далее, если закладываться на какую-то инвариантность, то нужны какие-то признаки для элементов. Поскольку "Start/Stop-text" - это метки для поиска "в лоб", то остаётся использовать признаки на уровне файлов, например, как в DbMaintain (т.е. аннотации через "@" или "#", их может быть несколько), или дорабатывать метки "Start/Stop-text". Тогда появляется возможность задать какие-то варианты сборки исходников, или кроме сборок баз можно писать сценарии для вспомогательных рутин, например, извлечь только тестовые данные для таблиц (плюс код для предварительного их удаления) и т.п.

По своему опыту. Такое развитие я уже проходил, был концептуально фактически похожий велосипед, и пришлось утонуть в бесконечной шаблонизации. Частично такой подход решает проблемы, но не все и задалбывает конкретно. Прямое программирование "в лоб" оказалось проще, естественнее и быстрее, без всякой xml- и подобных конфигураций, всё на основе стандартных sql-операторов. Я уже давал раньше ссылки и что-то где-то выкладывал, но опять ниже выложу всё сразу до кучи - пример некоего стандарта для разработки БД. Фактически, там организация проекта похожа на тот стандарт от оракл (ссылка выше), за исключением возможной разбивки исходников по подпроектам и есть явная последовательность сборки (через операторы "input", аналог "start"-а). Плюс натравливается велосипед-препроцессор и получаем разные варианты сборок БД и сборок скриптов-сценариев для рутины. В результате - гибкость, и инструмент даёт полную свободу под конкретные нужды. Недостаток - есть явное ручное описание этих "input-ов", причём из-за них как бы имеются общие файлы между разработчиками, но конфликты их правки разруливаются фактически автоматом. Ну и неплохо иметь какой-то плагин где-то, который помогает чего-то sql-генерировать, в т.ч. создавать новые файлы и шаблоны и эти start/input и т.д., SQL - тяжкая хрень.


Сейчас, под действием этой темы форума, я вновь ломаю мозги над новым вариантом разработки БД. У нас используются костыли по выше приведенным мотивам (т.е. на базе выложенного стандарта). В основном, напряжно следующее:

- выделять каждый объект в отдельный файл (в большинстве случаев) как-то геморно, слишком много файлов, причём частенько небольших. К этому, прежде всего, принуждает ручное управление последовательностью (через input/start), т.к. грануляция на уровне файлов;

- хотелось бы писать как можно меньше, несмотря на всякие помогалки. Например, принят подход иметь create-скрипты для создания БД в текущей последней версии и отдельно update-скрипты для накатов версий (пусть без откатов, с ними обычно только больше гемора). С одной стороны, хорошо - имеется сразу в одном месте вся необходимая информация, например, "create table ..." сразу в конечном виде в актуальном состоянии, и все его "alter"-ы отдельно в истории или в накатах. Соответственно не нужно для каких-то вспомогательных целей собирать всё до кучи: брать базовый "create table" и слепливать размазанные по коду его "alter"-ы (и, например, в редакторе достаточно в соседнем буфере открыть только один файл с "create..." и он уже обеспечит быстрый автокомплит по словам (вместо контекстного, когда его нет или он хреновый)). Но с другой стороны - лишняя писанина (хорошо, если есть помогалки).

Ещё масло в огонь подкинул проект Sqlmake , здесь на него кто-то давал ссылку. Вот примерно о подобном подходе в организации проекта, только по гибче, как-то и думалось раньше. Там выделяется как бы две части исходников - модель данных (грубо - таблицы с индексами) и "повторяемый код" - в основном PL/SQL ("CREATE OR REPLACE ...") и др. Сюда бы добавить некий явный "постпроцессинг" как в DbMaintain. Накаты в рамках модели задаются явно, и это правильно, т.к. в общем случае нельзя всё автоматизировать (т.е. автоматом сравнить две структуры, к тому же, это может оказаться далеко не быстрым процессом). Например, добавляется столбец как not null в таблицу с уже имеющимися данными, нужно знать чем заполнить данные (нулём/пустой строкой или чем-то другим), при этом нет данных о default-значении. А вот plsql и др. накатывается автоматом, на основе данных в БД. Причём, например, если DbMaintain накатывает "повторяемый" код на основе версии файла (или его даты), то Sqlmake основывается именно на исходном коде, вычисляет изменения, при этом ом может понять, что если какой-то файл удален или объект удален в исходнике или закомментирован, то значит нужен соответствующий "drop".

Но нужно ещё подумать об удобной организации разбивки исходников по прикладным модулям/подмодулям с зависимостями, где в каждом модуле нужно вести свою "datamodel", причём так, чтобы достаточно было иметь только базовый "create table ..." и грамотно расположены связанные "alter" (тут всё-таки есть потребность в явной последовательности операций, причём перемешанной вокруг разных объектов, например, если СУБД не позволяет удалить используемый столбец, то предварительно нужно зависимые объекты сделать пустыми, чтобы убрать эту зависимость). Плюс для "инвариантности" можно подогнать "велопрепроцессор". Тут вспоминали про Rust, как раз можно добавить к условным директивам понятие аннотаций как у него (или как в жабе) по таким мотивам:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
#[ifdef USE_IS_PLAN]
alter table BBBB
    add IS_PLAN      NUMBER(1) DEFAULT 0;
update BBBB set
    #ifdef PLAN_SET_AS_TRUE
        IS_PLAN = 1; 
    #else
        IS_PLAN = 0;
    #endif


Т.е. "#[...]" означает атрибут/аннотацию для конкретного SQL-оператора или группы операторов, если они расположены вместе, что уменьшает писанину именно как "if-else-end". Ряд СУБД имеют свой арсенал для создания вариантного кода, т.е. непосредственные sql-операторы вида "if not exits ... then create ...", но при этом выполняется манипуляция самим сервером на основе инфы внутри БД, а не на основе текстовой конфигурации сборки. Частично некоторый функционал реализует ряд придворных инструментов, например, подмена переменных в sql plus, но лишь частично.

Но для реализации такой тулзы нужен полноценный разбор текста, причём нужны расширения как плагины, понимающие конкретный sql-диалект и потроха СУБД. Тогда возможно и решение смежных задач, вида поддержки доков-комментариев, создание скриптов как "create" в последней или нужной версии (т.е. все alter-ы свёрнуты в общий итог) и т.д. Возможно форматирование исходников и их реструктуризация (управляемая), а также и некоторая верификация. А если уж говорить о создании полноценного db-tools, то очень не хватает подобным инструментам интерактивности. Т.е. чтобы можно было запустить сервер, как emacs или JEdit, он постоянно висит себе и держит соединения с БД, к нему коннектишься, по своему протоколу или хоть с комстроки, хоть по rest-у и пр., он динамически выполняет sql-запросы, управляет каталогом sql-исходников, даёт автокомплит и т.д. И тогда пиши себе плагин хоть для иклипса, хоть для vim-а и пр., или вэб делай.

Но это всё мечты и мысли в слух. А так, я это всё к тому, чтобы дать рекомендацию. Если разрабатываемая утилита удовлетворит какие-то свои конкретные потребности, то и хорошо, и увлекаться глобальной и супер-шаблонизацией особо нет смысла.


Стандарт разработки БД (см. выше):
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270856
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НМожно хранить в одном файле, можно в разных, кому как удобнее.
ну дак и будут разброд и шатания.
Ты будешь свой скрипт гладить по головке и разделять всё по файлам.
А те, кто ПИСАЛ такие скрипты, спросят: "Нафига лишняя работа?".
И вся твоя теория - насмарку. Ты не распарсишь те скрипты, которые пишут программисты (студенты).

Я о том, что можно определить структуру как угодну, какую нужно, ограничений нет (в рамках разумного конечно), а затем в рамках этой структуры создавать объекты, работать с ними, контроллировать их.
В отличие от ИДЕшек, которые топорно представляют описание и код объектов в жестком не настраиваемом виде.

Я смогу запустить тулзу и проверить созданный код на соответствие заданной структуре. А еще я могу организовать ночные билды (полную или частичную сборку базы из исходников) на основании этой тулзы и описанных типов объектов, и если база не соберется, то будет видно кто накосячил.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270863
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЯ о том, что можно определить структуру как угодну, какую нужно, ограничений нет (в рамках разумного конечно), а затем в рамках этой структуры создавать объекты, работать с ними, контроллировать их.Японцы, напомню, программу ИИ так и не осилили.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270970
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Ты как-то давал ссылку на пример стандарта разработки БД, некий официальный от Oracle. Насколько я понимаю, твоя первичная цель организовать поддержку ведения подобной разработки. Но в таком виде, имхо, мало кто сможет пользоваться этой тулзой.

Да, это был один из первых мне попавшихся документов, посвященных организации разработки БД. Не синтаксису ("табличка создается таким оператором, хранимая процедура таким и т.д."), а именно так сказать "хозяйственной" части. Как хранить код, как называть объекты. Кстати автор данной статьи так же сравнивает "доставание" объектов из СУБД с декомпиляцией бинарных файлов приложения. Еще у этого автора есть интересный проект (кстати представленная документация это часть данного проекта), это PL SQL фреймворк, универсальный каркас для приложений БД, с продуманными заранее стандартными вещами и функционалом. Но почему то такие вещи пользуются достаточно малой популярностью.

В том же мире Java (и нетолько) существует куча всяких фреймворков и всяких "наростов" и прибамбасов вокруг них, которые позволяют человеку может не очень сведующему в разработке, начинающему, уже на отточеном продуманном каркасе построить свое приложение, доработав его нужым кодом. Т.е. практически не заниматься организационными делами, а только функционалом. (И кстати не всегда это спрятано в ГУИ, можно легко использовать свой полюбившийся редактор(иде) и утилиты). Там уже все продумано, модели хранятся здесь, контроллеры здесь, а вот представления там, дата классы там ну и т.д. Взять тот же самый Play Framework. И плюс к таким вещам есть куча заточенных специально под них инструментов и библиотек, которые легко и предсказуемо пристегиваются к вашему приложению. Т.е. разработка ведется не с нуля и не на останках предыдущего (или чьего-нибудь) проекта, где есть похожий нужный функционал и подходяшая архитектура.


PSV100Все хотят как можно меньше возни и больше удобств. Рассмотрим тех, кто работает в GUI-DBIDE. Сначала нужно запустить в консоли jar-ник, чтобы создать новый объект, для чего будет создан файл с шаблоном и/или каталог, или в каком-то файле чего-то нового добавиться. Теперь в GUI нужно открыть этот файл, его редактировать, сохранить, выполнить и пр. Как правило, такая возня в GUI-IDE утомительна. DB-IDE, фактически, не занимаются ведением файловой структуры, обычно текстовые файлы для них - это просто импорт/экспорт содержимого текстового редактора в каком-то GUI-режиме. Поэтому, в основном, и предпочитают работать уже именно в GUI - где-то кликнули, на основе шаблонов для именования объектов вылазит какой-то режим, где вводят структуру таблицы или т.п., или создаётся в текстовом редакторе шаблон для правки содержимого будущего объекта, и т.д. Сразу всё сохраняется в БД, могут быть средства для организации проектов внутри БД (объединения объектов по своим кучам), свой контроль версий и история, распределение доступа по разработчикам и т.д. Одним словом, если уж GUI, то проще в нём же и ковыряться. Некоторые только ими и обходятся, натравили инструмент на сравнение двух баз - всё автоматом обновилось или создали скрипт для наката. Кто-то создаёт дамп БД, кладёт на всякий случай где-то рядом. Кто-то отдельно складывает sql-скрипты по папочкам, на основе утверждённого стандарта, или/и складывает скрипты для всяких накатов версий или для дополнительной обработки БД после создания или правки. Но в этом случае уже проще из GUI выгрызать нужные тексты и кидать их в файлы, т.к. GUI упрощает их создание (тут только контекстно-зависимый автокомплит может заставить работать именно с GUI). Но, обычно мало кого волнует в каком виде будут конечные тексты. Некоторым они просто нужны по принципу "чтобы было" (ну, может иногда СКВ дадут где-то конфликт правки одного и того же объекта, к примеру), в любом случае, отношение к ним где-то на уровне просто как списку команд, чтобы выполняли молча свои действия и всё, нет с ними работы как с первичным материалом.


С ребятами ИДЕшниками, все понятно. Если ГУИ полностью устравивает, подходит под задачи и ничего большего не требуется, то почему нет. Я и не пытаюсь сказать что это плохо, "так никто не делает" или "а давайте делать так". Просто если в проекте БД это немного нечто большее чем набор плоских табличек, забитых под мощным гнетом ОРМ, то тогда можно посмотреть на ее разработку с другой стороны, например (как всего лишь один из вариантов) как в рассматриваемой тулзе.


PSV100Те, кто работает с SQL-исходниками именно как с исходным материалом. Обычно их заставляет жизнь, т.к. требуется широкий и гибкий функционал, некоторая инвариантность (не обязательно глобального функционала, например, нужно создавать БД с тестовыми или первичными данными в разных вариантах или без них и т.п.). Некоторым просто удобнее работать в текстовом редакторе или какой-то не DB-IDE, рядом с разработкой клиентской для базы части. И т.д. Короче говоря, задача создания новых файлов для новых объектов по определенным правилам при необходимости решается через редактор/IDE (и даже удобнее, скажем, дал команду - сформировался каталог с файлом, файл загрузился в буфер и сразу запустился интерактивный сниппет а-ля как в ТекстМейте). Задача удаления файлов или части файла согласно операции удаления объекта в БД автоматом решается лишь частично, не всегда есть только явные технические связи, частенько хватает и логических отношений, а всего сразу не наконфигурируешь. И задача реорганизации исходников в иную форму тоже автоматом выполнима лишь отчасти, опять же, если учитывать прикладную логику в проекте. Задачу верификации исходников очень и очень маловероятно решить только на универсальных настройках с ограниченным понятием отношений.
Все зависит от проекта и его сложности. Может удалить или переконвертить явно 100% и не получится, но как минимум тулза может показать, что при удалении этого объекта у вас есть еще несколь зависимых объектов, которые без него будут невалидными и предлагает их удалить тоже или отменить текущую операцию. Т.е. некторый каркас, помощник, некое воплощение(частичное хотябы) Регламента разработки.


PSV100Иными словами, выше перечисленные задачи на практике второстепенны или имеются способы их решений (а ту же задачу анализа кода такой инструмент вряд ли решит или совсем чуть-чуть, но хоть что-то). Поэтому ради этих функций на такую утилиту вряд ли массово посмотрят. Основная задача при работе с sql-исходниками - это их "компиляция", т.е. создание БД и её модификация, плюс решение вспомогательной рутины. Более того, именно эта "компиляция" - ключевой момент, это основа основ для ведения каталога исходников, именно это и предопределяет всю пляску вокруг исходников, и часто диктует правила, как эти исходники оформлять. И если инструмент для исходников не обеспечивает решение для компиляции/сборки, то он мало будет востребован.
Компиляция/сборка это основная функция для меня. Т.е. мне нужен инструмент, которому я скажу: "мне нужны PLSQL пакеты PERSONS_MANAGER и SALARY_MANAGER, а так же все пакеты из модуля <<заработная плата>>, и еще все пакеты из модуля <<налоговый учет>>, которые были созданы не раньше чем 2 дня назад" (вполне реальная задача), а на выходе получить готовый скрипт, где пакеты будут в нужном мне порядке (например сначала заголовки, а потом тела), в начале будут вставлены подготовительные скрипты (например включение логирования, всяких режимов там, команды утилите-сборщику (например sqlplus-операторы)), а в конце завершающие операторы (отображение ошибок, регистрация чего нибудь). Так же вставлять чего-нибудь между скриптами (нгапример если я храню оракловые пакеты без завершающего слеша, то в скрипте для sqlplus'а, они должны быть с ним). Да придется потратить некоторое время на описание структуры, но в будущем это позволит сэкономить много времени и нервов. Если получится обойтись без xml (или с его минимумом), а только разбором sql-операторов, то буду только рад.

PSV100Ну а чтобы решить задачи компиляции/сборки через такую утилиту при её таком подходе, универсальном и настраиваемом, естественно требуется дальнейшее развитие. А вот развитие весьма проблематичное. Сейчас в конфигурационных настройках не хватает гибкости, кроме явной технической связи между элементами как объектами БД необходима "шаблонизация" для задания логики разбиения по прикладным модулям (это востребовано). Чтобы создавать БД необходимо понимать смысл каждого элемента, или нужна их взаимосвязь и нужно определять очерёдность создания элементов. Причём нужны настройки для очерёдности не только согласно их типам (т.е. сначала нужно создавать таблицы, затем индексы и отношения, заголовки процедур, пакетов и пр., затем их тела и т.д.), но и может потребоваться явная последовательность для элементов одного вида (например, правильно располагать какие-то блоки кода, которые выполняются после создания или накатов и т.п., или накаты через всякие alter-ы с возможной правкой отношений или связанных объектов, и т.д.). Поэтому, уже есть какая-то потребность в шаблонной последовательности (кроме явной организации элементов внутри файла), пусть будет нумерация на уровне файлов (т.е. 01_sqript1.sql, 02_script2.sql), и это должно как-то настраиваться. Далее, если закладываться на какую-то инвариантность, то нужны какие-то признаки для элементов. Поскольку "Start/Stop-text" - это метки для поиска "в лоб", то остаётся использовать признаки на уровне файлов, например, как в DbMaintain (т.е. аннотации через "@" или "#", их может быть несколько), или дорабатывать метки "Start/Stop-text". Тогда появляется возможность задать какие-то варианты сборки исходников, или кроме сборок баз можно писать сценарии для вспомогательных рутин, например, извлечь только тестовые данные для таблиц (плюс код для предварительного их удаления) и т.п.

Здесь тоже соглашусь. Я думал (и немного писал уже) о планируемом механизме сортировки и отбора объектов и их элементов (на сонове неких шаблонов, по дате модификации, по алфавиту и т.д., здесь нужна особенная гибкость), но это пока не реализовано. Решение в лоб в ввиде start(stop)Text, поля priority это временные базовые решения, сделанные для того, чтобы показать как примерно утилита будет работать, для чего она нужна, чтобы можно было пощупать. Ну а когда под рукой есть что осязаемое, то и новые мысли и старые проблемы становятся более ясными. То что есть сейчас это не более чем прототип.


PSV100По своему опыту. Такое развитие я уже проходил, был концептуально фактически похожий велосипед, и пришлось утонуть в бесконечной шаблонизации. Частично такой подход решает проблемы, но не все и задалбывает конкретно. Прямое программирование "в лоб" оказалось проще, естественнее и быстрее, без всякой xml- и подобных конфигураций, всё на основе стандартных sql-операторов. Я уже давал раньше ссылки и что-то где-то выкладывал, но опять ниже выложу всё сразу до кучи - пример некоего стандарта для разработки БД. Фактически, там организация проекта похожа на тот стандарт от оракл (ссылка выше), за исключением возможной разбивки исходников по подпроектам и есть явная последовательность сборки (через операторы "input", аналог "start"-а). Плюс натравливается велосипед-препроцессор и получаем разные варианты сборок БД и сборок скриптов-сценариев для рутины. В результате - гибкость, и инструмент даёт полную свободу под конкретные нужды. Недостаток - есть явное ручное описание этих "input-ов", причём из-за них как бы имеются общие файлы между разработчиками, но конфликты их правки разруливаются фактически автоматом. Ну и неплохо иметь какой-то плагин где-то, который помогает чего-то sql-генерировать, в т.ч. создавать новые файлы и шаблоны и эти start/input и т.д., SQL - тяжкая хрень.

Когдато давно у меня была идея БД-фреймворка (реализованного под конкретную СУБД на ее sql-диалекте), что то наподобие того, что указано в ссылке в начале этого письма. Т.е. где бы модули и объекты были описаны в самой БД, в специальных табличках. Т.е. в базах есть всячиские системные таблицы и представления, где хранится физическое описание объектов, а вот как они логически ораганизованы базе не интересно.
В частности на одной из моих работ была частично реализована така вещь:
Каждый создаваемый объект БД должен был пройти через специальную регистрацию (вызов спец. процедуры с имененем объкта и прочими параметрами), там на него выдавались нужные права, прописывался в служебных таблицах ну и много других штук. Нет регистрации нет объекта, его не увидит приложение, не будет доступа к функционалу и т.д.
Не было в этой схеме логической принадлежности. Т.е. чтобы я с служебной таблице добавить запись о новом модуле, а создавать и регистрировать объекты именно для этого модуля. Ну и со всеми вытекающими.
Но потом я как то охладел к это идее (во первых она полность СУБД-зависимая) и загорелся тем, о чем мы сейчас с вами разговариваем. Вариант с файлами мне кажется более естественным.


PSV100Но нужно ещё подумать об удобной организации разбивки исходников по прикладным модулям/подмодулям с зависимостями, где в каждом модуле нужно вести свою "datamodel", причём так, чтобы достаточно было иметь только базовый "create table ..." и грамотно расположены связанные "alter" (тут всё-таки есть потребность в явной последовательности операций, причём перемешанной вокруг разных объектов, например, если СУБД не позволяет удалить используемый столбец, то предварительно нужно зависимые объекты сделать пустыми, чтобы убрать эту зависимость). Плюс для "инвариантности" можно подогнать "велопрепроцессор".

На счет альтеров это больной для меня вопрос, но не менее важный. Было бы здорво иметь базовый скрипт и организованный набор алтеров, а потом получить общий скрипт создания таблицы (я не говорю о чистом create, хотя бы просто сумму файлов). Т.е. я набираю в консоле утилиту и имя объекта, а получаю в нужном месте файлик с определенным именем и версией для записи в него модифицирующих операторов. А потом говорю: "собери мне скрипты создания/модификации этой таблицы с момента создания по конец прошлого года" и он покажет.


PSV100Но для реализации такой тулзы нужен полноценный разбор текста, причём нужны расширения как плагины, понимающие конкретный sql-диалект и потроха СУБД. Тогда возможно и решение смежных задач, вида поддержки доков-комментариев, создание скриптов как "create" в последней или нужной версии (т.е. все alter-ы свёрнуты в общий итог) и т.д. Возможно форматирование исходников и их реструктуризация (управляемая), а также и некоторая верификация. А если уж говорить о создании полноценного db-tools, то очень не хватает подобным инструментам интерактивности. Т.е. чтобы можно было запустить сервер, как emacs или JEdit, он постоянно висит себе и держит соединения с БД, к нему коннектишься, по своему протоколу или хоть с комстроки, хоть по rest-у и пр., он динамически выполняет sql-запросы, управляет каталогом sql-исходников, даёт автокомплит и т.д. И тогда пиши себе плагин хоть для иклипса, хоть для vim-а и пр., или вэб делай.

Но это всё мечты и мысли в слух. А так, я это всё к тому, чтобы дать рекомендацию. Если разрабатываемая утилита удовлетворит какие-то свои конкретные потребности, то и хорошо, и увлекаться глобальной и супер-шаблонизацией особо нет смысла.

Согласен, для полноценного инструмента нужен полный модульный расширяемый разбо sql-кода.
На счет интерактивности и сервера это классная идея, не хватает такого инструмента. В частности при разработки нужно время от времени накатывать скрипты на разные базы (у меня например их число доходит до 4-5 баз: база для разработок, общая база для разработок и 2-3 тестовых (разных версий, т.к. в продакшене тоже разные версии)). Да и вообще много чего можно было бы оптимизировать и упростить.
Утилиту я начинал делать для себя, под конкретные нужды, но дальше больше, разгораются новые идеи и мысли, вспоминаются проблемы и хотелки.
Т.е. если у данного тулза будет заинтересованность, то можно поработать и над универсальность и масштабируемостью.
Причем код (точнее пока только прототип) в открытом доступе (пулл реквесты, коммитерство, а может быть даже содание нового другого репозитория - легко, вообще не вопрос), если у кого будет в нем потребность и желание что то добавить/изменить (а может и вообще кардинально переделать), то буду категорически за. Вобщем все вопросы и предложения только приветсвуются. Тем более совместными усилиями можно будет сделать более универсальный инструмент для большого (в узких круга )) ) числа пользователей. (надеюсь намек понят)) )
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38270978
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НХранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю
Это как?
Это важнейший элемент апдейта БД у заказчика.....
Например, увеличился размер поля ИНН.

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

У явы болле развитая инфраструктура (что не удивительно), куча всяких сборщиков, фреймворком и крутых IDE.
У разработки БД свои нюансы и свои исторически сложившиеся особенности (о них мы тут тоже много говорили).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38271344
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ смогу запустить тулзу и проверить созданный код на соответствие заданной структуре. А еще я могу организовать ночные билды (полную или частичную сборку базы из исходников) на основании этой тулзы и описанных типов объектов, и если база не соберется, то будет видно кто накосячил.
Ну когда неделю, месяц, квартал поэксплуатируете - отпишитесь. Как прошло внедрение.
Это база. А клиент то к ней на чем? Как взаимодействуют структура базы, хранимки, слой бизнес-логики, слой презентации, слой нормативно-справочной информации? Как увязано с управлением требованиями к софту? Есть ли юнит-тестирование или аналоги? Что есть критерий того что ==база собралась==?

ТЕ интересно применение в широком контексте.

пока как то видится, что инструмент покрывает узкую зону которую и покрывать автоматизацией не так уж обязательно - опубликовали регламент на стандарт разработки, выложили типовые шаблоны.... и применить административный ресурс.
И все. Копипаст файлов - папок + сниппеты = счастье. Маленькое, а большого и данная утилита не подарит? вроде.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38272605
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovНу когда неделю, месяц, квартал поэксплуатируете - отпишитесь. Как прошло внедрение.

Если все таки заюзаюсь, то отпишусь конечно.

Vladimir BaskakovЭто база. А клиент то к ней на чем? Как взаимодействуют структура базы, хранимки, слой бизнес-логики, слой презентации, слой нормативно-справочной информации? Как увязано с управлением требованиями к софту? Есть ли юнит-тестирование или аналоги?

Я о таких глобальных вещах еще не думал...
Юнит тестирование оно и в Африке юнит тестирование. Вы можете создать например элемент "Юнит тест" для типа объекта "Пакет" или процедура и он будет однозначно идентифицирован. Можно будет гонять тесты для конкретных пакетов, модулей, выборочно и т.д. Ну а написание юнит теста это уже задача разработчика. Тулза может подставить сниппет для конкретного типа.

Vladimir BaskakovЧто есть критерий того что ==база собралась==?

Отсутствие ошибок сборки и выполнение юнит-тестов (или каких-либо других тестов).


Vladimir BaskakovТЕ интересно применение в широком контексте.

Мне тоже...

Vladimir Baskakovпока как то видится, что инструмент покрывает узкую зону которую и покрывать автоматизацией не так уж обязательно - опубликовали регламент на стандарт разработки, выложили типовые шаблоны.... и применить административный ресурс.
И все. Копипаст файлов - папок + сниппеты = счастье. Маленькое, а большого и данная утилита не подарит? вроде.
Пока так, но если объектов много, с ними ведется активная работа, нужна автоматическая сборка разных типов, то и это будет являться неплохим подспорьем (естественно имхо)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38272753
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НСогласен, для полноценного инструмента нужен полный модульный расширяемый разбо sql-кода.

Ну, глубокий и полноценный разбор SQL может и не нужен (а точнее, очень тяжело реализовать), а вот хоть какой-то обязательно нужен. Предложенный прототип, фактически, мало на что годен. Вот код по мотивам твоих примеров:
Код: sql
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.
-- ##### start ddl table #####

create table BBBB
(
  id                  INTEGER not null,
  name_field_st       VARCHAR2(50) not null,
  valueHar            VARCHAR2(200),
  F76                 DATE
);

alter table BBBB
  add constraint PK_BBBB primary key (id);

-- ##### stop ddl table #####


-- ##### start constraint ddl #####

alter table BBBB
  add foreign key (id)
  references CCCCC (cod) on delete cascade;

alter table BBBB
  add constraint CK_CHLD
  check (typ in (0,1,2));

-- ##### stop constraint ddl #####


-- ##### start index ddl #####

-- ##### stop index ddl #####


create index IDX_BBBB on BBBB(F76);


Здесь имеются грабли, из-за которых нужно "стучать по шапке" согласно настроенной конфигурации проекта, а утилита этого никак не поймёт:

- "primary key" находится не в секции "constraints";
- "create index" не расположен в секции "index ddl" и вообще ни в какой секции.

Иными словами, без понимания того, что именно находится внутри sql-файла, ни о каком реальном анализе и контроле кода речи быть не может. Далее, утилита не понимает связи между секциями, т.е. если в файле будут ещё таблицы, то понять где какие "constraint"-ы и прочие всякие индексы, т.е. что к чему и к какой таблице принадлежит, не возможно. Фактически, кроме управления списком файлом, внутри самого файла утилита может лишь вырезать все "таблицы", все "индексы" и т.д.

Короче говоря, я предлагаю отталкиваться от того, что каждый sql-файл нужно резать на секции, которые явно как-то задаются (даже если только одна секция в файле), при этом для секции нужно понимать её "тип" и "имя". Посмотри по внимательнее на проект pldoc . Там есть поддержка комментариев-доков по мотивам жабских. Вот такие комменты можно использовать для указания секций, каждая секция начинается с коммента и действует до следующего или конца файла. Примерно так:
Код: sql
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.
/** 
* Table:    BBBB
* 
* Это супер-таблица. Она прикольная,
* и наглядно показывает пример
*
* @MY_OPTION
* @OTHER_OPT
*/
create table BBBB
(
  id                  INTEGER not null,
  name_field_st       VARCHAR2(50) not null,
  valueHar            VARCHAR2(200),
  F76                 DATE
);

/** 
* Table:          BBBB
* Primary Key:    PK_BBBB
* 
* А это первичный, самый главный ключ
*/
alter table BBBB
  add constraint PK_BBBB primary key (id);

/** 
* Table:          BBBB
* Foreign Key:    FK_BBBB
* 
*/
alter table BBBB
  add constraint FK_BBBB foreign key (id)
  references CCCCC (cod) on delete cascade;

/** 
* Table:    BBBB
* Check:    CK_CHLD
* 
*/
alter table BBBB
  add constraint CK_CHLD
  check (typ in (0,1,2));

/** 
* Table:    BBBB
* Index:    IDX_BBBB
* 
*/
create index IDX_BBBB on BBBB(F76);



Нужно разбирать текст, после коммента-дока всё, что идёт за ним до след. дока или конца файла, считать содержимым секции, т.е. это могут быть sql-оператор и не один, комментарии и пр., нужно отбрасывать концевые пустые строки (в общем, подумать над форматированием кода с сохранением комментариев в нём). Тогда есть возможность понимать тип и имя секции, задать правила для их связей, контролировать имена секций (скажем, находить те, которые не вписываются в картину по именам), указывать опции и прочие аннотации для сборок, и т.д. И есть возможность как-то жонглировать этими секциями, м.б. и можно как-то решать задачи для сборки БД, ну и для всякого реформата исходников.

А вот для "alter" БД утилита вряд ли чем поможет, а точнее вряд ли даст мощную основу для каких-то целеуказаний внешним инструментам. Пусть, например, используется сторонний крутой софт, который очень умный и ему только подавай XML-команды для правки БД, туда столбец добавить, там удалить, а тут он сам понял, что процедура обновилась (при этом он сам разруливает все связи, убирает зависимости, восстанавливает "инвалидные" объекты и пр.). Но, выдрать для него как-то данные, скажем, через ключи запуска утилиты типа "выдать alter для такой-то таблицы, где добавлены такие-то столбцы и пр.", фиг получится. Утилита ничего не знает о том, что находится внутри секции, там вообще мусор может быть (который повылазит потом при выполнении кода). Отсюда и контроль кода с анализом весьма посредственный. Теоретически, можно попробовать ввести "подсекции", к примеру, внутри "create table" выделять каждое поле или что-то в этом роде, но тут можно скатиться до "Comment SQL" в дополнение к PLSQL/TSQL/SQL plus и пр. (т.е. рядом с объявлением столбца можно написать комментарий с его описанием, что часто и делается, но для задач утилиты в этом комментарии нужно продублировать его имя, тип и пр.). Но не исключено, и думаю, что опять же через вырезы секций что-то можно подавать на вход каким-то инструментам, кроме миграций и каким нибудь тестилкам вида DbUnit, или готовить скрипты для запуска на SQL-сервере и т.д. и т.п., т.е. вполне какой-то реальный потенциал, но не сильный, как-то так.

В общем, посмотри на pldoc, я с ним не работал и не разбирался, но, скорее всего, там есть почва для разбора текста. Думаю, это то, что нужно твоей утилите. Плюс заодно и какую-то HTML-документацию можно подогнать.

Максим ННа счет альтеров это больной для меня вопрос, но не менее важный. Было бы здорво иметь базовый скрипт и организованный набор алтеров, а потом получить общий скрипт создания таблицы (я не говорю о чистом create, хотя бы просто сумму файлов). Т.е. я набираю в консоле утилиту и имя объекта, а получаю в нужном месте файлик с определенным именем и версией для записи в него модифицирующих операторов. А потом говорю: "собери мне скрипты создания/модификации этой таблицы с момента создания по конец прошлого года" и он покажет.

Я сейчас думаю над чем-то подобным. По мотивам проекта sqlmake, я предполагаю вести ту часть sql-кода, которая "datamodel" (т.е. таблицы с индексами и пр.) в своём исходном историческом контексте, т.е. сначала базовый "create", затем все последующие "alter" и "drop", перемешанные с остальными операциями для накатов версий, иными словами писать так, как нужно последовательно развивать структуру БД, без лишней писанины. А утилита затем может собирать некую карточку или паспорт объекта (таблицы, в основном), где в одном файле (в спецкаталогах) будут собраны все исторические операторы над таблицей (create + alter-ы), собраны все связанные подтабличные объекты (индексы, ключи), будет список всех (или основных) зависимостей и т.п., причём в виде sql-кода (с учётом препроцессора, а точнее показаны и все директивы с аннотациями). Т.е. это код не для прямого исполнения, а справочная информация. Нечто подобное делают ряд IDE, где можно где-то открыть объект и IDE из БД соберёт всю доступную DDL-информацию, как по самому объекту, так и по основным связанным.

Vladimir BaskakovНу когда неделю, месяц, квартал поэксплуатируете - отпишитесь. Как прошло внедрение.
Это база. А клиент то к ней на чем? Как взаимодействуют структура базы, хранимки, слой бизнес-логики, слой презентации, слой нормативно-справочной информации? Как увязано с управлением требованиями к софту? Есть ли юнит-тестирование или аналоги? Что есть критерий того что ==база собралась==?

ТЕ интересно применение в широком контексте.

пока как то видится, что инструмент покрывает узкую зону которую и покрывать автоматизацией не так уж обязательно - опубликовали регламент на стандарт разработки, выложили типовые шаблоны.... и применить административный ресурс.
И все. Копипаст файлов - папок + сниппеты = счастье. Маленькое, а большого и данная утилита не подарит? вроде.


А вот в рамках широкого контекста применения рекомендую глянуть на проект TSQLMacro (там ещё есть подпроект TSQLAssert) - это ещё один велопрепроцессор, под MSSQL. Собственно, важен не сам этот проект, а он стал основой для ещё одного - Macro T-SQL ( форум ) - это ещё одно макрорасширение для TSQL, фактически, особый диалект. Обращаю внимание, что все проекты реализованы на самом TSQL, народ даже так выкручивается.

Так вот, в Macro T-SQL есть уже модификация или расширение синтаксиса языка, решение неоднозначное (хотя кое-что м.б. и полезно, включая и ряд трюков для непосредственной макроподстановки элементов кода). Но основное, на что обращаю внимание, там есть попытка организации логических схем данных по модулям, попытка реализации ОПП-разработки (или абстрактных типов данных плюс интерфейсы), и пр. Можно попробовать концептуально организовать некую подобную абстракцию над БД, как некая модель данных, с модулями и ООП-мотивами. И м.б. даже есть почва для чего-то универсального под разные СУБД, например, там где нет явных структурных типов, с наследованием и пр., можно реализовать абстракции непосредственно над таблицами (как ООП-объект) плюс хранимки/функции как методы. Вот ещё одно поле для жонглирования "секциями".


Только не хотелось бы получить вместо программирования на реальном коде, фактически, потребность вручную лепить AST-дерево кода в виде километровой XML-лапши. Вот у майкрософт есть свой "M Language", DSL для моделирования данных, здесь можно глянуть. Нечто подобное можно сделать под жабу. Если язык моделирования будет стандартным, то с ним начнут работать и инструменты вокруг СУБД, и джава-фреймворки вокруг интерфейсов, бизнес-логики, и прочих серверов приложений. И будет, наконец, счастье. А дальше моделирование вокруг данных нужно расширять до полноценного системного моделирования, где описывается вся система, все элементы и взаимосвязи с инвариантами, и т.д. Обязательно нужно подкрепить верификацией моделей, пусть методом "model checking", нужен какой-нибудь стандартный Coq или PROMELA . И т.д. Со временем, Java EE изменится до неузнаваемости.

Собственно, прошу выше сказанное воспринять не как иронию вокруг какой-то утилиты. Я опять о том, что современный ынтырпрайз убог и калека, приходится таскаться с промышленными костылями и подпирать их сплошными велосипедами.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38273433
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Здесь имеются грабли, из-за которых нужно "стучать по шапке" согласно настроенной конфигурации проекта, а утилита этого никак не поймёт:

- "primary key" находится не в секции "constraints";
- "create index" не расположен в секции "index ddl" и вообще ни в какой секции.

Иными словами, без понимания того, что именно находится внутри sql-файла, ни о каком реальном анализе и контроле кода речи быть не может. Далее, утилита не понимает связи между секциями, т.е. если в файле будут ещё таблицы, то понять где какие "constraint"-ы и прочие всякие индексы, т.е. что к чему и к какой таблице принадлежит, не возможно. Фактически, кроме управления списком файлом, внутри самого файла утилита может лишь вырезать все "таблицы", все "индексы" и т.д.


PSV100В общем, посмотри на pldoc, я с ним не работал и не разбирался, но, скорее всего, там есть почва для разбора текста. Думаю, это то, что нужно твоей утилите. Плюс заодно и какую-то HTML-документацию можно подогнать.


Согласен, мутно получается. Да и комментарии тоже не выход (хотя лучше конечно).
Нашел тулзовину - https://github.com/akiban/sql-parser
Неплохо парсит sql-ники (по крайней мере на первый взгляд). Попробую заюзать ее, тогда можно будет полностью отказаться от Start(Stop)Text (но я их оставлю на особые случаи, как алтернативу) и лихо хранить код таблиц в одном файле и доставать нужные элементы по типу (например все индексы из модуля такого то). Ну а комменты и описания останутся для сложных, определенных пользоватлем объектов.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38273526
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Я тебе привел скрипт. Сможешь с ним работать? Нет! Значит разработчики с опытом от 3х лет с тобой работать не будут. У них иде есть.
Кто твои пользователи?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38273806
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
Я тебе привел скрипт. Сможешь с ним работать? Нет! Значит разработчики с опытом от 3х лет с тобой работать не будут. У них иде есть.

Я вроде ответил как можно работать с этим скриптом - http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1019474&msg=14335628

Petro123Максим Н,
Кто твои пользователи?

Пока только я. Мне понадобился подобный инструмент, ничего похожего готового я не нашел, вот и делаю его для себя время от времени. У меня и мыслей нет сказать: "Друзья, до этого времени вы все работали неправильно!". Просто интересно поделиться своей идеей, услышать отзывы (кстати я думал, что негатива будет гораздо больше)) ).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38273956
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
я просто отвечал на твой вопрос. Тут твой вопрос просто потёрли вместе со флеймом.
У меня в скрипте больше объектов:
- PK, FK, Cascade, DEFAULT, CHECK, ALTER КАЖДОГО ИЗ НИХ, CREATE каждого, DELETE каждого.
- всё это перемешано в _реальном скрипте_ в очередности и синтаксически чтобы не сломать данные заказчика.
Т.е. ты с таким скриптом ПОКА работать не сможешь.
IMHO
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38273986
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
я просто отвечал на твой вопрос. Тут твой вопрос просто потёрли вместе со флеймом.
У меня в скрипте больше объектов:
- PK, FK, Cascade, DEFAULT, CHECK, ALTER КАЖДОГО ИЗ НИХ, CREATE каждого, DELETE каждого.
- всё это перемешано в _реальном скрипте_ в очередности и синтаксически чтобы не сломать данные заказчика.
Т.е. ты с таким скриптом ПОКА работать не сможешь.
IMHO

Использование данной тулзы подразумевает определенный подход к разработке.
Т.е. смысл не работать с одним (или несколькими) скриптом, где указана вся история создания измения базы в хронологической последовательности, а хранить данные так, чтобы на их основе можно было легко и быстро собирать разные скрипты, и что бы вести контроль, чтобы сборка была верной. Чтобы организовать все это "хозяйство" и управлять им.

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

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

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

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


Подъитоживая: да, к такому скрипту я ПОКА, не готов. Если будут предложения и мысли с удовольствием выслушаю.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38273991
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

С другой стороны, если вас все устраивает в ваших скриптах, способе его формирования и прочих эксплуатационных вопросах, то эта тулза добавит только лишней работы.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274051
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НИспользование данной тулзы подразумевает определенный подход к разработке.
Т.е. смысл не работать с одним (или несколькими) скриптом, где указана вся история создания измения базы в хронологической последовательности, а хранить данные так, чтобы на их основе можно было легко и быстро собирать разные скрипты, и что бы вести контроль, чтобы сборка была верной. Чтобы организовать все это "хозяйство" и управлять им.

==== что делать с последовательностью версий и UPDATE с 1.1 на 1.2 у заказчика?

Т.к. при разработке БД, помимо скриптов накатки со свежими правками и альтерами новой версии у заказчика ,

==== я так понимаю, это как раз главное и основное. А потом можно уже дополнительно КОНСТРУКТОР-СМЕШИВАТЕЛЬ версий.

Допустим разработчик выполнял какое-либо задание и внес изменения в 10 PLSQL-пакетов,

===== что такое 10 PLSQL-пакеты? Это мои готовые скрипты UPDATE или CREATE с объектами в куче кода??

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

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

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


Подъитоживая: да, к такому скрипту я ПОКА, не готов. Если будут предложения и мысли с удовольствием выслушаю.
1. Что делать в Java если маппинг там статичный и варианты твоих БД не нужен?
2. Давай ещё раз по ВИ или прецендентам:
- я создал скрипт выше версии 1.2 СУБД
- что с ним делать дальше? Я так и не понял.
Код: java
1.
Утилита -p c:\sql_my.txt


что получим?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274284
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, у меня ощущение, что 80% функционала покроет liquidbase, если в вашем проекте ведется нормальная версионность.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274296
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинРебят, у меня ощущение, что 80% функционала покроет liquidbase, если в вашем проекте ведется нормальная версионность.
дак они не знают альтернатив. И не изучают их.
Если бы было - коротко - недостатки такие то.....За основу берём такой-то продукт, но допиливаем его...
Другое дело....
ЗЫ.
В живом проекте 50 процентов CREATE а потом идёт UPDATE с сохранением данных заказчика.
Плюс строгая очерёдность версий.
Тут основной упор на _конструктор_ модификаций БД. Хошь с FK, хошь без PK....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274327
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинРебят, у меня ощущение, что 80% функционала покроет liquidbase, если в вашем проекте ведется нормальная версионность.

http://www.ibm.com/developerworks/ru/library/j-ap08058/
Небольшая статья, хоть и старая, но представление о продукте дает. Все create, update, alter, миграция и тд - настраивается.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274381
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМне понадобился подобный инструмент
ну а если оценивать - вот Вы потратили на него X чел-часов, и на горизонте года ждете, что от прироста эффективности прибыль будет Y. Ну и например он так понравится другим, что с его продаж еще Z?
Какая отдача? Планируется.... какова сложность проекта, который тулза обслуживает?? сколько таблиц-полей в базе, сколько отличающихся веток проекта, сколько версий в каждой ветке?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274671
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovавторМне понадобился подобный инструмент
ну а если оценивать - вот Вы потратили на него X чел-часов, и на горизонте года ждете, что от прироста эффективности прибыль будет Y. Ну и например он так понравится другим, что с его продаж еще Z?
Какая отдача? Планируется.... какова сложность проекта, который тулза обслуживает?? сколько таблиц-полей в базе, сколько отличающихся веток проекта, сколько версий в каждой ветке?

Я пока ничего такого не планирую, это больше j4f, пишу в основном по утрам, чтобы проснуться, ну а параллельно общаюсь на эту тему с умными людьми на этом форуме (кстати, много нового узнал).

Если в итоге я узнаю, что для удовлетворения своих здесь описанных разработчиских потребностей достаточно использовать инструмент X + утилиту Y и Z, и все это лихо интегрируется в текстовые редакторы и иде-шки A,B,C и D, то буду очень это рад, и буду с радостью юзать эти инструменты.

Но пока такого я не нашел, и как решить мою проблему организации и сборки кода (которая у меня есть, и уже давно) - тоже,
вот и делаю свой новенький двухколесный.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38274685
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинРебят, у меня ощущение, что 80% функционала покроет liquidbase, если в вашем проекте ведется нормальная версионность.

Согласен, но остальные 20% (а может чуть больше) останутся. Я не пытаюсь повторить функционал миграторов.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38275340
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- ну тогда я всячески желаю расслабиться и получить максимум удовольствия от процесса. Раз уж ради фанатства. Индейцам безразличны проблемы шерифов, Пи-Эмам все равно на разработчиков, уже много разработок были выполнены и заактированы без настоящего инструмента.... Я полагаю что оставшиеся 20% потребностей не такие насущные... Они часть 80%-ого куска из правила Парето. Не генерящего существенных полезностей.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38275391
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОзверинРебят, у меня ощущение, что 80% функционала покроет liquidbase, если в вашем проекте ведется нормальная версионность.

Максим НСогласен, но остальные 20% (а может чуть больше) останутся. Я не пытаюсь повторить функционал миграторов.

Поддержу тезис. Всё-таки, миграторы - это непосредственные исполнители операции внесения изменений в структуру БД (ну и др. связанные функции: создание с нуля, сравнение версий, поиск изменений, которые сделаны без мигратора, и т.д.). Им нужно чётко и однозначно дать целеуказания, вида добавить столбец, удалить таблицу, обновить процедуру и т.д. (о чём-то они сами догадаются). Но когда имеется потребность по-разному задавать эти действия, скажем, где-то таблицу и связанные процедуры и прочие объекты (или их варианты) создавать/обновлять в зависимости от потребностей или конфигурации конкретной БД, то, как правило, требуются дополнительные телодвижения. В каких-то случаях проще иметь несколько вариантов конфигураций для мигратора, где-то проще иметь своё метаописание для проекта (или какое-то своё его понимание), и на его основе уже формировать действия для каждого конкретного случая. Некоторые миграторы имеют в загашнике пару выкрутасов для инвариантности. Я не помню на счёт именно liquidbase, например, есть ли у него какие-то свои XML-тэги для условного выполнения (какого-нибудь if-else и т.п.), но не всегда удобен такой подход, как бы, от конкретной операции. В моём случае есть потребность в разделении функционала на логические модули, взаимосвязанные, для чего используются соответствующие стандарты в разработке и инструменты, и, прежде всего, все операции по обновлению (и создания) БД строятся в разрезе модулей, что предопределяет список конкретных действий в каждом индивидуальном случае. Поэтому мне проще иметь свои DSL и всякие стандарты по построению БД, на базе которых я могу формировать входные данные для того же liquidbase (но у нас используется свои миграторы/инсталяторы, в большинстве случаев, по ряду причин).

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

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

А если вдруг такая разработка станет основой уже для реальной IDE-DB, т.е. с форматированием кода и реформатом исходников, полноценный контроль и анализ кода, рефакторинг (причём как в исходниках, так и на уровне БД), контекстный автокомплит и пр. мечты, то тут уж лучше не закапывать такой потенциал.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38275430
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НСогласен, мутно получается. Да и комментарии тоже не выход (хотя лучше конечно).
Нашел тулзовину - https://github.com/akiban/sql-parser
Неплохо парсит sql-ники (по крайней мере на первый взгляд). Попробую заюзать ее, тогда можно будет полностью отказаться от Start(Stop)Text (но я их оставлю на особые случаи, как алтернативу) и лихо хранить код таблиц в одном файле и доставать нужные элементы по типу (например все индексы из модуля такого то). Ну а комменты и описания останутся для сложных, определенных пользоватлем объектов.


Максим, имхо, правильно то, что начал смотреть в сторону sql-парсинга, без него никак. По своему опыту. У нас когда-то были похожие мысли и попытки организовать подобную разработку, где на куче create-исходников (в основном, разделенных до уровня файл -> объект БД) пытались ими вертеть во все нужные стороны. Решали основные задачи - create и alter БД, какой-то контроль и всякий реформат специально не рассматривались. Были проблемы:

- геморно организовать полную автоматизацию накатов изменений только на основе create-операторов. Для этого нужно иметь ограничения, например, таблицы должны создаваться только через явные "create table", добавляемые столбцы должны иметь default-значение и пр. (хотя, это может и лучше для проектов, всё равно какие-то ограничения и стандарты или договоренности всегда имеются). Для автоматического сравнения структур БД, как самих БД, так и исходников (или сравнение скрипта и БД), в принципе, имеется стандартный или придворный функционал в тулсах при СУБД. Но задача усложняется при вариантности (о которой уже не раз жужжали), к тому же для миграций/создания имеется потребность в выполнении блоков кода, для всяких дополнительных вычислений. Соответственно, всё нужно состыковывать;

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

Короче говоря, для обновления "datamodel" (т.е. таблиц с индексами и отношениями и пр.) лучше и проще оперировать явными операциями alter и т.д., пусть лучше для этого помогают умные IDE и пр., есть возможность всё перепроверить и оценить и пр., одним словом, это гораздо надёжнее. К тому же подготавливаются действия для многоразового применения, и нет потребности их постоянно высчитывать (условно, если говорить об "инвариантности"). Поэтому от явной ручной истории изменений БД отказаться не получилось, соответственно, уменьшить писанину таким образом не удалось.

Потом на глаза попалось решение поверх препроцессора, что дало возможность работать с sql-исходниками как и с другими C/C++/Java/Delphi/и пр. проектами, с гибкостью для организации вариантов сборки и пр. плюшки. Свой велик на основе жонглирования исходников был недоделанным заброшен.

А хочу я сказать следующее. Если вертеть исходниками и так и этак, то хотя бы придётся решать всякие скользкие нюансы. Ну, например, чтобы произвольно слепить sql-скрипт, вырезая откуда-то данные, нужно в итоге или правильно эти данные вырезать, или правильно сформировать, а то и то и другое вместе. Пусть подготавливается текст хранимой процедуры, нужно полностью понять весь тот исходный текст, который к ней относится, т.е. зная, что sql-операторы разделяются, например, через ";", но внутри процедуры имеются свои операторы с ";", то нужно понимать или действующий терминатор операций, заданный для текущей позиции в скрипте, или самому надёжно определять, где находится последний "end" для процедуры. А в итоговый скрипт (или нужное место в скрипте) нужно правильно внести данные, вставив правильно "/", "go", "set term", "commit work" и т.п.

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

На счёт этого Akiban sql-parser. Я на него быстро глянул левым глазом да по диагонали. Я не в курсе его архитектуры, но есть подозрение, что у него основной упор делается на построение AST-дерева кода. И, например, если ты ему на вход подашь "в лоб" многокилометровый дамп БД, и он "в лоб" будет строить супер-глобальное AST (если сможет хотя бы разделять операторы), то на этом работа утилиты и будет закончена, с позором. Поэтому не исключено, что потребуется свой предпроцессинг исходников, и этому sql-парсеру скармливать отдельные sql-операторы, если уж нужно именно AST.

Я как-то здесь давал рекомендации по поводу разбора текста. Ниже (см. прикрепление) я выложу пример такого парсера. Это лишь кусок (по потребности могу выложить всё) от древнего давно умершего опенсорс-проекта, сделанного в 90-х на Delphi для печати отчётов. В своё время именно этот проект начал вправлять мозги, как можно решать проблемы (к примеру, в ту эпоху какое-то программное решение для печати отчётов, фактически, было дикостью, когда везде вокруг сплошные GUI-дизайнеры отчётов, ну и форм интерфейса). В архиве несколько файлов (первичный - SRTokenizer), чтобы понять что к чему, какая там архитектура и принципы использования парсера и т.д. (если с Паскалем/Delphi дел не имел, то всё равно понять элементарно), плюс исходный Help-файл (другой документации толком и не было) и примеры, чтобы понять, для DSL какого вида (местами похож на SQL) вся кухня затевалась.

Я планирую свою тулсу, для миграций и созданий, с препроцессором и прочими блэкджэком и шлюхами. Не исключено, что будет использоваться подобный парсер. Готовой реализации на java я не встречал, но специально не искал. Но, во-первых, я не знаю, когда дело дойдёт до реальной разработки, во-вторых - я ещё окончательно не знаю, в каком виде будет реализован разбор текста. Особенности предложенного варианта:

- реализуется именно потоковый разбор (естественно, из разных источников - строка, файл и любой абстрактный поток данных), причём нет заранее предопределенной грамматики, или заданных лексем или списка ключевых слов и т.п.;

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

В отличие от типовых генераторов парсеров на основе BNF/PEG-грамматик здесь имеется возможность для гибкого ручного, т.е. самостоятельного, разбора текста. А также есть потенциал для динамической настройки, т.е. не только в compile-time или на этапе генерации java-исходников. Но, для задач с очень большой сложностью разбора заранее сформированные строго формальные грамматики могут оказаться более полезными, или как раз через грамматики и упрощается жизнь, всё контролируемо и не допускается ручного произвола. К тому же через предопределенные грамматики больше потенциал для оптимизаций кода, можно добиться меньше операций сравнения текстовых строк и т.д. Здесь нужно всегда (как и везде) анализировать конкретные потребности и возможности. Поэтому не исключено, что правильно взять JavaCC и т.п., или посмотреть в сторону Scala (там вроде есть придворный PEG-парсер, к тому же развиваются макросы для compile-time).

В общем, посмотри, вдруг что и пригодится:
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38275482
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,

За полезную ссыль спасибо, посмотрю.

Насчет Акибана это я погорячился, весчь крутая, но совершенно для других целей.

Может хватит простых регулярок...
Добавил поле "mask" в xml'ину, например так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<DBObjType>
	<name>$objName$</name>
	<description>User table in one files</description>
	<file>$objName$_table.sql</file>
	<shortName>t</shortName>
	<DBObjChildList>
		<name>ddl</name>
		<shortName>d</shortName>
		<file>$objName$_table.sql</file>
		<mask>CREATE.TABLE.$objName$.*?;</mask>
		<snippetText> CREATE TABLE $objName$ (id INTEGER);</snippetText>
	</DBObjChildList>
	<DBObjChildList>
		<name>indexes</name>
		<shortName>i</shortName>
		<file>$objName$_table.sql</file>
		<mask>CREATE.INDEX.*ON.TABLE.$objName$.*?;</mask>
		<snippetText> CREATE INDEX $objName$_idx ON TABLE $objName$;
		</snippetText>
	</DBObjChildList>
</DBObjType>




Понятно, что сейчас там нет проверки на комментарии и возможно множество других нюансов, но зато прозрачно и просто.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38275704
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НМожет хватит простых регулярок...
Добавил поле "mask" в xml'ину, например так:

[...]

Понятно, что сейчас там нет проверки на комментарии и возможно множество других нюансов, но зато прозрачно и просто.

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

Кстати, напоминаю, что в тех же текстовых редакторах можно подсмотреть написание меток кода. Вим/эмакс в большинстве случаев оперирует ctags или подобным, Sublime имеет метки из коробки, к тому же у него есть ещё понятие "scope" кода (кстати, полезное свойство), есть ещё под винду такой HippoEDIT - неплохой блокнот в стиле а-ля вижуал-студия, там тоже свои метки кода. В JEdit кроме регулярок имеются и дополнительные правила, а точнее альтернатива для сплошных регэкспов (для производительности и простоты), например, можно указать, что литерал должен начинаться с первых значимых символов в строке и с таких-то слов, литерал не разбивается на строки и т.д. Более того, для JEdit есть плагины вокруг SQL-СУБД, например, DBTerminal (но это вроде простой "терминал"), SQL (продвинутый плагин), PelczarSql (на него больше обращаю внимание, там вроде нет документации, но и так всё понятно, если установить). Эти плагины пытаются дублировать функционал типовых DB-плагинов в IDE, при этом имеется шаблонная система для организации SQL-запросов к серверу с целью составления дерева объектов БД, просмотра структуры объекта и т.д. Что как раз в тему для твоей утилиты, и похожие принципы.

Собственно, можно в том же JEdit подсмотреть и парсеры для разбора текста. А если пойти дальше, то у него есть своя подсистема "SideKick" - некий аналог Эклипса для организации уже семантического разбора текста, плюс куча плагинов вокруг этого. Короче говоря, можно сделать себе свой Эклипс для своих конкретных нужд, которым на порядок удобнее пользоваться, чем тем же эклипсом, нетбинсом, Идеей и пр. (JEdit местами удобнее вима/эмакса/Sublime, но у него есть и свои особенности).

Или, поскольку JEdit это не ынтерпрайзно, то можно посмотреть на тот же Эклипс. Там есть костяк для реализации парсеров, всё сразу будет интегрировано в IDE, доступен дополнительный огромный функционал, типа форматирование кода, управление проектом, есть и свои DB-плагины и т.д.
Тогда это будет вполне ынтырпрайзно, вызывать меньше вопросов, и больше соответствовать названию проекта - LiWIDE (т.е. именно IDE).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38276654
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторподсистема "SideKick" - некий аналог Эклипса для организации уже семантического разбора текста, плюс куча плагинов вокруг этого. Короче говоря, можно сделать себе свой Эклипс для своих конкретных нужд, которым на порядок удобнее пользоваться, чем тем же эклипсом, нетбинсом, Идеей и пр.
ото ж всегда так. Сначала пишется консольная прога, а потом чтобы работать с ней - разрабатывается страшное Затмение. Или СетеБобы. Потом они признаются слишком громоздкими и цикл повторяется. Анек про кодера с шампунем - намылить голову - смыть - повторить....

Ну тут главное вовремя назвать себя методологом и больше не прогать, и даже не учить как прогать - а учить как руководить учиетлями.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38276718
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovавторподсистема "SideKick" - некий аналог Эклипса для организации уже семантического разбора текста, плюс куча плагинов вокруг этого. Короче говоря, можно сделать себе свой Эклипс для своих конкретных нужд, которым на порядок удобнее пользоваться, чем тем же эклипсом, нетбинсом, Идеей и пр.
ото ж всегда так. Сначала пишется консольная прога, а потом чтобы работать с ней - разрабатывается страшное Затмение. Или СетеБобы. Потом они признаются слишком громоздкими и цикл повторяется. Анек про кодера с шампунем - намылить голову - смыть - повторить....

Ну тут главное вовремя назвать себя методологом и больше не прогать, и даже не учить как прогать - а учить как руководить учиетлями.

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

Может и просто, но не функционально. Раз уж вспомнились текстовые редакторы, то продолжу эту линию.

Посмотри на SublimeText, на его правила задания синтаксиса. Там есть понимание некоего "scope", т.е. области кода. Хорошая штука, имхо, можно от неё плясать. Имеющиеся типовые метки кода (для goto symbol) предназначены, в основном, для того, чтобы прыгнуть в тексте на начало участка, например, на заголовок процедуры, а вот где конец этой процедуры, как правило, этим меткам не важно.

Далее посмотри на JEdit. У него есть мощные парсеры кода, которые можно от него оторвать (вроде бы, я как-то видел какой-то проект, где было сказано, что используется разбор от JEdit, не помню точно, может быть это был тоже какой-то велоредактор. Лицензия вроде позволяет, а если поделиться своими доработками, то всем только лучше будет). У него правила для синтаксиса задаются по мотивам эмаксовых mode, кроме регулярок есть и другие способы. Имеется взаимосвязь между mode. Например, если при разборе html встречается код на javascript, то можно указать, что разбором javascript-а будет заниматься соответствующий mode. Или можно задать ряд общих правил, например, разбор комментариев, а в других mode их подмешивать. Но вот явных scope кода вроде как нет. Не помешало бы их добавить, причём реализовать правила корректного определения границ области. Например, чтобы определить границы "begin-end" всего блока кода как тела процедуры, нужно игнорировать или понимать внутренние вложенные области с "begin-end", которые используются внутри sql-операторов (или прочие "end" как "if-end"). Короче говоря, есть реальный потенциал для задания правил разбора SQL, под разные диалекты.

Посмотри на плагины SQL и PelczarSql . Там есть примеры организации конфигурируемой системы для работы с метаданными для разных СУБД. Обращаю внимание, что у плагина "SQL" есть концептуальный недочёт - он подразумевает, что у сервера СУБД на самом верхнем уровне есть система всяких "schema" или пользователей как "owner" объектов и т.п. Это не всегда так, у sqlite, FireBird и др. не имеют явных "schema" (точнее, они по-другому управляются). Ну, и там есть примеры организации работы с сервером для выполнения sql-запросов и скриптов. Есть дополнительные плюшки, например, извлечение параметров для sql-запроса из комментариев. Есть примеры парсеров для разбивки текста на отдельные sql-команды, ну и куча всего.

Итого, можно задать правила для разбора sql-исходников, под разные диалекты. Связать синтаксические правила с системой метаданных для каждой СУБД, плюс задать правила для логики построения БД, т.е. очередность создания элементов. Это уже реальная почва для универсальных выкрутасов. Тогда от пользователя, фактически, нужны лишь правила для именования объектов согласно потребностям проекта.

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

Ну а для манипулирования исходниками можно приспособить Fossil . Он все данные хранит внутри одной sqlite-базы, причём это не только система контроля версий, но и багтрекер с вики в одном флаконе не отходя от кассы. Взаимодействие с git-ом у него из коробки. Можно дополнить fossil-базу своими таблицами, куда помещать разобранные sql-исходники. Через обычный SQL получаем возможность лепить sql-скрипты на любой чих, к тому же используя СКВ и т.д. Думаю, фантазия понятна.

Таким образом, необходимо спроектировать правила для разбора SQL, задать правила для манипулирования метаданными из БД, и дать простор для пользователя "селектить" себе нужные sql-скрипты - это и есть мечта конечного пользователя. Ему для своего проекта достаточно задать шаблоны для именования объектов и настроить предпочтения для форматирования. Далее подавай на вход любые sql-скрипты и затем извлекай любые результаты, подкреплённые версиями, плюс документация с требованиями/задачами по проекту.

Ещё нужно подумать над комментариями. Внутри блоков комментарии сохраняются как есть. Для исходных sql-скриптов можно задать требования, задающие привязку комментариев к участкам кода, например, многострочные "/* ... */" - предшествуют целевому объекту/коду, "-- ..." - после. Нужно выделять комментарии-доки (дополнительная звёздочка и как "--- ..."). Кроме документации там будут опции/аннотации для сборки и т.п. А также через них можно определять или идентифицировать анонимные блоки кода для исполнения (при создании/накатов).

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

Это уже какая-то реальная IDE. Возможно, это даже основа для дальнейшего развития всей жаба-инфраструктуры, как развитие компонентной технологии и аспектного программирования, плюс задатки для моделирования :))

В общем, рекомендую по утрам подумать над фантазиями. Или над другим вариантом - а стоит ли...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38276776
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Об этом след. пост.
)) это ж надо как ты умеешь писать.
Твою бы энергию да в мирное русло)).
Не напишешь как совместить веб и десктоп в одной программе. Ака сильверлайт или Google GWT.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38276785
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавлю, т.к. стало забываться - JavaFX.....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38276998
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123)) это ж надо как ты умеешь писать.
Твою бы энергию да в мирное русло)).
Не напишешь как совместить веб и десктоп в одной программе. Ака сильверлайт или Google GWT.

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

Что касается десктопа с вэбом. Вроде как интерпрайз уже выкатил свои решения. Если не ошибаюсь, тот же JSF якобы универсальная спецификация, не зависимая от среды рендеринга или клиентских устройств, от десктопов и серверов. В том же Эклипсе есть какой-то проект, типа "эклипс в вебе".

По поводу JavaFX. В инете есть слухи, что уже сейчас идёт работа над 3-й версией, которая будет не совместима с текущей второй. При таком отношении Оракла к десктоп технологиям в это можно элементарно поверить. И, в целом, для десктопа в жабе полная лажа. Свинг можно хоронить, у SWT хватает заморочек, а о JavaFX говорить как о промышленной платформе пока нет почвы.

В упомянутом здесь Rust-е и то как-то больше надежды. Сейчас мазиловцы вместе с Самсунгом лепят новый браузер на Rust-е, с кроссплатформенным GUI. Имхо, GUI-почва для своих разработок найдётся. Через LLVM можно задействовать какой-нибудь Emscripten для компиляции javaScript-а. Думаю, что на базе новомодного Asm.js скоро будут расти фреймворки вида Bootstrap.

А когда встанет реальная задача реализовать и десктоп-GUI, и веб для одного и того же функционального ядра проектов (и такая задача реально наклёвывается), то обязательно поделюсь уже конкретными решениями. Кое-какими своими мыслями на счёт построения интерфейсов, гибких, с реактивностью и пр., могу поделиться здесь .

P.S. Сорри за много букв ранее, просто для меня актуальна тема поиска правильной методики разработки БД. А энергия иссякает, мне в ближайшее время уже не до интернета.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277097
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В упомянутом здесь Rust-е и то как-то больше надежды.
так и джава надежды внушала. райт онс ран энивере... или как там было. В начале большого пути. Делфи хоронят, и похороны такие долгие и счастливые... свингов хоронят.... кого еще зарыть - дотнета? Руста и хоронить может не станут. Выкинут опенсорсом без гробика....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277305
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100F якобы универсальная спецификация, не зависимая от среды рендеринга или клиентских устройствВы links видели? Не linx, а именно links.
Или, скажем, IBM Webexplorer?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277325
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovтак и джава надежды внушала. райт онс ран энивере... или как там было. В начале большого пути. Делфи хоронят, и похороны такие долгие и счастливые... свингов хоронят.... кого еще зарыть - дотнета? Руста и хоронить может не станут. Выкинут опенсорсом без гробика....

Прошу под "хоронить" не воспринимать всё так буквально. Свинг как технология заморожена, при этом ситуация с десктоп-GUI туманна. JavaFX пока дело рискованное, к тому же хотелось бы более кардинальных продвижений на счёт потребления ресурсов и по активнее шевеления интерфейса. Не смотря на новые низкоуровневые движки ситуация на счёт прожорливости и тормознутости существенно не изменилась, что ещё может быть иногда актуально, ибо в корпоративе не везде всё супер-современное. SWT - вообще-то, это только нижняя часть айсберга, которая без ядра Эклипса (JFace или что там) фактически не живёт сама по себе. В рамках дополнительного GUI-функционала имеется фактически один придворный проект (nebula или что-то в этом роде). Как-то муторно в этом Эклипсе, если спустится на более низкий уровень и ваять свои виджеты, или расширять.

Короче говоря, на том же Свинге ещё будут новые проекты, не смотря на заморозку, ну и плюс поддержка имеющегося. И будет он жить как та же дельфи (хотя дельфу всё таки развивают).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277377
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100SWT - вообще-то, это только нижняя часть айсберга, которая без ядра Эклипса (JFace или что там) фактически не живёт сама по себе.
Живет вроде.
SWT вполне себе работает без Eclipse RCP. Можно хоть под идеей разрабатывать. Я так делал когда-то давно. В инете есть презентация Антона Кекса, где он рассказывает как пилит проект на SWT. В идее.
Можно ли JFace юзать без RCP - не знаю. Но уверен что можно. Это просто удобная обертка над SWT. Она в RCP никак не должна быть интегрирована.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277409
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovPSV100F якобы универсальная спецификация, не зависимая от среды рендеринга или клиентских устройствВы links видели? Не linx, а именно links.
Или, скажем, IBM Webexplorer?
Не совсем понимаю о чём именно речь. Если о том, что спецификацию JSF невозможно так универсально реализовать как задекларировано, то это такова технология от жабо-промышленности. Я как раз и писал с намёком, что у энтерпрайза соответствующие решения. Есть и альтернативы, проекты вокруг эклипс-а вполне себе мэйнстрим-уровень, и что-то вполне реально применимо в современных условиях.

Если отбросить политические причины (приказы партии не обсуждаем), лично я хорошенько взвешу, стоит ли брать, к примеру, SWT и RAP. Не исключаю, если уж нужно как-то максимально приблизить рядом разработку под веб и десктоп, то, например, может быть проще задействовать какой-то ходовой фреймворк для HTML, а для GUI взять какой-то HTMLLayout или вообще WebKit (хотя у HTMLLayout удобнее функционал на уровне полноценного десктопа, к тому же где-то делали интеграцию HTMLLayout в SWT, но я не в курсе, чем дело закончилось, ну и HTMLLayout пока только под винду).

P.S. Всё таки это опять оффтоп.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277422
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczPSV100SWT - вообще-то, это только нижняя часть айсберга, которая без ядра Эклипса (JFace или что там) фактически не живёт сама по себе.
Живет вроде.
SWT вполне себе работает без Eclipse RCP. Можно хоть под идеей разрабатывать. Я так делал когда-то давно. В инете есть презентация Антона Кекса, где он рассказывает как пилит проект на SWT. В идее.
Можно ли JFace юзать без RCP - не знаю. Но уверен что можно. Это просто удобная обертка над SWT. Она в RCP никак не должна быть интегрирована.

Вполне может быть. Я в потроха Эклипса заглядывал очень давно. Когда-то был порт SWT поверх FoxToolkit, С++ библиотеки. Я с ним побаловался, в те времена с ним эклипс шевелился по приятнее, и памяти вроде меньше жрал. Заодно посмотрел на его устройство. Тогда вроде даже в документации писали, что не всё так просто на счёт SWT (или возможно как бы преподносилось, что типа вам для правильной жизни одного SWT мало, обязательно берите выше. Как-то так. Всё может быть).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277545
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Ну, не знаю, если связываться с регулярками, то процесс написания конфигураций для проекта будет похож на написание какого-то sql-mode для эмакса, не всех подобное привлекает.

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

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

Может и просто, но не функционально. Раз уж вспомнились текстовые редакторы, то продолжу эту линию.

Посмотри на SublimeText, на его правила задания синтаксиса. Там есть понимание некоего "scope", т.е. области кода. Хорошая штука, имхо, можно от неё плясать. Имеющиеся типовые метки кода (для goto symbol) предназначены, в основном, для того, чтобы прыгнуть в тексте на начало участка, например, на заголовок процедуры, а вот где конец этой процедуры, как правило, этим меткам не важно.

Далее посмотри на JEdit. У него есть мощные парсеры кода, которые можно от него оторвать (вроде бы, я как-то видел какой-то проект, где было сказано, что используется разбор от JEdit, не помню точно, может быть это был тоже какой-то велоредактор. Лицензия вроде позволяет, а если поделиться своими доработками, то всем только лучше будет). У него правила для синтаксиса задаются по мотивам эмаксовых mode, кроме регулярок есть и другие способы. Имеется взаимосвязь между mode. Например, если при разборе html встречается код на javascript, то можно указать, что разбором javascript-а будет заниматься соответствующий mode. Или можно задать ряд общих правил, например, разбор комментариев, а в других mode их подмешивать. Но вот явных scope кода вроде как нет. Не помешало бы их добавить, причём реализовать правила корректного определения границ области. Например, чтобы определить границы "begin-end" всего блока кода как тела процедуры, нужно игнорировать или понимать внутренние вложенные области с "begin-end", которые используются внутри sql-операторов (или прочие "end" как "if-end"). Короче говоря, есть реальный потенциал для задания правил разбора SQL, под разные диалекты.

Посмотри на плагины SQL и PelczarSql . Там есть примеры организации конфигурируемой системы для работы с метаданными для разных СУБД. Обращаю внимание, что у плагина "SQL" есть концептуальный недочёт - он подразумевает, что у сервера СУБД на самом верхнем уровне есть система всяких "schema" или пользователей как "owner" объектов и т.п. Это не всегда так, у sqlite, FireBird и др. не имеют явных "schema" (точнее, они по-другому управляются). Ну, и там есть примеры организации работы с сервером для выполнения sql-запросов и скриптов. Есть дополнительные плюшки, например, извлечение параметров для sql-запроса из комментариев. Есть примеры парсеров для разбивки текста на отдельные sql-команды, ну и куча всего.

Итого, можно задать правила для разбора sql-исходников, под разные диалекты. Связать синтаксические правила с системой метаданных для каждой СУБД, плюс задать правила для логики построения БД, т.е. очередность создания элементов. Это уже реальная почва для универсальных выкрутасов. Тогда от пользователя, фактически, нужны лишь правила для именования объектов согласно потребностям проекта.

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

Ну а для манипулирования исходниками можно приспособить Fossil . Он все данные хранит внутри одной sqlite-базы, причём это не только система контроля версий, но и багтрекер с вики в одном флаконе не отходя от кассы. Взаимодействие с git-ом у него из коробки. Можно дополнить fossil-базу своими таблицами, куда помещать разобранные sql-исходники. Через обычный SQL получаем возможность лепить sql-скрипты на любой чих, к тому же используя СКВ и т.д. Думаю, фантазия понятна.

Таким образом, необходимо спроектировать правила для разбора SQL, задать правила для манипулирования метаданными из БД, и дать простор для пользователя "селектить" себе нужные sql-скрипты - это и есть мечта конечного пользователя. Ему для своего проекта достаточно задать шаблоны для именования объектов и настроить предпочтения для форматирования. Далее подавай на вход любые sql-скрипты и затем извлекай любые результаты, подкреплённые версиями, плюс документация с требованиями/задачами по проекту.

Ещё нужно подумать над комментариями. Внутри блоков комментарии сохраняются как есть. Для исходных sql-скриптов можно задать требования, задающие привязку комментариев к участкам кода, например, многострочные "/* ... */" - предшествуют целевому объекту/коду, "-- ..." - после. Нужно выделять комментарии-доки (дополнительная звёздочка и как "--- ..."). Кроме документации там будут опции/аннотации для сборки и т.п. А также через них можно определять или идентифицировать анонимные блоки кода для исполнения (при создании/накатов).

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

Это уже какая-то реальная IDE. Возможно, это даже основа для дальнейшего развития всей жаба-инфраструктуры, как развитие компонентной технологии и аспектного программирования, плюс задатки для моделирования :))

В общем, рекомендую по утрам подумать над фантазиями. Или над другим вариантом - а стоит ли...


За инфу спасибо, буду думать.

Но сейчас я соображаю на счет интеграции и совместной работы с Ликвибэйс (ну или любым другим мигратором).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38277886
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторРазбор текста это круто, но тулза пока на ранних стадиях, я еще сам не знаю как все должно быть, еще много вопросов. Если она перерастет во что то более менее серьезное, то можно и о полноценном разборе подумать и прикрутить
Есть мнение, что в таких случаях можно кроме кодинга заниматься проработкой и формулированием концепции. Даже не кроме, а прямо вместо.
Начинать можно со стандартной формулы изобретения "А это Б отличающийся тем, что ....", формулирование "идеального конечного результата" по ТРИЗ и тд.
Для меня пока все еще непонятно, - что это . Но может это потому, что я недостаточно хорошо соображаю.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38278020
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovавторРазбор текста это круто, но тулза пока на ранних стадиях, я еще сам не знаю как все должно быть, еще много вопросов. Если она перерастет во что то более менее серьезное, то можно и о полноценном разборе подумать и прикрутить
Есть мнение, что в таких случаях можно кроме кодинга заниматься проработкой и формулированием концепции. Даже не кроме, а прямо вместо.
Начинать можно со стандартной формулы изобретения "А это Б отличающийся тем, что ....", формулирование "идеального конечного результата" по ТРИЗ и тд.
Для меня пока все еще непонятно, - что это . Но может это потому, что я недостаточно хорошо соображаю.

У меня тоже пока много вопросов. Одно время загорелся идеей, чего то налабал, а увидев это "чего то" начались вопросы. В общем нормальный процесс, я сейчас переосмысливаю...

В общем некая тулзня, которая помогает применять и использовать некие бестпрактисы при разработке БД-приложений, стандартизировать его (причем не жестко, а настраиваемо). Как то так.

По мере прояснения ситуации буду отписываться.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38278167
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Ня сейчас переосмысливаю...
вполне нормально.
Если специализация на БД, то 3-ка продуктов обзорно обязательна - ErWin, Ликвибэйс, РоднаяIDE_СУБД.
Хотя бы неделю на каждую.
Удачи!
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38278189
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да.
некие бестпрактисы при разработке БД-приложений
- а собственно - какие?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38278763
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим Н,

Чтобы не связываться с разбором текста и прочими сложностями, можно попробовать подойти к решению задачи с другой стороны, плясать от БД. У меня когда-то были мысли сделать некий создаватель специфичных дампов БД. Вместо сваливания всё в один сплошной sql-скрипт можно разбрасывать объекты по определенным файлам. Нужно задать конфигурационные правила, где под разные СУБД указаны типы объектов и их взаимосвязи, шаблоны для SQL-запросов для извлечения метаданных (примеры приводились через плагины для JEdit), как распределять файлы по каталогам и что помещать в каждый файл и т.д. Теперь можно доставать объекты из БД, формировать тексты DDL (опять же, не помешали бы опции по форматированию кода) и составлять целевые файлы. При этом (опционально, конечно) можно контролировать необходимость обновления уже существующего файла, т.е. утилита сама формирует нужный текст и соответственно знает, что должно быть в файле, проверив его содержимое можно понять, обновлять его или нет. И тогда можно запускать утилиту и она как бы будет обновлять только необходимое. Затем без возни в СКВ через обычный просмотр каталога и файлов уже только по датам понимать, что чего изменилось. Нет навязывания способа как работать с БД, т.е. объекты в БД можно создавать через IDE, вручную через скрипты и т.д. Затем, кому нужно, может сделать такой дамп, проанализировать, обновить СКВ и т.д. Причём подобные дампы не помешают и тем, кто вручную ведёт создание sql-исходников. Например, исходники содержат "create" и "alter" и пр. в своей строгой исторической последовательности, а где-то рядом через автодампы формируются те же "create" в текущем актуальном состоянии.

Для генерации sql-скриптов (а то и их самостоятельного выполнения), чтобы создавать БД на основе такого дампа, нужно ещё пару вещей. По мотивам Case-средств нужно дополнить систему шаблонов для скриптов организацией неких "pre-" и "post"-операций, с возможностью задания для каждого объекта, для подкаталога (т.е. как для некоего модуля), всей БД. Можно генерировать скрипты лишь по части дампа, указав конкретно такие-то объекты, папки и т.д. Единственное что, поскольку нет разбора содержимого каждого файла, то это вынуждает каждый объект держать, фактически, в отдельном файле. Но это м.б. и плюс, файлы создаются автоматом, по структуре каталогов и по именам файлов уже сразу можно понимать структуру БД (типа аналог "db-explorer"-а).

Для формирования файлов в дампе и последующего создания БД нужна какая-нибудь техника для извлечения нужных данных из таблиц и их занесение в БД. Например, под FireBird есть маленькая удобная утилитка для копирования и сравнения данных. Там есть пример удобного DSL вместо XML-портянки, который можно размещать где-то в конфигурации проекта. Утилита при создании дампа может подготовить секции из соответствующих "insert"-ов.

Такие дампы могут помочь и при работе со всякими миграторами. Утилита может обновлять "repeatable"-скрипты, т.е. с "create or replace/alter" объекта. При этом эти файлы будут обновляться только по потребности, и миграторы смогут корректно реагировать на модификацию объектов.

И вроде как есть потенциал для частичного выполнения операций (как создания дампов, так и "create" объектов), плюс другие плюшки (тот же дамп можно сразу выгружать в один sql-файл). Можно попробовать при выгрузке дампа подкрепить код процедур и прочих объектов каким-нибудь форматером, типа AStyle, но под sql. И т.д.


Имхо, подобный функционал может оказаться вполне востребован.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38278770
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
чел пошёл Ликвибэйс изучать (работать), а ты его опять загрузил)).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38281396
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovну да.
некие бестпрактисы при разработке БД-приложений
- а собственно - какие?

В частности приведенные в оракловом документе, несколько страниц назад, так же различного рода соглашения (об именовании, порядке сборки, тестировании, оформления), применяемые в коллективе.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38281553
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Liquibase штука интересная и полезная (ознокомился еще раз, думал может чего нибудь не допонял), но для несколько других целей.

Кстати, зачем описывать creat'ы и alter'ы в xml-е, т.е. это типа DSL, чтобы с sql'ем на замарачиваться?
Причем модификация таблиц на рабочей базе это довольно сложная операция, зависящая от конкретного случая, и отдавать
ее на откуп кросс-базовой тулзе я бы не стал. Т.е. лично я xml-описанием точно пользоваться не буду, только чистый sql.
Т.о. от всех прелестей остается только сама накатка скриптов (которые опять же нужно в чейнджсеты оформлять),
логирование их установки в 2-х табличках, откат, обработка исключительных ситуаций и т.д.

Т.о. в итоге работы с ней получим кучу разношерстных sql-скриптов, т.н. чейнджсетов, причем лихо перемешанных с xml-ем. Эти скрипты можно
накатить на разные базы, все будет залогировано, повторная накатка разрулена, конфликты обработаны, все ок.
Но вот разработчику работать с такими файлами мягко говоря будет не удобно. Т.е. найти код того или иного объекта,
посмотреть код связанных с ним объектов, посмотреть историю его изменения и т.д.

Повторюсь, все зависит от подхода к разработке, от организации.
Т.е. если юзать IDE, которая показывает объекты, изменяет их как вам надо по живому, потом даже какой то скрипт выдает, то
конечно можно просто хранить полученные миграционные скрипты в ликвибэсовских чейнджсетах, в файликах и радоваться жизни.
И это очень здорово если в такой схеме вас все устраивает, т.к. трудозатрат минимум.
И данная, описываемая здесь тулза ничем вам не поможет, а только подросит работы (немного).

Но если работа с ИДЕ и полная зависимость от нее вас не устраивает (как меня и PSV100, а может быть вдруг и еще кого-нибудь), по много раз описанным здесь
причинам, то возникают некоторые проблемы (так же много раз здесь описанные), которые я и пытаюсь (частично) решить представленной тулзой.

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



ПС возникла идея добавить функционал генерации ликвибейсовских чейнджсетов, т.е. указываются объекты (их имена или критерии поиска), а на выходе
получается офрмленный чэйенджсет, возможно уже сохраненный в определенном месте репозитория с определенным именем и номером сверсии. А так же
связь между объектом и его чейнджсетами. Но над этим надо еще подумать.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38281884
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если работа с ИДЕ и полная зависимость от нее вас не устраивает (как меня и PSV100, а может быть вдруг и еще кого-нибудь), по много раз описанным здесь
причинам, то возникают некоторые проблемы (так же много раз здесь описанные), которые я и пытаюсь (частично) решить представленной тулзой

а где зависимость от ИДЕ. Альтерящий скрипт родился - хоть из среды, хоть из емакса страшного, и его надо засунуть.

или - новая версия полного криэйта объекта, написана ли рукой в емаксе или автовыгрузкой из базы родилась в ИДЕ, и ее надо засунуть.

Тулза по сути - структурированное хоронилище, в котором это рукописное или выгруженно-сформированное закопано.

Я не против, но слоган "Снимаю запои зависимость от ИДЕ" не кажется мне отражающим правду жизни....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38281895
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и да. Захороненное по файлам и папкам должно быть легко находимо и извлекаемо для нового редактирования.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282063
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovну и да. Захороненное по файлам и папкам должно быть легко находимо и извлекаемо для нового редактирования.
Это одно из ключевых свойств, причем нахождение для редактирования/просмотра не только по физическим параметрам (файлик такой-то, папка такая-то, время сохдания/изменения такое-то), но по логическим: "найти все таблицы из модуля <<<Заработная плата>>".
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282067
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovЯ не против, но слоган "Снимаю запои зависимость от ИДЕ" не кажется мне отражающим правду жизни....

Хороший слоган получился.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282087
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovну и да. Захороненное по файлам и папкам должно быть легко находимо и извлекаемо для нового редактирования.


Кстати, таки да. Если работать с исходниками, то лучше иметь какую-нибудь примочку а-ля sublime. IDE-DB обычно с исходниками толком не работают.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282089
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovа где зависимость от ИДЕ. Альтерящий скрипт родился - хоть из среды, хоть из емакса страшного, и его надо засунуть.

или - новая версия полного криэйта объекта, написана ли рукой в емаксе или автовыгрузкой из базы родилась в ИДЕ, и ее надо засунуть.


Во первых разница большая: в 1-м случае вы храните, а потом распоряжаетесь с ним как хотите, свой честно написанный скрипт, где есть форматирование и комментарии, который выполняет ровно столько сколько вы в нем написали. В сгенерированных же скриптах ни чего этого нет, комментарии съедаются, форматирование заменяется машинным, и плюс к этому сам код может серьезно видоизменится (например могут добавится или наоборот удалиться имена схем, параметры, которые определяются по дефолту от настроек системы при создании объекта, вплоть до изменения типов полей в create table, потому что видители ИДЕшный сборщик посчитал так лучше (сам натыкался на такое в ТОАД'е)). Да, безусловно, есть настройки генрации/отображения кода, но это все припарки. Т.е. это уже получится зомбо-скрипт, который за вас достали и собрали по винтикам со дна базы. Так зачем же до этого доходить если можно просто сохранить ваш собственный код создания объекта и работать конкретно с ним.
С другой стороны если разработчик работает полность с ГУИ, и его все устраивает, все работает, нареканий нет, то на здоровье.

Во вторых (я уже говорил об этом но повторюсь), ГУИ отображают несколько жестко заранее определенных типов объектов: в дереве объектов клацаем на табличку, там открывается список полей, затем на вкладках индексы, триггера, зависимые объекты, и вкладочка со свежесгенеренным исходным кодом, например "CREATE TABLE тра та та". Т.е. все жестко, ни в лево ни в право, никакого творчества. А во многих системах (крупнее средних) бывает что объекты (или некоторые из них) создаются не просто стандартным create'ом, а через какую либо обертку, или после создания их необходимо зарегистрировать в системе. Т.е. скрипт создания объекта "таблица" это уже не тупо "create", а более сложный код, а ИДЕ об этом ничего не знает, она может только достать результирующий CREATE и все. Причем в разных модулях одного приложения может быть разная политика, в одном мы шарашим таблицы на прямую, а в другом через обертку и т.д.. Так же возможны новые пользовательские типы объектов, например параметры, т.е. некий функционал для создания параметров в системе специальными процедурами.
Или если это система, основанная на EAV, то ИДЕ тут вообще бессильны, т.е. удобно хранить в версионнике некий сгруппированный набор скриптов для создания классов, объектов, параметров и т.д. Т.е. не просто набор всех инсертов, а например в этом файле скрипт создания класса "Дом", в этом класс "Автомобиль" и т.д. И работать с этим имхо горазд удобнее.

Vladimir BaskakovТулза по сути - структурированное хоронилище, в котором это рукописное или выгруженно-сформированное закопано.

Может и так, была у меня идея сделать такую иде (ну или что то похожее на иде), которая бы ничего не навязывала разработчику, и по максимуму использовала привычные, удобные и полюбившиеся разработчиками инструменты. Т.е. выбираем любой редактора кода (vi, emacs, jedit, может что-нибудь из полбившихся ИДЕ, что угодно), в качестве инструмента для навигации по объектам (дереву объектов) любой файловый менеджер (mc, far, nautilus, Проводник etc) ну и то же самое с дебагерами, форматерами и всем другим. Так же нет жестко заданных типов объектов, все настраиваемо. Причем эта иде не заменитель больших и взрослых ИДЕ, ее можно использовать параллелльно когда нужно, когда удобно, можно заскриптовать как надо.
Но это пока все мечты...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282093
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НПС возникла идея добавить функционал генерации ликвибейсовских чейнджсетов, т.е. указываются объекты (их имена или критерии поиска), а на выходе
получается офрмленный чэйенджсет, возможно уже сохраненный в определенном месте репозитория с определенным именем и номером сверсии. А так же
связь между объектом и его чейнджсетами. Но над этим надо еще подумать.

Максим, а как ты собрался автоматизировать составление операций для накатов? В общем случае это не так просто, например, нужно корректно выявлять операции переименования. Тут нужна IDE или страшный эмакс, которые протоколируют операции и формируют команды на основе истории.

Максим, пока ты не сформируешь чёткие концепции своего некоего фреймворка, возможные методики разработки БД, ты вряд ли найдешь какой-то поддержки. Те, кто работает с исходниками, те и будут с ними работать сами, как бы разрабатывая программу. Как у тебя нет доверия к ликвибэйсовским xml-командам, так и у них очень вероятно не будет доверия к какому-то шаблоно-конфигурируемому ненадёжному grep-у. Если кому-то нужно иметь разные гранты, разные данные и пр., то и будут всё программировать сами, в т.ч. могут и кодогенераторов задействовать (опять же, надёжно запрограммированных), или решать задачи за рамками скриптов и т.д.

Может есть смысл перенаправить энергию на свой альтернативный мигратор, если подумываешь об их поддержке. Кому-то XML не нравится. Вот здесь есть пример своего DSL, что-то подобное можно под джаву сделать. Кто-то накатывает через sql, используя какой-нибудь DbMaintain или dbdeploy и т.п. В любом случае всех можно приманить своим специфичным функционалом, что-то гибкое на счёт инвариантности выполнения операций. Подкрепить это дело каким-нибудь вьювером БД по мотивам SchemaSpy , который будет не только "правильно" показывать структуру БД, но и историю изменений и пр., плюс "правильно" извлекать DDL и др.
Или сделать мигратор по мотивам рубивских рельсов как здесь , но под джаву и плюс твои закладываемые широкие возможности, всё через джава-код.

P.S. У меня фантазии закончились.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282097
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НМожет и так, была у меня идея сделать такую иде (ну или что то похожее на иде), которая бы ничего не навязывала разработчику, и по максимуму использовала привычные, удобные и полюбившиеся разработчиками инструменты. Т.е. выбираем любой редактора кода (vi, emacs, jedit, может что-нибудь из полбившихся ИДЕ, что угодно), в качестве инструмента для навигации по объектам (дереву объектов) любой файловый менеджер (mc, far, nautilus, Проводник etc) ну и то же самое с дебагерами, форматерами и всем другим. Так же нет жестко заданных типов объектов, все настраиваемо. Причем эта иде не заменитель больших и взрослых ИДЕ, ее можно использовать параллелльно когда нужно, когда удобно, можно заскриптовать как надо.
Но это пока все мечты...


В рамках офтопа: Максим, если вдруг сделаешь IDE или плагин для vim/emacs/sublime/jedit для работы с SQL в стиле или с поддержкой xiki , при этом с поддержкой фишек Light Table (вывод связанного контекстного кода и "живая" отладка) - дай обязательно знать.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282229
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100В рамках офтопа: Максим, если вдруг сделаешь IDE или плагин для vim/emacs/sublime/jedit для работы с SQL в стиле или с поддержкой xiki , при этом с поддержкой фишек Light Table (вывод связанного контекстного кода и "живая" отладка) - дай обязательно знать.

ок.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282244
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н"найти все таблицы из модуля <<<Заработная плата>>".Таблица <<Персонал>> это "из модуля <<Заработная плата>>"? Или это "из модуля <<Кадры>>"? Или вообще - "<<Системные справочники>>"?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282659
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Максим, а как ты собрался автоматизировать составление операций для накатов? В общем случае это не так просто, например, нужно корректно выявлять операции переименования. Тут нужна IDE или страшный эмакс, которые протоколируют операции и формируют команды на основе истории.

Я сейчас думаю над этим вопросом, чуть позже отпишусь.


PSV100Максим, пока ты не сформируешь чёткие концепции своего некоего фреймворка, возможные методики разработки БД, ты вряд ли найдешь какой-то поддержки. Те, кто работает с исходниками, те и будут с ними работать сами, как бы разрабатывая программу. Как у тебя нет доверия к ликвибэйсовским xml-командам, так и у них очень вероятно не будет доверия к какому-то шаблоно-конфигурируемому ненадёжному grep-у. Если кому-то нужно иметь разные гранты, разные данные и пр., то и будут всё программировать сами, в т.ч. могут и кодогенераторов задействовать (опять же, надёжно запрограммированных), или решать задачи за рамками скриптов и т.д.

Согласен, я сам еще не все понимаю, но по мере работы и обсуждения что от складывается. Попробую это где то записать.
Да, сейчас это расширенный grep, но распознование объектов на основе регулярок я заяпрячу в отдельный модуль, если интере будет, то переделаю этот модуль для разборка текста, если нет, то лично мне и регулярок вполне хватит.

PSV100Может есть смысл перенаправить энергию на свой альтернативный мигратор, если подумываешь об их поддержке. Кому-то XML не нравится. Вот здесь есть пример своего DSL, что-то подобное можно под джаву сделать. Кто-то накатывает через sql, используя какой-нибудь DbMaintain или dbdeploy и т.п. В любом случае всех можно приманить своим специфичным функционалом, что-то гибкое на счёт инвариантности выполнения операций. Подкрепить это дело каким-нибудь вьювером БД по мотивам SchemaSpy , который будет не только "правильно" показывать структуру БД, но и историю изменений и пр., плюс "правильно" извлекать DDL и др.
Или сделать мигратор по мотивам рубивских рельсов как здесь , но под джаву и плюс твои закладываемые широкие возможности, всё через джава-код.

P.S. У меня фантазии закончились.


Делать свой мигратор пока не очень хочется (их и так много, разных, хороших), а вот интеграцию с готовыми это было бы круто. Т.е. тут нужно различать: миграторы это для динамики: версии, патчы, альтеры, изменения базы, а предполагаемая тулза, это как бы текущее состояние базы, а точнее не базы, а вашего бд-приложения .
На счет xml - это скорее всего временное решение, чтобы показать (в первую очередь самому себе), как это будет или может выглядеть. На счет вьювера это хорошая идея, были у меня поиски такой штуки, которая рисовала бы схему, не подключаясь к ней, а из DDL-исходников.
За порцию полезных ссылок отдельное спасибо.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282661
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovМаксим Н"найти все таблицы из модуля <<<Заработная плата>>".Таблица <<Персонал>> это "из модуля <<Заработная плата>>"? Или это "из модуля <<Кадры>>"? Или вообще - "<<Системные справочники>>"?
А это как вы сами настроете, можете поместить ее в некий базовый модуль, от которого зависят и <<Заработная плата>> и <<Кадры>> и может быть даже <<Системные справочники>>.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282694
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НА это как вы сами настроете, можете поместить ее в некий базовый модуль, от которого зависят и <<Заработная плата>> и <<Кадры>> и может быть даже <<Системные справочники>>.Я, вообще-то, другой вопрос задал, но если вы не поняли, то повторю: что является признаком принадлежности таблицы модулю?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282725
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovМаксим НА это как вы сами настроете, можете поместить ее в некий базовый модуль, от которого зависят и <<Заработная плата>> и <<Кадры>> и может быть даже <<Системные справочники>>.Я, вообще-то, другой вопрос задал, но если вы не поняли, то повторю: что является признаком принадлежности таблицы модулю?

Пока планируется на основе правил, т.е. по имени папок, файлов, выделение части файлов комментариями и т.д.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Все или. ..или. ..
Если по папкам то не выйдет 1 таблица на 2 модуля или 1 таблица в одном скрипте общем ещё с чем нибудь.
Потом, бд - это бд. А модули это БЛ.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282869
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НДелать свой мигратор пока не очень хочется (их и так много, разных, хороших), а вот интеграцию с готовыми это было бы круто. Т.е. тут нужно различать: миграторы это для динамики: версии, патчы, альтеры, изменения базы, а предполагаемая тулза, это как бы текущее состояние базы, а точнее не базы, а вашего бд-приложения.

[...]

А это как вы сами настроете, можете поместить ее в некий базовый модуль, от которого зависят и <<Заработная плата>> и <<Кадры>> и может быть даже <<Системные справочники>>.


Я рекомендую смоделировать реальную задачу, оценить, что и как можно сделать с планируемой утилитой в паре с каким-то мигратором, например, liquibase и dbmaintain (как представитель тех, кто работает через прямой sql). Представить, что имеются разные БД, где может быть "Заработная плата", "Кадры", "Системные справочники", все вместе или что-то скомбинировано, причём состав "справочников" зависит от состава зависимых модулей. В каждом случае могут быть разные загружаемые данные и пр., если пойти дальше, то и разный функциональный состав модуля, где и структуры таблиц могут отличаться, инварианты кода процедур и т.д. Оценить для себя, на основе какой методологии вести набор исходников, как их лучше организовать, нужны или нет, скажем, "create-"операторы для тех же таблиц согласно их последней текущей версии и т.д. и т.п.

При этом нужно спроектировать логику накатов. Например, при внесении изменений в "справочники" требуется освобождение зависимостей от элементов в модулях. Нужно делать проверки, имеется ли в БД такой-то модуль, если да, то предварительно удаляем там вторичные ключи, к примеру (что-то можно понять на основе метаданных в БД, но могут потребоваться свои специфичные вычисления в модулях). Затем система должна понимать, что всё нужно восстановить, и скорее всего, связанные элементы тоже будут "отрефакторенные", т.е. в новой версии. После некоторой разработки появляется новый прикладной модуль, соответственно об этом модуле ранее зафиксированные инструкции для накатов ещё не знали. В общем, и т.д.

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

На счёт своих подходов для решения подобных задач я уже в двух словах писал. В качестве альтернативы, имхо, есть потенциал у "рельсовых" накатов, т.е. система "create/drop/up/down" через сам java-код, ссылки на примеры давал в постах выше. Как раз в контекст твоей темы DB specific ORM . Т.е. возможен некий фреймворк, как поддержка типовых ORM, где через программный код будет управление объектами СУБД, плюс поддержка sql-скриптов (как минимум, там будет код процедур и т.п.), плюс широкие гибкие возможности для операций, плюс генерация скриптов, и т.д.

Максим ННа счет xml - это скорее всего временное решение, чтобы показать (в первую очередь самому себе), как это будет или может выглядеть.

Если говорить об инструменте широкого применения в массах, то как бы XML сбрасывать со счетов преждевременно. Он не удобен для редактирования, но для него есть куча инструментов и программных библиотек, в редакторах/IDE нормальная поддержка с автокомплитом (если задана схема, чего может не быть у json, yaml и пр.). Если свой DSL, то либо это должна быть признанная технология, для которой даже в Идее есть поддержка из коробки, или очень простой DSL, для которого и блокнота хватит, особенно, если нет потребности постоянной работы с ним.

В принципе, ещё можно задекларировать всеобщую универсальность, якобы с продуктом будут работать не только спецы из java. Есть смысл сделать DSL а-ля в стиле апачевских конфигураций, подобные вещи популярны в юниксах. И если открыть файл с расширением ".conf" в каком-нибудь редакторе, то как минимум там будет какая-то раскраска кода.

Кстати, есть болезнь у java-разработчиков. Говорят, мол пользуйтесь кто угодно, но тут же в настройках, например, требуют задавать шаблоны строк так, как они будут переданы в JDBC для подключения. Человеку приходится разбираться, чего это такое, вникать в "драйвера" и пр. (даже если дополнительно ничего не нужно ставить).
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282881
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Потом, бд - это бд. А модули это БЛ.


Возможно, но группировать объекты каким-либо образом это неплохая идея. Например на одной моей работе была файербердная база (где как вы знаете дела со схемами обстоят несколько по другому чем в Oracle, Postgresql etc) при открытии ветки "Stored procedures" (или как она там называется) на тебя вываливается 4000+ хранимок, в ветка "Tables" несколько сотен табличек и разобраться что к чему бывало оочень сложно. Я уже молчу про количество триггеров, индексов, констрейнтов и генераторов. Иногда в таких случаях добавляют префиксы с именем модуля, в котором они используются, но это тоже не панацея, и самые настоящие костыли, страдает читаемость объектов и их переносимость из одного модуля в другой. А вот храня исходники в СКВ можно решить эту проблему более красиво. Как именно лучше я пока думаю.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38282901
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Я рекомендую смоделировать реальную задачу, оценить, что и как можно сделать с планируемой утилитой в паре с каким-то мигратором, например, liquibase и dbmaintain (как представитель тех, кто работает через прямой sql). Представить, что имеются разные БД, где может быть "Заработная плата", "Кадры", "Системные справочники", все вместе или что-то скомбинировано, причём состав "справочников" зависит от состава зависимых модулей. В каждом случае могут быть разные загружаемые данные и пр., если пойти дальше, то и разный функциональный состав модуля, где и структуры таблиц могут отличаться, инварианты кода процедур и т.д. Оценить для себя, на основе какой методологии вести набор исходников, как их лучше организовать, нужны или нет, скажем, "create-"операторы для тех же таблиц согласно их последней текущей версии и т.д. и т.п.

При этом нужно спроектировать логику накатов. Например, при внесении изменений в "справочники" требуется освобождение зависимостей от элементов в модулях. Нужно делать проверки, имеется ли в БД такой-то модуль, если да, то предварительно удаляем там вторичные ключи, к примеру (что-то можно понять на основе метаданных в БД, но могут потребоваться свои специфичные вычисления в модулях). Затем система должна понимать, что всё нужно восстановить, и скорее всего, связанные элементы тоже будут "отрефакторенные", т.е. в новой версии. После некоторой разработки появляется новый прикладной модуль, соответственно об этом модуле ранее зафиксированные инструкции для накатов ещё не знали. В общем, и т.д.

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

Хорошая идея. В том и дело, что описанные тобой вопросы не имеют каких либо стандартных комплексных решений (по крайней мере я не нашел, и занимаюсь поиском до сих пор). Каждый разработчик, каждый коллектив справляется с ними самостоятельно, изобретая свои методики, инструменты, утилиты или пытаясь приспособить для этого гуевые идешки, у которых несколько другое назначение.

Маленький офф:
Когда я занимался Файербердом, то как раз нехватало какой либо базы, фреймворка, который бы поддерживал хранимый код, сбор версий ну и т.д. Перейдя на Оракл, я был практически уверен, что уж там это все решено, есть готовые программы и утилиты для комплексного решения указанных проблем, но через некоторое время понял что это не так.
Вроде как в Каше с этим дело обстоит полуше, где все элементы группируются по логическим модулям (проектам) (причем один элемент может быть в нескольких модулях), затем их можно выгрузить в xml и настроить интеграцию с СКВ.


PSV100На счёт своих подходов для решения подобных задач я уже в двух словах писал. В качестве альтернативы, имхо, есть потенциал у "рельсовых" накатов, т.е. система "create/drop/up/down" через сам java-код, ссылки на примеры давал в постах выше. Как раз в контекст твоей темы DB specific ORM. Т.е. возможен некий фреймворк, как поддержка типовых ORM, где через программный код будет управление объектами СУБД, плюс поддержка sql-скриптов (как минимум, там будет код процедур и т.п.), плюс широкие гибкие возможности для операций, плюс генерация скриптов, и т.д.

Да, это хорошая идея, мечта, но возможно уже для какого-то другого инструмента/фреймворка...
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38283304
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТ.е. скрипт создания объекта "таблица" это уже не тупо "create", а более сложный код, а ИДЕ об этом ничего не знает, она может только достать результирующий CREATE и все. Причем в разных модулях одного приложения может быть разная политика, в одном мы шарашим таблицы на прямую, а в другом через обертку и т.д.. Так же возможны новые пользовательские типы объектов, например параметры, т.е. некий функционал для создания параметров в системе специальными процедурами.
Ну да. шарашили и тако, и сяко, занимаясь разработкой под ОЕБС. В оракловой среде все равно скармливался готовый криэйт.
Ну и ничего не мешало написать простенький pl-sql код который отгружает из слоя метаданных базы и системы то и так, что и как надо. Применяли автогенерацию пакетов и представлений. Трудились в pl-sql developer-e .......

Максим,а Вы под какой сервер БД разрабатываете?
а то вот есть такое.
http://ru.wikipedia.org/wiki/Oracle_SQL_Developer
- халявное, плагинорасширяемое.....

Oracle SQL Developer изначально поддерживает работу с Oracle Database, существуют плагины, обеспечивающие подключение из среды к другим системам управления базами данных, в частности, реализован доступ к IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Sybase ASE, Teradata Database[1].
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38283343
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НВозможно, но группировать объекты каким-либо образом это неплохая идея. Например на одной моей работе была файербердная база (где как вы знаете дела со схемами обстоят несколько по другому чем в Oracle, Postgresql etc) при открытии ветки "Stored procedures" (или как она там называется) на тебя вываливается 4000+ хранимок,
- ну а у тебя вывалится 4000 файлов? Уж проще назвать по имени модуля-прекфикс. Раз БД не поддерживает пакеты.
- учитывай, что хранимки Должны принадлежать модулю. А таблицы не обязаны (таблица Города).
Т.к. у вас крайности....то мы всё делаем очень гибко и настраиваемо....то наоборот - жёстко задано по папкам.
А это ключевой вопрос.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38283624
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovМаксим,а Вы под какой сервер БД разрабатываете?
а то вот есть такое.
http://ru.wikipedia.org/wiki/Oracle_SQL_Developer
- халявное, плагинорасширяемое.....

Oracle SQL Developer изначально поддерживает работу с Oracle Database, существуют плагины, обеспечивающие подключение из среды к другим системам управления базами данных, в частности, реализован доступ к IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Sybase ASE, Teradata Database[1].

Oracle.
Девелопером как раз и пользуюсь, обычная ИДЕ со всеми минусами, которые здесь были описаны, эйфории не испытываю (немного работал с Тоадом и PSD, но там еще все хуже), поэтому последнее время все больше отдаю предпочтение текстовику (vim/jedit) + sqlplus, но чтобы полностью перейти пока скилов не хватает.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38283776
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- ну а у тебя вывалится 4000 файлов? Уж проще назвать по имени модуля-прекфикс. Раз БД не поддерживает пакеты.

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


Petro123- учитывай, что хранимки Должны принадлежать модулю. А таблицы не обязаны (таблица Города).
Т.к. у вас крайности....то мы всё делаем очень гибко и настраиваемо....то наоборот - жёстко задано по папкам.
А это ключевой вопрос.
Разбиение по папкам это только один из вариантов. Сейчас пытаюсь сделать механизм для описания структуры, т.е. модуль "ЗП" находится в таких то файлах, в таких то папках, в текстовых блоках таких то и т.д. Не знаю насколько это будет практично, но попробовать стоит.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38283981
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НС файлами приятнее и естественнее работать... пока их не требуется группировать по разным критериям.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38283999
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НВозможно, но группировать объекты каким-либо образом это неплохая идея. Например на одной моей работе была файербердная база (где как вы знаете дела со схемами обстоят несколько по другому чем в Oracle, Postgresql etc) при открытии ветки "Stored procedures" (или как она там называется) на тебя вываливается 4000+ хранимок, в ветка "Tables" несколько сотен табличек и разобраться что к чему бывало оочень сложно. Я уже молчу про количество триггеров, индексов, констрейнтов и генераторов. Иногда в таких случаях добавляют префиксы с именем модуля, в котором они используются, но это тоже не панацея, и самые настоящие костыли, страдает читаемость объектов и их переносимость из одного модуля в другой. А вот храня исходники в СКВ можно решить эту проблему более красиво. Как именно лучше я пока думаю.

[...]

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


Отсутствие явных "shema/user/owner" в FireBird связано с такой целевой организацией физического устройства БД, что даёт как и некоторые удобства, так и недостатки, в т.ч. и технические - желательно на одном сервере одновременно манипулировать меньшим количеством баз, "кросс-базные" запросы (в т.ч. между любыми серверами) пока на уровне динамического sql. Короче говоря, действительно требуется для оптимальности держать всё необходимое внутри одной базы, где существует уникальность имён (но у FireBird-а есть другие приятные архитектурные решения, как явное понятие доменов, для одного физического подключения можно иметь более одной транзакции и пр.). И действительно на практике не редки имена вида "FOO_BAR" или "FooBar" вместо Foo.Bar или [Foo].[Bar] (кстати, через префикс иногда проще автокомплит использовать). Какие-то логические надстройки модульности, имхо, когда-то реализуют (в следующей версии вроде будут "пакеты"). Но речь не про FireBird. Те же "схемы" во "взрослых" серваках, фактически, преподносятся как "логические" относительно независимые БД внутри одной большой физической (в "инстансе" сервера). Но через них вполне могут косвенно выражать логическое построение модульной большой базы. Плюс пакеты или аналоги (если есть) внутри "схемы" тоже выражают относительную модульность. Косвенно или относительно потому, что не все связи явно декларируются (между схемами, между таблицами и пакетами и пр.), сервер после выполнения sql при создании объектов устанавливает связи, до которых обычно можно добраться через метасистему. Но тем не менее, в немалых случаев этого механизма как-то хватает, кому-то м.б. удобнее чуть ли не для каждого "справочника" лепить свою "схему", кому-то проще свалить всё в кучу и не морочить голову (тем более, что чем "пухлее" база, тем "ынтырпрайзнее", больше имитация деятельности и т.д.).

Но я хочу сказать, что ты опять не дооцениваешь IDE. В том же IBExpert есть понятие "проектов" внутри БД, где в каждом проекте можно задать свой состав объектов (плюс имеется "быстрый" фильтр для поисков), распределять проекты по разработчикам, он может вести историю модификации структуры БД (и много чего ещё). Через эти проекты вполне неплохо можно организовать "модульность", особенно учитывая потенциал у IBEScript для "программирования". Конечно, назвать IBExpert общим случаем в рамках всех IDE-DB как-то нельзя, но основное, чего хочу выразить, это то, что и на IDE при необходимости можно реализовать относительно (!) "гибкий" функционал, который может меньше нагибать, чем возня с исходниками. Те же ER-модели на общем глобальном уровне не выкинешь. Кому-то действительно удобно работать через них в соответствующих проектах, где-то корпоративные формальности и пр. Если делать реинженеринг, формировать схемы на основе БД, то обычно их всё равно шлифовать напильником, вполне м.б. проще их сначала создавать и потом "исполнять" (тот же IBExpert чего-то рисует, если не ошибаюсь, то ранее указанный SchemaSpy тоже как-то генерит схемки вроде бы через Graphviz , примеры его использования можно подсмотреть в org-mode, например, здесь ).

Я согласен с тем, что в мейнстриме нет единой методики и технологий, и инструментов, фактически, для всего (с проектированием, моделированием, да и программированием далеко не всё радужно). Единой "Р-технологии" уже не будет. Тут даже нет единой IDE, тот же Эклипс так и не стал новым эмаксом. Да и в текстовых редакторах тоже фигни хватает (vim - нет вменяемого, а ведь реально удобного, множественного редактирования, vim-multiedit или vim-multicursor - совсем не то. Emacs - его внутренняя архитектура и лисп-машина уж очень специфичные, что до сих пор нет нормального вывода номеров строк, без тормозов, из-за evil могут не работать некоторые расширения, и, в целом, он может элементарно раздражать мерцанием при прокрутке, особенно при тёмной теме. JEdit - по юзабилити он уже хромает, хотя у него хороший потенциал, но требует много переделок и новых фишек, а им уже слабо занимаются, хотя приятно то, что хоть ключевые раздражители убирают, как проблемы с очень длинными строками. Плюс свинг, его хоть и можно раскрасить в тона цветовой текстовой схемы, чтобы не было резких "перекосов" между светлыми/тёмными элементами интерфейса и панелью с текстом (например, через NimROD ), но проблемы со шрифтами имеются, хоть в последние времена и меньше. Sublime - не такой уж он и быстрый, у него хватает архитектурных недочётов, например, аналог EasyMotion в vim-е или ace-jump-mode в emacs-е фиг сделаешь, имеющийся Volcanoes совсем не то, а это элементарное удобство, после которого хочется vimperator/pentadactyl в каждом софте иметь. Короче говоря, нет и "идеального" редактора).

Далее, я до конца не понимаю, как только благодаря СКВ или в рамках исходников делать такие операции, как что-то переносить в другой модуль, переименовать, удалять и т.д. (речь не идёт о текущем рабочем процессе разработки, где пока ещё не сформирована "версия"). Ведь в большинстве случаев для этого требуется и саму БД "рефакторить", тут как раз обученные IDE иногда чем-то могут помочь (или плагины в редакторах/IDE и пр. костыли), но, как правило, они действительно не рефакторят исходники. Тут опять же проще тем, кто просто "дампит" БД - слил, и исходники готовы. Конечно, приятно, когда всё "автоматизировано".
Короче говоря, это не просто где-то что-то переименовали в файлах, или чего-то удалили, но и составление alter-ов и пр. операций, фиксация этих фактов и т.д.

В общем, я о том, что м.б. некие супер-универсальные сверхширокие закладываемые возможности не такие уж и универсальные, больше надуманные, или их "автоматизация" может приводить к ещё большему гемору. Собственно, пока только виднеется основной функционал - это гибкая сборка проектов. Но, откровенно говоря, если бы я сейчас решал такую задачу при таком твоём подходе (в т.ч. и без разбора SQL), то попробывал бы порешать, например, через какой-то шаблонизатор, типа FreeMarker-а, Velocity и т.п., или взял бы а-ля Cog, если "PHP-лапша" не подходит (а она действительно не очень здесь к месту). Т.е. зная структуру своих исходников (а точнее, правильно бы её построил), сам "в лоб" запрограммировал бы извлечение файлов и формирование скриптов под свои конкретные потребности (кстати, вроде бы мигратор dbdeploy чего-то там генерит через FreeMarker).

И, кстати, всё таки работать с 4000+ файлами то же не очень так, даже при наличии а-ля goto в Sublime, i-do и пр. многообразие в эмаксе, CtrlP в виме и т.д. Лично я собираюсь уйти от этой практики, стараться собирать объекты по подмодулям (в т.ч. и "текстовые перемещения" будут больше перенесены внутри файла).

Как-то так.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38284177
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НVladimir BaskakovМаксим,а Вы под какой сервер БД разрабатываете?
а то вот есть такое.
http://ru.wikipedia.org/wiki/Oracle_SQL_Developer
- халявное, плагинорасширяемое.....

Oracle SQL Developer изначально поддерживает работу с Oracle Database, существуют плагины, обеспечивающие подключение из среды к другим системам управления базами данных, в частности, реализован доступ к IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Sybase ASE, Teradata Database[1].

Oracle.
Девелопером как раз и пользуюсь, обычная ИДЕ со всеми минусами, которые здесь были описаны, эйфории не испытываю (немного работал с Тоадом и PSD, но там еще все хуже), поэтому последнее время все больше отдаю предпочтение текстовику (vim/jedit) + sqlplus, но чтобы полностью перейти пока скилов не хватает.

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

А добрая среда подскажет. Это не вопрос квалификации. Опять же - ошибки при компиляции пакета. Ошибки при исполнении одиночных операторов. Прямо подсвечивает - где.

Жедит.... нууу.... а что в нем такого веселого. Чего нету в текстовом редакторе девелопера.
Хочется джавского и малофункционального - так оракл же скуль-девелопер поклал?

То что в средах можно выгрузить текстовку на создание или модификацию объекта ни к чему не обязывает. Совсем. то есть вообще.

В опенсорсных редакторов из плюсов только поиск регекспами.... кто ими конечно умеет...

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

Не стоит комплексовать перед великими мастерами прошлого писавшими в Teco. У них просто ничего удобнее не было, а потом они так привыкли, так привыкли....

Но дело конечно вкуса. Ну вим у меня стоит, но пользуюсь им почти никак.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38284381
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Те же "схемы" во "взрослых" серваках, фактически, преподносятся как "логические" относительно независимые БД внутри одной большой физической (в "инстансе" сервера). Но через них вполне могут косвенно выражать логическое построение модульной большой базы. Плюс пакеты или аналоги (если есть) внутри "схемы" тоже выражают относительную модульность. Косвенно или относительно потому, что не все связи явно декларируются (между схемами, между таблицами и пакетами и пр.), сервер после выполнения sql при создании объектов устанавливает связи, до которых обычно можно добраться через метасистему. Но тем не менее, в немалых случаев этого механизма как-то хватает, кому-то м.б. удобнее чуть ли не для каждого "справочника" лепить свою "схему", кому-то проще свалить всё в кучу и не морочить голову (тем более, что чем "пухлее" база, тем "ынтырпрайзнее", больше имитация деятельности и т.д.).

Согласен, схемы, пакеты и прочие радости это здорово, но не во всех СУБД имеются, так же они не поддерживают того (о чем не раз говорили здесь) что один объект может принадлежать нескольким схемам. Так же нет возможности организовать иерархическую структуру объектов/модулей.
Так же не будем забывать (о чем я уже не раз писал), что по мимо предопределенных объектов (tables, views, procedures etc) могут быть еще пользовательские объекты, т.е. что то специфичное, и это далеко не редкость.
Особенно если приходится иметь дело с EAV, в котором несколько тысяч типов объектов (классов).


PSV100Но я хочу сказать, что ты опять не дооцениваешь IDE. В том же IBExpert есть понятие "проектов" внутри БД, где в каждом проекте можно задать свой состав объектов (плюс имеется "быстрый" фильтр для поисков), распределять проекты по разработчикам, он может вести историю модификации структуры БД (и много чего ещё). Через эти проекты вполне неплохо можно организовать "модульность", особенно учитывая потенциал у IBEScript для "программирования". Конечно, назвать IBExpert общим случаем в рамках всех IDE-DB как-то нельзя, но основное, чего хочу выразить, это то, что и на IDE при необходимости можно реализовать относительно (!) "гибкий" функционал, который может меньше нагибать, чем возня с исходниками. Те же ER-модели на общем глобальном уровне не выкинешь. Кому-то действительно удобно работать через них в соответствующих проектах, где-то корпоративные формальности и пр. Если делать реинженеринг, формировать схемы на основе БД, то обычно их всё равно шлифовать напильником, вполне м.б. проще их сначала создавать и потом "исполнять" (тот же IBExpert чего-то рисует, если не ошибаюсь, то ранее указанный SchemaSpy тоже как-то генерит схемки вроде бы через Graphviz, примеры его использования можно подсмотреть в org-mode, например, здесь).

IBExpert отличная вещь, может если бы что то похожее было для Oracle я бы и не стал заморачиваться.
Но он заточен под конкретную СУБД.
Есть еще серьёзнейшие, проверенные и уважаемые решения такие как TOAD и PSD, но лично мне они не подходят, можно сказать личная несовместимость, хоть убей, хотя с каждым из них я пробовал работать, пробовал заставить себя, но безрезультатно.


PSV100Далее, я до конца не понимаю, как только благодаря СКВ или в рамках исходников делать такие операции, как что-то переносить в другой модуль, переименовать, удалять и т.д. (речь не идёт о текущем рабочем процессе разработки, где пока ещё не сформирована "версия"). Ведь в большинстве случаев для этого требуется и саму БД "рефакторить", тут как раз обученные IDE иногда чем-то могут помочь (или плагины в редакторах/IDE и пр. костыли), но, как правило, они действительно не рефакторят исходники. Тут опять же проще тем, кто просто "дампит" БД - слил, и исходники готовы. Конечно, приятно, когда всё "автоматизировано".
Короче говоря, это не просто где-то что-то переименовали в файлах, или чего-то удалили, но и составление alter-ов и пр. операций, фиксация этих фактов и т.д.

На счет выкидывания IDE я ничего не говорил, и отказываться от них я не призываю. И сам их использую и буду использовать.
Кстати, никто не запрещает из ИДЕ открыть исходник из СКВ и работать с ним, причем многие (правда не все) плюшки при этом сохранятся. Никто не мешает накатить нужные пакеты/процедуры на текущую рабочую базу и работать во строенном редакторе, а потом слить их обратно.
Кстати есть одна интересная ИДЕ , ксати на базе vim'а, работающая в текстовом режиме, и использующая в качестве sql-экзекутора старый добрый sqlplus. Правда ее "рубиновость" многих отталкивает. Можно открывать файлы-исходники, можно воспользоваться встроенным "выковыривателем" кода и править на живую, ну и тут же настраиваемый автокомплит и все плагины вима.


PSV100Далее, я до конца не понимаю, как только благодаря СКВ или в рамках исходников делать такие операции, как что-то переносить в другой модуль, переименовать, удалять и т.д. (речь не идёт о текущем рабочем процессе разработки, где пока ещё не сформирована "версия"). Ведь в большинстве случаев для этого требуется и саму БД "рефакторить", тут как раз обученные IDE иногда чем-то могут помочь (или плагины в редакторах/IDE и пр. костыли), но, как правило, они действительно не рефакторят исходники. Тут опять же проще тем, кто просто "дампит" БД - слил, и исходники готовы. Конечно, приятно, когда всё "автоматизировано".
Короче говоря, это не просто где-то что-то переименовали в файлах, или чего-то удалили, но и составление alter-ов и пр. операций, фиксация этих фактов и т.д.
Тут я тоже пока не могу пояснить, но больших проблем не вижу, ИДЕ всегда под рукой, и это таки основной инструмент разработчика.


PSV100В общем, я о том, что м.б. некие супер-универсальные сверхширокие закладываемые возможности не такие уж и универсальные, больше надуманные, или их "автоматизация" может приводить к ещё большему гемору. Собственно, пока только виднеется основной функционал - это гибкая сборка проектов. Но, откровенно говоря, если бы я сейчас решал такую задачу при таком твоём подходе (в т.ч. и без разбора SQL), то попробывал бы порешать, например, через какой-то шаблонизатор, типа FreeMarker-а, Velocity и т.п., или взял бы а-ля Cog, если "PHP-лапша" не подходит (а она действительно не очень здесь к месту). Т.е. зная структуру своих исходников (а точнее, правильно бы её построил), сам "в лоб" запрограммировал бы извлечение файлов и формирование скриптов под свои конкретные потребности (кстати, вроде бы мигратор dbdeploy чего-то там генерит через FreeMarker).

Разбор SQL я планирую (если не заброшу все это дело)) ), но пока временно заменяю его регулярками. Что то наподобие шаблонизатора проекта (кстати, первое более менее подходящее определение для обсуждаемой тулзы) у меня и получается, но помимо того чтобы собирать по шаблону, было бы здорово еще предоставить функционал поддержки и контроля такого шаблона.
Т.е. смысл в основном в этом. Это не замена ИДЕ, вским дорогим и профессиональным инструментам, ни в коем случае. Чтобы ее использовать не нужно в корне менять подход к разработке БД, технологию т.д. Т.е. если вы работаете с исходниками, то она может быть (а может и не быть) полезной.

Хотя, с другой стороны, я и сам до конца не уверен, в необходимсоти, в обоснованности и т.д. это просто сейчас пребываю на волне позитива, но боюсь это не надолго ))
Вариант с ГУИ всем хорошо известен, его минусы и плюсы, а вот подход с обратной стороны, со стороны исходников достаточно мало освещен, и о нем возможно только догадываться. Вот и было бы здорово попробовать его на деле, так сказать в бою, ну а потом уже с чистой совестью и практически обоснованно сказать: "да это не то, потомучто возникли такие то и такието неразрешимые трудности", и вернутсья в лоно ГУИ ИДЕ. Так сказать исследовательский интерес.


PSV100И, кстати, всё таки работать с 4000+ файлами то же не очень так, даже при наличии а-ля goto в Sublime, i-do и пр. многообразие в эмаксе, CtrlP в виме и т.д. Лично я собираюсь уйти от этой практики, стараться собирать объекты по подмодулям (в т.ч. и "текстовые перемещения" будут больше перенесены внутри файла).

Про 4000 файлов я опять же ничего не говорил. Теоретически все эти объекты можно поместить в один файл, ну или в несколько, разбив по модулям, уровням, слоям и т.д. А вот ИДЕ (по крайней мере, с которыми я работаю) такого предложить не могут: раз 4000 объектов, то получи их все в дереве, выковыривай и целься мышкой по маленькому значку, чтобы начать редактирование. Можно использовать навигацию по названию, набрав первые буквы, но опять же его (название) нужно помнить и отфильтровывать от похожих.


Остался как минимум один не рассмотренный вопрос - это возможность скриптования, автоматизации и интеграции с другими инструментами, чем ГУИ не могут похвастаться, да наверное и не должны, т.к. цели у них другие.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38284385
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovтак а зачем эйфория. Это же не косяк, чтобы настроение улучшать. Оно же кучу подсказок дает, код автоформатирует, макросы клавиатурные. Сниппеты. Код фолдит. С оракловой справкой интегрируется и работает.
Но это уже кому как и когда удобно, если разработка пакета/процедуры/триггера, то конечно удобно, но если мне нужно по быстрому таблицу накидать тестовую или чего нибудь подправить, накатить на несколько баз, запустить тесты и т.д. и т.п., то тут подойдет что-нибудь полегче. Т.е. вопрос предпочтений.

Vladimir BaskakovЛучше извлекать максимум пользы из отлаженного инструментария, полностью изучив и задействовав все его возможности, и смирившись с некоторыми недостатками, чем городить велосипедарищще, где плюшек будет в итоге намного меньше, а багов и ограничений - существенно больше.
Ну отлаженный инструмент он опять же у каждого свой (вспомните знаменитый баян про Т.Кайта, sqlplus и vim).
Ну и плюс планируемый велосипедарищще все таки не для работы с текстом предназначен, это не текстовый редактор, он может достать вам исходный код для редактирования, сохранить его в нужное место и т.д.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38284386
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovМаксим НС файлами приятнее и естественнее работать... пока их не требуется группировать по разным критериям.

Вот с этим могут быть проблемы, но не больше чем в гуи иде.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38284699
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор раз 4000 объектов, то получи их все в дереве, выковыривай и целься мышкой по маленькому значку
беда. А что, кнопочка с биноклем совсем не работает? Которая фулл-текст-серч. И вкладочка любимых(кто последний того и любим. кого больше всего любим того и используем чаще) объектов. Их же не 4000?
А чем кстати утилита помогает находить 1 из 4000 текстов, будь он в одном файле с другими объектами, или в своем индивидуальном. Юзкейс какой - как происходит работа с утилитой.
Ну вот у меня открыты вим и фар-манагер. или просто фар-манагер с подсветкой синтаксиса.
и чего дальше происходит. вот мне надо вспомнить по имени одного из 4000, найти, поменять и покласть заново на место.

в пиэль эскуэль девелопере есть проекты. Взяли и открыли - набор скриптов, процедур, пакетов..... наслаждаемся.....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38284706
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот с этим могут быть проблемы, но не больше чем в гуи иде.
но ведь данный тезис полностью ломает твою утилиту и сабж.
Это логика.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38285755
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НIBExpert отличная вещь, может если бы что то похожее было для Oracle я бы и не стал заморачиваться.
Но он заточен под конкретную СУБД.
Есть еще серьёзнейшие, проверенные и уважаемые решения такие как TOAD и PSD, но лично мне они не подходят, можно сказать личная несовместимость, хоть убей, хотя с каждым из них я пробовал работать, пробовал заставить себя, но безрезультатно.


На всякий случай, есть ещё всякие универсальные IDE, как Aqua Data Studio или SQuirreL (плюс плагины), у них какие-то элементы могут быть лучше, но, в целом, проработка не такая глубокая, как у придворной IDE.

Максим НТак же не будем забывать (о чем я уже не раз писал), что по мимо предопределенных объектов (tables, views, procedures etc) могут быть еще пользовательские объекты, т.е. что то специфичное, и это далеко не редкость.
Особенно если приходится иметь дело с EAV, в котором несколько тысяч типов объектов (классов).

А какие это специфичные объекты, особенно при EAV? В моём понимании, если говорить о разработке на SQL, то все "объекты" и код и должны быть около SQL, чтобы ими могли оперировать используемые инструменты. Например, в том же IBExpert есть sql-расширения, которые можно оформлять в свои блоки (а-ля "процедуры"), для этого есть их поддержка в IDE, в т.ч. и секции в "дереве объектов" (плюс консольные утилиты и dll-библиотека для исполнения всего sql). Ещё в одном SQL Workbench/J есть куча своих встроенных команд (для экспорта/импорта данных, сравнения и т.д., кстати, посмотри, он вроде бы как-то работает с Liquibase, но не помню чего именно), но, при работе с тем же оракловом девелопером эти команды или эту утилиту вряд ли будут использовать. Я хочу сказать, что те, кто работает с IDE будут максимально упрощать свою работу. Если даже нужен немалый дамп данных как "insert ..." где-то применять, то его всё равно запросто (ибо так проще) смогут оформить как стандартный блок кода или чего там есть в IDE, и выгружать когда нужно. Короче говоря, для них IDE предопределяет структуру проектов, взаимосвязь между объектами и т.п. И если нужна какая-то модульность, то будут оперировать стандартными средствами, теми же "схемами" или в рамках проектов (если IDE позволит). Если есть необходимость в дополнительной возни со скриптами (а она, всё таки, часто и есть), то они согласны пережить этот гемор (для них меньший по сравнению с тем, если бы работали вне IDE). Тут как раз можно помочь удобным продвинутым создавателем дампов или скриптов, о котором как-то говорилось раньше. В т.ч. круто, когда для конкретной IDE есть, скажем доставалка данных из её истории для того же Liquibase, ну и прочие скрипты.

А в общем случае, если задача уже не решается в рамках широких sql-команд и пр. кода (или когда нет возможности из sql при необходимости вызывать внешние утилиты, анализировать результаты, ну и пр.), то уже вынуждены решать вопросы за рамками скриптов, после накатов, к примеру, будут другие запускать питоновские скрипты или те же джарники и т.д.

Теперь о тех, кто работает в текстовых редакторах или в не-DB IDE. По своему опыту. Так специфика сложилась, что именно с FireBird-ом у нас самые геморные проекты. Под другие СУБД гораздо меньше мороки и вынуждены работать в типовых придворных IDE, и даже миграторы не используются, все скрипты готовятся ручками и исполняются. Под FireBird в текстовом редакторе работать заставил, прежде всего, препроцессор. Плюс там же реализована "IDE" под свой DSL для проектов. Плюсы редакторов. Это попытка уменьшить количество одновременно используемых разных IDE/редакторов, где разные раскладки клавиш (особенно весело переключаться часто между вим-управлением и другим), нет возможности везде оформить хотя бы более-менее идентично раскраски кода, не говоря уже о разных самих редакторах кода и т.д. и т.п. Текстовые редакторы, в целом, для тех, кто это прочувствовал, имеют более удобную организацию среды для работы, гибкую, мощную, без лишнего информационного и интерфейсного шума, позволяющую эффективно работать через клавиатуру без дёрганий к мыши и нормально работать мышью, когда активно не печатаешь, а что-то рассматриваешь, изучаешь и т.д. Плюс сам по себе редактор мощный. Недостатки те же, в частности, на счёт SQL, как будь-то заменить java-IDE или студию. У нас крайне слабый велосипед для контекстного автокомплита (в редких случаях есть небольшой разбор текста), в основном, "дополняются" элементы через структуру БД, т.е. имена таблиц, процедур и т.п. Выручают сниппеты и остальные текстовые плюшки, ну и плюс у нас не мало хреновин для генерации текста SQL на основе своего прикладного DSL. Но, тем не менее, какие-то операции всё таки удобно делать в том же IBExpert, к тому же отладчик там, и некоторые у нас в нём полностью работают (для него сделан свой плагин для генерации текста в его текстовых редакторах).

Не знаю как именно работает ранее указанный Vorax, но обычно в подобных db-плагинах типовая организация "db-консолей", по мотивам DB-IDE. О мощном автокомплите, "компиляции" на лету с подсветкой проблем и подсказок и т.п. и т.д. пока можно лишь мечтать. К тому же и "консольные" sql-команды тоже не всегда удобно работают, т.е. в основном это запуск или всего текста в буфере или выделенного блока/блоков. Часто не хватает интерактивности по мотивам sqlplus хотя бы, т.е. вводишь текст разных команд (со снипетами, автокомплитом и пр.), набрал "/", "go" или "commit" и команды выполнились, консоль очистилась (в историю) и т.д. (частично иногда что-то можно сделать в виртуальном консоль/терминале при реальном сеансе с консольной тулзой). Короче говоря, обычно не хватает мощной поддержки исходников как для других языков, показ семантической структуры (кроме файловой иерархии), переходы по элементам, взаимосвязи и т.д. Было бы неплохо, если бы ещё была бы полная гармония между SQL-исходником и текущей базой (типа даже списки полей светились бы в автокомплите и примечались, это в базе есть, это только в исходниках и т.п.), между SQL и клиентским кодом, и т.д. Вот есть ещё один визуализатор HyperSQL , там делается попытка "зарисовать" не только базу через исходники, с док-комментариями, но и найти зависимости объектов БД в java/C++ -коде, как бы не помешал бы подобный функционал и внутри редактора (кроме внешнего HTML).

Короче говоря, полностью работать в текстовом редакторе, имхо, пока проблематично. Я знаю одного энтузиаста, он, прежде всего, большой любитель лиспа. Всю свою разработку - кложура, С/С++, html/javascript и пр., SQL (правда тоже частично, но не мало), плюс документация и всякое org-mode - выстроил в эмаксе, который он каждый день программирует. Плюс в фаерфоксе установил keysnail и радуется жизни, и отчасти я ему завидую, но добиться такого уровня не просто, и надо уж очень захотеть, или иметь на это оправдание (кстати, от него научился ряду фишек, например, как использовать быстрый автокомплит на основе слов в тексте - дополнять поиск из соседних определенных буферов (ну, кроме других типовых механизмов), или вместо всплывающих подсказок для параметров процедур/функций/методов (особенно, если их нет вообще) генерировать сниппеты, где в качестве значений по умолчанию для полей (по которым прыгать по "tab") будет декларация имени параметра и тип - прыгнул на параметр, он весь выделился и вводишь текст и т.п.).

Но, при работе с исходниками мне не нужно их постоянно реструктуризировать, перестраивать и т.п. Я хочу их создавать в едином удобном виде, с расчётом на меньшую писанину, с прицелом для задач создания БД и накатов, с учётом взаимосвязанной модульности. Т.е. и в редакторах нужно иметь механизмы для организации семантической структуры БД на основе исходников (плюс вспомогательные элементы, как история изменения объекта и пр.). Если это будет внешняя консольная утилита, то для того же редактора желателен плагин, который после запуска поймёт, что нужно внутри редактора обновить/передёрнуть (в идеале, нужна или полностью встроенная хрень или не помешал бы постоянно запущенный сервер, чтобы не перезапускать на каждый чих).

Как-то так.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38285784
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123авторВот с этим могут быть проблемы, но не больше чем в гуи иде.
но ведь данный тезис полностью ломает твою утилиту и сабж.
Это логика.

Ну а куда без проблем и их решений. Они есть везде, и в гуях и в предполагаемой тулзе.
Я же хочу попробовать их (в смысле эти инструменты) попробовать объединить. И от каждого взять то, для чего он предназначен.
От иде(или прошаренного текстового редактора) - удобную работу с кодом, от миграторов возможность простого и безболезненного обновлений от версиии к версии, ну а от тулза возможность организовать хранение кода БД-приложния, управление им, структурирование и т.д.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38285799
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovавтор раз 4000 объектов, то получи их все в дереве, выковыривай и целься мышкой по маленькому значку
беда. А что, кнопочка с биноклем совсем не работает? Которая фулл-текст-серч. И вкладочка любимых(кто последний того и любим. кого больше всего любим того и используем чаще) объектов. Их же не 4000?
А чем кстати утилита помогает находить 1 из 4000 текстов, будь он в одном файле с другими объектами, или в своем индивидуальном. Юзкейс какой - как происходит работа с утилитой.
Ну вот у меня открыты вим и фар-манагер. или просто фар-манагер с подсветкой синтаксиса.
и чего дальше происходит. вот мне надо вспомнить по имени одного из 4000, найти, поменять и покласть заново на место.

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

Встречный вопрос: вы исправляете какую-нибудь ошибку в хранимых процедурах, либо занимаетесь рефакторингом: там подправили строчку, в другой проке комментарий сделали (когда работал с файербердной базой у меня за один такой поход больше десятка процедур могло попасться под руку), а эту просто открыли, в окошке висеть оставили, потом вернулись к первой, доделали, потом к 5-й и т.д. А теперь вы хотите побыстрому все что направили накатить на общу разработческую базу, а теперь на тестовую, а потом на другую (2-ю, 3-ю и т.д.) тестовую, потом снова вернуться обратно доправить, снова понакатывать, потом было бы неплохо пересобрать зависимые процедуры из данного модуля (и из всех зависимых), позапускать зависимые юнит-тесты, повторить весь указанный цикл, а потом с чистой совестью оформить из всего этого (по внутрикорпаративным стандартам) чейндж-скрипт и так, чтобы не стереть при этом руку, возюкая мышью по столу. Вот у меня и есть мечта (может быть не сбыточная) это автоматизировать (а еще много чего еще автоматизировать и организовать, тут много говорили уже, не буду повторяться), причем не на уровне самодельных, заточенных под конкретный проект, скриптиков, или не на уровне притаскивания за ущи для этого мигратора (все таки у них другие задачи), а на уровне какого-либо стандарта, общей схемы.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38285845
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100А какие это специфичные объекты, особенно при EAV?

Допустим есть БД-приложение (или его модуль), построенное на EAV. В нем есть специальные процедуры, с помощью, которых можно создать новый тип объекта(класс), добавить ему атрибуты, привязать к другому. И вот с помощью этого инструментария я создаю новый класс "Автомобиль" с соответствующими атрибутами (скорость, мощность etc), делаю его наследником класса "Транспортное средство" и дочерним от класса "Автопарк". Получаю набор вызовов процедур с определенными параметрами.
Т.е. если бы я создал таблицы "Автомобиль", то я бы увидел ее в ИДЕ'шке, смог всякие операции с ней проводить и т.д. Ну а в данном случае наш новый тип объекта как бы теряется, он становится просто набором инсертов в 3-4 (утрируя) EAV-таблицы. С помощью тулза же можно (при желании и необходимсоти, я не говорю, что это обязательно) организовать структуру хранения таких типов объектов и упралять ее. Т.е. описываем новый тип объекта БД, например "EAV-класс" (это просто название), описываем его элементы: сам класс, атрибуты, связи, наслдования ну и прочие специфичные вещи, а потом работаем с ним как с обычным объектом применяя весь имеющийся функционал.

PSV100Я хочу сказать, что те, кто работает с IDE будут максимально упрощать свою работу. Если даже нужен немалый дамп данных как "insert ..." где-то применять, то его всё равно запросто (ибо так проще) смогут оформить как стандартный блок кода или чего там есть в IDE, и выгружать когда нужно. Короче говоря, для них IDE предопределяет структуру проектов, взаимосвязь между объектами и т.п. И если нужна какая-то модульность, то будут оперировать стандартными средствами, теми же "схемами" или в рамках проектов (если IDE позволит). Если есть необходимость в дополнительной возни со скриптами (а она, всё таки, часто и есть), то они согласны пережить этот гемор (для них меньший по сравнению с тем, если бы работали вне IDE). Тут как раз можно помочь удобным продвинутым создавателем дампов или скриптов, о котором как-то говорилось раньше. В т.ч. круто, когда для конкретной IDE есть, скажем доставалка данных из её истории для того же Liquibase, ну и прочие скрипты.

Согласен, у меня и нет мысли и желания сделать революцию в мире разработки БД-приложений и оторвать всех разработчиков от ИДЕ'шек, которые разрабатываются огромным количеством профессионалов, просто в методике, по которой работаю я, есть необходимость в похожем гибком инструменте (может есть у кого то еще, а может я один буду с этим работать).
ИМХО продвинутых (и очень) содавателей дампов и так хватает, а вот если организовать структурированное хранение исходников, то тут тоже возможны интересные варианты.


PSV100Теперь о тех, кто работает в текстовых редакторах или в не-DB IDE. По своему опыту. Так специфика сложилась, что именно с FireBird-ом у нас самые геморные проекты. Под другие СУБД гораздо меньше мороки и вынуждены работать в типовых придворных IDE, и даже миграторы не используются, все скрипты готовятся ручками и исполняются. Под FireBird в текстовом редакторе работать заставил, прежде всего, препроцессор. Плюс там же реализована "IDE" под свой DSL для проектов. Плюсы редакторов. Это попытка уменьшить количество одновременно используемых разных IDE/редакторов, где разные раскладки клавиш (особенно весело переключаться часто между вим-управлением и другим), нет возможности везде оформить хотя бы более-менее идентично раскраски кода, не говоря уже о разных самих редакторах кода и т.д. и т.п. Текстовые редакторы, в целом, для тех, кто это прочувствовал, имеют более удобную организацию среды для работы, гибкую, мощную, без лишнего информационного и интерфейсного шума, позволяющую эффективно работать через клавиатуру без дёрганий к мыши и нормально работать мышью, когда активно не печатаешь, а что-то рассматриваешь, изучаешь и т.д. Плюс сам по себе редактор мощный. Недостатки те же, в частности, на счёт SQL, как будь-то заменить java-IDE или студию. У нас крайне слабый велосипед для контекстного автокомплита (в редких случаях есть небольшой разбор текста), в основном, "дополняются" элементы через структуру БД, т.е. имена таблиц, процедур и т.п. Выручают сниппеты и остальные текстовые плюшки, ну и плюс у нас не мало хреновин для генерации текста SQL на основе своего прикладного DSL. Но, тем не менее, какие-то операции всё таки удобно делать в том же IBExpert, к тому же отладчик там, и некоторые у нас в нём полностью работают (для него сделан свой плагин для генерации текста в его текстовых редакторах).
Именно, плюс в том, что здорово овладеть каким нибудь развитым универсальным инструментом (vim, emacs, eclipse, jedit etc) для работы с исходным кодом и применять его для разных программ и технологий, только устанавливая дополнительные плагины, расширяя подсветку и автокомплит. При большом желании и плагин не сложно набросать.
Ну а каждая ИДЕ стремиться сделать свой личный редактор кода, самый удобный и самый лучший, к которому нужно привыкать и перестраиваться.

PSV100Не знаю как именно работает ранее указанный Vorax, но обычно в подобных db-плагинах типовая организация "db-консолей", по мотивам DB-IDE. О мощном автокомплите, "компиляции" на лету с подсветкой проблем и подсказок и т.п. и т.д. пока можно лишь мечтать. К тому же и "консольные" sql-команды тоже не всегда удобно работают, т.е. в основном это запуск или всего текста в буфере или выделенного блока/блоков. Часто не хватает интерактивности по мотивам sqlplus хотя бы, т.е. вводишь текст разных команд (со снипетами, автокомплитом и пр.), набрал "/", "go" или "commit" и команды выполнились, консоль очистилась (в историю) и т.д. (частично иногда что-то можно сделать в виртуальном консоль/терминале при реальном сеансе с консольной тулзой). Короче говоря, обычно не хватает мощной поддержки исходников как для других языков, показ семантической структуры (кроме файловой иерархии), переходы по элементам, взаимосвязи и т.д. Было бы неплохо, если бы ещё была бы полная гармония между SQL-исходником и текущей базой (типа даже списки полей светились бы в автокомплите и примечались, это в базе есть, это только в исходниках и т.п.), между SQL и клиентским кодом, и т.д. Вот есть ещё один визуализатор HyperSQL, там делается попытка "зарисовать" не только базу через исходники, с док-комментариями, но и найти зависимости объектов БД в java/C++ -коде, как бы не помешал бы подобный функционал и внутри редактора (кроме внешнего HTML).

Vorax как раз и позволяет работать с кодом (из файла, или временного файла), а затем исполнять (причем либо полностью, либо покомандно, либо частино по выделению), используя старый добрый классный sqlplus и естественно все его языковые расширения.
Как то задавался вопросом: почему каждая (по крайней мере многие из них) ИДЕ'шка пытается выполнять sql своими способами, кто то через JDBC, котто через другие драйвера, не смотря на то, что для многих СУБД обычно есть специализированный родной экзекутор (как sqlplus или psql для Postgres), т.е. здесь ИДЕ тоже не оставляют выбора. Да, во многих из них есть режимы для работы с консолью (например в Тоаде и PSD есть специальные типы worksheet'ов, которые исполняются в sqlplus), но это больше как фича дополнителная, со своими ограничениями.


PSV100Но, при работе с исходниками мне не нужно их постоянно реструктуризировать, перестраивать и т.п. Я хочу их создавать в едином удобном виде, с расчётом на меньшую писанину, с прицелом для задач создания БД и накатов, с учётом взаимосвязанной модульности. Т.е. и в редакторах нужно иметь механизмы для организации семантической структуры БД на основе исходников (плюс вспомогательные элементы, как история изменения объекта и пр.). Если это будет внешняя консольная утилита, то для того же редактора желателен плагин, который после запуска поймёт, что нужно внутри редактора обновить/передёрнуть (в идеале, нужна или полностью встроенная хрень или не помешал бы постоянно запущенный сервер, чтобы не перезапускать на каждый чих).
Вот над этим я пытаюсь работать, инструмент, который мог бы поддерживать структуру и порядок среди объектов и модулей, а не просто нагромождение файлов-чейнджсетов или жесткое отображение объектов в дереве иде'шки, ну и интегрировался в другие спеиализированные проверенные популярные средства (текстовые редакторы, ИДЕ'шки, sql-экзекуторы, файловые менеджеры, CI и т.д.)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38285986
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НВстречный вопрос:
оригинально)
Не отвечая на важный вопрос о хранилище (у велосипеда есть 2 колеса и рама).
Мы спрашиваем: "а у вас есть ABS, электрический звонок и круиз контроль".
Т.е ты задумал на основе написания скриптов create делать автоматически скрипты update с с сохранением данных клиента?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38286128
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НВстречный вопрос:
оригинально)
Не отвечая на важный вопрос о хранилище (у велосипеда есть 2 колеса и рама).
Мы спрашиваем: "а у вас есть ABS, электрический звонок и круиз контроль".


Этим вопросом я попытался ответить на вопрос автора, если не получилось отвечу что непонятно.

Petro123Т.е ты задумал на основе написания скриптов create делать автоматически скрипты update с с сохранением данных клиента?
Нет, авоматически делать скрипты не в моей компетенции, только сохранение кода разработчика в сттруктурированном виде. Чуть позже покажу пример.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38286206
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Тогда расшифруй Накатить на тестовую базу всё что наисправлял.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38286934
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВстречный вопрос: вы исправляете какую-нибудь ошибку в хранимых процедурах, либо занимаетесь рефакторингом: там подправили строчку, в другой проке комментарий сделали (когда работал с файербердной базой у меня за один такой поход больше десятка процедур могло попасться под руку), а эту просто открыли, в окошке висеть оставили, потом вернулись к первой, доделали, потом к 5-й и т.д. А теперь вы хотите побыстрому все что направили накатить на общу разработческую базу, а теперь на тестовую, а потом на другую (2-ю, 3-ю и т.д.) тестовую, потом снова вернуться обратно доправить, снова понакатывать, потом было бы неплохо пересобрать зависимые процедуры из данного модуля (и из всех зависимых), позапускать зависимые юнит-тесты, повторить весь указанный цикл, а потом с чистой совестью оформить из всего этого (по внутрикорпаративным стандартам) чейндж-скрипт и так, чтобы не стереть при этом руку, возюкая мышью по столу
Не, я получаю бизнес-требование, открываю или создаю новый проект, оному посвященный, и в рамках этого проекта все что надо делаю. По правилам жанра проекты одного слоя апи друг на друга не ссылаются, и я ничем не озабочен, совсем. Все объекты имеющие отношение к проекту имеют типовой префикс, и находятся биноклем, равно как и покладены в папочку, имеющую тот же самый номерной префикс.

Когда я переделываю таблицу - в папочке остается скрипт целиковый, или альтерящий.

Это вопрос управления всем ходом разработки. А не удобства ИДЕ. Как говорил один из моих боссов - ==хаос автоматизировать невозможно==... мне тут подумалось что можно добавить ==а порядок - он и без автоматизации - порядок==.

Но тут как. Порядок такой сложился при разработке кастомизаций готового крупного продукта - ОЕБС. и сейчас используется при изготовлении фин.отчетности. (т.е. система, на которой отчетность собирается - уже есть, и зафиксирована)

Всегда ли его можно наложить на другие типы разработки - я не уверен.

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

Если объект нужно покласть не в текущую папку - по префиксу же сразу видно - куда.

Если я помню префикс проекта - автоподсказка автоподсказывает мне все объекты, имеющие отношение к сути дела. По формальному кодовому префиксу и смыслонесущему постфиксу сразу видно - это что и зачем. Вимы и емаксы может и сэкономят мне клики по клаве, но всякое автодополнение экономит намного больше....
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38286962
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу а в данном случае наш новый тип объекта как бы теряется, он становится просто набором инсертов в 3-4 (утрируя) EAV-таблицы
Я бы делал пустые таблички, которые можно править в иде, и переносил бы их стр-ру в ЕАВ пиэль-скуль-процой.

"Это и охота, и зверей убивать не надо" (c) Простоквашино
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287122
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НVorax как раз и позволяет работать с кодом (из файла, или временного файла), а затем исполнять (причем либо полностью, либо покомандно, либо частино по выделению), используя старый добрый классный sqlplus и естественно все его языковые расширения.

Максим, речь не об этом. Такой Vorax в том же JEdit лепится на типовых плагинах (часть из которых уже была конкретна названа). Есть SQL-плагины, которые могут дать настраиваемое дерево объектов в БД (где ты можешь любые нужные папочки наваять) плюс содержимое объектов. Есть система управления текстовыми файлами. Даже взяв базовые плагины для организации семантической структуры исходников, без спецразбора кода SQL, и, например, можно настроить правила для "фолдинга" (хотя бы через регэкспы, можно даже линии в коде по разному раскрашивать) и у тебя будут рисоваться деревья для показа структуры открытого sql-файла согласно его "фолд"-ам. Те же sql-плагины могут сами исполнять запросы, со своими дополнительными плюшками. Хочешь, через плагин console запускай sqlplus, можно настроить обработку результатов его вывода, будут списки ошибок и переходы на места в коде. Или даже организовать интерактивный режим работы в console с этим же sqlplus.

Но, вряд ли Vorax реализует полноценный семантический контекстный тот же автокомплит (не говоря уже обо всём остальном). Например, при наборе текста где-то внутри sql-процедуры нужно не только понимать конкретное место внутри sql-оператора, но и знать, чего есть выше по коду, определить список параметров, переменных и т.д., понимать чего ещё есть внутри файла вне процедуры, по связанным включениям вида start/input переходить в те файлы и т.д. Обычно, тот же автокомплит на уровне списка элементов согласно правилам синтаксиса (ключевые слова, список встроенных функций и т.п.), плюс объекты БД на основе метаданных (и нет подключения к БД - нет и автокомплита), ну может ряд локальных выкрутасов на основе окружающего текста. В дополнение, м.б. Vorax умеет широко обрабатывать результаты вывода sqlplus.

Если, в частности, Vorax более продвинут, то это только плюс.

Максим НКак то задавался вопросом: почему каждая (по крайней мере многие из них) ИДЕ'шка пытается выполнять sql своими способами, кто то через JDBC, котто через другие драйвера, не смотря на то, что для многих СУБД обычно есть специализированный родной экзекутор (как sqlplus или psql для Postgres), т.е. здесь ИДЕ тоже не оставляют выбора. Да, во многих из них есть режимы для работы с консолью (например в Тоаде и PSD есть специальные типы worksheet'ов, которые исполняются в sqlplus), но это больше как фича дополнителная, со своими ограничениями.

Ну, кроме того, что м.б. иногда и руки кривые, а так, в принципе, есть вполне реальные технические причины. Тот же IBExpert работает через "нативный" доступ, он расширяет SQL относительно сервера и стандартных утилит, плюс архитектура ODBC/AdoNet/JDBC не позволяет задействовать все возможности СУБД, да и банально так производительнее. Другие IDE/утилиты тоже часто расширяют функционал, особенно "кросс-СУБД", типа поддержка вычислений через спец-комментарии, которые работают для всех серверов. SQL-запускалку геморно дёргать постоянно на каждый чих, каждый раз перезапуская, коннектясь, или не очень то практично организовать сеанс псевдо-консольной работы, плюс не удобно обрабатывать результаты через stdout, та же производительность ниже. Кроме того, тот же JDBC уже имеет в загашнике некий глобальный интерфейс для работы с метаданными СУБД, и т.д.

Максим НДопустим есть БД-приложение (или его модуль), построенное на EAV. В нем есть специальные процедуры, с помощью, которых можно создать новый тип объекта(класс), добавить ему атрибуты, привязать к другому. И вот с помощью этого инструментария я создаю новый класс "Автомобиль" с соответствующими атрибутами (скорость, мощность etc), делаю его наследником класса "Транспортное средство" и дочерним от класса "Автопарк". Получаю набор вызовов процедур с определенными параметрами.
Т.е. если бы я создал таблицы "Автомобиль", то я бы увидел ее в ИДЕ'шке, смог всякие операции с ней проводить и т.д. Ну а в данном случае наш новый тип объекта как бы теряется, он становится просто набором инсертов в 3-4 (утрируя) EAV-таблицы. С помощью тулза же можно (при желании и необходимсоти, я не говорю, что это обязательно) организовать структуру хранения таких типов объектов и упралять ее. Т.е. описываем новый тип объекта БД, например "EAV-класс" (это просто название), описываем его элементы: сам класс, атрибуты, связи, наслдования ну и прочие специфичные вещи, а потом работаем с ним как с обычным объектом применяя весь имеющийся функционал.

А как такое технически реализовать, имея в виду "работу с исходниками", да и ещё попутно решая первостепенные задачи вариантного создания БД и внесения изменений ?

Обычно так. Пусть в исходниках лежит где-то база (ну может не FireBird-а, оракл с постгресом не потаскаешь, пусть sqlite) или лежит дамп как "insert"-операторы с какими-то EAV-данными. В sql-коде, где-то в процедуре или других блоках, я могу вполне подключить эту базу или создать sqlite-базу (в т.ч. и в памяти) и загрузить туда дамп данных. Затем, исходя из конкретных потребностей в каждом случае, для операции наката или какого-то формирования БД, выполнить обработку и разместить в целевой БД нужные данные, или сформировать код для этого (те же insert-ы) и т.п.

Далее, для своей работы в текстовом редакторе, мне необходимо формировать исходники. Вновь обращаю внимание на проект sqlmake. Там есть примерная логика организации удобной структуры каталогов. Выделяется понимание "datamodel" - таблицы с индексами и пр., для которых нужно в исторической последовательности формировать create-операторы и дальнейшие "alter"-ы плюс остальные требуемые операции, логически группировать по версиям. Также имеется весь остальной "повторяемый"-код (create or alter/replace ...), плюс нужно выделять тот код, который нужен для запусков перед и после операций модификации БД. Хотелось бы объекты объединять в логические подмодули в одном файле, где бы указывалась зависимость от других модулей (я планирую через спец-аннотации), модуля организуются иерархически. Всё это предопределяет структуру каталогов.
Далее, в редакторе есть удобные средства для манипулирования файлами, в т.ч. есть возможность смотреть на всю (или частично) структуру каталогов, ну и плюс файлы в них. А если ещё будет понимание структуры каждого конкретного файла, то просто замечательно (и пока речь не идёт о фишках IDE для непосредственной работы с кодом, как перемещение по связанным элементам, в общем вокруг семантики). И не помешало бы на основе исходников иметь инструмент, как указанный ранее HyperSQL, который сформирует согласно такой-то настроенной конфигурации проекта виртуальную структуру БД (в т.ч. и собрал бы, например, все alter-ы таблицы в одном месте рядом с исходным create, ну и др. зависимости), что-то бы хотелось в т.ч. и в виде текстовых данных для самого редактора, естественно, с поддержкой связности.
И задачи для организации "EAV" и подобного, справочных и тестовых данных и т.д. (и это действительно частое явление) будут где-то выделены в своих каталогах и файлах. Если какой-то настраиваемый "HyperSQL" сможет поддержать информацию об этих "дополнениях", то неплохо. А так обычно где-то в документации (кроме инфы в самих файлах, плюс будут ссылки на документацию из разных мест, т.е. из файлов и "HyperSQL") будет расписано, чего за хреновина такая, как делать настройки для неё и т.д. И вполне достаточно её выделить хотя бы в файловой структуре. Если нужно какую-то ту же sqlite-базу править, то открою какой-то вьювер, м.б. и внутри редактора, ну и направлю данные.

Как я понимаю, у тебя есть желание сделать некую абстрактную IDE, где, например, слева бы рисовалось дерево проекта, причём хочу в таком виде (как папки и файлы), хочу в другом (по объектам БД и "виртуальные" объекты). Далее для какого-то объекта "EAV" будет раскрыто своё поддерево, с реальными EAV-данными, или откроется какой-то режим "sql-консоли" для манипулирования данными и т.п. А справа будет нарисовано дерево объектов подключенной БД, и всё со всем гармонично взаимодействовать. Затем захотел, дал команду вида собрать sql-скрипт по таким-то хреновинам - получил.

Теоретически, что-то вполне можно сделать, но лишь что-то и в конкретном месте, конкретной IDE/редакторе. Если делать супер-универсально, без поддержки чего-то конкретного, то это возможно консоль а-ля как тот же sqlplus (show my_project, export хреновина to файл и т.д., кому нужно, тот и в эмаксе запустит), или HTML или вообще полный вэб. Сейчас как раз начали появляться проекты как ACE Editor, типа продвинутый редактор в браузере. Для FireBird есть IDE FlameRobin, это десктоп-GUI, но часть интерфейса реализовано через HTML, настраиваемого. Да и хватает всяких Web-DBIDE.

Но стоит ли ?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287302
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим, а вообще-то, нафига голову ломать на счёт какой-то IDE, если хочется попробовать текстовый редактор. Ведь в нём, фактически, есть всё, что нужно. И работать как бы нужно в стиле "true" соответственно. Возьми тот же vim c Vorax и вперёд пробовать. Нет каких-то деревьев, типа как файловая структура или объекты в БД, якобы нужно писать плагин - да пока фиг с ним. Я согласен с мнением Vladimir Baskakov выше на счёт всяких деревьев, они лишь относительные помощники. Те же свои "кастомные" деревья реализуются через обычный текст, через фолдинг. Открыл файл, в котором по умолчанию всё свёрнуто - вот и дерево, открывай узлы, можно по уровням, можно по "тэгам", доступны все операции как для текста, поиск, фильтр и т.д. (как пример, открой в том же JEdit здоровенный файл истории его изменений). Посмотри на org-mode, как там организованы структурные текстовые документы, с ссылками для перехода. Короче говоря, полноценное IDE. В одних буферах воюешь со своей метасистемой, рядом sql-ишь.
Можно попробовать sublime. У него есть нехваталки (в т.ч. и хромалки, если нужно именно вим-управление), но зато есть всё нужное, фактически, из коробки:
- можно определить свой синтаксис, кроме раскраски задать правила для фолдинга, сниппеты и элементы автокомплита, и свои метки для кода (и, кстати, для своего "языка" не нужно возиться с ctags). Благодаря его "goto" дерево проекта там и нафиг не нужно, структуру файлов проще вне редактора смотреть (и если чё, запускать из фара/mc/zsh, второй экземпляр редактора он не запустит);
- можно запускать тот же sqlplus и результаты обрабатывать, светить ошибки и т.д. Плюс есть и всякие плагины для этого дела, вплоть до интерактивной сессии;
- есть куча плагинов, типа можно запускать внешнюю тулсу, сохранив файл в буфере, она его обработает (или передать часть файла), перечитать его в редакторе и т.п. Т.е. "метадеревья" формировать можно внешней утилитой (вместо родных плагинов);
- что-то есть по мотивам org-mode от эмакса, конечно не всё, но на счёт организации документов должна быть основа, в т.ч. и переходы по ссылкам;
- есть всякие запускалки чего нужно, типа для вэб-ссылки запуск броузера, куча примеров как в буферах самому чего надо открывать;
- есть основа, чтобы сделать свою обработку файла в буфере по особому, т.е. запретить редактирование, через "вверх/вниз" сразу перелетать по прикладным элементам и т.д.
- есть всякие популярные помогалки по мотивам вима, типа автокомплит целых строк, выравнивание (tabular) и т.д. и т.п.

Если у тебя сформируется методика разработки БД и поделишься с обществом, все будут благодарны. А если ещё и какой-то плагин для чего-то набросаешь, то его вполне могут по всем эмаксам растащить, как, Zen Coding/Emmet, например.

Имхо, вполне себе вариант.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287414
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovавторНу а в данном случае наш новый тип объекта как бы теряется, он становится просто набором инсертов в 3-4 (утрируя) EAV-таблицы
Я бы делал пустые таблички, которые можно править в иде, и переносил бы их стр-ру в ЕАВ пиэль-скуль-процой.

"Это и охота, и зверей убивать не надо" (c) Простоквашино

Вариант интересный конечно, но только чисто теоретически, т.к. на самом деле все сложнее. Специфические типы данных могут быть, связи, наследования и прочие понты.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287439
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovоткрываю или создаю новый проект

Vladimir Baskakovи в рамках этого проекта все что надо делаю

Vladimir BaskakovПо правилам жанра проекты одного слоя апи друг на друга не ссылаются

Vladimir BaskakovВсе объекты имеющие отношение к проекту имеют типовой префикс


Т.е. в вашем проекте есть сформированный набор правил (кстати где он описан и как контролируется?)
и если ему следовать, то можно здорово сэкономить время себе и другим, на сбор версий, разбирание с чужим кодом и т.д.
Что будет если новый сотрудник создаст объект без префикса и включит в версию? Когда это выяснится?


Т.к. в тулзе есть возможность описывать структуру хранимых объектов, то есть и возможность контроллировать также и их наименования,
т.е. например указываем, что для модуля "ЗП" имя индекса должно состоять из первых 2-х, 3-х, 4-х символов имени таблицы, разделенное знаком "_".
А имя сиквенса должно начинаться (или заканчиваться) символами "SEQ", так же разделенное знаком "_".
Затем во время сбора версии (в том же самом CI к примеру) запускаем тулз на проверку имен и получаем взрывы или предупреждения.
Ну и соответсвенно легко настроить кодогенерацию, под стандарты проекта и каждого модуля-подмодуля: ввожу команду и получаю стандартизированный набор болванок
уже с именами.



Vladimir BaskakovЭто вопрос управления всем ходом разработки. А не удобства ИДЕ. Как говорил один из моих боссов - ==хаос автоматизировать невозможно==... мне тут подумалось что можно добавить ==а порядок - он и без автоматизации - порядок==.

Но тут как. Порядок такой сложился при разработке кастомизаций готового крупного продукта - ОЕБС.


Что порядок сложился это хорошо, и то что он поддерживается это тоже хорошо, и это видно.
Но вот что если он не сложился, ну или если нет у человека достаточного опыта при начале нового БД-проекта.
А тут можно предложить некий фреймворк, каркас, с преднастройками от лучших заводчиков разработчиков в этой сфере.
С возможностью интеграции с другими инструментами.
Т.е. чтобы типовой БД-проект можно было бы организовать несколькими командами или щелчками мыши, с нужной структурой, контролем, системой сбора и накатки версий и т.д.
И это совершенно не значит, что нужно забросить ГУИ и ломать глаза в консоли.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287476
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
Тогда расшифруй Накатить на тестовую базу всё что наисправлял.

Т.е. есть несколько процедур/пакетов (5-10, легко), которые я наизменял, и теперь мне нужно собрать их в один скрипт и откатать их на других серваках (тестовых, разработческих etc), что проверить валидность накатки, запустить юнит-тесты, нагрузочные тесты, подключить тестировщиков (если надо), причем это скрипт можен иметь особенности при сборке, если это пакеты, то логично в начале включить "головы", а затем "тела", если это процедуры (да и еще файербердовские), то, насколько помню, там еще и порядок может быть важен, тот возможно собрать по времени изменения и т.д. Ну и повторятся это может много раз. А потом нужно собрать нужный скрипт для включения в версию.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287518
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Максим, речь не об этом. Такой Vorax в том же JEdit лепится на типовых плагинах (часть из которых уже была конкретна названа). Есть SQL-плагины, которые могут дать настраиваемое дерево объектов в БД (где ты можешь любые нужные папочки наваять) плюс содержимое объектов. Есть система управления текстовыми файлами. Даже взяв базовые плагины для организации семантической структуры исходников, без спецразбора кода SQL, и, например, можно настроить правила для "фолдинга" (хотя бы через регэкспы, можно даже линии в коде по разному раскрашивать) и у тебя будут рисоваться деревья для показа структуры открытого sql-файла согласно его "фолд"-ам. Те же sql-плагины могут сами исполнять запросы, со своими дополнительными плюшками. Хочешь, через плагин console запускай sqlplus, можно настроить обработку результатов его вывода, будут списки ошибок и переходы на места в коде. Или даже организовать интерактивный режим работы в console с этим же sqlplus.

Но, вряд ли Vorax реализует полноценный семантический контекстный тот же автокомплит (не говоря уже обо всём остальном). Например, при наборе текста где-то внутри sql-процедуры нужно не только понимать конкретное место внутри sql-оператора, но и знать, чего есть выше по коду, определить список параметров, переменных и т.д., понимать чего ещё есть внутри файла вне процедуры, по связанным включениям вида start/input переходить в те файлы и т.д. Обычно, тот же автокомплит на уровне списка элементов согласно правилам синтаксиса (ключевые слова, список встроенных функций и т.п.), плюс объекты БД на основе метаданных (и нет подключения к БД - нет и автокомплита), ну может ряд локальных выкрутасов на основе окружающего текста. В дополнение, м.б. Vorax умеет широко обрабатывать результаты вывода sqlplus.

Если, в частности, Vorax более продвинут, то это только плюс.


Можно и плагинами, Vorax это в принципе и есть набор инструментов и плагинов - vim для кода, sqlplus в качестве экзекутора, интеграция с NERDTree, ctag'ами и XPtemplate.
Из фишек там есть разбор кода (ксати с использованием antlr, ксати надо подсмотреть как именно), он умеет определять и выполнять блоки и отдельные sql-операторы, чего то еще было, сейчас не припомню.
Просто для меня это был первый такой открытый инструмент, который использует для решения задач всем знакомые и проверенные инструменты, и практически ни к чему не надо привыкать.


PSV100А как такое технически реализовать, имея в виду "работу с исходниками", да и ещё попутно решая первостепенные задачи вариантного создания БД и внесения изменений ?


Хранить исходники создания(изменения) класса и его элементов так же как и исходники создания таблицы и ее элементов.
Но это просто как вариант, чтобы показать принцип работы тулза.
Так же теоретически возможно хранить исходники какой-нибуть NoSQL-базы, например Cypher-скрипты, так же их орагнизовывать и контроллировать.


PSV100Как я понимаю, у тебя есть желание сделать некую абстрактную IDE, где, например, слева бы рисовалось дерево проекта, причём хочу в таком виде (как папки и файлы), хочу в другом (по объектам БД и "виртуальные" объекты). Далее для какого-то объекта "EAV" будет раскрыто своё поддерево, с реальными EAV-данными, или откроется какой-то режим "sql-консоли" для манипулирования данными и т.п. А справа будет нарисовано дерево объектов подключенной БД, и всё со всем гармонично взаимодействовать. Затем захотел, дал команду вида собрать sql-скрипт по таким-то хреновинам - получил.

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


PSV100Теоретически, что-то вполне можно сделать, но лишь что-то и в конкретном месте, конкретной IDE/редакторе. Если делать супер-универсально, без поддержки чего-то конкретного, то это возможно консоль а-ля как тот же sqlplus (show my_project, export хреновина to файл и т.д., кому нужно, тот и в эмаксе запустит), или HTML или вообще полный вэб. Сейчас как раз начали появляться проекты как ACE Editor, типа продвинутый редактор в браузере. Для FireBird есть IDE FlameRobin, это десктоп-GUI, но часть интерфейса реализовано через HTML, настраиваемого. Да и хватает всяких Web-DBIDE.

Но стоит ли ?

Идея интересная, но думаю перебор, по крайней мере пока.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287532
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Максим, а вообще-то, нафига голову ломать на счёт какой-то IDE, если хочется попробовать текстовый редактор. Ведь в нём, фактически, есть всё, что нужно. И работать как бы нужно в стиле "true" соответственно. Возьми тот же vim c Vorax и вперёд пробовать. Нет каких-то деревьев, типа как файловая структура или объекты в БД, якобы нужно писать плагин - да пока фиг с ним. Я согласен с мнением Vladimir Baskakov выше на счёт всяких деревьев, они лишь относительные помощники. Те же свои "кастомные" деревья реализуются через обычный текст, через фолдинг. Открыл файл, в котором по умолчанию всё свёрнуто - вот и дерево, открывай узлы, можно по уровням, можно по "тэгам", доступны все операции как для текста, поиск, фильтр и т.д. (как пример, открой в том же JEdit здоровенный файл истории его изменений). Посмотри на org-mode, как там организованы структурные текстовые документы, с ссылками для перехода. Короче говоря, полноценное IDE. В одних буферах воюешь со своей метасистемой, рядом sql-ишь.



Согласен, с фолдингом и тэгами проще будет, еще попытаюсь заюзать вместе с xiki, интересно что из этого получится.
Дерево это не самоцель, просто есть такая возможность его нарисовать, если нужно.

PSV100Можно попробовать sublime. У него есть нехваталки (в т.ч. и хромалки, если нужно именно вим-управление), но зато есть всё нужное, фактически, из коробки:
- можно определить свой синтаксис, кроме раскраски задать правила для фолдинга, сниппеты и элементы автокомплита, и свои метки для кода (и, кстати, для своего "языка" не нужно возиться с ctags). Благодаря его "goto" дерево проекта там и нафиг не нужно, структуру файлов проще вне редактора смотреть (и если чё, запускать из фара/mc/zsh, второй экземпляр редактора он не запустит);
- можно запускать тот же sqlplus и результаты обрабатывать, светить ошибки и т.д. Плюс есть и всякие плагины для этого дела, вплоть до интерактивной сессии;
- есть куча плагинов, типа можно запускать внешнюю тулсу, сохранив файл в буфере, она его обработает (или передать часть файла), перечитать его в редакторе и т.п. Т.е. "метадеревья" формировать можно внешней утилитой (вместо родных плагинов);
- что-то есть по мотивам org-mode от эмакса, конечно не всё, но на счёт организации документов должна быть основа, в т.ч. и переходы по ссылкам;
- есть всякие запускалки чего нужно, типа для вэб-ссылки запуск броузера, куча примеров как в буферах самому чего надо открывать;
- есть основа, чтобы сделать свою обработку файла в буфере по особому, т.е. запретить редактирование, через "вверх/вниз" сразу перелетать по прикладным элементам и т.д.
- есть всякие популярные помогалки по мотивам вима, типа автокомплит целых строк, выравнивание (tabular) и т.д. и т.п.

Sublime посмотрю, но всем редакторам не угодишь, и в любом случае ИДЕ это для многих (в т.ч. и для меня пока ) основная среда работы с БД-кодом.

PSV100Если у тебя сформируется методика разработки БД и поделишься с обществом, все будут благодарны. А если ещё и какой-то плагин для чего-то набросаешь, то его вполне могут по всем эмаксам растащить, как, Zen Coding/Emmet, например.

Имхо, вполне себе вариант.

Да, было бы здорово.
Спасибо, что напомнил про Zen Coding.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287672
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим НSublime посмотрю, но всем редакторам не угодишь, и в любом случае ИДЕ это для многих (в т.ч. и для меня пока ) основная среда работы с БД-кодом.


Ну может тогда по интерпрайзному, на Эклипс посмотреть. У него свои db-плагины, есть расширения для Оракл, от того же Toad . При необходимости, можно чего-то самому наплагинить, какие-то имена объектов контролировать и т.д. Далее, есть Xtext , для своих DSL, не только разбор, полную IDE из коробки обеспечить можно, в т.ч. и разбор SQL, если вдруг надо будет. На нём основан Xtend , CoffeeScript для Javа, как придворный пример использования технологии. У jetbrains есть некий аналог, MPS , правда не знаю на счёт Оракла, скорее всего, в рамках стандартного db-плагина. Если понадобится и какая-то Neo4j, то, имхо, для того же Эклипса чего-то найдётся.

Имхо, если есть корпоративные потребности, м.б. проект и оправдает себя, вдруг и за пределами организации тоже.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287942
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКогда это выяснится?
2 вида контроля -
1) орг. - разработки особенно начинающих просматривались тим-лидами
2) для управления деплоем разработок (которые выглядели как папочки в версионнике) работала тулза - установщик пакета на окружение, она проверяла зависимости от ядерных объектов, раскладывала что и куда нужно, накатывала пакеты и тд.
Она тоже смотрела.
Та тулза была перловым скриптом. без нее ничего никуда не ставилось. Разработка сопровождалась непременно историей изменений и материалами требований, которые покрывались изменениями. Поэтому всегда было довольно просто найти, кто наследил.
Опять же - копипаст образцовых скриптов и пакетов - никто не писал с чистого листа. Подразделение ораклистов было около 100 чел. - аналитики, разрабы, функ-архитекторы, р-п. Жестко кодеров было около 30.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287948
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ННо вот что если он не сложился, ну или если нет у человека достаточного опыта при начале нового БД-проекта.
ты никогда не работал в новой команде?. Тебе просто дают минимальные права в хранилище версий. А коммитит наставник.
У тебя подход такой - это утилита IDE для наставника. А эта утилитаIDE для новичка?
Или в организации никто не знает что такое хранимка, как её назвать...и тут наша утилита это поможет?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287956
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НPetro123Максим Н,
Тогда расшифруй Накатить на тестовую базу всё что наисправлял.

Т.е. есть несколько процедур/пакетов

==== CREATE TABLE

и теперь мне нужно собрать их в один скрипт и откатать их

==== что значит Откатить? Создать с нуля БД или апдейт БД заказчика\тестового при добавлении поля? Т.е. автоматом из CREATE сделать UPDATE TABLE
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38287959
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НИдея интересная, но думаю перебор, по крайней мере пока.
Контроль имён объектов в тулзе - тоже перебор
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288199
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Нпропущено...


Т.е. есть несколько процедур/пакетов

==== CREATE TABLE

и теперь мне нужно собрать их в один скрипт и откатать их

==== что значит Откатить? Создать с нуля БД или апдейт БД заказчика\тестового при добавлении поля? Т.е. автоматом из CREATE сделать UPDATE TABLE



"Откатать", значит накатить, установить, выполнить с помощью какого либо sql-экзекутора (гуевого или не очень) на нужных базах.
С create table немного подругому, там уже просто так несколько раз не накатишь, но тоже вполне решаемо при необходимости (скрипт отката и все такое). т.е. тут важно отличать "data model" от кода (пакеты, процедуры, вьюхи, триггера), о чем говорил PSV100.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288203
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим ННо вот что если он не сложился, ну или если нет у человека достаточного опыта при начале нового БД-проекта.
ты никогда не работал в новой команде?. Тебе просто дают минимальные права в хранилище версий. А коммитит наставник.
У тебя подход такой - это утилита IDE для наставника. А эта утилитаIDE для новичка?
Было дело, но везде все по разному, где то вобще никакими СКВ не пользовались для разработки БД.

Petro123Или в организации никто не знает что такое хранимка, как её назвать...и тут наша утилита это поможет?

Это только один из вариантов использования, кому то будет полезен, кому то нет.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288209
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим НИдея интересная, но думаю перебор, по крайней мере пока.
Контроль имён объектов в тулзе - тоже перебор

Как и все остальные фичи данного тулза? :)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288260
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
а все остальные фичи как то растекаются на кучу говорильни.
Я никак не пойму, как первокласснику на ней работать. Т.к. объять всё и вся - невозможно.
Теория разработки-управления проектом - хромает.

Есть прецендент : "Я исправил 50 процедур сегодня и 20 завтра для решения Фича_N".

Как на тулзе это выглядит?
1. Исправил сегодня - ИЗМЕНИВ в CREATE TABLE поле INN: char(25) на char(45)

- как ЗАВТРА сделать UPDATE ver2.2 по фиче Фича_N
- по прежнему - "накатить" непонятно)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288267
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2) для управления деплоем разработок (которые выглядели как папочки в версионнике) работала тулза - установщик пакета на окружение, она проверяла зависимости от ядерных объектов, раскладывала что и куда нужно, накатывала пакеты и тд.
Она тоже смотрела.
Та тулза была перловым скриптом. без нее ничего никуда не ставилось. Разработка сопровождалась непременно историей изменений и материалами требований, которые покрывались изменениями. Поэтому всегда было довольно просто найти, кто наследил.
...
У тебя подход такой - это утилита IDE для наставника. А эта утилитаIDE для новичка?
Или в организации никто не знает что такое хранимка, как её назвать...и тут наша утилита это поможет?
...
Контроль имён объектов в тулзе - тоже перебор

Я так подозреваю, что как раз это всё и нужно реализовать. Тулза для деплоя, как для боевого, так и для любого другого тестового сервака, с гибкой формировалкой пакетов, с полным контролем и т.д. При этом нужен инструментарий для конфигурирования, а также ещё и какие-то дополнительные помогалки в IDE для манипулирования "прикладными объектами" в дополнение к БД-объектам. А в идеале, чтобы ещё на этапе программирования какой-нибудь умный Эклипс подчёркивал не только проблемы SQL, но и говорил, мол ты с именем процедуры накосячил (несмотря на то, что оно вводилось частично на основании настроенных шаблонов).

Имхо, в рамках корпоратива вполне может быть востребовано (ну а "деплой", в принципе, просто необходим), и даже быть ресурсы для таких разработок. Но насколько универсально это можно реализовать, в рамках для широких масс, сомнительно. Поэтому пока все и вынуждены сами себе свои перлы мастерить.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288271
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Нно тоже вполне решаемо при необходимости (скрипт отката и все такое).
круто ты.
Замах на решение кучи проблем. А конкретные вещи правки 4000 процедур у тебя не решаются.
- нужны писать 3 варианта самому:
- накат
- откат
- update
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288291
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100Я так подозреваю, что как раз это всё и нужно реализовать
угу.
В одиночку: Сборка, Генерация скриптов, Парсер, Контроль имён, ГУИ, автодополнения и шаблоны.
Т.е. это не IDE, а ERP.
Как тут говорилось - пусть пишет, в собственное удовольствие.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288301
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
off
какой вам нужен бюджет и сроки на реализацию этого проекта мечты? )
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288352
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НVladimir Baskakovпропущено...

Я бы делал пустые таблички, которые можно править в иде, и переносил бы их стр-ру в ЕАВ пиэль-скуль-процой.

"Это и охота, и зверей убивать не надо" (c) Простоквашино

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

Могут быть или есть? Это как на военной кафедре - ==идете Вы по чистому полю, ни кустика, ни кочки, ни чахлой березки. И тут на Вас из за угла - танк==.
Для начала нужно понять, к чему сам этот ЕАВ. От него больше вреда или пользы. Большая база на такой архитектуре будет вероятно архилетать. Код будет устойцивый такой.
Дропнул поле - пакеты слетели, дропнул атрибут - все делает вид что работает. Пока не придет туда, куда. Это ли не счастье!
«Простые вещи должны оставаться простыми, а сложные — стать выполнимыми» - Ларри Уолл.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288532
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123PSV100Я так подозреваю, что как раз это всё и нужно реализовать

угу.
В одиночку: Сборка, Генерация скриптов, Парсер, Контроль имён, ГУИ, автодополнения и шаблоны.
Т.е. это не IDE, а ERP.
Как тут говорилось - пусть пишет, в собственное удовольствие.

Petro123PSV100,
off
какой вам нужен бюджет и сроки на реализацию этого проекта мечты? )

Не-не-не, спасибо, с такими вопросами к Ораклу :) Это он может запросто нагнуть своей "Р-технологией" в рамках своих ERP и около них. Будет полная ERP-IDE, от сих до сих. Возьмёт Эклипс, перенаворотит, куча талмудов, видео, курсы, консультанты, внедренцы... При этом по-прежнему даже элементарных макросов для текстового редактора так и не сделает (стандартных, без сторонних полуработающих костылей), типа умная IDE, эмакс нового тысячелетия, всё сделает за вас сама, не мешайте ей, а наслаждайтесь. Или возьмёт ещё раз тот же Эклипс, слепит новый "девелопер" для своей СУБД, будет учить своим стандартам, тут файлики по табличкам, там пакетики и т.д., обязательно их в СКВ. А для работы с этими файлами кроме как ручной экспорт/импорт, фактически, ни фига, несмотря на мощнейшую платформу для этого из коробки.

А свою "наколенную ERP" уже пытались поднять второй раз на новой платформе, пока нет ни ресурсов, ни настроения. А, вообще, вся эта ERP-муть уже достала выше крыши, и нет никакой мечты. Чего бы хотелось, так это просто работать, в спокойной обстановке, в каком-нибудь удобном редакторе а-ля sublime, с адекватными помогалками, вместо одновременной пачки IDE и сопутствующего софта, иногда действительно получая удовольствие.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38288576
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100с такими вопросами к Ораклу
если сравнить админство сиквела и оракла, то виден совершенно разный подход.
- MS за ГУИ, визуальность и IDE, Каждой домохозяйке-БД
- Оракл за чёрный экран, скрипты и БД для профи-админов с большой зарплатой.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289015
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovМаксим Нпропущено...


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

Могут быть или есть? Это как на военной кафедре - ==идете Вы по чистому полю, ни кустика, ни кочки, ни чахлой березки. И тут на Вас из за угла - танк==.
Для начала нужно понять, к чему сам этот ЕАВ. От него больше вреда или пользы. Большая база на такой архитектуре будет вероятно архилетать. Код будет устойцивый такой.
Дропнул поле - пакеты слетели, дропнул атрибут - все делает вид что работает. Пока не придет туда, куда. Это ли не счастье!
«Простые вещи должны оставаться простыми, а сложные — стать выполнимыми» - Ларри Уолл.

Хорошо или плохо использовать EAV, это уже совершенно другой вопрос (не менее острый, кстати если интересно то свежие баталии в соседней ветке - http://www.sql.ru/forum/1020938/hranenie-dannyh-s-gibkoy-strukturoy-i-zaprosy-k-nim). Во многих конторах EAV есть, и его очень много (в частности в моей тоже, поэтому говорю далеко не по наслышке). Ну а если он (EAV) уже есть, то можно его код вот так вот организовать, для того чтобы проще с ним справляться.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289076
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123а все остальные фичи как то растекаются на кучу говорильни.

Я никак не пойму, как первокласснику на ней работать. Т.к. объять всё и вся - невозможно.
Теория разработки-управления проектом - хромает.


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

Petro123
Есть прецендент : "Я исправил 50 процедур сегодня и 20 завтра для решения Фича_N".

Как на тулзе это выглядит?
1. Исправил сегодня - ИЗМЕНИВ в CREATE TABLE поле INN: char(25) на char(45)

- как ЗАВТРА сделать UPDATE ver2.2 по фиче Фича_N
- по прежнему - "накатить" непонятно)

Примерно так (я это пока не делал, но думаю):

Код: powershell
1.
ТУЛЗ --patch open -v 2.2



В итоге, в заранее определенном месте (в папке, в файле, в части файла) определяется место для хранения скриптов версии 2.2.
Ну или никто не мешает самому создать этот файл-папку(или сделать это другими средствами), или выделить место (например спец. комментариями) в файле, но потем правилам, которые заданы в конфиге, чтобы потом можно было автоматизировать.
Затем я набрасываю туда альтерящие скрипты(скрипт) для версии. Причем порядок их дальнейшей сборки (очередность выполнения в базе) можно определить абсолютно по разному (может быть даже отдельно для каждого патча), например тупо по дате создания, или по алфавиту, или по какой либо специальной, заранее настроенной и определенной маске (например сначала файлы в именах или самом содержимом, которых есть слово "ALTER TABLE", затем "CREATE OR REPLACE PACKAGE" и т.д.), в зависимости от того как приянто в коллективе.

Например закидываем туда (прямо ручками, например выгружаем из ИДЕ'шки) уже готовый ваш альтер, а потом впоминаем, что есть зависимые уже исправленные пакеты под этот альтер:

Код: powershell
1.
ТУЛЗ -t package --module "SALARY" --date 01.06.2013 --patch 2.2



Получаем в файлах патча 2.2 новый файлик, в котором собраны все пакеты из модуля "ЗП", изменившиеся с 1-го июня.
Причем еще доступны опции сборки всех объектов воедино (которые так же можно и нужно гибко настроить, т.е. например сначала идут head, а затем body), ну вплоть до того, что на выходе можно получать готовые, оформленные ликвибейсовские чейнджсеты.

А затем закрываем патч:

Код: powershell
1.
ТУЛЗ -patch close -v 2.2



Примерно так.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289080
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Нно тоже вполне решаемо при необходимости (скрипт отката и все такое).
круто ты.
Замах на решение кучи проблем. А конкретные вещи правки 4000 процедур у тебя не решаются.
- нужны писать 3 варианта самому:
- накат
- откат
- update

А какой именно проблеме сейчас говорится (а то слегка запутался)?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289594
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НPetro123пропущено...

круто ты.
Замах на решение кучи проблем. А конкретные вещи правки 4000 процедур у тебя не решаются.
- нужны писать 3 варианта самому:
- накат
- откат
- update
А какой именно проблеме сейчас говорится (а то слегка запутался)?
Почитай про Прецеденты, ВИ (варианты использования). Тогда не будет столько много текста в топике.
Т.е. я при разработке поправил скрипт Create
- как получить "альтящиеся" скрипты и "откатные" скрипты по твоей терминологии.
Их автоматом получить не просто.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289691
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Т.е. я при разработке поправил скрипт Create
- как получить "альтящиеся" скрипты и "откатные" скрипты по твоей терминологии.
Их автоматом получить не просто.

Алтерящие скрипты могут сделать ИДЕ-шки и тулзы специальные, я обычно делаю альтер руками и закидываю его в версию.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289776
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
теперь ясно.
- ты поправил надцать скриптов с пометками версии и сразу "в паре" тут же пишешь ALER на все эти правки.
Я это и спрашивал.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38289979
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
теперь ясно.
- ты поправил надцать скриптов с пометками версии и сразу "в паре" тут же пишешь ALER на все эти правки.
Я это и спрашивал.

Да. Либо хранить альтеры таблицы отдельно от самих исходных скриптов таблиц, например в миграционных скриптах, где все до кучи для версии, а потом можно будет "собрать" в один итоговый скрипт таблицы.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290012
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
теперь ясно.
- ты поправил надцать скриптов с пометками версии и сразу "в паре" тут же пишешь ALER на все эти правки.
Я это и спрашивал.

Да. Либо хранить альтеры таблицы отдельно от самих исходных скриптов таблиц, например в миграционных скриптах, где все до кучи для версии, а потом можно будет "собрать" в один итоговый скрипт таблицы.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290029
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
ну теперь можно написать ВИ:
1. Исправил 15 скриптов CREATE с пометкой аннотациями? вер.2.2
2. Создал 15 новых скриптов с ALTER'ами в папке? вер.2.2
?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290054
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
ну теперь можно написать ВИ:
1. Исправил 15 скриптов CREATE с пометкой аннотациями? вер.2.2
2. Создал 15 новых скриптов с ALTER'ами в папке? вер.2.2
?

Да, или просто:

1. Создал 15 новых альтеров с антотациями в патчевой папке, или в одном патчевом-файле

Заем набрал команду для конкретной таблицы и увидел ее исходный DDL и все историю ее изменения по версиям.
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290073
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
это уже ближе к Java.
- аннотации или XML конфиг или?
- аннотации свои придуманные вместе с парсером?
- что делать с маппингом на Java этой генерилки?
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290258
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
это уже ближе к Java.
- аннотации или XML конфиг или?
- аннотации свои придуманные вместе с парсером?
- что делать с маппингом на Java этой генерилки?


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

- как уже говорил в 1-м пункте, описанные в конфиге

- насчет маппинга не уверен, как это может выглядеть? Я думал как о чем то специализированном для БД, управление структурой, на выходе можно получать любого вида код и скрипты (как миграционные, так и скрипты наката, заполненеия справочников, тестовые данные, пересоздание объектов, юнит-тесты и т.д.)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290286
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
- попробуй....IMHO может получиться слишком сложный "конфиг в корне"
- не понял...ну да ладно...
- на Java-хибере писал? Ты делаешь упралятор_БД оторванно от Java.
Я придерживаюсь цикла разработки по линейке:
- UPD_БД ---> UPD_Маппинг ---> UPD_БЛ ---> UPD_ГУИ ---> UPD_Доки и обучение.

IMHO
Удачи!
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290289
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
это уже ближе к Java.
- аннотации или XML конфиг или?
- аннотации свои придуманные вместе с парсером?
- что делать с маппингом на Java этой генерилки?


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

- как уже говорил в 1-м пункте, описанные в конфиге

- насчет маппинга не уверен, как это может выглядеть? Я думал как о чем то специализированном для БД, управление структурой, на выходе можно получать любого вида код и скрипты (как миграционные, так и скрипты наката, заполненеия справочников, тестовые данные, пересоздание объектов, юнит-тесты и т.д.)
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38290303
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Максим Н,
- попробуй....IMHO может получиться слишком сложный "конфиг в корне"
- не понял...ну да ладно...
- на Java-хибере писал? Ты делаешь упралятор_БД оторванно от Java.
Я придерживаюсь цикла разработки по линейке:
- UPD_БД ---> UPD_Маппинг ---> UPD_БЛ ---> UPD_ГУИ ---> UPD_Доки и обучение.

IMHO
Удачи!


- возможно, но планируется сделать его преднастроенным, с оптимальной структурой, но если не устроит, то можно переделать под себя
- с хибером было, дело, мысль понял. Можно предусмотреть такой вариант, например выводить список альтеров в спец. виде по каждому патчу
...
Рейтинг: 0 / 0
Выбор СУБД для небольшой Java-утилиты
    #38323335
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного доработал тулзовину, если кому интересно заходите в соседнюю ветку, чтобы здесь дальше не оффтопить:
http://www.sql.ru/forum/1005902/tulza-dlya-raboty-s-ishodnikami-bd
...
Рейтинг: 0 / 0
325 сообщений из 325, показаны все 13 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Выбор СУБД для небольшой Java-утилиты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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