Data-Warehouse

Fact 表是否應該包含具有單個唯一值的列?

  • October 2, 2017

為了簡化報告,我想知道是否對於我們擁有的每個事實表,我是否可以包含一個說明事實表名稱的列,儘管採用更使用者友好的格式

例如

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 中的計算列)。

引用自:https://dba.stackexchange.com/questions/187418