2009-10-21 26 views
1

我們正在爲我們的應用程序構建一組功能。其中之一是SO上的最近用戶活動ala的列表。我有一個小問題找到設計這些活動表的最佳方式。活動列表ala SO

目前,我們有以下的列

 
UserId (Id of the user the activity is for) 
Type (Type of activity - i.e. PostedInForum, RepliedInForum, WroteOnWall - it's a tinyint with values taken from an enumerator in C#) 
TargetObjectId (An id of the target of the activity. For PostedInForum this will be the Post ID, for WroteOnWall this will be the ID of the User whose wall was written on) 
CreatedAtUtc (Creationdate) 

我的問題是TargetObjectId列感覺不對的活動表。這是一個軟鏈接 - 沒有外鍵,只有關於類型的知識才能告訴你這個列真正包含的內容。

你們中的任何一個人對替代/更好的存儲用戶活動列表的建議有什麼建議嗎?

我還應該提到,該網站將是多語言的,所以你應該能夠看到一系列語言的活動列表 - 這就是爲什麼我們沒有選擇例如只是將活動文本/ HTML放入表。

感謝

回答

0

您可能要爲靈感退房http://activitystrea.ms/,尤其是模式定義。如果你看看這個規範,你會發現還有一個「目標」對象的概念。我最近做了一些非常相似的事情,但我必須創建自己的數據庫來封裝所有活動數據並向其中提供數據,因爲我正在從不同數據庫中的不同數據源的多個應用程序收集活動數據。

最大

1

您可以將所有內容到一個表具有鑑別列,然後就select top 20 ... from ... order by CreatedAtUtc desc

另外,如果你存儲不同類型的不同表的內容,你可以嘗試像(約確切的語法不知道):

select top 20 from (
    select top 20 ID, CreatedAtUtc, 'PostedToForum' from ForumPosts order by CreatedAtUtc 
    union all 
    select top 20 ID, CreatedAtUtc, 'WroteOnWalll' from WallPosts order by CreatedAtUtc) t 
order by t.CreatedAtUtc desc 
+0

我想過這種方法,但我有點擔心可擴展性。現在我們有大約6-7種不同的活動類型,所以我們需要從6-7張表中抽取數據,但是將來可能會擴展到20或30種不同的活動。 – Micael 2009-10-21 07:14:51