2013-10-31 145 views
0

我有一個理論問題,因爲我還處於思維階段,因此沒有代碼。我想更新一個應用程序,以允許用戶通過DropBox數據存儲或其他類似的方式與他人分享他們的數據。但是,當用戶創建的數據填充到設備上的多個sqlite表時,每個表都有一個自動增量整數作爲主鍵,在其他表中用作外鍵來鏈接數據。在Android應用程序用戶之間共享數據

如果有多個用戶實際創建數據並共享它,那麼主鍵列顯然會成爲問題。如果我下載數據並將其存儲在本地,我顯然不能將用戶1的密鑰值插入到用戶2的數據表中,首先是因爲自動遞增,其次是因爲用戶2可能已經具有不與該密鑰值一起保存的數據。

我想過幾個選項,但沒有什麼特別吸引人或強大。我正在考慮創建一個UUID來識別設備,該值必須存儲在每個表中,而主鍵將是該列和當前主鍵整數的組合,這顯然必須具有自動更新功能,刪除增量。因此,爲了從每個表中獲取所有相關數據,必須使用id列和UUID列。

我覺得有必要有一個更強大的方法來實現這個雖然,任何人有更好的建議嗎?

+0

我認爲用UUID的想法很好。我會爲主鍵字段使用UUID和時間戳的組合。 Pehrhaps時間爲毫秒。這可以工作,如果用戶不能創建mor,然後每millisecound一個記錄 –

+0

因爲你提到他們,我應該指出,Dropbox數據存儲(還)不支持用戶之間的共享。 – smarx

+0

我知道,如果我使用它們的解決方法是讓用戶連接到同一個Dropbox帳戶,以便稍後設置一個實際的SQL服務器來託管數據。 – collusionbdbh

回答

1

如果我很好理解,您需要在雲中部署一些集中的數據庫來與您的本地應用進行通信,是嗎? 客戶不應該爲這樣的系統創建ID。在這些情況下,通常的做法是始終在數據庫中創建一個由雲創建的遠程ID,並且每當您還沒有該值時,您可以擁有一個回退值(本地創建的本地ID--與遠程的)。

所以,爲了說明我的話,我們可以設置下面的例子。您的應用將消息存儲在數據庫中假設您使用本地ID 1,2,3創建消息。這些ID永遠不會在雲中央數據庫中獨一無二。相反,你只是將它們用作本地回退。只要您可以將這3條消息發送到您的集中式數據庫,它就會爲您提供3個新的遠程ID,您將以獨特的方式使用(即:35,46,54)。

請注意,當您有多個請求者/用戶訪問同一個數據庫時,除非您遵循解釋的方法,否則不存在確保唯一性的方法,或者您可以提前查詢一定數量的唯一ID並按需向數據庫請求雲。請記住,實際的真相只能由服務器中的數據庫提供。

+0

我認爲這將工作,如果我創建一個遠程表來保存每個表的下一個ID。在上傳之前,該值將被檢索並增加,然後該遠程ID將被保存到本地版本,然後可以上載包含該遠程ID的數據。當另一個用戶下載它時,他們會得到自己自動遞增的本地ID,但在下載時也會收到該遠程ID。這樣我將始終擁有本地和遠程鏈接的所有數據。我認爲這將是最好的選擇。 – collusionbdbh

+0

就是這樣。這是一個廣泛使用的方法。 –

+0

將現有表保持原樣並創建一個或多個將遠程ID映射到本地ID的映射表是否合理? – collusionbdbh

相關問題