問題的提出:網上商城對產品進行了很多分類,不同的分類產品又有不同的屬性,比如,電腦的屬性有:CUP,內存, 主板,硬盤等等,服裝的屬性有:布料,尺寸,顏色等等,那么產品表以及產品分類表應該如何設計才能滿足 不同類型產品的區別呢? 解決方案: 產品分類表的設計 第一種設計思路:使用樹形結構,遞歸的形式,可以對產品進行N種 分類,只要你喜歡,樹形結構在數據庫的設計中 經常用到,比如功能菜 單表等以下是一個簡單的產品分類表。
說明:上級類別ID為該表的外鍵,並關聯到本級類別ID,這樣就可以對產進行N中分類了,這種設計 思想十分靈活,是無限分類中最常用到的。 第二種設計思路:定義N個類別表,並對他們進行關聯,如圖:
說明:這種設計在項目中沒有人會使用它,因為產品的分類是不固定的,很難在數據庫設計的時候確定 類別 表的個數,很不靈活。
2、產品表的設計 第一種設計思路:直接在產品表預留N個字段,用到的時候直接插入數據,如圖
可行性:會產生很多字段的冗余,並且不知道到底需要多少個字段,數據類型也不能確定,可行性比較低,但 是這種設計也有它的優點,就是表的數量少,其他的優點我實在找不出來了,所以,在項目中這種設 計思想也不會用到。 第二種設計思路: 在提及這種設計思路前,首先得了解數據表可以分為兩種結構,一種是橫表,也就是我們經常用到 的表結構,另外一種是縱表,這種結構平時我們用到的表少,所以我也是今天通過請教別人才知 有這種表結構的。 什么是縱表,它有哪些優點和缺點呢?通過兩張圖片對比來了解或許會更清楚
橫表的結構:
縱表的結構:
可以看出橫表的優點是很直觀,它是根據現行業務邏輯定制,設計簡單,易操作,缺點是當業務邏輯發生拓展 時,大多情況下要更改表的結構。縱表的數據讓人看着感覺很亂,而且字段的數據出現很大的冗余,但是縱表的還 是有很多好處的,它比較靈活,當業務系統發生拓展時可以很好的適應, 知道了這些,那么我們可以進行產品表的 設計了,在這種設計思想中,需要三個表,一個為產品表,用來存產品的公共屬性,另外一個是產品分類表,最后一 個表很關鍵,用來存不同類別產品的不同屬性,采用的是縱表的結構,如圖: 說明:通過產品拓展屬性表,用戶在頁面就可以動態的某一類產品添加屬性,添加好以后,就采用動態SQL提 取該類商品的屬性生成相應的產品類別屬性橫表,用來保存產品的屬性值,比如:用戶在界面為電腦類ID為 COMP這一類產品中添加了CUP、內存EMS這兩個屬性,那么將會動態的提取這兩個屬性,生成橫表T_COMP, 如圖:
<!--EndFragment-->
轉載:http://champion-netjava-163-com.iteye.com/blog/1160875