如果用户可以选择输入 4 个字段之一:a、b、c、d,我将如何构建我的 Realm 数据库。
目前,我已经创建了一个 RealmObject 模型类,其中所有 getter 和 setter 都在一个类中,因此如果用户添加到 c,输出如下所示:
[modelClassName = [{a:null},{b:null},{c:6664},{d:null}]]
这是最好的方法吗?或者我应该为每个变量创建一个模型类?后者似乎有点矫枉过正。
最佳答案
正如我的文章中提到的Designing the Schema of Realm effectively ,您可以将字段存储在一个“表”中,并存储一个附加的鉴别器字段,该字段确定当前可以有效读取哪个字段。
所以就你而言,
public class Something extends RealmObject {
public static final String TYPE_A = "a";
public static final String TYPE_B = "b";
public static final String TYPE_C = "c";
public static final String TYPE_D = "d";
private String a;
private String b;
private String c;
private String d;
@Index
private String discriminator;
public String getA() {
return a;
}
public String getB() {
return b;
}
public String getC() {
return c;
}
public String getD() {
return d;
}
public void setA(String a) {
this.a = a;
this.b = null;
this.c = null;
this.d = null;
this.discriminator = TYPE_A;
}
public void setB(String b) {
this.a = null;
this.b = b;
this.c = null;
this.d = null;
this.discriminator = TYPE_B;
}
public void setC(String c) {
this.a = null;
this.b = null;
this.c = c;
this.d = null;
this.discriminator = TYPE_C;
}
public void setD(String d) {
this.a = null;
this.b = null;
this.c = null;
this.d = d;
this.discriminator = TYPE_D;
}
}
或者类似的东西。可以添加额外的验证或一些统一的 getValue()
方法,类型可以用 enum
来表示(以及枚举的 name()
可以存储在 Realm 中)等。
事实上,如果您愿意,您甚至可以合并所有 a
、b
、c
、d
字段转换为 1 个名为“value”的字段,并保留鉴别器。
public class Something extends RealmObject {
public static final String TYPE_A = "a";
public static final String TYPE_B = "b";
public static final String TYPE_C = "c";
public static final String TYPE_D = "d";
@Index
private String discriminator;
private String value;
// getters, setters
public void setA(String a) {
this.value = a;
this.discriminator = TYPE_A;
}
public void setB(String b) {
this.value = b;
this.discriminator = TYPE_B;
}
public void setC(String c) {
this.value = c;
this.discriminator = TYPE_C;
}
public void setD(String d) {
this.value = d;
this.discriminator = TYPE_D;
}
}
这真的取决于你。
<小时/>此答案适用于 Realm 0.88.0+
关于java - 如何在一对一映射中不使用 null 实例化变量的情况下构建 Realm 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705213/