WooCommerce 商品資料表的優點與缺點

資料庫的資料格式規劃,影響著資料存取的效率,這一篇要簡單的來分析一下 WooCommerce 的商品資料表,讓大家知道 WooCommerce 的商品資料是如何儲存,有何優缺點。

WooCommerce 是 WordPress 的一支外掛,為了整合於 WordPress 的系統架構,所以 WooCommerce 並沒有設計專用的商品資料表,而是採用 WordPress 系統現有儲存文章資料的相關資料表,主要的資料表是 wp_posts 與 wp_postmeta。

wp_posts 與 wp_postmeta 的資料結構,感覺上是以相容性、擴充性為優先目標,以便讓這組資料結構能儲存各種類型的內容,包括文章、頁面、相簿、作品、問答、商品 … 等等,wp_posts 存放主要欄位資料,例如作者、建立日期、標題、內容、公開狀態、文章類型等等,一篇文章或一筆商品,就只會佔用一筆資料庫紀錄,而 wp_postmeta 儲存的,是文章或商品的附屬資料欄位,由於文章或商品的附屬資料欄位各不相同,例如商品會有重量、長度、寬度、高度等特有的資料項,如果為這些資料項在一筆資料紀錄中規畫專有儲存的欄位,那麼當儲存非商品資料時,這些欄位將不會被使用到,卻依然佔用了儲存空間,所以 wp_postmeta 並不是如此規劃的。

wp_postmeta 是將每一資料項,都拆成一筆紀錄來儲存,假設你的商品用到了20個資料項(不同商品的設定,可能用到不同數量的資料項),例如SKU、稅類、售價、特價、庫存 ….,系統是將它們存成20筆的 wp_postmeta 紀錄。

此範例顯示 id : 63 的商品,共使用了 19 筆 wp_postmeta 紀錄。

另外,由於每一筆資料項的資料型態,可能都不一樣,有的可能是數字、有的是日期、有的是長字串,為了提供最大的相容性,所以欄位的儲存資料型態是 longtext,這樣的規劃的確使得資料的儲存很有彈性,但是付出的代價則是,存取的效率會非常的低落。