我有以下數據庫,第一個表用戶是包含我的用戶的表,userid是主鍵。以下是可接受的外鍵使用情況
下一個是我的成績表,現在對於每個用戶,可以有一個id的結果,它可以是針對考試。在這種情況下可以使用「id」作爲主鍵,「userid」作爲外鍵嗎?有沒有更好的方法可以模擬這種情況?
這些然後鏈接到相應的考試...
我有以下數據庫,第一個表用戶是包含我的用戶的表,userid是主鍵。以下是可接受的外鍵使用情況
下一個是我的成績表,現在對於每個用戶,可以有一個id的結果,它可以是針對考試。在這種情況下可以使用「id」作爲主鍵,「userid」作爲外鍵嗎?有沒有更好的方法可以模擬這種情況?
這些然後鏈接到相應的考試...
我可能沒有userid
作爲varchar
。我也會把它當作int
。
因此,用戶表是這樣的:
userId int
userName varchar
firstName varchar
lastName varchar
然後在結果表表forenkey將是一個int
。就像這樣:
userId int
result varchar
id int
examid INT
監守如果你是普蘭上JOIN
荷蘭國際集團的表在一起,然後JOIN
荷蘭國際集團在varchar
是不一樣快JOIN
荷蘭國際集團在INT
編輯
依賴您計劃存儲多少數據。因爲你知道有一個最低限度的chans GUID
s不是唯一的。 Simple proof that GUID is not unique。我想如果我設計這個數據庫,我會用一個int。因爲使用GUID
作爲用戶有點矯枉過正
規定,每個用戶/考試將只產生一個結果,那麼你可以使用創建複合鍵結果表中的userid
和exam
列。
就個人而言,我會採用任意的id
字段方法,因爲我不喜歡必須將多個值傳遞給引用記錄。但那只是我:)。
另外,結果表中的exam
字段也應該是外鍵。
我也建議改名考試外鍵字段在結果表「examid」保持一致的命名。 – weenoid 2012-04-18 10:57:07
這樣做的另一種方法是從考試中抽取成績水平,並將考試作爲自己的表上的唯一實體(和主鍵) 。因此,這會生成一個成績等級表(pkey1 = A,pkey2 = B等),其中成績在您的第二個表中作爲外鍵,從而刪除整個字段。
您也可以正常出另一級別併爲主題創建一個表格,這將成爲專用考試代碼表的外鍵。你可以有ENG101,ENG102等進行考試,其他考試代碼也一樣。這樣做的好處是將您的考試,科目,學生和年級保持爲獨特的實體。每一個的主鍵和外鍵都很明顯,並且您可以保留一個簡單的維護未來,並有擴展空間。
你可以考慮使用組合鍵,但是這是開始一個很好的和簡單的方法,並且可以根據需要合併表進行索引和壓實。
請確保你真正的正常化架構之前先了解Normal Forms。
好的,所以我應該將結果表中的值拆分成單獨的表格以具有第一範式。 – david99world 2012-04-18 13:46:42
我實際上正在考慮使用GUID作爲用戶的主鍵,而不是int。這是一個壞主意嗎? – david99world 2012-04-18 11:29:31
已更新答案 – Arion 2012-04-18 11:35:46
@ david99world:記得投票選出你認爲很好的答案。這給了我們所有溫暖的模糊感覺:P – Arion 2012-04-19 08:44:39