2013-05-06 96 views
0

我需要实现具有以下能力的机构找到有效/无效用户:策略在一段时间

  • 添加新用户
  • 删除用户
  • 使用户
  • 禁用用户

还让管理员选择一段时间,然后显示哪些用户是:

  • 可在该系统中的该期间
  • 启用
  • 残疾人

结果应该是的时间,准确的时间段。

注意:用户可能已启用或禁用多次,我需要跟踪每一次更改。因此,如果用户在3月1日和4月2日之间被禁用,如果管理员查询3月1日到4月2日之间的时间段,则不应将结果显示在结果中,但如果管理员查询,结果中应包含该结果任何其他时间段。

此外,棘手的部分是包含在管理员查询期间之前添加,删除,启用或禁用的用户。

我现在还没有设置任何设置,所以我对任何想法都很满意。其实我正在考虑一个像log这样的机制,你可以稍后查询它,但它应该非常快,因为我需要在很多地方使用它。

另外我更喜欢在单个MySQL查询中完成所有操作,但PHP组合/交互也可以。

+1

问题是...? Methinks研究慢慢变化的维度并回来:http://en.wikipedia.org/wiki/Slowly_changing_dimension – 2013-05-06 13:45:28

+0

@Denis感谢您的意见,我现在正在阅读......:) – Mahdi 2013-05-06 13:48:08

+0

@Denis再次感谢,这真的很有帮助。我仍然没有实施解决方案,但我明白了。请重新发送您的评论作为答案,以便我可以选择它作为接受的答案。我相信它可以帮助其他人! :) – Mahdi 2013-05-06 20:06:41

回答

1

每评论,看看渐变维度:

http://en.wikipedia.org/wiki/Slowly_changing_dimension

额外的顶部,已实施了几次自己。就我个人而言,我发现最好有两组表格,而不是单一表格。主要的一个作为一个额外的REV(用于REVISION_ID)一个普通表的

想想场:

id, rev, field1, field2 

转是一个外键修改表:

id, rev, field1, field2, start_date, end_date 

如果你曾经使用Postgres来实现它,我建议查看tsrange类型而不是两个单独的start_date和end_date类型。

主表与历史表使“正常”查询执行更好,更容易索引。

+0

谢谢,知道这件事真的很好。我认为我只是面临一个奇特的问题,我最终需要重构我的结构,但是我从中学到了非常好的东西。还要感谢'tsrange',因为我也在处理地理数据,所以我最终可能会转向Postgres,因为它在某些(很多?)情况下似乎比MySQL更好。 :) – Mahdi 2013-05-07 07:42:49

+0

做到这一切。 :-) – 2013-05-07 12:13:44