从关系数据库迁移到mongodb

时间:2015-05-20 09:04:13

标签: mongodb meteor

我有一个关于如何将数据存储在数据库中的最佳实践或理想方式的问题。作为一个例子,我有一个分配了国家/地区的网站。

表国家/地区:id | name | alpha2

表网站:id | countryId | name

每个网站都引用了国家/地区ID。

我想使用Meteor及其mongodb创建一个新网站,并想知道我应该如何存储这些对象。我是否创建了一个集合“国家/地区”和“网站”并使用国家/地区作为参考?然后使用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);

我只是想知道它是如何存储在db中的。由于我有2个集合,但在网站集中,我确实也定义了国家/地区对象。如果一个国家改变其alpha2代码(非常不可能)会怎么样?

此外,我还会继续使用名为“条件”的集合。每个条件都将定义一个站点。我现在可以将整个Site对象定义为条件对象。如果Sitename发生变化怎么办?我是否需要在所有条件对象中手动更改它?

这让我有点困惑。我非常感谢你的所有想法。

1 个答案:

答案 0 :(得分:1)

Meteor面临的挑战是它与Mongo紧密绑定,这对于构建需要规范化数据库设计的OLTP应用程序并不好。 Mongo适用于OLAP类型的应用程序,这些应用程序属于WORM(一次写入多次读取)类别。我希望看到Meteor像Mongo一样支持OrientDB。

可以有两种方法:

  1. 像在RDBMS中那样规范化数据库,然后通过点击来检索数据 数据多次。这是一篇很好的文章,解释了这种方法 - reactive joins in meteorJoins in Meteor 将来有人建议。您也可以尝试Meteor包 - publish compositepublish with relations

  2. 保持数据至少部分去标准化(对于1-N关系,您可以 将事物嵌入文档中,对于N-N关系,您可以将其分开 采集)。例如,'Student'可以嵌入'Class'中 学生永远不会超过一节课,但要联系'学生' 和'主题',他们可以在不同的集合(N-N关系 - 学生将有不止一个科目,每个科目都将 由一个以上的学生拍摄)。为了再次获取N-N关系 可以使用上面提到的相同方法。

  3. 我无法向您提供确切的代码示例,但我希望它有所帮助。