Генератор SQL бизнес-объектов. Вообще как это работает? Почему он это сделал:
Я создал отчет, который извлек 1 объект из таблицы Purchase_order (PO_REF) и один из таблицы ORG_ZONES (ZONE_NAME).
Зачем BO генерировать запрос, который объединяется с третьей таблицей, ОРГАНИЗАЦИЯ без причины?
Обратите внимание, что таблица ORGANIZATIONS связана как с таблицей PURCHASE_ORDER, так и с таблицей ORG_ZONES, поэтому в некотором смысле, если вы посмотрите на диаграмму отношений таблицы, вы увидите круг ссылок - если это уместно!
Вот результирующий SQL:
SELECT
PRELAY.PURCHASE_ORDER.PO_REF,
PRELAY.ORG_ZONES.ZONE_NAME
FROM
PRELAY.PURCHASE_ORDER,
PRELAY.ORG_ZONES,
PRELAY.ORGANIZATION
WHERE
( PRELAY.ORG_ZONES.ORG_ID=PRELAY.ORGANIZATION.ORG_ID )
AND
( PRELAY.PURCHASE_ORDER.SUPPLIER_ORG_ID=PRELAY.ORGANIZATION.ORG_ID(+)
AND PRELAY.ORGANIZATION.ORG_ID >1 )
AND ( PRELAY.ORG_ZONES.ZONE_ID=PRELAY.PURCHASE_ORDER.REMITTO_ZONE_ID
)
Почему генератор BO SQL сгенерировал SQL, включающий таблицу ORGANIZATION, если я не выбираю из этой таблицы, и в противном случае существует прямая связь между двумя таблицами, из которых я получаю данные?
Это пример действительно плохого инструмента генерации SQL? Есть ли способ избежать этого - или только на уровне отдельных отчетов?
1 ответ
Трудно сказать, не рассматривая вселенную Business Objects напрямую. Вы можете создать отдельную таблицу организационных зон в юниверсе и создать отдельные классы и объекты, которые ссылаются на таблицы. Это позволило бы избежать неправильной генерации SQL, но добавило бы немного большей сложности для конечных пользователей при попытке решить, какую зону использовать в отчете.