【问题标题】:What is a realm?什么是境界?
【发布时间】:2017-08-23 03:00:09
【问题描述】:

我正在研究在 React Native 应用程序中使用 Realm,但在理解领域的概念、领域对象服务器以及如何设计我的数据库方面遇到了困难。

假设我们有三个表:

"User" with columns id (primary key), name (string)
"Task" with columns id (primary key), user_id (foreign key to User), description (string)
"Friendships" with columns id (primary key), user_id (foreign key to User), friend_user_id (foreign key to User)

用户可以为自己创建任务并查看好友的任务,但只能编辑和删除自己的任务。所有这些用户和任务都将在他们的移动设备上创建并同步到服务器。

假设 user1 想查看他朋友的所有任务。

来自常规的 sql 背景,我想 javascript 伪代码会是这样的:

var friends_list = [user2.id, user3.id, ...];
let realm = Realm.URL("...server url...");
let friends_tasks = realm.objects('Tasks').filtered('user_id in friends_list');

但是如果我们只有一个领域,那么为了让用户能够创建自己的任务,他们需要对该领域的写入权限,因此也有权限删除其他用户的任务。

查看 Realm 文档,特别是有关多个领域和访问控制的信息。

解决方案是让每个用户在他们的移动设备上创建一个共享领域。每个用户的领域都将与对象服务器同步。并且用户的朋友将获得对该领域的读取权限。

因此,user1 可以查看他朋友的所有任务。伪代码将类似于:

var friends_list = [user2.id, user3.id, ...];
var friends_tasks = [];
foreach (user_id in friends_list) {
  let realm = Realm.URL("...server_url/user_id/...");
  let tasks = realm.objects("Tasks");
  friends_tasks.push(tasks);
}

这是最好的设计吗?不得不连接到不同的领域感觉不对。

【问题讨论】:

    标签: realm realm-mobile-platform


    【解决方案1】:

    Realm 是一个对象数据库,而不是关系数据库。这意味着您不必将对象映射到表中的行,但您可以将对象直接存储在数据库中。在general terms here 中有描述。

    像 Realm 这样的对象数据库正在使用classes as data model,在您的情况下,您需要一个用于User,一个用于Task。用户的任务可以是modelled as a relationship,而不是使用主键/外键并加入关系数据库。同样,关系可用于模拟两个用户之间的友谊。

    Realm 可以是本地数据库,或者您可以使用后端基础架构或其他移动设备连接到 Realm 对象服务器和synchronize 您的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 2014-03-18
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2014-02-15
      • 2017-03-22
      相关资源
      最近更新 更多