我正在研究在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文档,特别是关于多领域和访问控制。
解决方案是为每个用户在其移动设备上创建共享领域。每个用户的领域将与对象服务器同步。用户的朋友将获得对该领域的读取权限。
因此,用户1看到他所有的朋友的任务。伪代码将是这样的:
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);
}
这是最好的设计?这只是感觉不对,不得不连接到不同的领域。