首先,我是CosmosDB(NoSQL)的新手,目前只使用SQL-Server。我想遷移到CosmosDB,並且很難理解一些基本概念。我明白,一切都是文件,沒有連接,一切都是非規範化的,等等。如何處理天藍色宇宙中的參考資料db
比方說,我想創建一些體育聯盟的模型。我有球隊,球隊有球員,球隊在聯盟中。
{
"typename": "League",
"id": "league.1",
"teams": [
{
"typename": "Team",
"id": "team.1",
"leagueId": "league.1",
"players": [
{
"typename": "Player",
"id": "Player.1",
"teamId": "team.1",
"name": "John"
},
{
"typename": "Player",
"id": "Player.1",
"teamId": "team.1",
"name": "Alex"
}
]
}
]
}
的球員和球隊不經常改變,因此(我認爲)這將是罰款,並將其存儲聯賽文件內。如果我想問一個特定的聯盟,我會得到所有球隊和所有球員。如果我要查詢某個特定的團隊,該怎麼辦?或者如果我想讓一個特定的球員進入球隊呢?我是否必須爲每個團隊/球員創建文檔?
如果我要創建新的播放器文檔,該怎麼辦?根據我的實際理解,我必須更新包含球員乃至聯盟的球隊。這是正確的方法嗎?這對我來說似乎不太自然。如果是這樣,我將如何做到這一點?我試過存儲過程或觸發器。這兩者都很難實現(我的觀點),因爲我沒有工具來測試和調試。觸發器也將被遞歸執行(創建玩家導致更新團隊,這導致更新聯盟)。
如果這是要走的路,那麼這裏最好的做法是什麼?存儲過程?觸發器?有什麼工具可以提高開發效率嗎?
我也試過用他們的id來引用聯盟中的球隊。這使得更新團隊非常簡單。缺點是我會有幾次打電話讓所有聯盟的球隊獲得更高的閱讀時間。
有人能讓我走上正確的軌道嗎?
不幸的是,模式設計是一個相當廣泛的話題,沒有辦法給你一個單一的客觀答案。模式與觸發器和存儲過程無關。文檔數據庫不排除您引用其他文檔。沒有規定說你必須嵌入相對引用和其他文檔。 –