看板 Database 關於我們 聯絡資訊
※ 引述《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
hurtooe:喔~~謝謝你的解釋!!! 12/07 17:34