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