繁体   English   中英

领域数据库多表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM