android - 同一类的多个 Realm 表

标签 android database-design realm

我有一个 RealmObject 类。我想要同一类的多个表。我可以在单个 Realm (数据库)中执行此操作还是需要多个 Realm (每个 Realm 一个表)。

如果必须是多个Realm,Realm切换的过程要多快?

最佳答案

I want multiple tables of the same class.

那么你有两个合理的选择:

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

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

    @Index
    private String table;

    @Index
    private long id;

    // getters, setters
}

然后你可以查询“per table”:

RealmResults<MyObject> results = realm.where(MyObject.class)
                                      .equalTo(MyObjectFields.TABLE, "tableA")
                                      .findAll();

2.) 使用 DynamicRealm 动态创建您想要的任何表,并通过 RealmSchema 手动创建架构。

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");
}

然后你可以写入动态 Realm :

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());
    }
});

您还可以为每个表配置一个新配置,但这听起来像是一个不合理的选择,所以我什至不想提及它。

关于android - 同一类的多个 Realm 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40542762/

相关文章:

token "int"上的 Android R.java 语法错误,此 token 后应为 VariableDeclaratorId

mysql - 构建数据库

swift - 理解 RealmSwift 中的平等

java - ImageView 不旋转

Android:如果主线程在工作线程之前完成会发生什么

mysql - 应该使用替代 PK 加唯一列还是使用唯一列的自然 PK?

ios - 在 Realm 下载内容时如何更新 progressView

ios - 升级到 Realm 0.92.2 后编译错误

android - 如何在android中禁用或启用viewpager滑动

postgresql - 基于postgres数据库在数据仓库中实现继承的最佳方法