时间跨度的数据库结构

时间:2011-08-05 07:29:57

标签: database database-design

我有一个民族,每个人都有:名字,姓氏。 每个人都有参数:[车数,钱数,牛数...] 有时这些参数正在改变。 我想要过去参数计数和当前参数计数统计。 我如何构建我的数据库结构?

我的版本:

  • [PeopleID(PK):LastName,FirstName]
  • [СhangesID(PK):PeopleID(FK),ChangesDate]
  • [ParameterID(PK),changesID(FK),DayOfBirth,CarCount,Adress,MoneyCount,CowCount ...]

1 个答案:

答案 0 :(得分:1)

这是一种历史记录模式。

[PeopleID(PK):LastName,FirstName,DayOfBirth,Adress,CarCount,MoneyCount,CowCount ...] [ChangesID(PK):PeopleID(FK),ColumnId,OldValue,ChangesDate]

ColumnId将是您自己的定义,例如CarCount的ColumnId = 1,MoneyCount的ColumnId = 2,CowCount的列ID = 3

我的想法是为了人们,你不应该只用人们创造一个桌子。姓氏,DayOfBirth和其他人也应包含在此表(人员)中。对于参数,CarCount,MoneyCount或CowCount将始终存储当前值。任何时候CarCount从a更改为b,然后更新People表中的相应行,将CarCount设置为b,并在Changes表中创建一个新记录,其中ColumnId = 1,OldValue = a。与其他参数类似。

这样,您可以通过表People中的信息快速获取每个人的最新参数。如果用户想知道每个参数的先前值,那么可以通过ChangesDate查询Changes表顺序来完成。

希望这有帮助。