不知道在android开发的过程中有没有遇到锅这样的情形,两个实体,有各自的属性特征,可是又有相似的属性,在设计表的时候就比较纠结。一种方案,设计成一张表,这样做的好处是相似的属性可以公用一个字段,而且更重要的是,这样的相似的实体往往还会在UI上显示在一个listview,这样用一个cursor,方便大量数据的显示。可是这样也有不好的地方,首先在结构上,一个实体扩展的时候,改表结构,另一个实体不可避免的也会受到影响,而且在数据结构上也不清晰。
那么怎么解决两张表的情况下,在一个listview显示的需求呢?这个时候用view来做一个临时表,我认为是一个不错的选择。
例如下表:一个sms表有body字段和tel字段
create table sms ( _id integer,body text,tel text )
表二:mms表,有text字段和attachment字段,和sms一样都有tel字段
create table mms ( _id integer,text text,tel text,attachment text )那接下来怎么做一个临时的view来合并两张表呢?可以使用union,可是union要求两个表字段必须相同列数,并且字段类型相似,这个我们用as来做列扩展
如下:
create view sms_mms2 as select _id,body,tel,null as text,null as attachment,'sms' as type from sms union select _id,null as body,text,attachment,'mms' as type from mms这样在listview显示的时候可以用type来区分,而且数据又在一个cursor里。