2011-09-18 29 views
0

我正在尋找一些建議,請耐心等待,同時我嘗試解釋這一點!動態加入建議

我在哪裏我基於內容類型的動作的新聞源的時刻的情況下,在一個非常基本形式的表可能類似於:

<userid, int, FK> | <actionType, int, FK> | <contentType, int, FK> | <objectID, int> 

因此,例如,用戶ID ...... 2000年,在內容類型1上執行動作類型1,對象ID爲2001 2001

objectID是對象的唯一ID,相對於內容類型..隨後不能由約束強制實施,因爲根據內容類型的不同,表格會有所不同。

現在,以我之前給出的例子(2000,1,1,2001)爲例,爲了在站點中顯示此內容,我需要查詢對象,可以說contenttype'1'是'users'和行動是「掌摑」,才能產生這樣的:

卡爾耳光喬治

我將加入對用戶ID字段獲得卡爾,但需要另一個查詢來獲取用戶2001個細節..

這有意義嗎?

因此,我最終要做一個「選擇前10名」新聞提要,我需要最少11個查詢(一個用於初始,然後是10個查找)。

我希望有一個更好的方式來做到這一點,我能想到的唯一的辦法是做這一切在存儲過程中,有一個大case語句,遊標,以及一些臨時表:X

歡迎任何意見!

由於提前, 卡爾

+0

你對喬治打了什麼?哎呀,對不起。我的意思是問,有多少種不同的內容類型?這是一個固定的數字嗎? –

回答

0

我看到兩種可能性,可能有其他的解決方案:

1 /創建結合了所有<contenttype>, <objectid>組合視圖,東西沿

CREATE VIEW ObjectIds AS (
     SELECT <ID_OF_CONTENTTYPE_1> as ContentType, ID from <TABLE_1>, <possibly other needed columns> 
UNION SELECT <ID_OF_CONTENTTYPE_2> as ContentType, ID from <TABLE_2>, <possibly other needed columns> 
-- etc 
) 

然後您可以加入此視圖而不是原始表格

2 /重構事實t能夠使用真正的FK。這確實意味着你必須事先了解所有'內容類型'。