Database PostgreSQL bytea主键

Database PostgreSQL bytea主键,database,postgresql,primary-key,Database,Postgresql,Primary Key,我的数据库中有一个存储日志的表。日志文件的时间戳精度为秒,并存储各种传感器的值及其来源: log_id, log_date, primary_system_source, sub_system_source, values 其中log_id、primary_source和sub_source是整数,value是可变长度字节数组数据类型:bytea 在大多数情况下,日志id、日志日期、主系统源和子系统源字段的组合足以作为主键。不幸的是,由于日志系统中某些行的时间戳解析,区分行的唯一因素是传感器值

我的数据库中有一个存储日志的表。日志文件的时间戳精度为秒,并存储各种传感器的值及其来源:

log_id, log_date, primary_system_source, sub_system_source, values
其中log_id、primary_source和sub_source是整数,value是可变长度字节数组数据类型:bytea

在大多数情况下,日志id、日志日期、主系统源和子系统源字段的组合足以作为主键。不幸的是,由于日志系统中某些行的时间戳解析,区分行的唯一因素是传感器值是否也添加到主键

看来我可以在没有主键坏?和在主键中包含值字段之间进行选择。我担心第二种选择,因为据我所知,它可能会严重损害性能。表将有数亿行


关于哪一个是最好的解决方案,有什么提示吗?

这是一个困难的问题,因为在刚才的示例中,整行都是主键。由于您的日志没有绝对精度的时间戳,我认为您的日志本身可能不包含在同一时间段内两个相似的感官读数的唯一值。如果这是真的,您就没有任何方法来唯一地标识您的数据,因此无法对其施加唯一的约束


我建议只为其他关系的链接添加一个序列PK字段,而不必担心条目的唯一性,因为您无论如何都无法合理地执行它。如果在特定时间段内的条目数超过预期,则可以识别重复的日志条目。我不确定性能影响,但运行SELECT DISTINCT可能比尝试强制唯一性更为谨慎

有什么原因不能使用自动递增主键吗?postgres lingoI中的一个序列可以,但是一个愚蠢的用户可以出现并尝试导入同一个日志两次。使用一个序列,数据库将愉快地再次导入日志,并为其提供新的ID。使用主键将防止同一日志重复导入,并提供比仅匹配文件名更多的保护。