2010-01-11 58 views
1

如果我有一個數據倉庫ERD - 它具有relationsips等SQL ERD新手問題

我怎麼知道是什麼類型的連接使用,內,外左,右外側,全外,,

當然,如果數據庫已經正確創建,他們都將是內部連接?酒吧數據質量問題

+2

所需連接的類型取決於需要做什麼..人們會希望內部連接總能正常工作,但是您不能依賴它。最好學習數據的語義,連接的語法,然後弄清楚如何使用兩者! – lexu 2010-01-11 08:34:51

回答

0

不,他們不會全部是內部聯接。

這隻取決於您想要用您的查詢完成的事情。每種JOIN都有其用處。我建議您閱讀數據庫供應商的手冊以熟悉它們。

3

每種類型的連接都做了不同的事情,所以這一切都取決於個別查詢的目的。

不想使用INNER JOIN的例子是,如果您有一個User表,其中包含所有應用程序用戶的列表以及每次登錄時記錄日誌的登錄表。如果你想查找所有未登錄的用戶,一種方法是使用OUTER JOIN。這是而不是意味着你有一個不正確的數據庫或數據質量問題。

0

您可能仍然需要在事實之間使用外部連接。

你應該一定能夠內連接到所有維度。不幸的是,我們無法在工作中使用數據倉庫,因爲我們在大多數維度表中缺少記錄來表示空記錄。

編輯

事實是數字的措施(例如美元的金融交易),而尺寸(例如,客戶涉及金融交易,客戶的出生日期)數據的描述符。你最好引用一本好的數據倉庫書。我推薦Ralph Kimball的數據倉庫工具包。

事實表包含維度的事實和外鍵。維度表包含維度ID,文本描述(例如客戶端名稱)以及可能的其他維度的外鍵(例如出生日期字段的日期維度ID)。

有時,維度屬性可能在邏輯上爲空。這不一定存儲爲空,在我的工作場所,我們使用0來表示空維度。現在想到的是我們在客戶維度表中的死亡驗證方法(例如,查看死亡證書)字段。當然,我們的大多數客戶並沒有死亡,所以我們用0填充這個字段。然而,我們的死亡驗證方法維度表僅存儲實際的死亡驗證方法,因此它沒有記錄0(不適用)和我們因此被迫使用左連接。

1

This是我每次需要刷新關於每種連接類型的知識時使用的資源。