2011-08-11 3 views
12

私は、ユーザーアカウントの情報を格納するためのSQLiteデータベースを持つアプリを持っています。私は、アプリケーションが1人のユーザーしか持たないという前提でデータベースを設計しました。そのため、ユーザーのIDはデータベースには格納されません(サーバーの中央データベースに格納されます)。しかし、アプリをログアウトして別のユーザーにログインさせることは可能ですが、この問題はその時点でデータがダウンロードされてから、別のユーザーのデータに追加されます。これは私が起こりたいことではありませんが、これを解決するためにデータベース設計をどのように変更するのがベストであるかわかりません。私は約考えました:複数のユーザーがいる可能性のあるAndroidアプリ用のSQLiteデータベース

  1. ユーザーあたり1データベース。ユーザーが友人の携帯電話に一度だけログインして、もう一度ログインしないと、不要なデータストレージが発生する可能性があります。また、これは管理が難しいかもしれないと思います。
  2. すべてのテーブルにユーザーID列を追加するため、追加することで問題は発生しません。まだ(1)が持っていて、1のモジュール性を失う、不必要なデータ問題があります。
  3. ユーザーがログアウトしたときにデータベースを消去します。ユーザーがサーバー上に多数のデータを持っている場合、アプリケーションの起動時にデータを同期するのに時間がかかります(これは別のスレッドで行われますが、それでも問題はありません)。

これらのアプローチの1つは良いですか?それとももっと良い方法がありますか?

答えて

3

私はオプション1に行きます。別のファイルとして保存すると、複数のデータベースを持つことによってパフォーマンスの影響が全くないことが保証されます。

データベースファイル名にユーザーIDを追加できます。 4つ以上のデータがある場合(または特定のデータ量を超える場合)、最も古いデータベースを自動的に削除するLRUシステムがあります。

使用するデータストレージの量と、同じデバイスでアプリを使用する可能性のあるユーザーの数を知っているので、この選択の詳細はあなた次第です。

+0

私はLRUのアプローチが好きです。私はLRUのアプローチが好きです。私は、それらがいつ変更されたかを把握することを考えていましたが、どちらの提案も簡単に実装できます。そして、私は本当に1人以上のユーザーが同じデバイス上でアプリを使用することは疑うが、あなたは決して知りません!ありがとう:) – Pikaling

+0

プロポーザル2の上にプロポーザル1の実際の利点は何ですか?どのような「モジュール性」が失われますか?どのような "パフォーマンスの影響"ですか?誰かに正規化と関係データベースの原則について聞いたことがありますか?デバイスに保存されている複数のデータベースに対して、データベース構造のアップグレード/変更がどのように実行されますか? – Ewoks

1

これは実際にあなたの要件に依存しますが、3番目のオプションはあまり実用的ではありません。あなたがこれを行うことを望んでいたなら、あなたのアプリをアンインストールして再インストールするのと同じです。

おそらく、オプション2を使用する傾向がありますが、それはデータベース内で何をしたいかによって異なります。例えば個人ではなくすべてのユーザー間で統計情報やクエリを使用したい場合や、ユーザー間で共有される共通のデータがある場合などです。

ストレージサイズが不安な場合は、特定の時間枠でログインしていないユーザーに属するデータを消去するサービスを作成します。

+0

ありがとうございます - そこにいくつかの良い提案 – Pikaling

関連する問題