2011-01-28 64 views
4

因此,我正在開發一個電子商務應用程序,我的客戶希望能夠創建類別和產品...顯然。現在,可以說客戶將擁有大約100個類別和20,000個產品。存儲和使用動態屬性

客戶需要創建類別屬性,使意義過濾....所以,類別硬盤驅動器可能有類似性質的能力:

  • 容量
  • 的RPM
  • 外形

雖然類投影機可能有這樣的屬性:

  • 亮度
  • 對比度
  • 原始分辨率

我的問題是,一個人如何解決,允許動態地創建自定義屬性的問題,而是利用這些屬性的能力來搜索,過濾器和報告?

爲每個類別創建一個獨立的表和對象是不可能的,因爲我不知道他們將創建什麼類別(即HardDriveProperties,ProjectorProperties)。

我想也許我可以在數據庫中創建一個額外的列並將自定義屬性序列化爲JSON,但這仍然需要我爲每個類別創建一個特定的屬性對象以反序列化JSON,或者創建一個通用列表ProductProperties ....我認爲可能相當昂貴的工作。

其他人如何解決這個問題?

回答

5

Entity-Attribute-Value model(又名'open schema')是解決這個問題的一種方法。

該模式的本質是您將列變爲行。取而代之的HardDrive(和Projector)表看起來像這樣:

HardDrive(HardDriveID, Capacity, RPMs, FormFactor) 
------------------  
1 1TB 7200 External 

你有CategoryCategoryProperties,並CategoryPropertyValues表:

Category(CategoryID, Description) 
-------- 
1 Hard Drive 
2 Projector 

CategoryProperties(CategoryPropertyID, CategoryID, Description) 
------------------ 
1 1 Capacity 
2 1 RPMs 
3 1 FormFactor 
4 2 Brightness 
5 2 Contrast Ratio 
... etc. 

CategoryPropertyValues(ItemID, CategoryPropertyID, PropertyValue) 
------------------ 
1 1 1TB 
1 2 7200 
1 3 External 
0

創建一個表格,其中有一列產品ID。 創建一個具有以下列的ProductAttribute表:產品(參考產品ID),名稱,值。

我看到的一個網站有幾個Value列,一個文本和一個數字,以便通過數值範圍有效地進行搜索。

0

假設你使用關係數據庫,我可能會使用的東西,像這樣的臺詞:

Category(Id, Name) 
Property(Id, CategoryId, Description) 
Product(Id, CategoryId, Name) 
ProductsProperties(Id, ProductId, CategoryId, Value) 

這樣的話,你可以定義添加/編輯屬於一個產品的時候,其性能應可到一個特定的類別和產品可能具有無限的屬性。

這比僅僅序列化JSON值要好,因爲搜索/過濾序列化的值可能會非常痛苦。然而,這種方法確實使用了一個相對規範化的數據庫結構,因此如果您有很多產品,屬性等,全文搜索的速度可能會很慢......

0

我認爲你的最後一段將是路線,我會走。我主要關心的是執行大量記錄的序列化。