我正在将关系数据库转换为Oracle中的对象关系。
我有一个使用旧外连接的查询。
是否可以在没有明确使用完全外连接的情况下为O-R数据库编写相同的查询?
对于普通的内部连接,它很简单,我只使用点符号和ref / deref。
我对此感兴趣所以让我们说关系查询是:
select a.attr, b.attr from a full outer join b on (a.fk = b.pk);
我想知道这样做是否是个好主意:
select a.attr, b.attr from a_obj a full outer join b_obj b on (a.b_ref = ref(b));
答案 0 :(得分:3)
假设我有实体的“销售历史”和“销售预测”。对于给定的产品和期间,我希望看到实际销售与预测销售。但是,任何给定的时间段可能没有预测或实际销售,所以我使用SQL:
SELECT NVL(f.product_id, h.product_id), NVL(f.period, h.period),
f.forecast_sale, h.actual_sale
FROM forecast f
FULL OUTER JOIN history h ON h.product_id = f.product_id and h.period = f.period
基本上我在一个公共密钥上加入两个子表。完全外连接在关系数据库中很少见,因为规范化通常会将实体与公共密钥合并。左外连接和右外连接更常见,因为典型的用例是选择父项及其子项,即使父项没有子项也需要行。
因此,如果你有一个完整的外连接,首先要检查的是数据结构是否正确。
对象模型中的数据结构是固定的或“预先连接”的。如果模型中的数据结构不容易支持某个结果集的生成,那么你几乎不需要(或者至少编写很多功能来手动提取和加入数据)。
如果您发布有关相关数据结构的一些详细信息,建议可能会更精确。