推 hurtooe:喔~~謝謝你的解釋!!! 12/07 17:34
※ 引述《hurtooe (尋找球友好難..)》之銘言:
: 我的資料庫現在有table: product, customer, transaction, store, region~
: 我想問說~~fact table是要把所有這些table的primary key用進來嗎~?
: 或者這麼說~~fact table是要以什麼依據來加進資料呢?
: 有什麼東西可以加~~什麼東西不能加呢~~
---------------------
簡單來說... Fact Table 就是你的交易資料(記錄).
而 Fact Table 跟 Dimension Table 之間則利用 PK 來做串接.
這樣有點像是在做資料庫的『正規化』.
但由於你是要做 Data Warehouse ,
你的 Fact Table 有時候適度的『反正規化』反而會得到比較好的查詢效能.
(以空間換取時間!!)
至於『適度』的拿捏就要看你資料量大小及使用的頻率來做評估.
將最最最常用的資料抄一份至 Fact Table 中.
舉個簡單例子:
你有一個交易主檔 --> Sales (當成你的 Fact Table)
而會將與這個 Sales 主檔相關的一些資料表當成 Dimension Table
Dimension Table Fact Table Dimension Table
┌────────┐ ┌────────┐ ┌────────┐
│Customer │ │Sales │ │Region │
├────────┤ ├────────┤ ├────────┤
│Customer No (PK)├┐ │Order No │ ┌┤Region ID (PK)│
│Customer Name │└─┤Customer No │ ││Region Name │
│Country │ │Payment Term │ ││ │
│Contact │ │Saels Person ID │ ││ │
│Tel │ │ShipTo Region ID├─┘│ │
│Fax │ │Country │ │ │
│Address │ │Total Amount │ │ │
│... │ │... │ │... │
└────────┘ └────────┘ └────────┘
(畫表格比較累, 剩下的就偷懶不畫了.. XD)
看你列出來的 Table, (product, customer, transaction, store, region)
除了 transaction (你的交易記錄??) 可以當成你的 Fact Table.
其他的都比較適合當 Dimension Table.
如果 Customer Name 是 User 最常用的查詢條件.
為了提升效能, 或許可以將 Customner Name 放至 Sales 資料表中.
少 Join 一個 Table 進來的查詢效能是會比較好的.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.138.148