【问题标题】:Advice on database model for ecommerce with custom products关于定制产品电子商务数据库模型的建议
【发布时间】:2013-01-16 23:02:10
【问题描述】:

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

客户销售两种产品:

  1. 定制艺术品,客户指定的设计。
  2. 艺术版画,背面有客户指定的信息。

这是我迄今为止的精简数据库模型。

Products:
    Id
    Description
    Price

Orderlines:
    Id
    OrderId
    ProductId

Attributes:
    Id
    Name

OrderAttributes:
    AttributeId
    OrderlineId
    Value

产品表将包含上面的 2 个产品。

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

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

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

订单属性将订购的产品链接到其海关属性并具有价值。 例如定制艺术品产品,其属性为设计,价值为粉刷房子。

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

有没有更好的方法对这些数据进行建模?

【问题讨论】:

    标签: nhibernate database-design model database-schema


    【解决方案1】:

    几个建议:

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

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

    【讨论】:

      【解决方案2】:

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

      即:

      • 如果产品有订单,那么产品必须有一个订单集合。
      • 如果订单是针对产品的,则订单必须具有 Product 属性。
      • 等等。

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

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

      考虑“获取某个产品的所有订单”:您不会故意执行 SQL 连接,但您将访问 ProductOrders 属性,NHibernate 将翻译此内容访问数据库世界

      这是使用 OR/M 的重点。这不仅仅是“我按原样映射表”。它是关于连接两个截然不同的世界:面向对象的分层世界,没有痛苦的关系数据。

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

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

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

      【讨论】:

      • 谢谢,您对具有不同属性的产品的数据库模型以及如何映射这些有什么建议吗?
      • @Alex 也许,但我相信我应该了解环境以及您的项目背后的原因,以便做出正确的决定。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2011-01-03
      • 1970-01-01
      • 2020-06-08
      • 2011-04-22
      • 1970-01-01
      • 2017-12-16
      相关资源
      最近更新 更多