Posted on 2005-11-15 12:29
canonical 閱讀(321)
評論(0) 編輯 收藏 所屬分類:
軟件開發
關系數據庫的關鍵之處在于關系的分解,在數據庫中只定義了數據之間的兩兩關系,與應用相
關的更復雜的數據關系需要在運行時通過動態join來構造出來,即這些關系儲存在程序中而不是數據庫中。實際上,關系數據庫的一個隱含的假定是數據之間很
少關聯,而在實際應用中單表和主從表也正是最常出現的情況。當一個應用頻繁需要大量表的連接操作的時候,往往意味著關系數據模型的失效,此時我們將不得不
放棄數據的無冗余性,需要通過預連接來構造實例化視圖(Material View),將數據之間的復雜關系固化并明確定義出來。
在數據倉庫里,抽象的討論star schema和snowflake schema哪個更優越是一個毫無意義的問題。
應該聚合到什么程度,需要根據數據應用的具體情況而定。
關系數據庫本身定義的是數據之間的兩兩關系,缺乏一些全局數據訪問手段。而數據倉庫的一個基本概念是數據空間,即可以通過全局坐標來直接訪問數據,而不是
通過兩兩連接來訪問數據。在數據倉庫中最重要的就是時間維度,因為這是所有數據所共享的一個坐標維度。我們可以將兩個發生在同一時間點上的數據直接并列在
一起,而無論它們之間是否定義了關聯(relation)。
關系數據庫的基本數據訪問模式如下:
select 屬性列表
from 表A, 表B
where 表A.data_id = 表B.id
and 表B.attr = 'A'
在數據倉庫中 " from 表A, 表B where 表A.data_id = 表B.id "這一部分將多個多個數據表和表之間的關聯條件放在一起定義為所謂的主題。
而 表B.attr = 'A' 這一部分就從where子句中分離出來作為坐標條件。
在數據倉庫中建立時間坐標有兩種方式,對于發生在時間點上的事件我們直接建立點坐標,通過his_date字段來表示,而對于延續一段時間的狀態數據,我們可以建立區間坐標,通過from_date和to_date兩個字段來表示。