dav*_*ave 8 sql sql-server database-design temporal-database
我们使用第三方产品来管理我们的体育中心会员资格.我们有几种会员类型(例如,初级,学生,员工,社区)和几种会员身份(例如,年度,活动,非活动,暂停).不幸的是,该产品仅记录会员当前的会员类型和状态.我希望能够跟踪我们的会员类型和状态随时间变化的方式.
目前,我们可以访问产品的数据库设计.它在SQL Server上运行,我们定期针对产品表运行自己的SQL查询,以生成我们自己的表.然后,我们将表格链接到Excel中的数据透视表以生成图表.所以我们熟悉数据库设计和SQL.但是,我们仍然坚持如何最好地解决这个问题.
该产品记录会员的会员购买情况以及他们的开始和到期日期.因此,我们可以回过头来确定会员在任何时间点的类型和状态.举例来说,如果他们买了在2007年1月1日,一个初级会员,并于2007年12月31日到期,那么他们买了2008年6月1日,一个学生会员,我们可以看到他们的状态,从主动去激活到激活(于扬分别于2008年1月和2008年6月1日),他们的类型从初中到学生(2008年6月1日).
基本上我们希望将成员的类型和状态属性转换为时间属性或有效性 a-la Fowler(或其他随时间变化的事物).
我们的问题(最后:) - 鉴于上述情况:您建议我们使用什么数据库表设计来保存此成员信息.我想它会有一个MemberID列,所以我们可以键入现有的Member表.它还需要存储成员的状态和类型以及他们所持有的日期范围.我们希望能够轻松地针对此表编写查询,以确定在给定时间点我们拥有的每种类型和状态的成员数量.
更新2009-08-25:已经进行了侧面跟踪,并且还没有机会尝试提出的解决方案.希望尽快这样做,并根据结果选择答案.
鉴于您的系统已经编写并且已到位,解决此问题的最简单方法(以及影响现有数据库/代码的最简单方法)是添加包含MemberID,状态,类型和日期列的成员资格历史记录表.然后将UPDATE和INSERT触发器添加到主成员表.当这些触发器触发时,您将成员的新值(以及状态更改的日期)写入成员历史记录表中.然后,您可以只查询此表以获取每个成员的历史记录.
这实现起来相当简单,根本不会影响现有系统.
我会为你写这个免费会员资格.:)
归档时间: |
|
查看次数: |
1033 次 |
最近记录: |