2013-01-16 70 views
0

我需要一些關於建模電子商務域的建議。對定製產品的電子商務數據庫模型的建議

客戶銷售的兩種產品:

  1. 自定義的藝術作品,由客戶指定設計。
  2. 藝術版畫,由客戶指定背面的信息。

這是我砍下數據庫模型爲止。

Products: 
    Id 
    Description 
    Price 

Orderlines: 
    Id 
    OrderId 
    ProductId 

Attributes: 
    Id 
    Name 

OrderAttributes: 
    AttributeId 
    OrderlineId 
    Value 

該產品表將從上面2產品。

訂單行將所選產品鏈接到訂單。

這些屬性包含每個產品的自定義字段名稱。

例如,自定義藝術品產品將具有屬性設計。

屬性的順序鏈接訂購的產品,以它的海關屬性和具有價值。 例如自定義圖形產品,具有設計屬性,具有繪製房屋的價值。

我也想映射這個數據庫模型代碼以及使用NHibernate。

有沒有更好的建模數據的方法?

回答

2

一對夫婦的建議:

的Orderlines表應包含價格(以及可能的描述),以便項目價格可以改變而不影響現有訂單。同樣,訂單表(未顯示)應包含可能更改的客戶信息(例如送貨地址)。構成訂單的數據不能改變,最簡單的方法是將其平坦化和非規範化。

OrderAttributes結構被稱爲entity-attribute-value模型,它有許多缺點。一般來說,我建議避免它,並將所需的列添加到Orderlines表。如果需要,您的應用程序可以繼承Product和OrderLine,以便CustomArtWorkProduct在添加到訂單時創建CustomArtWorkOrderLine。

0

在面向對象的程序中,關係表示爲關聯。

即:

  • 如果產品有訂單則產品必須有訂單的集合。
  • 如果訂單是針對某個產品的,則該訂單必須具有一個產品產品。
  • 等等。

在面向對象編程,你不要一個標識符相關聯:你不需要這個,因爲這是一個不同的世界,通過分層數據統治。

老實說,如果你按照我之前說的,NHibernate的會,因爲它就能加載的對象和屬性,無需個人介入一個非常強大的工具。

想想「得到一些產品的所有訂單」:你不會刻意執行SQL加入,但你要訪問Product和NHibernate的Orders屬性將翻譯這對數據庫的訪問世界

這是使用OR/M的要點。這不僅僅是「我如那樣映射表」。這是關於加入兩個截然不同的世界:面向對象的層次世界與關係數據無痛苦。

檢查這個很老的(2004!)CodeProject上的文章,以及如何創建基於數據庫羅斯文SQL Server模式:

不要注意模型如何映射到數據庫,但在模型設計。

檢查這篇文章,這是其中一個比另一個更現代:

+0

謝謝,你有關於不同屬性的產品的數據庫模型的任何建議,以及如何映射這些? – Cogslave

+0

@Alex也許,但我相信我應該瞭解環境和項目背後的原因,以便做出正確的決定。 –

相關問題