在 Oracle 中创建四个不同但相似的表的视图。做这个的最好方式是什么?
Create a view of four different yet similar tables in Oracle. What is the best way to do this?
我有以下四种不同的table。
Param_SYSTEM (Name,Value,Type,Size,Filler)
Param_NodeId (Name,Value,Type,Size,NodeId,Filler)
Param_NodeTyp (Name,Value,Type,Size,NodeTyp,Filler)
Param_LRGRP (Name,Value,Type,Size,DataType,Qual1,Qual2)
假设所有项目都是 VARCHAR。
可能大小是 INT
我想要的是 "UNION ALL" 但如果我理解正确的话,只有当我的所有 table 列都是一对一匹配时才有效,而这里不是这种情况(参见 LRGGRP table)
我应该改用 Join 吗?
我应该使用普通视图还是物化视图?
我们的数据集很小(100k左右),每次获取最新数据很重要
提前致谢!
您的问题过于笼统,无法回答。但是,即使您提供了更多信息,您问题的最佳答案也可能以听起来像这样的警告结尾...
无论您测试哪种解决方案,您都希望至少根据以下变量评估它们各自的优点:(a) 易于维护,(b) 响应时间,以及 (c) 资源消耗。
您可能必须严格测试所有解决方案的原因是 Oracle 远非简单,您的信息(包括需求)会随着时间而改变。保持测试定义和测试结果是一个值得养成的好习惯。
换句话说,在这个特定情况下可能对你有好处的事情对于那些认为他们和你在同一条船上的人(包括你未来的自己)来说可能是可怕的。
如果需要以某种关系显示数据,请使用join。如果你有不相关的行集并且你想 select 它们都在一个语句中,请使用 union all
。
如果您确定 UNION ALL
,只需向列提供 NULL
值, 在部分查询中不相关:
create view param_vie (Name, Value, Type, Size, Filler, NodeId, NodeTyp, DataType, Qual1, Qual2) as
select Name,Value,Type,Size,Filler, null, null, null, null, null
from Param_SYSTEM
union all
select Name,Value,Type,Size,Filler, NodeId, null, null, null, null
from Param_NodeId
union all
select Name,Value,Type,Size,Filler, null, NodeTyp, null, null, null
from Param_NodeTyp
union all
select Name,Value,Type,Size,Filler, null, null, DataType, Qual1, Qual2
from Param_LRGRP
我有以下四种不同的table。
Param_SYSTEM (Name,Value,Type,Size,Filler)
Param_NodeId (Name,Value,Type,Size,NodeId,Filler)
Param_NodeTyp (Name,Value,Type,Size,NodeTyp,Filler)
Param_LRGRP (Name,Value,Type,Size,DataType,Qual1,Qual2)
假设所有项目都是 VARCHAR。 可能大小是 INT
我想要的是 "UNION ALL" 但如果我理解正确的话,只有当我的所有 table 列都是一对一匹配时才有效,而这里不是这种情况(参见 LRGGRP table)
我应该改用 Join 吗?
我应该使用普通视图还是物化视图?
我们的数据集很小(100k左右),每次获取最新数据很重要
提前致谢!
您的问题过于笼统,无法回答。但是,即使您提供了更多信息,您问题的最佳答案也可能以听起来像这样的警告结尾...
无论您测试哪种解决方案,您都希望至少根据以下变量评估它们各自的优点:(a) 易于维护,(b) 响应时间,以及 (c) 资源消耗。
您可能必须严格测试所有解决方案的原因是 Oracle 远非简单,您的信息(包括需求)会随着时间而改变。保持测试定义和测试结果是一个值得养成的好习惯。
换句话说,在这个特定情况下可能对你有好处的事情对于那些认为他们和你在同一条船上的人(包括你未来的自己)来说可能是可怕的。
如果需要以某种关系显示数据,请使用join。如果你有不相关的行集并且你想 select 它们都在一个语句中,请使用 union all
。
如果您确定 UNION ALL
,只需向列提供 NULL
值, 在部分查询中不相关:
create view param_vie (Name, Value, Type, Size, Filler, NodeId, NodeTyp, DataType, Qual1, Qual2) as
select Name,Value,Type,Size,Filler, null, null, null, null, null
from Param_SYSTEM
union all
select Name,Value,Type,Size,Filler, NodeId, null, null, null, null
from Param_NodeId
union all
select Name,Value,Type,Size,Filler, null, NodeTyp, null, null, null
from Param_NodeTyp
union all
select Name,Value,Type,Size,Filler, null, null, DataType, Qual1, Qual2
from Param_LRGRP