我有套設置用戶表,它有以下欄目:SQL:主鍵還是不主鍵?
UserID INT
Set VARCHAR(50)
Key VARCHAR(50)
Value NVARCHAR(MAX)
TimeStamp DATETIME
用戶名與SET鍵和鍵一起是唯一的。因此,特定用戶不能在特定的一組設置中擁有兩個相同的密鑰。這些設置是通過set來檢索的,所以如果用戶請求某個特定集合中的某個特定的密鑰,那麼整個集合將被下載,以便下一次需要來自同一集合的密鑰時,它不必訪問數據庫。
我應該在所有三列(userid,set和key)上創建一個主鍵還是應該創建一個具有主鍵的額外字段(例如一個名爲SettingID的自動增量整數,我想是壞主意),或者不創建主鍵,只創建一個唯一的索引?
----- ----- UPDATE
只是爲了澄清一些事情:這是行表的末端,這是無論如何也不能加入。用戶ID是用戶表的FK。 Set不是FK。它幾乎是我的GUI的幫助表。舉個例子:用戶第一次訪問網站的某些部分時,可以找到一個幫助氣球,如果他們想要的話,他們可以關閉它。一旦他們點擊它,我會添加一些設置到「GettingStarted」設置,它將聲明他們helpballoon X已被禁用。下次用戶進入同一頁面時,該設置將聲明幫助氣球X不應再顯示。
你說這是一個「設置」表。我們可以假設這張表是一個「行尾」表,並且你在這個表中的關鍵字不會被用作任何其他表中的外鍵? – Jonathan 2009-05-06 08:39:45
小心:您在概念上仍然有一個連接:與GUI的連接。因此,擁有自然主鍵的風險可能仍然適用。 – 2009-12-22 07:52:20