0

我想設計一個數據庫模式。我有幾個通道(Channel_ID VARCHAR)和時間戳,對應於通道測量時間(Timestamp DATETIME)。SQL數據庫模式設計

什麼是智能模式來保存每個通道記錄的時間序列數據?我只能拿出這樣的事情,但是這似乎是相當糟糕,因爲該值列包含所有值...

MEASUREMENTS 
Channel_ID VARCHAR | Timestamp DATETIME | Values ??? 

我會怎麼做這是否正確?

編輯:值的數量可以在成千上萬。

+0

什麼是「價值」 - 大概超過1倍的值,如果是的話你會根據單個值創建一行,通過value_type表確定其類型 –

+0

感謝您的評論。在此期間,我想出了另一種解決方案。我可以創建一個包含多個列的第二個表,並且此表中的每個列都有唯一的度量標識(即channel_id與時間戳相結合)。這些列中的每一列都包含特定測量的所有測量值。你對此有何看法? – Ohumeronen

+1

往下走(行)比跨(列)幾乎總是更好 - 多少取決於你想要運行的查詢類型 - 對一組行進行數學計算是微不足道的,在* n *列上執行不。您當然不希望有一個需要創建具有變量名稱的新列的設計。 –

回答

0

我會建議創建一個測量表,除了你的頻道表。每行都有一個唯一的鍵(主鍵),一個引用頻道表內的行的外鍵(將閱讀與頻道相關聯),時間戳以及有關該特定閱讀的任何其他數據。

有了這個設置,你可以有多個測量特定通道,你可以通過做類似選擇它們:

SELECT * FROM measurements 
WHERE channel_id = 5; 
+0

感謝您的建議。這個解決方案是否要求我將實際測量值保存爲數組?或者更確切地說:一個channel_id的值是否會保存在一個單獨的單元格中? – Ohumeronen

+1

每個測量將是測量表內的一個單獨的行。在1NF之後,我們希望單個細胞只包含一件事。 – Caleb

+1

單元格是數據庫術語中的一個字段。這裏是一個例子: 第1行:測量ID = 1,通道ID = 5,測量值= 1000 第2行:測量ID = 2,通道ID = 5,測量= 3000. 對不起,我沒有完全掌握測量和渠道,但我試圖在我的理解程度上設置最佳。 當你運行一個類似於上述答案的命令時,它將返回2行,每一個單獨的測量都有一行,對於ID爲5的通道都是這樣。 – Caleb