我是数据库设计的新手,在尝试设计时遇到了问题。这是我的系统: 有3种不同的软件(SW_A,SW_B,SW_C)和500-600个用户。每个用户都可以使用任何软件并完成一些工作。每项工作都发送到数据库约。每分钟6次。 (随机用于用户和软件) 我希望数据库保留与归档软件相关的所有用户操作,并且还希望跟踪与这些软件相关的所有用户的即时操作。 (仅针对每个软件的不同用户的最新操作)
所以我设计了......那样:
表:SW_X_DATA_ARCHIVE
专栏:
表:SW_X_INSTANT_DATA
列:
当新数据到来时,如果该UserID存在,则更新INSTANT_DATA表的相关行,如果没有,则插入带有UserID的新行和数据。然后将相同的数据插入DATA_ARCHIVE表。
问题是:这种工作有更好的方法吗?观点可能? (我已经阅读了关于物化视图但不确定如何在此处使用它。) 感谢
答案 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)上放置复合索引(非唯一)。决定采取哪种方法可能基于相对表现。如果经常需要最新动作信息,我倾向于支持触发器。