数据库体系结构:在一列中存储时间或距离

时间:2015-11-17 18:42:25

标签: sql database-design decimal

这是一个与sorting by time or distance不同的问题。

想象一下存储轨道和表格的表格。现场结果。运行事件的结果将在几秒钟内,并且字段事件将以米为单位。在数据库中构建它的正确方法是什么?

我们目前有athlete_id INT event_id INT result DECIMAL(10,3)。我们将时间转换为秒并将米存储为米。有一个更好的方法吗?

3 个答案:

答案 0 :(得分:2)

这对我来说似乎很好,部分原因是任何比较或聚合 - 最大值,最小值,平均值 - 只会在特定事件类型的上下文中有效。

我假设会有另一个值来表示为该事件或事件类型存储值的单位。

我想你也可能想要存储分数以及距离和时间。

我也不相信显示漂亮的价值,因为您可能希望将其国际化或以不同的格式或单位呈现。它可能会按需计算。

答案 1 :(得分:2)

建立这种方法的正确方法是停止考虑输入数据并开始考虑如何使用数据。如果您要做的只是显示结果,那么将它存储在包含测量的nvarchar字段中就可以了。只要您在考虑某些事情可能需要计算,就可以优化报告。如果需要额外的四分之一毫秒来向数据库添加额外的信息以使报告更容易,则需要花费额外的几分钟/小时来查询数百万个记录表,并且每次都对所有记录进行计算。

如果您想进行计算,或比较不同比赛或事件的结果,那么您需要考虑存储该数据的最简单方法,以便您可以进行计算。

在这种情况下,您不想做的是必须在报告中执行任何转换。您需要执行的任何转换都应该是在插入记录时,而不是在查看大型记录表并进行报告或分析查询时。

在这种情况下,通常值得您在单独的字段中存储开始时间,结束时间,计算时间和距离。根据事件的不同,您可能需要为每个人存储多条记录。我会将定时事件和距离事件以及任何基于评判分数的事件(如盛装舞步或滑冰,但我不确定Track是否有这些类型的事件)分离到原始偶数表的单独子表中,因为你想如何处理每种类型的信息会有所不同。

如果要同时执行这两项操作,只需使用nvarchar或varchar字段查询结果,然后使用单独的字段以计算的形式存储结果,这可能是值得的。

答案 2 :(得分:1)

我会针对不同的指标使用不同的列:time DECIMAL(10,3) distance DECIMAL(10,3)