我正在研究在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);
}
這是最好的設計?這只是感覺不對,不得不連接到不同的領域。