2009-10-19 2 views
3

Я разрабатываю корпоративное программное обеспечение для крупной компании, использующей Oracle. В PL/SQL планируется разработать основной процессор. Мне интересно, существует ли какой-либо ORM, например Hibernate для Java, но для PL/SQL. У меня есть некоторые идеи, как создать такую ​​структуру с использованием системных таблиц PL/SQL и Oracle, но это интересно - почему никто раньше этого не делал? Как вы думаете, что будет эффективно в скорости и потреблении памяти? Зачем?ORM для Oracle pl/sql

+0

Что я имею в виду, так это то, что я могу создать набор объектов Oracle (используя «создавать или заменять типы FOO как объекты ..», созданные с помощью скрипта) , что облегчит дальнейшее развитие программного обеспечения pl/sql (в основном это будет содержать операции CRUD). Как вы думаете, будут ли эти объекты эффективными? – Arino

ответ

10

Существуют ORM, обеспечивающие интерфейс между агностическим языком базы данных, таким как Java и СУБД, например Oracle. PL/SQL в отличие от этого знает СУБД Oracle тесно и предназначен для работы с ним (и намного эффективнее, чем Java + ORM). Таким образом, ORM между PL/SQL и СУБД Oracle будет и лишним, и бесполезным!

+0

Что я имею в виду, так это то, что я могу создать набор объектов Oracle (используя «создавать или заменять типы FOO как объекты ..», созданные с помощью скрипта), что облегчит дальнейшую разработку программного обеспечения pl/sql (в основном это будет содержать CRUD). Как вы думаете, будут ли эти объекты эффективными? – Arino

+0

Я никогда не сталкивался с ситуацией, когда это было бы полезно, и я уверен, что производительность не будет столь же эффективной, как и код PL/SQL, который не использовал объекты. Вы также вполне вероятно потеряете возможность выполнять операции на основе набора и объемные вставки/обновления. –

2

Как указал Тони, ORM действительно служат помощником между границами контекста приложения и Db.

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

Plsqlintgen все еще кажется, что вокруг на http://sourceforge.net/projects/plsqlintgen/

+0

Как вы думаете, этот метод эффективен? – Arino

+0

Я думаю, это зависит от причины абстракции и размера проекта. Если у вас есть столы столов, это может быстро стать кошмаром для обслуживания. Производительность также может вызывать озабоченность. В общем, я стараюсь избегать этого шаблона, если только это не единственный способ удовлетворить проблемы безопасности (SOX, HIPPA и т. Д.). –

0

Oracle представляет собой базу данных отношений, а также имеет возможность работать как объектно-ориентированная база данных. Он делает это, создавая слой абстракции (довольно автоматически) поверх реляционной структуры. Это, по-видимому, устранит необходимость в любом «инструменте», поскольку он уже встроен.

1

Этот ответ содержит некоторые соображения о преимуществах и недостатках упаковки ваших таблиц в PL/SQL-таблицах (API таблицы) для операций CRUD.

Understanding the differences between Table and Transaction API's

Там была также хорошая дискуссия по этому вопросу в последние годы в Великобритании Oracle User Group - общий вывод был против использования таблиц API-интерфейсов и интерфейсов API транзакций, по той же причине - сила пл/sql - это процедурный контроль над операторами SQL, в то время как TAPI отталкивают вас от написания SQL-операций на основе набора и обработки строк за строкой.

Аргумент для TAPI - это то, где вы можете использовать какую-либо политику доступа, но Oracle предлагает множество других способов сделать это (мелкозернистый контроль доступа, ограничения, триггеры для вставки/обновления/etc могут быть используется для заполнения значений по умолчанию и обеспечения того, чтобы вызывающий код передавал действительный запрос).

Я бы определенно посоветовал не переносить таблицы в типы объектов PL/SQL.

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

myRec myTable%ROWTYPE 
INSERT INTO table VALUES myRec; 

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

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

Также может быть сложно освободить изменения, если вы используете наследование и коллекции типов (вы можете «заменить» пакет, но не можете заменить тип, если он используется другим типом).

Это не помещает OO PL/SQL вниз - есть места, где он определенно упрощает код (т. Е. Избегает дублирования кода, в любом месте, где вы явно выиграете от полиморфизма), - но лучше всего понимать и играть в сильные стороны язык и основная сила в том, что язык тесно связан с базовой БД.

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

Смежные вопросы