在Oracle SQL中规范化表

在Oracle SQL中规范化表,sql,oracle,plsql,normalization,normalize,Sql,Oracle,Plsql,Normalization,Normalize,我想知道是否有人可以帮助我提供一些指导,告诉我如何最有效地规范下表,以便创建一个可刷新的视图/表 表1: SYSTEM_KEY | ID | ORDER | ORDER_STATUS | SYSTEM_Actions A 1 Pencil Open Shipped B 1 Pencil Open Tested C 1 Pencil Open

我想知道是否有人可以帮助我提供一些指导,告诉我如何最有效地规范下表,以便创建一个可刷新的视图/表

表1:

SYSTEM_KEY | ID | ORDER | ORDER_STATUS | SYSTEM_Actions
A             1   Pencil   Open          Shipped   
B             1   Pencil   Open          Tested  
C             1   Pencil   Open          Shipped    
A             1   Paper    Closed        Delivered
我希望以可重复的方式将此表规范化为如下内容:

结果:

ID | ORDER | Order Status | A_actions | B_Actions | C_Actions 
1    Pencil  OPEN           Shipped     Tested      Delivered                   
1    Paper   Closed         Delivered    null       null
我可以通过做类似的事情来实现这一点

Select full.ID, full.order, full.orderstatus, case when system_ID = 'A' then sysa.system_actions as A_actions, ....{for B, C} 
from table1 full
left join table1 sysa on full.id = sysa.id and full.order = sysa.order
left join table1 sysb on full.id = sysb.id and full.order = sysb.order  
虽然这似乎是可行的,但由于必须使用多个临时表才能重复使用,这是相当笨拙的


有人知道我是否有一个好方法可以实现这一点吗?

尝试使用GROUPBY子句

select id,order,order_status,
       case when system_ID = 'A' then system_actions as A_actions,
       case when system_ID = 'B' then system_actions as B_actions,
       case when system_ID = 'C' then system_actions as C_actions
from table1
group by id,order,order_status

查找轴、模型或总和(案例…)。仅此一项,就必须有数百个示例。这不是规范化。事实上,它甚至没有原始表那么规范化。您的建议是通过添加一组重复的操作来取消表的规范化。也许你应该考虑一下。您提议的更改将使表更难处理,将导致处理它的代码更复杂,更容易出错,将神的愤怒召唤到您的头上和您的后代七代人,并可能导致我们所知的世界末日。祝你好运