Как избежать ручного написания/управления SQL

Моя команда и я быстро разрабатываем веб-приложение, поддерживаемое базой данных Oracle. Мы используем плагин maven flyway для управления созданием и заполнением базы данных из сценариев INSERT SQL. Обычно мы добавляем 3-4 таблицы за спринт и/или модифицируем существующую структуру таблиц.

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

Мы тратим слишком много времени на управление изменениями в SQL для охвата новых таблиц — под этим я подразумеваю добавление данных дополнительных столбцов к существующим операторам SQL INSERT, не говоря уже о ручном создании новых данных SQL INSERT, особенно когда они ссылаются на чужие ключ.

Наверняка есть другой способ, возможно, сохранение необработанных данных в Excel и передача их через парсер в БД. У кого-нибудь есть идеи?

На данный момент 10 таблиц и до 1000 операторов SQL, БД не работает, поэтому мы сносим ее при каждой сборке.

Спасибо

Изменить: вставленные данные представляют собой статические справочные данные, от которых зависит функция платформы - меню и т. Д. Архитектура - Tomcat, JSF, Spring, JPA, Oracle.


person Magoo    schedule 26.02.2014    source источник
comment
на каком языке и фреймворке вы пишете веб-приложение   -  person mmmmmm    schedule 27.02.2014
comment
JSF, JPA и Spring - спасибо   -  person Magoo    schedule 27.02.2014
comment
Тогда посмотрите на Hibernate — хотя вам все равно придется изменять код для каждого изменения схемы.   -  person mmmmmm    schedule 27.02.2014
comment
Мы использовали Excel с вычисляемым столбцом, содержащим вставку SQL. Это сработало хорошо.   -  person Leos Literak    schedule 27.02.2014
comment
Вы имеете в виду макрос в EXCEL, который принимает столбцы в качестве входных данных и генерирует вывод SQL?   -  person Magoo    schedule 27.02.2014


Ответы (2)


Пожалуйста, храните необработанные данные в таблицах базы данных — эй! с какой стати вы хотите использовать Excel для этого? У вас есть Oracle Database — лучший инструмент для работы!

Загрузите необработанные данные с помощью SQL*Loader или внешних таблиц в обычные таблицы базы данных. Оттуда у вас есть SQL — самый мощный инструмент rdbms для управления вашими данными. НИКОГДА не делайте медленные вставки. (1000 операторов SQL). Пожалуйста, сделайте КТАС. Добавьте/включите ограничения ПОСЛЕ того, как вы загрузили все данные.

create table t as select * from raw_data; 

or 

insert into t (x,y,z) select x,y,z from raw_data;

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

Выполняйте все операции с данными в SQL или PLSQL. (нет в приложении)

  • Пожалуйста, уделите время изучению базы данных Oracle. Он полон функций для вас!
  • Не используйте его просто как дамп данных (место, где вы храните свои данные). Создавайте пакеты — интерфейсы к вашему приложению — свой API к базе данных.
  • Не разбрасывайтесь тысячами операторов, скомпилированных в ваше приложение. Будет грязно.
  • Постройте свою бизнес-логику внутри базы данных PLSQL — используйте свое приложение для презентации.

Удачи!

person Bjarte Brandt    schedule 26.02.2014
comment
+1, но этот ответ можно было бы сформулировать лучше. Вместо того, чтобы умолять «Пожалуйста, сделайте X», лучше сказать «Вы должны сделать X», потому что… - person Jeffrey Kemp; 27.02.2014

В качестве альтернативы у вас также есть возможность реализовать миграцию Java. Он может читать любые входные данные, которые у вас есть (Excel, csv,...) и выполнять соответствующие вставки.

person Axel Fontaine    schedule 27.02.2014