sql-server - 在数据库表中使用汇总列是否常见或良好的形式?

标签 sql-server database-design

我需要这里数据库人员的一些建议。如果我有这个数据库表:

EVENT
Id
Name
StartDateTime
EndDateTime

是否可以在表中包含一个包含事件持续时间(以秒为单位)的摘要列(StartDateTime 和 EndDateTime 之间的秒数):

EVENT
Id
Name
StartDateTime
EndDateTime
DurationInSeconds  <---

我知道这需要额外的存储空间,但随着表变得非常大(数千万行),在运行时计算这个持续时间将变得相当昂贵。

我想遵循“最佳实践”,但也不想因为没有“廉价”格式(性能方面)而使数据变得不可用。

你会做什么?


如果重要的话,我正在使用 SQL Server 2014。

最佳答案

以下是包含示例信息的计算列示例。

create table MyEvents
(
    ID int
    , Name varchar(20)
    , StartDateTime datetime
    , EndDateTime datetime
    , DurationInSeconds as datediff(second, StartDateTime, EndDateTime) PERSISTED
)


insert MyEvents
select 1
    , 'Event 1'
    , getdate()
    , dateadd(minute, 3, getdate())

select * 
from MyEvents

关于sql-server - 在数据库表中使用汇总列是否常见或良好的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504894/

相关文章:

sql-server - SQL 服务器错误? group by 表达式时查询结果不确定?

php - 多对多关系数据库的复合FK表

java - 如何处理不是真正枚举的枚举,因为它们可以更改?

database-design - 多项选择测验引擎的数据库模式的良好设计是什么?

mysql - 数据库逻辑建议

mysql - 如何加快对 MyISAM 表的巨大查询速度?

sql-server - 我需要重建 SQL Server 数据库索引吗?

sql-server - SQL Server 自定义计数器存储过程创建欺骗

sql - Group By 返回两行而不是预期的一行

sql - 无法删除约束 - SQL Server 2008 R2