0

我需要实现一种具有以下能力的机制:

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

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

  • 在那个时期在系统中可用
  • 启用
  • 已禁用

结果应该是那个确切的时间段。

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

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

我现在没有任何设置,所以我很乐意接受任何想法。实际上,我正在考虑一种类似 a 的机制log,您可以稍后对其进行查询,但它应该非常快,因为我需要在很多地方使用它。

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

4

1 回答 1

1

根据评论,研究缓慢变化的维度:

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

一个额外的顶部,我自己已经实施了几次。就个人而言,我发现最好有两组表,而不是单组。

将主表视为带有额外 rev(用于 revision_id)字段的普通表:

id, rev, field1, field2

rev 是修订表的外键:

id, rev, field1, field2, start_date, end_date

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

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

于 2013-05-06T20:52:06.673 回答