|
|
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100В том и дело, что плач начинается тогда, когда нет статической модели, когда есть несколько/много одновременно работающих вариантов проекта. К тому же есть потребность выделять части проекта как самостоятельные проекты/модели. Т.е. есть case-модель, где имеется всё-всё-всё, но есть одновременно работающие проекты, где размещены только необходимые функциональные части от общего. Оформлять каждую часть модели как независимые или отдельные проекты/модели нецелесообразно, т.к. часто они взаимосвязаны и существует некое общее функциональное ядро, необходимое всем. А это уже стратегия разработки и общения с заказчиками. Если каждая хотелка оплачена мешком баксов, то почему бы и да? всем оплаченным хотелкам. ОЕБС внедряют модулями, затачивая под заказчика конкретного конфиг о доводя модуль напильником. Экономному заказчику - типовое решение - кушайте-с! как в анекдоте про автоматического парикмахера "так головы же у всех разные? - по первому разу- да". Щедрому заказчику - любой каприз за его ресурс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 09:36:12 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
ЛагманПо-моему, все-таки, здесь изобретают Liquibase Никак нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 09:55:49 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovPSV100В том и дело, что плач начинается тогда, когда нет статической модели, когда есть несколько/много одновременно работающих вариантов проекта. К тому же есть потребность выделять части проекта как самостоятельные проекты/модели. Т.е. есть case-модель, где имеется всё-всё-всё, но есть одновременно работающие проекты, где размещены только необходимые функциональные части от общего. Оформлять каждую часть модели как независимые или отдельные проекты/модели нецелесообразно, т.к. часто они взаимосвязаны и существует некое общее функциональное ядро, необходимое всем. А это уже стратегия разработки и общения с заказчиками. Если каждая хотелка оплачена мешком баксов, то почему бы и да? всем оплаченным хотелкам. ОЕБС внедряют модулями, затачивая под заказчика конкретного конфиг о доводя модуль напильником. Экономному заказчику - типовое решение - кушайте-с! как в анекдоте про автоматического парикмахера "так головы же у всех разные? - по первому разу- да". Щедрому заказчику - любой каприз за его ресурс. Да, всё так и есть. Мы как раз и выживаем, в основном, за счёт того, что свои типовые тиражируемые решения можем отшлифовать как нужно в каждом конкретном случае, плюс обвешивая специфичным функционалом, удовлетворяя все хотелки, с постоянным сопровождением и развитием. За исключением насчёт мешка баксов. У нас масштабы не уровня microsoft/oracle/sap и пр., и мы не можем скачать не один лям через откатинг и заниматься типовым бесконечным освоением бюджета разработкой/внедрением. Без адекватного инструментария можно обслужить 3-5, ну с десяток клиентов, дальше захлебнёшься и пойдёшь ко дну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:09:49 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123PSV100, а почему тебя не понесло ещё дальше? - Убрать статичное проектирование классов и "рожать" классы прямо на лету? В полную мощь использовать RTTI \ загрузу и изменение классов, добавление методов... - Чего ты вдруг занялся СУБД, а не модификацией ООП модели? Под net есть BLToolkit. Его основная фишка в том, что он активно генерирует код на лету. Собственно, он не уникален, вроде бы в том же хибере задекларировано, что он тоже чего-то там генерирует, но я в потрохах не разбирался. Генерация классов и методов на лету себя оправдывает по производительности, но речь идёт не о модификации ООП-модели, а о вспомогательной рутине для мапинга туда-сюда. Для своего "гибкого ООП" у нас есть свой ЯП. В рамках java-платформы пока этот вопрос исследуется. На сегодняшний день только у Кложуры замечен неплохой потенциал для подобных задач, но лисп, как конечный язык разработки, для нас неприемлем в большинстве случаев по ряду причин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:13:25 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100, imho не туда. - Большие системы делаются по другому. 2 модели + DSL. Одна модель - Ядро. Вторая модель сверху - предметная область = ERP. Но очень долго и дорого. Поэтому проще всё-таки иметь несколько проектов до скачка на ERP. А что касается Net то там всё по другому))). "Это другая вселенная". Т.е. тут очень трудно размежевать: версия \ дрругой_продукт \ конфигурация_одного_продукта. Я просто добавлял другому заказчику те-же фичи в СУБД, но снаружи у него был другой клиент и он их не видел. Т.е. модель в БД была одна для всех (многих). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:33:03 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
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-средства большие любители создавать некие условные виртуальные копии объектов, чтобы упростить визуальную компоновку на экране, уменьшая лес линий и пр. Возможно, через подобные копии что-то можно отразить (хотя это опять, фактически, дублирование функционала). Собственно, если кто-то укажет на правильную методику в таких случаях, буду признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:37:06 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123PSV100, imho не туда. - Большие системы делаются по другому. 2 модели + DSL. Одна модель - Ядро. Вторая модель сверху - предметная область = ERP. Но очень долго и дорого. ... Да, так и есть. У нас есть своё базовое ядро + DSL для предметки. Существенным отличием от многих ERP-подобных, пожалуй, есть то, что мы стараемся поменьше отстраняться от SQL, поменьше прикладных абстракций высокого уровня. Так получилось исторически, к тому же это оказалось хорошим потенциалом для гибкости, относительно быстро решать те задачи, на которые не рассчитывали раньше или которые хренового поддерживает ядро. И свой DSL помогает для всякой sql-генерации. Минус - привязка к СУБД. А рассматриваемые здесь потенциальные инструментарии не завязаны на конкретные клиентские платформы, это типа универсальные помощники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2013, 17:59:30 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 10:19:08 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100 клиенту захотелось иметь код ISBN - выходит НОВАЯ версия 2.3.4 как сервера (папка скрипты), так и EXE\HTML (папка деплой\exe) - а если у вас ERP то ядро старое, только на местах у заказчика - новая КОНФИГУРАЦИЯ. авторникто не заморачивается какими-то версиями, поле добавляется всем, - не так. Версия есть. А вот кому ставить новую или нет - нет проблем (скрипты ..\2.3.4 накатить). PSV100 понадобилось удобно формировать заказы для своего поставщика, а у того есть своя кодировка книг, причём логика которой подогнана под тип Integer - классификаторы \ импорт классификаторов \ перекодировка классификаторов \ ETL не пиши так много. Что ещё непонятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 10:31:48 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123, Имхо бессмысленный спор... ERwin и прочие CASE-средства это крутая штука, без вопросов, никто с этим здесь не спорит. Но существуют такие организации и люди, в них работающие (и их достаточно много), которые ну никак не могут их применять в своей работе. У кого то исторически так сложилось, у кого то денег нет, а у кого то есть мощные и обоснованные аргументы по этому поводу (особенно при разработке т.н. data centric-приложений, там где на стороне базы, помимо табличек и жиденьких триггеров, сконцентрирована бизнес логика приложения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 13:11:13 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим НPetro123, Имхо бессмысленный спор... ERwin и прочие CASE-средства это крутая штука, без вопросов, никто с этим здесь не спорит. Но существуют такие организации и люди, в них работающие (и их достаточно много), которые ну никак не могут их применять в своей работе. У кого то исторически так сложилось, у кого то денег нет, а у кого то есть мощные и обоснованные аргументы по этому поводу (особенно при разработке т.н. data centric-приложений, там где на стороне базы, помимо табличек и жиденьких триггеров, сконцентрирована бизнес логика приложения). в том то и дело, что аргументов, я пока не видел. - если БЛ в БД большая, то где она хранится? Без IDE ErrWin \ IBExpert \ PLSQLDeveloper в SQL папках? То что исторически в Java с IDE по БД мало работают - я в курсе. Это специфика ОРМ и 3-х звенки. А "data centric-приложений" - это тоже специфика в квадрате)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 13:18:37 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123- если БЛ в БД большая, то где она хранится? Без IDE ErrWin \ IBExpert \ PLSQLDeveloper в SQL папках? В sql-папках и файлах хранится исходный код объектов, что как бы вполне естественно - есть код (java, c++, sql, какой угодно) и он лежит в файликах в СКВ со всеми вытекающими (версионирование, бранчинг, слияние, сборка с разными опциями и многое другое). Каких то препонов использовать полюбившиеся IDE-шки, CASE-средства - НЕТ, на здоровье. А маааааленькая тулза поможет организовать структуру хранения это кода, его контрол и сборку. Кто работает полностью с визуальными средствами разработки БД, выгружает дампы, генерит дифф скрипты, то пожалуйста, используйте дальше, кому как удобно. Ну а тем разработчикам, для которых код объектов первостепенен, которые пляшут именно от него, программируют БД с помощью нативного SQL, версионируют его, делают различные сборки, ночные билды и т.д. тем возможно будет полезна эта утилита. Как минимум ей буду пользоваться я. Petro123А "data centric-приложений" - это тоже специфика в квадрате)) насчет квадрата не знаю, но специфика есть, приложения бывают достаточно сложными и визуалка может не удовлетворять требованиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:07:20 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим ННу а тем разработчикам, для которых код объектов первостепенен, которые пляшут именно от него, программируют БД с помощью нативного SQL, версионируют его, делают различные сборки, ночные билды и т.д. тем возможно будет полезна эта утилита. Как минимум ей буду пользоваться я. ok.... -1.... и на этом закончим. Т.к. "код объекта" для РСУБД прекрасно используют IDE выше. Наверно вы понимаете под этим термином что-то своё (невизуальное типа if-else). Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 14:24:03 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
а как добавляются колонки в таблицы ALTER TABLE ADD ........... - тут непонятно что версионировать. DROP TABLE - CREATE TABLE ...... тут можно отслеживать как изменились скрипты создания таблиц от версии к версии, только с данными не вполне хорошо выходит.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 18:49:21 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
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. дать команду и в соседнем буфере в файле с историей изменений сгенерировать DDL-текст для правки таблицы в виде операторов "alter table ..." и "comment on ...", которые тут же можно выполнить, добавить свои комментарии и т.д. Или в соседнем буфере вывалить список зависимостей объекта, причём как в базе, так и в клиентском коде. И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 19:35:36 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
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/пустые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 19:46:38 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100, Почему мне кажется, что этот инструмент - потенцальный источник очень серьёзных проблем для Вашего продукта? Причем проблем именно тех, которые по Вашему он решает. Хотя данные о кол-ве внедрений и размерах БД например, развеяли бы мои сомнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 19:46:42 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
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. Получается нужно вручную создать разные модели для каждого случая, где: - нет столбцов 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 19:58:51 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
ЛагманPSV100, Почему мне кажется, что этот инструмент - потенцальный источник очень серьёзных проблем для Вашего продукта? Причем проблем именно тех, которые по Вашему он решает. Не совсем понятно о каком инструменте (и проблемах) идёт речь - об утилите от автора этой темы форума, об ErWin/Case (о которых выше постоянно говорили), или о моих предложениях насчёт способа разработки БД, которые были где-то раньше по постам ? ЛагманХотя данные о кол-ве внедрений и размерах БД например, развеяли бы мои сомнения. Если речь идёт о тиражируемых решениях (имеются также индивидуальные разработки с единственным внедрением, за редким исключением, соответственно с меньшими проблемами на счёт инвариантности и разного функционального состава), то в общей сложности обслуживается несколько сотен баз, но у одного заказчика может быть несколько баз (и даже не один десяток). Сама база может содержать от пары десятков таблиц до нескольких сотен объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 20:26:04 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123ok.... -1.... и на этом закончим. Т.к. "код объекта" для РСУБД прекрасно используют IDE выше. Как раз GUI-IDE не используют исходный код объекта. Они его генерируют, причём по своим правилам, не всегда приемлемым. Если для IDE подать sql-скрипт с кодом объекта, скажем, в виде оператора "create table ...", который будет удобно отформатирован, с документацией и комментариями и т.д., то IDE его прекрасно проглотит, т.е. выполнит. Но если "открыть" этот же объект (таблицу), скажем, из дерева объектов базы, то исходного кода уже не будет - получим "create table ..." в том виде, как захотелось IDE (на основе того, чего она может выжать из метаданных). Причём, скажем, если в БД сохраняется исходный код тела процедуры/триггера, то исходника заголовка может не быть (информация о входных/выходных параметрах, свойства триггера и пр. размазывается по метаданным). (к тому же обычно IDE не обладают удобным текстовым редактором и удобным управлением средой уровня vim/emacs/Sublime/JEdit/по вкусу, лично для меня это не последний бонус). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2013, 20:54:05 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
мне кажется все проблемы от незнания "версионирования продуктов". Я ведь отвечал на этот вопрос PSV100Далее, я не понимаю как "зарисовать" ситуацию выше на счёт "книг", т.е. как замоделить такой код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Получается нужно вручную создать разные модели для каждого случая, где: - нет столбцов 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 10:16:56 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100Petro123ok.... -1.... и на этом закончим. Т.к. "код объекта" для РСУБД прекрасно используют IDE выше. Как раз GUI-IDE не используют исходный код объекта. Они его генерируют, причём по своим правилам, не всегда приемлемым. Если для IDE подать sql-скрипт с кодом объекта, скажем, в виде оператора "create table ...", который будет удобно отформатирован, с документацией и комментариями и т.д., то IDE его прекрасно проглотит, т.е. выполнит. Но если "открыть" этот же объект (таблицу), скажем, из дерева объектов базы, то исходного кода уже не будет - получим "create table ..." в том виде, как захотелось IDE (на основе того, чего она может выжать из метаданных). Причём, скажем, если в БД сохраняется исходный код тела процедуры/триггера, то исходника заголовка может не быть (информация о входных/выходных параметрах, свойства триггера и пр. размазывается по метаданным). (к тому же обычно IDE не обладают удобным текстовым редактором и удобным управлением средой уровня vim/emacs/Sublime/JEdit/по вкусу, лично для меня это не последний бонус). опять много букв, но вся логическая цепочка от неверного посыла. Поэтому, весь пост - в корзину. ErWin генерирует код ровно так, как ты захочешь. Т.к. у каждого объекта есть окно - ручной код. Есть кнопка - сгенерировать код. И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 10:20:56 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
И кстати, я очень доволен, что у нас есть свой велосипед, как минимум, только из-за того, что даёт возможность работать в удобном для себя текстовом редакторе, со своими соответствующими плюшками, вместо GUI-IDE, позволяя непосредственно работать именно с текстом. К примеру, для меня, как программиста, приятнее/удобнее и быстрее, скажем, быстро подправить код в sql-файле вида: Согласен, нормальный программист не станет по своей воле пользоваться IDE и вообще программами с GUI. Для разработки должно быть достаточно текстового редактора, юникс утилит и какой-нибудь билд системы. Если требуется что-то еще, то значит завелась гниль, которая в будущем скажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 11:59:42 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123опять много букв, но вся логическая цепочка от неверного посыла. Поэтому, весь пост - в корзину. ErWin генерирует код ровно так, как ты захочешь. Т.к. у каждого объекта есть окно - ручной код. Есть кнопка - сгенерировать код. И т.д. Т.е. альтернатив ERwin'у и подходу работы с СУБД им навязываемого предлагаемого - нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2013, 12:34:47 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=38256094&tid=2129029]: |
0ms |
get settings: |
19ms |
get forum list: |
21ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
50ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
89ms |
get tp. blocked users: |
3ms |
| others: | 320ms |
| total: | 538ms |

| 0 / 0 |
