0

我是数据库设计的新手,在尝试设计数据库时遇到了问题。这是我的系统:有 3 个不同的软件(SW_A、SW_B、SW_C)和 500-600 个用户。每个用户都可以使用任何软件并做一些工作。每件作品大约会被发送到数据库。每分钟 6 次。(用户和软件随机)我想要一个数据库来保存与软件相关的所有用户操作以进行存档,并且还想跟踪与这些软件相关的所有用户的即时操作。(仅针对每个软件的不同用户的最新操作)

所以我设计了某事。像那样:

表:SW_X_DATA_ARCHIVE

列 :

  • 用户身份
  • 数据_日期
  • SW_A_ActionID

表:SW_X_INSTANT_DATA

列:

  • 用户身份
  • 数据_日期
  • SW_X_ActionID

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

问题是:这种工作有更好的方法吗?意见也许? (我读过一些关于物化视图的文章,但不知道如何在这里使用它。) 谢谢

4

1 回答 1

0

Only the latest action for distinct users for each software

您的 INSTANT 表应该在 (USERID,SOFTWAREID) 上有一个唯一的复合键,这样就不可能有超过一行与用户对软件的使用有关。

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

insert如果 (USERID, SOFTWARE) 的行不存在,或者update该行已经存在,您将进入 INSTANT。

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

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

于 2013-02-21T11:21:21.413 回答