2 回答

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
一般來(lái)說(shuō),自動(dòng)遞增(或identity
或serial
)主鍵是可行的方法。您通常不希望應(yīng)用程序擔(dān)心諸如值是否已被使用之類的事情。
如果您的應(yīng)用程序是多線程的(即同時(shí)有多個(gè)用戶),那么數(shù)據(jù)庫(kù)將處理任何沖突。那是相當(dāng)方便的。
我很喜歡數(shù)據(jù)庫(kù)創(chuàng)建的代理鍵。在按主鍵對(duì)行進(jìn)行聚類(排序)的數(shù)據(jù)庫(kù)中,使用自動(dòng)遞增的值會(huì)更有效。數(shù)據(jù)庫(kù)可以解決這個(gè)問(wèn)題。
在某些情況下,您需要自然鍵。當(dāng)然,這也是允許的。但是,如果您要為表發(fā)明主鍵,請(qǐng)讓數(shù)據(jù)庫(kù)來(lái)完成這項(xiàng)工作。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
在為 CRUD 操作定義數(shù)據(jù)庫(kù)支持結(jié)構(gòu)時(shí),您需要問(wèn)自己:
我的主鍵高度可預(yù)測(cè)重要嗎?
我的意思是,如果我將用戶啟動(dòng)到諸如“whatever.com/something/edit/1”之類的屏幕
除了明顯的安全性之外,用戶可以操縱 url 并將 2 或 3 或 4 注入路徑中是否有助于或損害業(yè)務(wù)流程?
如果沒(méi)關(guān)系,那么絕對(duì)將其設(shè)置為數(shù)據(jù)庫(kù)端的自動(dòng)增量 int 并將該區(qū)域的責(zé)任轉(zhuǎn)移給數(shù)據(jù)庫(kù)來(lái)處理。您現(xiàn)在不必再高度關(guān)注處理密鑰生成。
如果確實(shí)重要,則將主鍵設(shè)置為唯一標(biāo)識(shí)符。在代碼中添加新記錄集時(shí),您將生成一個(gè)新的 GUID 并將其設(shè)置為主鍵 (Guid.NewGuid())。這將防止用戶以不受控制的方式遍歷您的數(shù)據(jù),因?yàn)殡S機(jī)猜測(cè) GUID 會(huì)給他們帶來(lái)問(wèn)題。EX:新路徑:“whatever.com/something/edit/0f8fad5b-d9cb-469f-a165-70867728950e”
并不是說(shuō)不可能偶然發(fā)現(xiàn)一些東西,但使用您的應(yīng)用程序的普通人不會(huì)那么傾向于去探索 url 操作,因?yàn)樗麄儠?huì)浪費(fèi) 99.99% 的時(shí)間在無(wú)效的帖子上嘗試猜測(cè)已注冊(cè)的有效 GUID在你的數(shù)據(jù)庫(kù)中。
作為補(bǔ)充評(píng)論,如果您決定將主鍵保留為 int 并且不使用自動(dòng)增量,那么您只是在為自己做大量不必要的工作,而我個(gè)人從未見(jiàn)過(guò)邏輯的任何真正投資回報(bào)您應(yīng)該檢查占位符是否已被使用。那并考慮追蹤歷史嗎?如果您決定從表中刪除記錄然后重新使用它們,那么您將陷入痛苦的世界。除了你正在做的事情之外,這是你必須處理的另一組問(wèn)題。
- 2 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報(bào)