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

时间:2013-01-16 09:13:24

标签: nhibernate database-design model database-schema

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

客户销售两种产品:

  1. 自定义艺术作品,由客户指定的设计。
  2. 艺术品在客户指定的背面印上艺术品。
  3. 到目前为止,这是我的削减数据库模型。

    Products:
        Id
        Description
        Price
    
    Orderlines:
        Id
        OrderId
        ProductId
    
    Attributes:
        Id
        Name
    
    OrderAttributes:
        AttributeId
        OrderlineId
        Value
    

    产品表将包含上述2个产品。

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

    属性包含每个产品的自定义字段名称。

    例如,自定义图稿产品将具有属性设计。

    订单属性将订购的产品链接到其海关属性并具有价值。 例如,具有设计属性的自定义图稿产品,其值为绘制房屋。

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

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

2 个答案:

答案 0 :(得分:2)

一些建议:

Orderlines表应包含产品的价格(可能还有描述),以便在不影响现有订单的情况下更改商品价格。类似地,订单表(未示出)应包含可能改变的客户信息(例如送货地址)。构成订单的数据不能改变,最简单的方法是将其展平和非规范化。

OrderAttributes结构称为entity-attribute-value模型,它有许多缺点。一般来说,我建议避免它并将所需的列添加到Orderlines表中。如果需要,您的应用程序可以继承Product和OrderLine,以便CustomArtWorkProduct在添加到订单时创建CustomArtWorkOrderLine。

答案 1 :(得分:0)

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

那是:

  • 如果产品有订单,则产品必须包含订单集合。
  • 如果订单适用于产品,则订单必须具有产品产品。
  • 等等。

在面向对象的编程中,您不需要通过标识符关联:您不需要这个,因为这是一个由分层数据统治的不同世界。

老实说,如果按照我之前所说的那样,NHibernate将是一个非常强大的工具,因为它可以在没有你干预的情况下加载对象和属性。

考虑“获取某些产品的所有订单”:您不打算故意执行SQL Join,但是您将要访问Orders的{​​{1}}属性并且NHibernate将把这种访问权转化为数据库世界

这是使用OR / M的要点。它不仅仅是“我将表格映射为”。它是关于加入两个截然不同的世界:面向对象的分层世界,关系数据没有痛苦。

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

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

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