Rails с DB2 и несколькими схемами - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть «устаревшая» база данных DB2, в которой есть много других приложений и пользователей. Пытаюсь поэкспериментировать с приложением rails. Все отлично работает с драйвером ibm_db.

Проблема в том, что у меня есть некоторые таблицы, такие как schema1.products, schema1.sales и другие таблицы, такие как schema2.employees и schema2.payroll.

В соединении адаптера ibm_db я задаю схему, например, schema1 или schema2, и я могу работать в этой одной схеме, но мне нужно иметь возможность легко (и прозрачно) ссылаться на обе схемы в основном взаимозаменяемо. Я не хочу ломать другие приложения, и SQL, который я обычно пишу для DB2, не имеет ни одного из этих ограничений (схемы могут быть смешаны в SQL с DB2 без каких-либо проблем).

Я хотел бы просто указать имена таблиц, например, как "schema1.products", и покончить с этим, но, похоже, это не сочетается с "рельсовым способом".

Предложения?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2010

Схемы в DB2 - очень удобный способ предоставления отдельного пространства имен для различных приложений. Например, вы можете отделить все объекты базы данных для приложения, называемого «рекрутинг», от приложения, называемого «платежная ведомость». Вы можете иметь объекты (таблицы, представления, процедуры и т. Д.) С одинаковыми именами, находящиеся в нескольких схемах и не совпадающие друг с другом. Создание схемы для вашего приложения - удобный способ сказать: «Эй, я заработная плата, и я хочу работать только с моими объектами». Итак, что происходит, когда вы хотите работать с объектами, принадлежащими другому приложению? Что ж, в традиционных процедурных языках программирования код вашего приложения будет явно указывать схему при обращении к объекту в другой схеме, или вы просто сделаете SET CURRENT SCHEMA для переключения на другую схему. Проблема с ORM, такими как ActiveRecord в Ruby on Rails, заключается в том, что вы не должны использовать SQL, т. Е. У вас нет хорошего «пути Rails» для указания схемы при обращении к объекту. Вы можете использовать find_by_sql и квалифицировать ваши объекты в операторе SQL, но это не то, что люди из RoR считают хорошим Rails. Вы можете исправить положение на стороне DB2. Вы можете определить представление для каждой таблицы в «внешней» схеме, но вам нужно будет позаботиться о том, чтобы дать имя представлению, чтобы оно не совпадало с тем, что у вас уже есть в основной схеме. И когда вы это сделаете, вы, несомненно, создадите имена, которые не являются настоящими именами Rails. Rails люди очень гордятся "Rails way". Это позволяет очень легко создавать новые приложения. Rails действительно потрясающий в этом пространстве. Однако, когда дело доходит до интеграции с уже существующим Rails ... как мы это говорим ... отстой. Я полагаю, вам придется согласиться на то, что не является лучшим примером Rails Way, если вы хотите работать с существующими структурами базы данных.

...