Database design 在文档数据库中创建可自定义的定制产品目录

Database design 在文档数据库中创建可自定义的定制产品目录,database-design,nosql,Database Design,Nosql,我最初的意图是为MongoDB提出这个问题,但我很快意识到这个问题可能适用于其他面向文档的数据库,如CouchDB和其他数据库。我很难集中精力建立一个支持定制产品的产品目录。以下是目录的一组基本目标: 每个产品都有一组可配置的选项。比如用来生产产品的材料,或者印刷在上面的颜色。某些选项使其他选项可用,为什么某些选项限制其他选项可用。 期权的定价因期权而异,对于某些期权,其价格是基础价格的百分之一,而对于其他期权,其价格是固定的。 还有特价方面。我们可能与各种其他公司签订合同,为一系列产品提供专门

我最初的意图是为MongoDB提出这个问题,但我很快意识到这个问题可能适用于其他面向文档的数据库,如CouchDB和其他数据库。我很难集中精力建立一个支持定制产品的产品目录。以下是目录的一组基本目标:

每个产品都有一组可配置的选项。比如用来生产产品的材料,或者印刷在上面的颜色。某些选项使其他选项可用,为什么某些选项限制其他选项可用。 期权的定价因期权而异,对于某些期权,其价格是基础价格的百分之一,而对于其他期权,其价格是固定的。 还有特价方面。我们可能与各种其他公司签订合同,为一系列产品提供专门的价格。我们经常在产品线和订单头提供促销代码和折扣。 最终,最难理解的部分是产品条目的通用模式。我是否应该按照以下思路做一些事情:

    {
        "Product_Name": "Test Product 1",
        "Product_Number": "P00001",
        "BasePrice":"10",
        "AvailableSize":
        [
            {
               "Length":"1","Width":"1",
               "PriceType":"PercentOnBase",
               "Price":"5"
            },
            {
               "Length":"1","Width":"2",
               "PriceType":"PercentOnBase",
               "Price":"6"
            },
            {
               "Length":"2","Width":"2",
               "PriceType":"PercentOnBase",
               "Price":"7.5"
            },
            {
               "Length":"2","Width":"3",
               "PriceType":"PercentOnBase",
               "Price":"10"
            },
            {
               "Length":"3","Width":"3",
               "PriceType":"PercentOnBase",
               "Price":"15"
            }
        ],
        "AvailableNumberImprints":
        [
            {
               "ImprintNumber":"1",
               "PriceType":"PercentOnBase",
               "Price":"10"
            },
            {
               "ImprintNumber":"2",
               "PriceType":"PercentOnBase",
               "Price":"12"
            },
            {
               "ImprintNumber":"3",
               "PriceType":"PercentOnBase",
               "Price":"14"
            },
            {
               "ImprintNumber":"4",
               "PriceType":"PercentOnBase",
               "Price":"16"
            },
            {
               "ImprintNumber":"5",
               "PriceType":"PercentOnBase",
               "Price":"17"
            },
            {
               "ImprintNumber":"6",
               "PriceType":"PercentOnBase",
               "Price":"20"
            },                      
        ],
            "AvailableMaterials":
        [
            {
               "MaterialName" : "Black",
               "MaterialNumber": "M00001",
               "PriceType":"PercentageOnBase",
               "Price":"5"
            }
            {
               "MaterialName" : "White",
               "MaterialNumber": "M00002",
               "PriceType":"PercentageOnBase",
               "Price":"5"
            }
            {
               "MaterialName" : "Pearl",
               "MaterialNumber": "M00003",
               "PriceType":"PercentageOnBase",
               "Price":"5"
            }
            {
               "MaterialName" : "Green",
               "MaterialNumber": "M00004",
               "PriceType":"PercentageOnBase",
               "Price":"5"
            }
        ]
    }
我很快遇到的一个问题是,这使得限制其他选项而不太冗余有些尴尬。有什么想法吗