在表中存储日期增量

Ico*_*123 5 database-design sql-server database-recommendation

我正在开发一个 ASP/MS SQL 项目,该项目根据日期和时间执行大量计算。在一种情况下,系统将根据全天最接近的半小时增量查找值。

在设计数据库时,我应该创建一个仅包含增量的查找表,例如:00:00:00, 00:30:00, 01:00:00,然后创建另一个带有值和 FK 到小时的表增量?或者我应该在另一列中包含时间增量吗?或者我不应该在函数或存储过程中包含增量并构建业务逻辑?

Sky*_*Sky 1

您可以创建一个以分钟为单位存储时间的时间表。然后有一列作为记录的外键,该记录与它有半小时的差异。如果您需要获取某个时段之前的半小时和之后的半小时,您将有 2 列。一个指的是获得半小时前值的记录,另一个指的是获得半小时后值的记录。In 表示引用表本身的外键。表定义如下所示:

创建表TimeTbl

Id int not null primary key,

TimeValue time not null,

HalfHrBeforeId int null,

HalfHrAfterId int null
Run Code Online (Sandbox Code Playgroud)

HalfHrAfter 外键引用 TimeTbl(Id)

HalfHrBeforeId 外键引用 TimeTbl(Id)

在此表中,您将拥有:

1、00:00:00、空、30

2、00:01:00、空、31

...

30, 00:30:00, 1, 60

31, 00:31:00, 2, 61

...

60,01:00:00, 30, 90

...

所以如果你查询这个表每分钟都包含一天中的所有时间记录,你就会有前后半小时的外键,可以获取并比较它们的值,选择最小的一个(最接近的半小时增量) 。