我正在设计一个具有相当复杂(标准化)数据库结构的 Android 应用程序。我的问题是,处理我的数据的最佳设计模式是什么?
该数据库有一个表 Books、一个表 Authors、一个表 Collections(书籍)和一个连接表 Books_Collections,它基于整数 ID 将两者关联起来。我说这相当复杂,因为我想在 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]
我见过一些人建议开发人员将他们的 Sqlite 数据库包装在 Content Provider 中,以便轻松利用 Honeycomb 中引入的加载器。但这对于如此复杂的查询真的可行吗?(如果是这样,怎么做?)还是只使用 DAO 会更好,因为我不与其他应用程序共享我的数据?如果使用 DAO,是否应该创建自定义 AsyncTaskLoader 以将数据连接到 ListView?
编辑 一个更重要的细节:我想根据 Books 中的布尔变量更改列表项的背景颜色,标记这本书是否已被阅读,并且上下文菜单将允许用户从列表中删除书籍,所以列表需要立即适应数据变化。