事件的数据库概念,它们之间的关系在特定时间执行

时间:2017-03-02 12:19:31

标签: mysql sql mongodb database-design database

所以我在数据库概念上挣扎着一个新项目。

我需要一个可以在它们之间建立关系的事件数据库,它们必须在特定时间执行。

示例:

id:1, user_from:1, user_to:2, 时间:08:00

id:2, user_from:2, user_to:1, 当07:30

id:3, user_from:3, user_to:2, 时间:07:00

如果id 1 的用户在08:01登录,则必须执行与id为 1 的用户有关系的每个事件。

这些示例中的问题

使用此示例,应该已执行所有三个事件,因为 1 2 有关系, 2 3 的。如果我将id 3 的事件更改为以下内容:

id:3,user_from:3,user_to:2,当09:00

id 3 的事件不应该被执行,因为'当' -index只是在08:01。

另一个问题:

如果id 3 的用户在09:00登录,则只应执行ID为 3 的事件。

我的问题:

有可能同时有超过10k个事件,但只有一个用于登录的用户,我不想计算所有事件的结果,我只想要那些事件与登录用户的关系。如何防止快速加载?

我的想法:

带有递归查询的MongoDB:

Recursive search on a collection in MongoDB

具有关系表的普通SQL数据库:

当新事件被添加到事件表中时,我将计算所有关系,因此当用户登录时我不需要关心它们。

感谢您的回复,并随时询问有关此问题的任何问题。我也对任何新的标题建议开放。很难描述......

1 个答案:

答案 0 :(得分:0)

将这两件事分开:原始数据。解释数据的业务逻辑。在数据库中执行任何逻辑可能都不明智。

对于数据库方面,您似乎有一个包含3列的表:(user_from,user_to,when)。如果whenuser_from之间只有一个user_to,则您不需要id

当可能需要用您的应用程序语言编写时该怎么做的算法。并且它可能需要在处理之前获取整个表。听起来这个算法需要在登录时应用。

加载10K行非常简单。由于您对事件(user1 - > user2 - > eventx)有“间接”引用,因此跟踪数据库中的“树”可能比使用应用程序语言更昂贵。