[英]Realm Database Multiple Tables
尽管我阅读了 Realm 文档,但我对表和领域的概念感到困惑。 据我所知,一个领域就像一个表,但它可以存储多个模型。 问题是,我想要多个表(其中一些只包含 1 个类的对象,还有一些包含多个类),但我不知道如何管理多个领域。 我希望我的“Database”类成为 RealmDatabase 的包装器,并且我希望其中有多个表,例如,一个“新歌曲”表和一个“最佳歌曲”表。 所以我所做的是:
public class Database {
//tables that I want to have
public enum RealmType {
SONGS_NEW, SONGS_BEST, PLAYLISTS_BEST, PLAYLISTS_MINE, PLAYLISTS_OTHERS, ALBUMS_SPECIAL, NEWS, FEED
}
private static final String TAG = "Database";
Context context;
//A realm object for each table
Realm profileRealm;
Realm songs_newRealm;
Realm songs_bestRealm;
//and so on...
// as I didn't know how to differentiate between Realms (all of them are created with Realm.getDefaultInstance(), and I think they are just one Realm. so I created a class for different configs )
private static class RealmConfigs {
static RealmConfiguration songs_newConfig;
static RealmConfiguration songs_bestConfig;
//and so on..
public RealmConfigs() {
config();
}
private static void config() {
songs_newConfig = new RealmConfiguration.Builder()
.name("songs_new.realm")
.deleteRealmIfMigrationNeeded()
.build();
songs_bestConfig = new RealmConfiguration.Builder()
.name("songs_best.realm")
.deleteRealmIfMigrationNeeded()
.build();
}
}
}
但就是感觉不太对劲。 我知道我对 Realm 的核心概念感到困惑,但文档也没有帮助。 关于如何正确管理不同表并初始化它们的清晰解释将不胜感激。
附注。 我也找到了这个答案,但感觉也不对: https : //stackoverflow.com/a/40547703/7893941
几点:
每个领域配置将转换为一个数据库。 扩展realmobject 的每个类都将转换为一个表。 这些类的每个实例都将转换为一行(如果您保存它)。
首先尝试确定您需要多少个数据库和表? (99% 的应用程序使用 1 个数据库)。 您可以阅读并遵循数据库规范化方法,然后尝试使用 Realm 实现您需要的内容。
据我所知,一个领域就像一个表,但它可以存储多个模型
1 Realm 是 1 个数据库文件,可以存储多个 RealmModel。
每个 RealmModel 对应 1 个“表”。
附注。 我也找到了这个答案,但感觉也不对:
那是因为该答案用于将给定类的子类型存储在同一个表中。 尽管从技术上讲,即使在您的设置中也是可能的。
public class Playlist extends RealmObject {
@Index
private String type; // SONGS_NEW, SONGS_BEST, PLAYLISTS_BEST, PLAYLISTS_MINE, PLAYLISTS_OTHERS, ALBUMS_SPECIAL, NEWS, FEED
private RealmList<Song> songs;
}
进而
public RealmResults<Song> getSongsForType(Realm realm, RealmType type) {
return realm.where(Playlist.class).equalTo("type", type.name())
.findFirst().getSongs().where().findAll();
}
我也是 Realm 的新手,从 SQL Lite 切换过来,我想知道如何替换表,因为我读到的关于 Realm 的内容是它存储对象。 下载 Realm Studio 后,我有点了解 Realm 是如何存储数据的。
这就是我所看到的,以及如何根据您的情况拥有多个表。
当您创建领域对象时,它基本上会根据对象属性键创建一个带有字段的表。 因此,您不必列出相同的对象或因为它们相同而无用
对于您的情况,您只需要一个 Songs 表,然后有其他表(songs_new 和 song_best ),这些表将包含一个键,该键指的是 Songs_table 中的一个项目,基本上是一个外键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.