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