Oracle数据库设计视图还是表?

时间:2013-02-21 10:58:02

标签: oracle database-design view

我是数据库设计的新手,在尝试设计时遇到了问题。这是我的系统: 有3种不同的软件(SW_A,SW_B,SW_C)和500-600个用户。每个用户都可以使用任何软件并完成一些工作。每项工作都发送到数据库约。每分钟6次。 (随机用于用户和软件) 我希望数据库保留与归档软件相关的所有用户操作,并且还希望跟踪与这些软件相关的所有用户的即时操作。 (仅针对每个软件的不同用户的最新操作)

所以我设计了......那样:

表:SW_X_DATA_ARCHIVE

专栏:

  • 用户ID
  • Data_Date
  • SW_A_ActionID

表:SW_X_INSTANT_DATA

列:

  • UserID
  • Data_Date
  • SW_X_ActionID

当新数据到来时,如果该UserID存在,则更新INSTANT_DATA表的相关行,如果没有,则插入带有UserID的新行和数据。然后将相同的数据插入DATA_ARCHIVE表。

问题是:这种工作有更好的方法吗?观点可能? (我已经阅读了关于物化视图但不确定如何在此处使用它。) 感谢

1 个答案:

答案 0 :(得分:0)

Only the latest action for distinct users for each software

您的INSTANT表应该在(USERID,SOFTWAREID)上有一个唯一的复合键,因此不可能有多行与用户使用软件相关。

ARCHIVE表不需要这样的唯一键或约束。

如果(USERID,SOFTWARE)的行不存在,则insert进入INSTANT;如果该行已存在,则update行。

通常,插入/更新触发器将放置在INSTANT表中,以便在INSTANT发生更改时将行插入ARCHIVE。

编辑:或者,您可以维护单个表,并且具有仅针对每个软件选择每个用户的最新操作的视图。您需要为每个操作添加时间戳,并在(USERID,SOFTWAREID)上放置复合索引(非唯一)。决定采取哪种方法可能基于相对表现。如果经常需要最新动作信息,我倾向于支持触发器。