创建桥表等效领域类?

时间:2017-01-22 19:25:41

标签: database database-design realm realm-list

我正在设计一个我打算在Android上使用Realm实现的数据库。我仍在探索和阅读有关使用该库的内容,但我有一个问题与我有关。是否可以使用Realm实现桥接表(参见下图)

从我在"关系"中读到的内容在文档link中的部分,我可以使用RealmList对象来执行多对多的关系。例如,对于" User_Activity"表。但是,我仍然不确定如何转换"将数据库设计转换为Realm类的等价物。

enter image description here

3 个答案:

答案 0 :(得分:1)

您可以简单地定义类:

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

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

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

答案 1 :(得分: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;
}

我认为这种架构适合你。

答案 2 :(得分:1)

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

df = df1.groupby(by=['Name','Date'])['Amount'].sum()
        .groupby(level='Name').cumsum().reset_index(name='Cumsum')
print (df)
   Name        Date  Cumsum
0  Jack  2016-01-31      10
1  Jack  2016-02-29      23
2  Jill  2016-01-31      10
3  Jill  2016-02-29      15

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

但至于你的问题,我相信你需要一对多的关系,比如enter image description here

因此,正确的定义如下:

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

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