Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 关于定制产品电子商务数据库模型的建议_Nhibernate_Database Design_Model_Database Schema - Fatal编程技术网

Nhibernate 关于定制产品电子商务数据库模型的建议

Nhibernate 关于定制产品电子商务数据库模型的建议,nhibernate,database-design,model,database-schema,Nhibernate,Database Design,Model,Database Schema,我需要一些关于电子商务领域建模的建议 客户销售两种产品: 定制艺术作品,客户指定的设计 背面印有客户指定信息的艺术品印刷品 这是我到目前为止简化的数据库模型 Products: Id Description Price Orderlines: Id OrderId ProductId Attributes: Id Name OrderAttributes: AttributeId OrderlineId

我需要一些关于电子商务领域建模的建议

客户销售两种产品:

  • 定制艺术作品,客户指定的设计
  • 背面印有客户指定信息的艺术品印刷品
  • 这是我到目前为止简化的数据库模型

    Products:
        Id
        Description
        Price
    
    Orderlines:
        Id
        OrderId
        ProductId
    
    Attributes:
        Id
        Name
    
    OrderAttributes:
        AttributeId
        OrderlineId
        Value
    
    产品表将包含上面的两种产品

    订单行将所选产品链接到订单

    属性保存每个产品的自定义字段名

    例如,定制艺术品产品将具有设计属性

    订单属性将订单产品链接到其海关属性,并具有相应的价值。 例如,定制艺术品产品,具有设计属性,其值为“油漆房子”

    我还想使用nhibernate将这个数据库模型映射到代码


    有没有更好的方法来建模这些数据?

    在面向对象的程序中,关系表示为关联

    即:

    • 若产品有订单,则产品必须有订单集合
    • 如果订单是针对产品的,则订单必须具有产品属性
    • 等等
    在面向对象编程中,您不需要通过标识符进行关联:您不需要标识符,因为这是一个由分层数据控制的不同世界

    老实说,如果您遵循我之前所说的,NHibernate将是一个非常强大的工具,因为它能够在不需要您干预的情况下加载对象和属性

    考虑一下“获取某个产品的所有订单”:您不会故意执行SQL联接,但您将访问
    产品的
    订单
    属性,NHibernate将把此访问转换为数据库世界

    这就是使用OR/M的要点。它不仅仅是“按原样映射表”。它是关于连接两个非常不同的世界:面向对象的分层世界和关系数据

    查看这篇非常古老的(2004!)CodeProject文章,以及它如何创建基于Northwind SQL Server数据库的模型:

    不要关注如何将模型映射到数据库,而要关注模型设计

    查看这篇文章,它比另一篇更现代:


      • 有几点建议:

        Orderlines表应包含产品的价格(可能还有描述),以便在不影响现有订单的情况下更改项目价格。同样,订单表(未显示)应包含可能更改的客户信息(例如发货地址)。构成订单的数据不能更改,最简单的方法是将其展平并反规范化


        OrderAttributes结构称为模型,它有许多缺点。一般来说,我建议避免使用它,并将所需的列添加到Orderlines表中。如果需要,您的应用程序可以对产品和订单行进行子类化,以便CustomArtWorkProduct在添加到订单时创建CustomArtWorkOrderLine。

        谢谢,您对具有不同属性的产品的数据库模型以及如何映射这些属性有何建议?@Alex,但是我相信我应该知道你的项目背后的环境和原因,以便做出一个好的决定。