查看数据库中新(不同)事件的“日志”

时间:2010-12-14 16:48:25

标签: database database-design

我的应用程序在其数据库中有几个不相关的表。我将使用SO主页的“自动更新”版本作为示例进行解释,因此我要假设我有“用户”,“评论”表格, “的问题”。

主页客户端需要定期轮询服务器,并获取已发生的所有新“事件”的日志。即,我想(以某种方式)显示自上次投票以来已添加到SO的新问题,评论和用户。

在途中,只需在客户端保留一个包含每个表的最后一个索引的变量,将其发送到服务器,让服务器向我发送新用户,评论和问题。

问题是,当我添加新类型的信息(例如投票)时会发生什么。现在我必须在客户端存储另一个变量,服务器必须轮询另一个表。等等,对于我保留的每种新类型的信息。

我正在寻找一种可以帮助我避免这种情况的解决方案。

另一个问题 - 说我希望看到自上次以来发生的所有“事件”,但根据它们发生的时间排序。

我的一个方向是拥有一个“事件”表,其中包含有关每个事件发生时间的信息。然后,我可以仅轮询此表,并获取已发生的所有新事件的列表。问题是每个事件都是非常不同的(一个新的评论有不同的列而不是一个新的upvote等)所以我不确定如何实现这个,或者这是一个好主意。

有没有人有任何想法我怎么解决这个问题?这看起来好像会出现很多东西,但不幸的是,我对数据库没有多少经验。

谢谢!

1 个答案:

答案 0 :(得分:1)

听起来像你正试图通过数据库设计进行未来证明。虽然这可以通过EVA model的某些事情来实现,但我提醒我注意这一点,因为它增加的价值往往不值得花费。

相反,您应该尽可能地将数据库建模为与现实紧密相关,而不是您打算如何使用它。

然后使用SQL将数据投影到您需要的方式。您可以通过将提供所需元数据的语句来执行此操作

e.g。

Select 
  Count(ID) , 'Comments' Type
From 
  Comments
Where
  lastUpdate > #InputParamter1#
UNION Select 
  Count(ID) , 'Questions' Type
From 
  Questions
Where
  lastUpdate > #InputParamter1#

或(这不经常使用)

一次性从数据库中返回多个结果集

Select 
    userid,
    ComentText
From 
    Comments
 Where
      lastUpdate > #InputParamter1#;
Select
    userId,
    Questions,
    Tags
From 
    Questions
 Where
      lastUpdate > #InputParamter1#

那说如果添加新东西,你仍然需要编写一些代码,但它应该仅限于更新你的sql,为你的数据添加新的容器,然后代码显示给最终用户,然后验证和存储它

老实说,添加需要一些工作的新东西的想法对我来说似乎并不可怕。