Android 同一类的多个领域表

Android 同一类的多个领域表,android,database-design,realm,Android,Database Design,Realm,我有一个RealmObject类。我想要同一类的多个表。我可以在一个领域(数据库)中这样做,还是需要有多个领域(每个领域一个表) 如果必须是多个领域,那么领域切换过程有多快 我想要同一类的多个表 你有两个合理的选择: 1.)添加一个鉴别器字段,用于确定当前对象实例所属的“表” public class MyObject extends RealmObject { @PrimaryKey private String tableAndId; @Index priv

我有一个RealmObject类。我想要同一类的多个表。我可以在一个领域(数据库)中这样做,还是需要有多个领域(每个领域一个表)

如果必须是多个领域,那么领域切换过程有多快

我想要同一类的多个表

你有两个合理的选择:

1.)添加一个鉴别器字段,用于确定当前对象实例所属的“表”

public class MyObject extends RealmObject {
    @PrimaryKey
    private String tableAndId;

    @Index
    private String table;

    @Index
    private long id;

    // getters, setters
}
然后可以查询“每个表”:

然后你可以写进动态领域:

dynRealm.executeTransaction(new DynamicRealm.Transaction() {
    @Override
    public void execute(DynamicRealm dynRealm) {
        DynamicRealmObject dynObj = dynRealm.where("MyObject_Table_A")
                                            .equalTo("id", id)
                                            .findFirst();
        if(dynObj == null) {
            dynObj = dynRealm.createObject("MyObject_Table_A", id);
        }
        dynObj.setDate("created", new Date());
    }
});


每个表也可以有一个新的配置,但这听起来像是一个不合理的选项,所以我几乎不想提及它。

您有这个表的特定编号,还是这个表的
N
?顺便说一句,请阅读@EpicPandaForce Nope,表的数量是动态的。说它像一个信息渠道。随着时间的推移,将添加越来越多的频道。唯一的问题是,通过这些渠道获得的信息是同一类型的。但有一些限制,它们应该单独存储。您可以使用字符串鉴别器字段存储这应该是哪个表。@EpicPandaForce,我在Realm网站上看到过。动态警报。但我还是想看看是否有更好的方法。
DynamicRealm dynamicRealm = DynamicRealm.getInstance(config);
RealmSchema schema = dynamicRealm.getSchema();
RealmObjectSchema objectSchema;
if(!schema.contains("MyObject_Table_A")) {
    objectSchema = schema.create("MyObject_Table_A");
    objectSchema.addField("id", long.class, FieldAttribute.PRIMARY_KEY);
    objectSchema.addField("created", Date.class, FieldAttribute.INDEXED);
    //...
} else {
    objectSchema = schema.get("MyObject_Table_A");
}
dynRealm.executeTransaction(new DynamicRealm.Transaction() {
    @Override
    public void execute(DynamicRealm dynRealm) {
        DynamicRealmObject dynObj = dynRealm.where("MyObject_Table_A")
                                            .equalTo("id", id)
                                            .findFirst();
        if(dynObj == null) {
            dynObj = dynRealm.createObject("MyObject_Table_A", id);
        }
        dynObj.setDate("created", new Date());
    }
});