2017-10-04 29 views
7

只是設計一個公司的FireStore架構一個簡單的問題:設計雲架構的FireStore與許多一對多和跨實體關係

我知道你得使用了合適的工具,而公司的FireStore是不應該是一個關係數據庫,但有沒有建議的技術來模擬多對多關係?

例:

我想建立一個物業管理的應用程序,其中

公司自己的屬性,包含單位。層次結構在這裏很簡單。

因此,租戶將隨着時間的推移租用多個單元,並且每個單元將有許多租戶隨着時間的推移。所有這些都由與1個或更多租戶相關的租賃組成。

單位可以擁有租賃我猜,但租戶如何看到他們的所有租約隨着時間的推移..應租賃有一個子集合,引用租戶..是租戶最高級別?

只是尋找一些基本建議..

或者是更好的只是用戶GraphQL關係數據庫?

回答

9

不幸的是,這裏沒有免費的午餐。

單位可以擁有租約,但目前可以防止跨單位查詢,例如租戶租用哪些單位。我們還不支持collection group queries,但是當我們這樣做的時候是可行的。

要解決這個問題,請在租賃期間在unittenant字段之間進行1對1映射的頂級集合,那麼您的租賃歷史將爲db.collection('leases').where('tenant', '==', 'cdock')。您可以在租約中存儲足夠的關於該單位的信息,以避免將租賃單位加入單位,以及有關租戶的足夠信息以避免加入單位。

如果每個租賃住戶的數量少,你也可以讓租賃1單元到很多住戶與住戶設置像這樣:

'tenants': { 
    'cdock': true, 
    'alice': true, 
    'bob': true 
} 

然後,你可以查詢與db.collection('leases').where('tenants.cdock', '==', true)你的歷史。

租戶可以是頂層(或加入),也可以不是,取決於您需要保留多少信息以及租約是否需要有關租戶的最新信息。

+0

所以在這裏,你的文檔中基本上有一個對象'tenants',你正在查詢'tenants.cdock'。這是否意味着Firestore能夠對這些嵌套屬性建立索引? –

+0

我試圖做類似的事情,但在查詢Firestore時告訴我它需要首先創建一個索引,並且想要索引每個可能的鍵,如'tenants.cdock','tenants.alice'等。我的鍵是像租戶的名字,所以在查詢之前我不能讓他們索引。你如何解決這個問題? –

+0

@ThijsKoerselman這裏有關於這個文檔的信息,以防你還沒有找到它:https://firebase.google。COM /文檔/公司的FireStore /解決方案/陣列#solution_a_map_of_values 您在數據結構進行編碼的詳細信息,如時間戳值的關鍵: '「房客」:{ 「cdock」:1502144665, 「愛麗絲':1502144665, 'bob':1502144665 }' 它至少可以讓你對這些屬性有一定的範圍查詢能力。 – cdock