2013-01-15 28 views
0

我們目前有一個包含用戶登錄的網站。如何同時創建兩個數據庫記錄,該記錄沒有連續的Ids

我們有一個userId用戶表。

我們現在希望用戶有一個重複的配置文件,這是完全與他們的主要配置文件分開。這需要是一個祕密配置文件。

現在我們可以在db中添加兩條記錄,但是id會是連續的(直到我們達到高註冊率),所以用戶可以制定一個userId與一個ID更高的關聯。

我意識到這不是一個理想的解決方案,但它是一個大型軟件項目的後期改變,所以我們儘可能務實,儘可能少地改變代碼。

選項:

  1. 關閉自動遞增的ID,並建立我們自己的keyGeneration表。從0開始一個表,然後以1000000000開始一個表。然後,我們可以關閉用戶表中的自動遞增ID,並使用這些鍵。

問題是,鍵有沒有運行,1,1000000000,2,1000000001,3,1000000002會導致大量的索引問題?我們是否必須一直強制重建索引?

  1. 我們鍵入一個單獨的表只是第二輪廓標識的,重新開始在10000000000.然後,我們修改我們的代碼來檢查的id> 999999999和翻轉在服務器端,將查找工作正常的邏輯。

這意味着要做到這一點檢查到處的用戶ID從前端傳入站點。

由於我們沒有做太多,(我們顯然主要是抓住用戶id的登錄用戶安全,它可能不是那麼糟糕。

無論如何,只是想知道如果任何人有什麼想法?

///////編輯

要把它放到進一步背景下,想象在計算器或Facebook,你有2個配置文件,你可以控制,這讓他們之間沒有任何聯繫。喜歡的方式,多個用戶Facebook可以充當頁面帳戶,但從該帳戶到真實用戶配置文件沒有鏈接。

本質上,爲了不破壞參照完整性或重新編寫太多的代碼,我真的想將一個ID(int)傳遞迴這些帳戶的前端。然後,整個系統就像它一樣繼續滴答滴答。

Guid可能很酷!但它會有一個性能開銷(不是我關心的是這個問題);但它也意味着編寫大量的代碼來處理傳遞給前端的Guid(不是我們依賴前端變量是正確的)但這就是爲什麼我建議上面的高整數解決方案。由於我們仍然有潛伏在後臺的ASP.NET成員,我幾乎認爲這可能是好的,但是A)我們計劃在某天移除(或遷移到簡單的成員身份)b)我們在用戶表中使用連續的Guid生成來獲得性能對不起,在需要之前再次談論優化)

+0

將'isSecret'字段添加到表中,並且不允許用戶查看隱藏的配置文件。 – Minras

+2

您可以創建一個沒有自動識別號的新的User2表。然後從User1使用插入觸發器創建初始複製記錄。 –

+2

知道ID很危險的原因是什麼?如果安全性取決於*不知道ID *,那聽起來......不完整。理解上下文對於安全相關的問題很重要。 –

回答

1

由網絡服務引導,隨機數。有很多解決方案。我寧願去一個GUID。

那說:這是一個商業密鑰,我仍然會使用自動增量樣式的技術關鍵參考完整性。

+0

+1我第二個:擁有「公共」和「私人」ID。公共= GUID並提供給最終用戶等私有=連續的性能(如前面討論過很多次)。服務器端,你解決公共私有一次,然後從此使用 – gbn

+0

好主意,雖然如果我們必須使用GUID,那就意味着將GUID傳遞到這些配置文件的前端。然後改變我們的這些帖子的輸入機制來引導。嘿,也許這根本不是一個壞主意!我們可以將公開的個人資料作爲整數,而私人的資料作爲指導?那對我來說感覺更清潔? –

+1

我會在內部使用整數 - 你希望數據庫側的鍵對於連接性能來說很小,其餘的是業務決策。哎呀,你可以使用mersenne twister服務來從一箇中心位置產生一個獨特但不明顯的連續數字序列。 – TomTom

相關問題