2011-08-11 38 views
12

我有一個應用程序與SQLite數據庫存儲用戶的帳戶信息。我設計數據庫時假定應用程序只有一個用戶。因此,用戶的ID不存儲在數據庫中(但它存儲在服務器上的中央數據庫中)。但是,可以註銷應用程序並讓其他用戶登錄,但目前存在的問題是,他們的數據會下載並附加到其他用戶的數據。這不是我想要發生的,但我不確定如何更好地改變數據庫設計來解決這個問題。我曾經想過:每個用戶SQLite數據庫爲Android應用程序與潛在的多個用戶

  1. 一個數據庫。如果用戶只是在他們的朋友的手機上登錄一次,並且永遠不會再次登錄,可能會導致不必要的數據存儲。另外我想這可能很難管理。
  2. 爲所有表添加用戶標識列,所以追加不會導致問題。還有(1)有的不必要的數據問題,並且失去了1的模塊性。
  3. 用戶註銷時擦除數據庫。如果用戶在服務器上有大量數據,則在應用程序啓動時需要很長時間才能同步數據(這將在另一個線程上完成,但仍然很痛苦)。

是這些方法好一個?還是有更好的方法來做到這一點?

回答

3

我會去的選項1.保持它作爲一個單獨的文件將確保具有多個數據庫將不會有任何性能暗示任何責任。

您可以將用戶ID附加到數據庫文件名。如果你有超過4個數據庫(或者你超過了一定數量的數據),你可能會有某種LRU系統在那裏自動刪除最老的數據庫。

這種選擇的細節將是你的,因爲你知道你想要多少數據存儲使用了,有多少用戶很可能使用的應用程序在同一設備上。

+0

我喜歡LRU方法 - 我正在考慮跟蹤它們何時被修改,但是您的建議將會更容易實現。我真的懷疑有超過1名用戶會在同一臺設備上使用該應用,但你永遠不知道!謝謝:) – Pikaling

+0

建議1優於建議2的實際優勢是什麼?什麼「模塊化」丟失?什麼「性能影響」?有人聽說過關於規範化和關係數據庫的原則嗎?如何爲設備上保存的多個數據庫執行升級/更改數據庫結構? – Ewoks

1

這真的取決於您的要求,但第三個選項似乎並不實用。如果你想這樣做,那麼它就像卸載並重新安裝你的應用程序一樣。

我可能會更傾向於使用選項2,但它取決於你想要在你的數據庫中做什麼。例如如果您希望跨所有用戶而不是個人進行統計或查詢,以及是否存在用戶共享的常見數據。

如果您擔心存儲大小,然後寫清除數據屬於已經無法與某個時間段登錄的任何用戶的服務。

+0

謝謝 - 有一些很好的建議 – Pikaling

相關問題