2010-10-05 78 views
1

我正在擦洗我的頭,現在幾個小時來解決THW以下情況:在網頁上飼養ID的獨特的客戶端和服務器端

一些HTML表單由一個ID標識。用戶可以在客戶端自行創建表單並填寫數據。我如何保證用戶生成的表單的ID是唯一的,並且在保存過程中沒有發生任何衝突,因爲其他人的客戶端生成了相同的ID。

的問題/問題:

  • 在客戶端上的隨機函數可以在兩個客戶
  • 尋找免費ID SQL表難道不解決問題
  • 自動增量返回相同的id一個新的id會使整個過程複雜化,因爲DOM id和SQL id不同,所以我們來到下一點:
  • 「left join」結合dom_id和user_id來標識數據庫中的表單EA的性能殺手,因爲我想到這些表將是巨大的

的問題(形成簡單的,因爲我可以):

有沒有一種方式,客戶可以創建/獲取一個唯一的ID這將後來被用作數據庫條目的主鍵而沒有任何衝突?最佳做法是什麼?

我目前的解決方案(壞):

沒有唯一ID的所有標識的形式。始終通過左連接進行組合,以識別特定用戶生成的表單。但是,如果用戶說:刪除我的帳戶(和我的user_id)但將數據留在服務器上會發生什麼情況。我會失去用戶ID和這個查詢不能再工作...

我真的很抱歉,我不能用另一種方式解釋它。但我希望有人能夠理解我所面臨的問題,至少可以給我一個提示

非常感謝!

回答

2

GUID(全局唯一標識符)可能會有所幫助。請參閱http://en.wikipedia.org/wiki/GUID

對於每個表單客戶端可以生成一個新的GUID。理論上它應該是獨一無二的。

+0

感謝您的建議...想想我可能會使用該功能:http://php.net/manual/en/function.uniqid.php從來沒有聽說過它。但我認爲使用這個與前綴組合:user_database_auo_increment_iteration_index + user_id可能是最豐富的事情。 – Bosh 2010-10-06 08:29:59

0

我只是不向用戶顯示ID,直到他們提交了一些內容,然後他們才能看到生成的自動增量ID。它使事情變得簡單。不過,若你真的需要它,你可以使用一個順序表,但它有一些注意事項,這使得我建議反對:

CREATE TABLE sequence (id integer default 0, sequencename varchar(32)); 

遞增:

UPDATE sequence 
SET id = @generated := id + 1 
WHERE sequencename = 'yoursequencename'; 

獲取:

SELECT @generated;