作者daniel1205 (艾琳是我最爱的人!!)
看板Database
标题Re: [SQL ] 关於DATA WAREHOUSE 的FACT TABLE
时间Sun Dec 6 15:25:59 2009
※ 引述《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
1F:推 hurtooe:喔~~谢谢你的解释!!! 12/07 17:34