2010-02-23 82 views
1

我在我的数据库中有一个存储日志的表。日志文件时间戳与第二精度和存储各种传感器的值和它们的来源:PostgreSQL bytea主键

log_id, log_date, primary_system_source, sub_system_source, values 

凡LOG_ID,primary_source和sub_source是整数,并且值是一个可变长度的字节数组(数据类型:BYTEA)。

在大多数情况下LOG_ID,LOG_DATE,primary_system_source和sub_system_source场的组合就足够了作为主键。不幸的是,由于在某些行中解决了日志记录系统中的时间戳,所以区分行的唯一因素是传感器值也添加到主键。

看来我有不具有主键(坏?),并包括在主键的值字段之间的选择。我对第二选择感到担忧,因为我知道它可能会严重影响性能(表格将有数以百万计的行)。

任何提示哪个是最好的解决方案?

+0

任何你不能使用自动递增主键的原因? (postgres lingo中的一个序列) – nos 2010-02-23 14:45:28

+0

我可以,但一个愚蠢的用户可能会来,并尝试两次导入相同的日志。使用序列,数据库会高兴地重新导入日志,给它新的ID。使用主键将防止重复导入的相同日志(并提供比仅匹配文件名更多的保护)。 – James 2010-02-23 15:32:50

回答

0

那是因为你的整个行用作您刚才给出的例子主键一个棘手的问题。由于您的日志时间戳没有绝对精确度,因此我认为您的日志本身可能不包含唯一值(在同一时间段内有两个类似的感官读数)。如果这是真的,你没有办法唯一标识你的数据,因此不能对它施加唯一的约束。

我会建议简单地增加一个串行PK场的链接到其他的关系,而不是担心你的项目的独特性,因为你不能合理地执行它反正。如果您在特定时间段内的条目数量多于预期数量,则可以识别重复的日志条目。我不确定性能影响,但运行SELECT DISTINCT可能比尝试强制实现唯一性更为谨慎。