2010-02-23 49 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可能比嘗試強制實現唯一性更爲謹慎。