NoSQL中的数据模型

时间:2018-06-28 09:21:56

标签: database nosql

实际上,我是SQL开发人员。现在世界已经转向NoSQL,因此我尝试学习像cosmos DB这样的NoSQL。我认为有一个基本问题,我将继续讨论。 NoSQL如何支持面向业务的应用程序。例如,我在RDBMS中有3个表,分别是客户,产品和订单。在这里,客户和产品是主表,订单是交易表。订单表中有两个主人的参考。在RDBMS中,为同一表创建了三个单独的表,因为在我的表单中,我必须在下拉列表或列表视图中显示产品列表,因此我将其创建为单独的主表。如何在NoSQL中设计数据模型,是否将产品分开表?我很期待。

1 个答案:

答案 0 :(得分:0)

在您的示例中-客户,产品和订单实体。您可以通过以下方式(文档模型)进行设计:

产品

{
    "_id" : "p1",
    "name": "camera"
},
{
    "_id" : "p2",
    "name": "mobile"
}

客户

{
    "_id" : "c1",
    "name": "sunil",
    "orders": [
        {
            "_id" : "999",
            "date": "05/05/2018",
            "product_id": "p1"
        },
        {
            "_id" : "888",
            "date": "02/09/2018",
            "product_id": "p2"
        }
    ]
}

从上面可以看出:

  

与RDBMS中的三个表相比,文档模型中有两个表。   产品详细信息存储在“产品”表中。订单已嵌入   客户表(因此不能加入)以及客户详细信息。

在关系设计中,将描述实体及其与其他实体的关系,并在以后设计查询和索引。在RDBMS中,规范化用于消除冗余数据以使其存储高效。联接查询可用于将数据收集在一起。但是,联接是性能和规模的罪魁祸首。

在NoSQL方面,您获得了支持表分区的数据库之类的功能,还需要确定如何消耗数据(查询)以提供有意义的主索引来进行查询。行文档或列应设计为将要一起读取的数据分组在一起。使用NoSQL,您可以对架构进行非规范化,以将其存储在一行中,或记录在关系世界中将包含索引的多个表。按键范围对数据进行分组可以按行键快速进行读写。