1

去年,我们推出了http://tweetMp.org.au - 一个致力于澳大利亚政治和推特的网站。

去年年底,我们的政客架构需要调整,因为一些政客退休了,新政客进来了。

更改我们的数据库需要手动 (SQL) 更改,因此我正在考虑为我们的管理员实施一个 CMS,以便将来进行这些更改。

还有许多其他网站是政府/政治网站为澳大利亚管理自己的政治数据的。

我想提出一种集中的方式来做到这一点。

经过一段时间的思考,也许最好的方法是不对政治数据的当前视图以及它们与政治体系的关系进行建模,而是对交易进行建模。这样当前视图是过去发生的所有事务/更改的投影。

使用这种方法,其他站点可以“订阅”更改(la`pubsubhub)并提交更改并将这些更改项集成到他们的模式中。

如果没有这种方法,大多数站点将不得不拆除整个数据库并重新填充它,因此任何关联的记录都需要重新关联。以这种方式管理数据非常烦人,并且严重阻碍了将这些数据用于公共利益的混搭。

我注意到有些事情是这样工作的——源代码版本控制、银行记录、stackoverflow 积分系统和许多其他示例。

当然,这种方法的直接挑战和设计问题包括

  • 当前视图是否被缓存并重新持久化?多久更新一次?
  • 哪些基本实体必须存在且永不改变?
  • 可能还有更多我现在想不出来的东西......

是否有任何人可以推荐的关于这个主题的著名文献?此外,像这样的数据建模的任何模式或实践可能有用吗?

任何帮助是极大的赞赏。

-简历

4

1 回答 1

2

这是数据建模中相当普遍的问题。基本上可以归结为:

现在对视图感兴趣,对某个时间点的视图感兴趣,还是两者兼而有之?

例如,如果您有一个模拟订阅的服务,您需要知道:

  • 某人在某个时间点获得了哪些服务:这需要计算出要收取多少费用,查看帐户的历史记录等等;和
  • 某人现在拥有什么服务:他们可以在网站上访问什么?

这类问题的出发点是要有一个历史表,比如:

  • 服务历史:id、userid、serviceid、start_date、end_date

将用户的服务历史链接在一起,您就有了他们的历史。那么你如何模拟他们现在拥有的东西?最简单(也是最非规范化的视图)是说最后一条记录或具有 NULL 结束日期或当前或未来结束日期的记录是他们现在拥有的。

正如您可以想象的那样,这可能会导致一些粗糙的 SQL,因此这是有选择地去规范化的,因此您有一个服务表和另一个历史表。每次更改服务时,都会创建或更新历史记录。这种方法使历史表更像是一个审计表(您会看到另一个术语)。

这与您的问题类似。你得知道:

  • 谁是众议院每个席位的现任议员;
  • 谁是每个席位的现任参议员;
  • 谁是每个部门的现任部长;
  • 谁是首相。

但是您还需要知道在某个时间点这些事物中的每一个是谁,因此您需要所有这些事物的历史。

所以在 2003 年 8 月 20 日,Peter Costello 发布了一份新闻稿,你需要知道此时他是:

  • 希金斯的成员;
  • 司库;和
  • 副总理。

因为可以想象,有人可能会对查找 Peter Costello 或财务主管的所有新闻稿感兴趣,这将导致相同的新闻稿,但如果没有历史,就无法追踪。

此外,您可能需要知道哪些座位在哪些州,可能是地理边界等。

这些都不需要更改架构,因为架构应该能够处理它。

于 2010-01-16T03:49:50.813 回答