2013-01-04 33 views
0

在我的網站上,用戶可以製作一些項目,這些項目在Items表中進行。
用戶也可以按照彼此並將這些數據我存儲在Followings表。
現在我需要一個表中跟蹤用戶活動的,所以我創建:
用戶活動表 - 設計問題

Users{UserId, Username, FirstName, LastName} 
Items{ItemId, Title, CreatedByUserId} 
Activity{ActivityId, ActivityTypeId, UserId, ItemId} 

這裏ItemId可以或Items表或從UsersUserIdItemId

這個設計很好嗎?還是有更好的方法來做到這一點?

編輯:我添加表結構。重點是我不想每次用戶創建項目或開始關注某個用戶時都將記錄添加到該Activity表中。所以我可以隨時跟蹤用戶在網站上做了什麼。

+0

對於一個好的答案,最好看一下你在問題中引用的每個表格的結構。 –

+0

我添加了表格結構。重點是我不想每次用戶創建項目或開始關注某個用戶時都將記錄添加到該Activity表中。所以我可以隨時跟蹤用戶在網站上做了什麼。這是Activity表的目標。我有一個類型。但是,爲多個表使用一列FK是很好的做法。 – 1110

回答

1

這裏項目Id可以從用戶表相關文件表或用戶ID是或項目Id。

這將防止DBMS強制執行外鍵。如果你走這條路線,更好地分離這些字段(這樣就可以使朝其相應的表的外鍵),並使用一個檢查,以確保確切地說是其中之一就是非NULL:

enter image description here

CHECK (
    (ITEM_ID IS NOT NULL AND FOLLOWED_USER_ID IS NULL) 
    OR (ITEM_ID IS NULL AND FOLLOWED_USER_ID IS NOT NULL) 
) 

ACTIVITY PK是精心製作的,因此很容易查詢特定用戶的「時間線」,並且對clustering非常友好。

(您可能會或可能不會需要ACTIVITY.TYPE這依賴於你要跟蹤的東西。)


另一種方法是將有一個單獨的表爲各種活動:

enter image description here

(你可以在FOLLOW_ACTIVITY添加TYPE場「關注」和「未區分跟隨」。)


另一種辦法是inherit用戶和從公共父「類」項目,然後鏈接到類:

enter image description here

這種設計可能是在這種情況下矯枉過正,但如果稍後添加可以跟蹤的許多其他類型的對象可能會很有用。

0
Items{ItemID,descr,UserIDCreator,date-time} 
User{UserID,descr} 
Followings{UserIDFollowed,UserIDFollower,date-time} 

現在如果你不會 在以下同我添加日期時間計時通過節能減排使用的用戶碼上的項目創建的所有項目中選擇

您可以創建atriggered表或這依賴於基數的看法數據

的如果同一個對象可以是用戶

Items{ItemID,descr,} 
UserItems{UserID,descr,ItemId,date-time} 
User{UserID,descr} 
Followings{UserIDFollowed,UserIDFollower,date-time} 

我希望對大家有用之間共享