我不確定這個問題是否完全清楚。如果您想主要介紹運動學的歷史,那麼適當的結構就是將數據標準化爲汽車數據和航向數據。汽車數據可以獨立更新,並且可能比運動學數據整體小得多。
如果您想保持汽車當前狀態的平坦記錄,而不是保持歷史記錄,那麼保留原樣的數據可能會更快。原因是編寫整個記錄在大多數情況下可能只需要一次寫操作。將其拆分爲兩個表格可確保至少有兩次寫入操作。
在第一種情況下,您只是規範化數據;在第二種情況下,當前的數據結構可能是最有效的。
垂直分區實際上並不常用(除非是這樣,請參見下文)。有些情況下,您可能需要使用垂直分區爲:
表是很寬的,只有一些是經常使用的。例如,如果您有一個包含250列的表,其中有5個更新頻繁的狀態更改,並且應用程序頻繁使用一小部分列。
出於安全原因,您可能混合使用1:1關係的機密數據和非敏感數據。您可以將機密數據移入具有不同權限集的另一個表中。從歷史上看,並非所有DBMS平臺都允許您在列級設置權限。
前兩項的組合,其中某些字段的更改必須記錄到審計表中,但其他字段會更頻繁地更新而不需要記錄。爲了避免生成大量虛假審計日誌數據,可審計字段可以使用審計日誌記錄觸發器存在於其自己的表中。
最後,你得到在某些情況下在後臺垂直分區(即,不是在架構明確,但以這種方式物理存儲的作品)。例如,許多DBMS平臺將LOB與常規表數據分開存儲,這會導致表的一種隱式垂直分區。
事實上,這種特殊的情況使得帶有LOB列的表在開展操作時相當昂貴,因此將LOB列移入單獨的表中可能是垂直分區的良好應用。
垂直分區的用途並不多,它總是會增加額外I/O的開銷。您需要避免大量開銷或者有特定的原因,例如安全問題,因此需要使用它。
@Grasper:你確定FK在正確的桌子上嗎? – 2010-04-20 03:10:31