我需要一些关于电子商务域建模的建议。
客户销售两种产品:
到目前为止,这是我的削减数据库模型。
Products:
Id
Description
Price
Orderlines:
Id
OrderId
ProductId
Attributes:
Id
Name
OrderAttributes:
AttributeId
OrderlineId
Value
产品表将包含上述2个产品。
订单行将所选产品链接到订单。
属性包含每个产品的自定义字段名称。
例如,自定义图稿产品将具有属性设计。
订单属性将订购的产品链接到其海关属性并具有价值。 例如,具有设计属性的自定义图稿产品,其值为绘制房屋。
我还想使用nhibernate将此数据库模型映射到代码。
有没有更好的方法来建模这些数据?
答案 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数据库的模型:
不要注意如何将模型映射到数据库,而是映射到模型设计。
查看这篇文章,它比另一篇更现代: