Data-Warehouse
Fact 表是否應該包含具有單個唯一值的列?
為了簡化報告,我想知道是否對於我們擁有的每個事實表,我是否可以包含一個說明事實表名稱的列,儘管採用更使用者友好的格式
例如
FACT_SALES Source ID Name Sales 1 Bob Sales 2 Terry .... FACT_TESTING Source ID Type Product Testing 23 Adhoc Product_Testing 29 ... ...
如果不應該,那麼添加此資訊的適當方法是什麼,而不需要最終使用者採取任何行動,因為他們必須添加某種編碼來顯示這一點?
我建議你有一個 fact_source 表:
CREATE TABLE fact_source ( fact_source_id INTEGER, -- auto-increment. fact_source_name VARCHAR (50) );
使用您自己的 RDBMS(您沒有說哪個)自己的自動遞增密鑰系統來生成 fact_source_id)
INSERT INTO fact_source fact_source_name) VALUES ('Sales'), ('Testing');
並將其用作相關表中的 FOREIGN KEY。
如果您的測試表明它執行良好並且不是資源負擔,那麼您可以在報告查詢中“預煮”您的使用者友好(即文本)輸出。
由於此處
ENUM
列出的原因,您不應使用s 。僅僅因為系統具有功能並不意味著您必須使用它們!您應該始終使用約束(難以置信,MySQL 沒有這些)或如上所述的查找表。CHECK
將您的密鑰儲存為 SMALLINT(或類似的)將節省一些空間!
如果此處的目的是提供一個固定的備用表名(而不是記錄一個可能會有所不同的源),則一種選擇是實現一個非持久化虛擬列(SQL Server 中的計算列)。