C# 正确使用带有时间戳数据的主键
我有一个表,它存储了来自传感器集合的时间戳记录,这些读数每天采集14400次。(每6秒一次) 共有4个传感器,它们共享其主数据表 目前,模式如下所示:C# 正确使用带有时间戳数据的主键,c#,sql-server,database,C#,Sql Server,Database,我有一个表,它存储了来自传感器集合的时间戳记录,这些读数每天采集14400次。(每6秒一次) 共有4个传感器,它们共享其主数据表 目前,模式如下所示: id (int-PK) time (DateTime) sensor (int) reading (int) 这工作得非常好,我将主键设置为autoincrement 然而,拥有这个主键似乎很愚蠢,因为我从来没有提到过它——我是否最好使用时间和传感器的组合作为复合键 如果我使用了复合键,我想我的每行字节数也会减少?这是相关的,因为表的行数超过了
id (int-PK)
time (DateTime)
sensor (int)
reading (int)
这工作得非常好,我将主键设置为autoincrement
然而,拥有这个主键似乎很愚蠢,因为我从来没有提到过它——我是否最好使用时间和传感器的组合作为复合键
如果我使用了复合键,我想我的每行字节数也会减少?这是相关的,因为表的行数超过了10m,所以任何节省都是值得的
这似乎是双赢的,但我想看看这种方法会产生什么影响。应该避免使用复合索引,尤其是复合主键。索引较宽,这对性能(和内存使用)不利。在我个人看来,使用复合主键也是一种糟糕的设计,因为没有更独特的单一方式来引用行
我的建议是坚持现在的设计。应该避免使用复合索引,尤其是复合主键。索引较宽,这对性能(和内存使用)不利。在我个人看来,使用复合主键也是一种糟糕的设计,因为没有更独特的单一方式来引用行
我的建议是坚持现在的设计。在10M行上使用组合主键(或唯一索引)可以很容易地占用通过删除int-PK(以及更多)获得的任何存储空间。此外,从该表中引用一行将变得更加困难
我总是在任何表上保留int(或bigint,如果需要)PK。与其他数据相比,存储空间通常相对较小,并且使用一种简单的方式链接/引用行,使数据模型的增强和更改更加容易。使用组合主键(或唯一索引)在10M行上,删除int PK(以及更多)可以很容易地占用任何存储空间。此外,从该表中引用一行将变得更加困难
我总是在任何表上保留int(或bigint,如果需要)PK。与其他数据相比,存储空间通常相对较小,并且使用一种简单的方式链接/引用行,使数据模型的增强和更改变得更加容易。此时,您使用的是。您正在评估是否要搬到 使用代理关键点比自然关键点具有优势,您可以在上一个链接中了解这些优势:
但每种设计都不同于其他设计。作为数据库分析员,您应该评估什么是项目的最佳决策。此时,您正在使用一个数据库。您正在评估是否要搬到 使用代理关键点比自然关键点具有优势,您可以在上一个链接中了解这些优势:
但每种设计都不同于其他设计。作为数据库分析员,您应该评估项目的最佳决策。坚持设计,除了在PK中添加日期时间,我从来没有遇到过任何问题。当插入由于重复而开始失败时,您会希望没有这样做 如果您想节省空间,请在
传感器
列中使用一个很小的int(您只有4个不同的值)。可能是一些更小的东西,用于读取
,我怀疑传感器能够记录一个int可以存储的2万亿个不同的值,很有可能你可以使用smallint或tiny int
bigint 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
int 4 Bytes -2,147,483,648 to 2,147,483,647
smallint 2 Bytes -32,768 to 32,767
tinyint 1 byte 0 to 255
坚持设计,除了在PK中添加日期时间,我从来没有遇到过任何问题。当插入由于重复而开始失败时,您会希望没有这样做 如果您想节省空间,请在
传感器
列中使用一个很小的int(您只有4个不同的值)。可能是一些更小的东西,用于读取
,我怀疑传感器能够记录一个int可以存储的2万亿个不同的值,很有可能你可以使用smallint或tiny int
bigint 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
int 4 Bytes -2,147,483,648 to 2,147,483,647
smallint 2 Bytes -32,768 to 32,767
tinyint 1 byte 0 to 255
它是什么类型的数据库?(例如,它是Oracle、SQL Server吗?)MSSQL 2008 R2,尽管我不认为我的问题会太技术化,但我从来没有遇到过任何问题,除了在PK中输入日期时间。当您的插入由于重复而开始失败时,您会希望没有这样做。在这种情况下,重复数据的插入失败将是我的预期行为。只需检查您的DB引擎是否对日期时间和组合主键有任何限制。它是什么类型的数据库?(例如,它是Oracle、SQL Server吗?)MSSQL 2008 R2,尽管我不认为我的问题会太技术化,但我从来没有遇到过任何问题,除了在PK中输入日期时间。当您的插入由于重复而开始失败时,您会希望您没有这样做。在这种情况下,重复数据的插入失败将是我的预期行为。只需检查您的DB引擎是否对日期时间和组合主键有任何限制。我有一个基于传感器和时间戳(均为ASC)的聚集索引,你是说这也是个坏主意吗?关于索引的大小,这是个好主意。我想,既然他没有以任何方式使用PK作为外键参考,那就没什么区别了。但是如果空间是个问题,那么这是有意义的。我有一个基于传感器和时间戳(都是ASC)的聚集索引,你是这么说的吗