エントリには複数のユーザーがいる可能性があるため、USER3つのテーブルENTRY(入力された製品の場合、PRODUCTテーブルを作成する必要はありません)と、USER_COLLECTIONとの間のテーブルがあります。USERENTRY
基本的に:
ユーザー=USERID | USER_NAME
エントリ=ENTRYID | ENTRY_NAME | ENTRYPRICE | ENTRY_DATE
コレクション=COLLECTIONID | ENTRYID | USERID
プロジェクト全体を通して存続するユーザーのテーブルがあります。エントリ(通常は価格のある製品の一種)を作成し、複数のユーザーを特定のエントリ(リストから選択できるため、ユーザーはプロジェクト全体で存続します)にリンクできます。
たとえば、私のテーブルは次のようになります。
User
--------------------------
user_id   |   user_name
--------------------------
   1      |    'FOO'
   2      |    'BAR'
   3      |    'FOOBAR'
ENTRY
-----------------------------------------------------------------------
entryid  |   entry_name     |  entry_price |      entry_date     
-----------------------------------------------------------------------
   0     |    'Banana'      | 2.50         |  12/12/2012
COLLECTION
---------------------------------------
collectionid |   entryid    |  userid     
----------------------------------------
   0         |    1         | 1
   1         |    1         | 2
   2         |    1         | 3
私はバナナを持っています。価格は2.50で、Foo、Bar、Foobarの3人のユーザーがリンクしています。
今、私はこれを私のアプリで使用してデータを取得したいと思います。どこから始めればいいのかわからないことを除いて。そのIDを使用してコレクションデータをループしてエントリデータを選択しようとしましたが、2つのカーソルが開いていて、機能しませんでした。結合を作成しようとしましたが、主に次の理由で、実際に良い結合を作成できませんでした。
JOIN
---------------------------------------
collectionid |   entryname |  username
----------------------------------------
   0         |    Banana   | FOO
   1         |    Banana   | BAR
   2         |    Banana   | FOOBAR
Androidコードで同じエントリオブジェクトを複数作成するため、これを繰り返すことはできません...
私がこれを明確にしていることを願っています。
if (cursor2.moveToFirst()) {
    do {
        Item i = new Item(<GET STUFF FROM CURSOR>);
        i.addUser(new Person(<GET STUFF FROM CURSOR>)));
        Log.d("TAG", i.getUsersPaying().size() + "");
    } while (cursor2.moveToNext());
}
これを使用すると、アイテムiの複数のインスタンスを作成します。それらはすべてバナナになりますが、複数のユーザーが追加されたバナナは1つだけにする必要があります。