【发布时间】: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