【发布时间】:2012-08-03 08:09:28
【问题描述】:
我需要创建一个表来保存由设备 id (int)、logdate (datetime) 和 value (decimal) 组成的测量值 (SQL Server 2008)。测量总是在季度,例如00:00, 00:15, 00:30, 00:45, 01:00, 01:15... 所以我认为定义自某个日期以来的季度数量的 int 会比日期时间。
通常会使用以下方法进行检索:
-where DeviceId = x and QuarterNumber between a and b
-where DeviceId in (x, y, ...) and QuarterNumber between a and b
-where DeviceId = x and QuarterNumber = a
这张桌子最好的设计是什么?
PK DeviceId int
PK QuarterNumber int
Value int
或
PK MeasurementId int
UQ QuarterNumber int
UQ DeviceId int
Value int
(UQ=唯一索引)
还是完全不同的东西?
谢谢!
【问题讨论】:
-
您希望记录多少个季度?您希望注册多少台设备?
-
大约 100.000 台设备,我将为每个设备保留大约 96*5 个季度
-
我总是倾向于选择您的选项 2。在这种情况下,我不知道哪个会更好。选项 2 意味着您将意味着更大的表和索引,但我认为插入会更快。我认为对于选项 1,由于 PK 上的聚集索引,您可能会遇到问题。
-
我发现这篇博文与我的情况相似。他的结论正确吗?他对填充因子的评论是否也正确? improve.dk/archive/2011/05/24/…
标签: sql-server-2008 tsql database-design