かなり複雑な (正規化された) データベース構造を持つ Android アプリを設計しています。私の質問は、私のデータを操作するための最適な設計パターンは何ですか?
このデータベースには、テーブル Books、テーブル Authors、テーブル Collections (本の)、および整数 ID に基づいて 2 つを関連付けるジャンクション テーブル Books_Collections があります。ListView の特定のコレクション内の本と著者のリストを「本のタイトル (著者名)」の形式で表示したいので、かなり複雑だと言います。したがって、次のクエリを実行できる必要があります (私はテーブル名 A、B、C、および B_C を省略します):
SELECT B.title, A.name
FROM B
JOIN A ON B.author_id = A.id
JOIN B_C ON B_C.book_id = B.id
WHERE B_C.collection_id = [variable]
Honeycomb で導入されたローダーを簡単に利用できるように、コンテンツ プロバイダーで Sqlite データベースをラップするよう開発者にアドバイスする人を何人か見てきました。しかし、これはそのような複雑なクエリに対して本当に実行可能でしょうか? (もしそうなら、どのように?) または、自分のデータを他のアプリと共有していないので、DAO を使用する方がよいでしょうか? また、DAO を使用している場合、データを ListView に接続するためにカスタム AsyncTaskLoader を作成する必要がありますか?
EDIT もう1つの重要な詳細:本が読まれたかどうかを示すBooksのブール変数に基づいてリスト項目の背景色を変更したいので、コンテキストメニューを使用してユーザーがリストから本を削除できるようにします。リストは、データの変更に即座に適応する必要があります。