2014-04-04 82 views
1

我正在嘗試創建一個電子商務網站,這是一種基本的阿里巴巴。最終目標是創建n種不相關的產品(即鞋子和酒)。產品和類別表。與引用不同類別實體的產品和類別屬性建立關係

我的主要問題是找出一種方法來處理與產品表相關的類別表/實體。

產品表將具有通用屬性,而productCatagoryEntity中的屬性將特定於類別。

如何創建足夠靈活的ERD來處理此目標?

我考慮過創建一個product_to_productCategoryEntity表來鏈接產品表和productCategoryEntity表,當產品鏈接到一個類別時,與類別表相關的product_to_productCategoryEntity外鍵屬性將具有非空值,而對於與產品無關的類別FK將爲空。

很明顯,在product_TO_productCategoryEntity表中,我應該列出所有n個類別表,這個模型可能會導致難以維護。

我正朝着正確的方向走嗎?

請提供我最終可以學習的任何主題,模式,書或參考資料。

enter image description here

@丹Bracuk的回答,我包括基於他的建議的ERD:

enter image description here

回答

1

您提出的設計有嚴重缺陷。每次添加新類別時,都必須重新設計數據庫。只需添加記錄就可以實現這一點。我建議這個設計。

表產品將有一個產品ID,名稱,而不是其他的。

表類別將有一個類別ID,名稱,沒有別的。

表屬性將具有AttributeID,Type和Value。例如,一個類型將是顏色,並且該值將是藍色。

然後,你將不得不建立多對多的關係表。一個是產品和類別之間,另一個是產品和屬性之間。

爲了真正規範這個設計,你可以爲AttributeTypes建立一個單獨的表,並且在Attribute表中有一個外鍵引用。

編輯從這裏開始

上面的模式會導致屬性表中有記錄是這樣的:

1|colour|blue 
2|colour|red 
3|size|small 
4|size|medium 

這是因爲重複串顏色和大小的未歸。爲了規範這一點,你將有一個屬性類型表的字段AttributeTypeId和記錄類型應該是這樣的:

1|colour 
2|size 

你的屬性記錄會再變成這樣:

1|1|blue 
2|1|red 
3|1|small 
4|1|medium 

我真的做這種方式。我剛剛對原來的答案很懶。

+0

我已經根據您的建議添加了ERD,請確認我的圖。根據我的理解,這顯然是更好的選擇。儘管如此,我仍然沒有理解你爲單獨的AttributeTypes表建議的規範化方面,請擴展你的解釋。 – Luther

相關問題