1

我正在设计一个我计划使用 Realm 在 Android 上实现的数据库。我仍在探索和阅读有关使用图书馆的信息,但我有一个问题与我有关。是否可以使用 Realm 实现桥接表(见下图)?

从我在文档链接的“关系”部分读到的内容,我可以使用 RealmList 对象来处理多对多关系。例如,对于“User_Activity”表。但是,我仍然不确定如何将数据库设计“转换”为等效的 Realm 类。

在此处输入图像描述

4

3 回答 3

1

您可以简单地定义您的类,如:

public class User {
    private int id;
    private String username;
    ...
    private UserActivity userActivity;
}

public class UserActivity {
   private int id;
   private Activity activity;
}

您不必在模型中存储“外国 ID”。Realm 实际上将相关的链接对象存储为下面的指针。所以只需按照领域的链接文档并将链接对象定义为字段

于 2017-01-23T06:30:36.990 回答
1
public class User extends RealmObject {
    @PrimaryKey
    private String userId;

    private String password;

    @Index
    private String username;

    private String paGoal; // ?

    private long maxInactivityInterval;

    private RealmList<UserActivity> userActivities;

    private Activity currentActivity; // optional
}

public class UserActivity extends RealmObject {
    @PrimaryKey
    private String userIdAndActivityIdAndDate; // userid_activityid_2017-01-23

    @Index
    private Date date;

    private long duration;

    private User user;

    @Index
    private String userId;

    private Activity activity;

    @Index
    private String activityId;
}

public class Activity extends RealmObject {
    @PrimaryKey
    private String activityId;

    @Index
    private String type;
}

我认为这个架构适合你。

于 2017-01-23T10:37:04.483 回答
1

User_Activity 表是数据库中的辅助表。辅助表有助于绑定来自具有多对多关系的 2 个不同表的相关记录。所以,我认为没有理由在 Realm 中定义 UserActivity 类。

public class User {
   private RealmList<Activity> activities;
}

public class Activity {
   private RealmList<Users> users;
}

如果你想要多对多的关系就足够了。

但至于你的问题,我相信你需要一对多的关系,就像那样在此处输入图像描述

因此,正确的定义如下所示:

public class User {
   private RealmList<Activity> activities;
}

public class Activity {
   private user = User;
}
于 2017-01-23T14:43:46.197 回答