2015-05-20 83 views
0

我有一個關於如何將數據存儲在數據庫中的最佳實踐或理想方式的問題。作爲一個例子,我有一個分配了國家的網站。從關係數據庫移動到mongodb

表國家:ID |名稱|α-2

表站點:ID | countryId |名

每個站點都有對國家ID的參考。

我想創建一個使用流星和它的mongodb的新網站,並想知道我應該如何存儲對象。我是否創建了一個colleciton「國家」和「網站」並使用country _id作爲參考?然後使用transform來解析引用?

看着SimpleSchema我想出了以下內容:

Schemas.Country = new SimpleSchema ({ 
    name: { 
     type: String 
    }, 
    alpha2: { 
     type: String, 
     max: 2 
    } 
}); 

Schemas.Site = new SimpleSchema({ 
    name: { 
     type: String, 
     label: "Site Name" 
    }, 
    country: { 
     type: Schemas.Country 
    } 
}); 

Countries = new Meteor.Collection("countries"); 
Countries.attachSchema(Schemas.Country); 

Sites = new Meteor.Collection("sites"); 
Sites.attachSchema(Schemas.Site); 

我只是想知道這是如何然後存儲在數據庫中。由於我有2個集合,但在網站集合中,我也定義了國家對象。如果一個國家更改其alpha2代碼(非常不可能)會怎麼樣?

此外,這將繼續我有一個名爲「條件」的集合。每個條件都會定義一個網站。我現在可以將整個Site對象定義爲條件對象。如果Sitename發生了變化呢?我是否需要在所有條件對象中手動更改它?

這使我困惑了一下。我非常感謝你的所有想法。

回答

1

Meteor的挑戰在於它與Mongo的緊密結合,這對於構建需要規範化數據庫設計的OLTP應用程序並不好。 Mongo適用於WORM(一次寫入多次)類別的OLAP類應用程序。我希望Meteor支持OrientDB,就像Mongo一樣。

可以有兩種方法:

  1. 規範化DB正如我們在RDBMS做,然後通過敲擊 數據多次檢索數據。這裏有一篇很好的文章解釋了這種方法 - reactive joins in meteorJoins in Meteor 未來會有所建議。您也可以嘗試流星包 - publish compositepublish with relations

  2. 保持數據非歸至少部分地(1-N的關係,你可以在文檔 嵌入的東西,對於N-N關係,你可能有單獨的 集合)。例如,「學生」可嵌入「班級」中,因爲 學生將永遠不會超過1班,但與'學生' 和'主題'相關,他們可以在不同的集合中(NN關係 - 學生將有不止一個科目,每個科目將由多個學生取得 )。爲了再次獲取N-N關係,您可以使用上面提到的相同方法。

我不能給你確切的代碼示例,但我希望它有幫助。

+0

我看了看看發佈複合材料,看起來很有前途。我會用它做一些測試。可能我最終混合了規範化和非規範化的數據。特別是在不太可能發生變化的國家。 (名稱和ISO代碼)。這可能只是非正規化我猜? – Chris