Ico*_*123 5 database-design sql-server database-recommendation
我正在开发一个 ASP/MS SQL 项目,该项目根据日期和时间执行大量计算。在一种情况下,系统将根据全天最接近的半小时增量查找值。
在设计数据库时,我应该创建一个仅包含增量的查找表,例如:00:00:00, 00:30:00, 01:00:00,然后创建另一个带有值和 FK 到小时的表增量?或者我应该在另一列中包含时间增量吗?或者我不应该在函数或存储过程中包含增量并构建业务逻辑?
您可以创建一个以分钟为单位存储时间的时间表。然后有一列作为记录的外键,该记录与它有半小时的差异。如果您需要获取某个时段之前的半小时和之后的半小时,您将有 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
...
所以如果你查询这个表每分钟都包含一天中的所有时间记录,你就会有前后半小时的外键,可以获取并比较它们的值,选择最小的一个(最接近的半小时增量) 。