Android-复杂的数据库和内容提供商
我正在设计一个Android应用程序,其数据库结构相当复杂(规范化)。我的问题是,处理数据的最佳设计模式是什么 该数据库有一个表Books、一个表Authors、一个表Collections(of Books)和一个连接表Books_Collections,它们基于一个整数ID将两者关联起来。我说这相当复杂,因为我想在ListView中以“Book Title(Author Name)”的格式显示特定集合中的书籍和作者列表,因此,我需要能够执行以下查询(我将缩写表名A、B、C和B_C): 我见过一些人建议开发人员将他们的Sqlite数据库包装在内容提供商中,以便轻松利用蜂巢中引入的加载程序。但对于如此复杂的查询,这真的可行吗?(如果是的话,怎么做?)或者仅仅使用DAO会更好,因为我没有与其他应用程序共享我的数据?如果使用DAO,是否应创建自定义AsyncTaskLoader以将数据连接到ListView 编辑Android-复杂的数据库和内容提供商,android,sqlite,design-patterns,android-contentprovider,database-normalization,Android,Sqlite,Design Patterns,Android Contentprovider,Database Normalization,我正在设计一个Android应用程序,其数据库结构相当复杂(规范化)。我的问题是,处理数据的最佳设计模式是什么 该数据库有一个表Books、一个表Authors、一个表Collections(of Books)和一个连接表Books_Collections,它们基于一个整数ID将两者关联起来。我说这相当复杂,因为我想在ListView中以“Book Title(Author Name)”的格式显示特定集合中的书籍和作者列表,因此,我需要能够执行以下查询(我将缩写表名A、B、C和B_C): 我见过
还有一个更重要的细节:我想根据图书中的布尔变量更改列表项的背景色,该变量用于标记图书是否已阅读,并且上下文菜单将允许用户从列表中删除图书,因此列表需要立即调整以适应数据更改。是的,这是可行且容易完成的 我不是专家,但我遵循谷歌在其谷歌I/O应用程序上使用的模式 检查提供程序包,其中有使用该模式所需的3个类
- ScheduleDatabase.java
- ScheduleProvider.java
- ScheduleContract.java
interface Tables {
String TABLE1= "table1";
String TABLE2= "table2";
// JOINS
String TABLE1_JOIN_TABLE2 = "table1"
+ "LEFT OUTER JOIN table2 ON table1.table_id= table2.tableid";
}
然后在您的提供者中,将提供者实体映射到此联接。是的,这是可行且容易实现的 我不是专家,但我遵循谷歌在其谷歌I/O应用程序上使用的模式 检查提供程序包,其中有使用该模式所需的3个类
- ScheduleDatabase.java
- ScheduleProvider.java
- ScheduleContract.java
interface Tables {
String TABLE1= "table1";
String TABLE2= "table2";
// JOINS
String TABLE1_JOIN_TABLE2 = "table1"
+ "LEFT OUTER JOIN table2 ON table1.table_id= table2.tableid";
}
然后在您的提供程序中将一个提供程序实体映射到此联接。我最终使用了数据库帮助程序/适配器并创建了一个自定义AsyncTaskLoader。我找不到大量定制的例子,也没有很好的文档,但也不难理解。工作起来很有魅力。我最终使用了数据库帮助程序/适配器并创建了一个自定义的AsyncTaskLoader。我找不到大量定制的例子,也没有很好的文档,但也不难理解。工作起来很有魅力。如果使用ORM,live会更好。如果使用ORM,live会更好。使用provider映射意味着您可以使用provider.query。这特别有用,因为它允许您使用简单的游标加载程序。OP还子类化了
AsyncTaskLoader
,这与使用provider映射意味着您可以使用provider.query具有相同的优势。这特别有用,因为它允许您使用简单的游标加载程序。OP还子类化了AsyncTaskLoader
,这将具有相同的优势