電商系統商品資料表設計分析與總結

奕鵬發表於2021-07-12

專注於PHP、MySQL、Linux和前端開發,感興趣的感謝點個關注喲!!!文章整理在GitHub,主要包含的技術有PHP、Redis、MySQL、JavaScript、HTML&CSS、Linux、Java、Golang、Linux和工具資源等相關理論知識、面試題和實戰內容。

文章簡介

本文針對電商系統中的商品管理模組進行分析,總結出如何設計一個合理的商品管理表。分析的角度,重點放在商品的規格設計上,針對單一規格、多規格和組合規格情況進行如何設計表的總結。

前期分析

對於商品功能,我這裡總結了至少需要下面這幾張表。

表名 表作用 常用欄位
category 商品分類表,儲存商品分類資訊 一般有資料id,分類名稱
goods 商品資訊表,儲存商品的基礎資訊 一般有資料id,商品名稱,商品封面(外來鍵圖片表id),小標題,顯示基礎價格,銷售量,商品狀態,商品排序等
goods_category 商品分類關聯,儲存商品與商品分類的關聯關係,儲存商品與分類一對多的情況 有商品id,分類的id
image 圖片表,儲存系統的圖片資訊 一般有資料id,圖片地址,圖片名稱,圖片大小
goods_image 商品圖片關聯,儲存商品與圖片的關聯關係,儲存商品與圖片一對多的情況 有商品id,圖片id
spec 商品規格組表,儲存商品的規格組,例如顏色、重量、材質等分組資訊 一般有資料id,組名稱
spec_value 商品規格組值表,儲存商品的規格組值,一個規格組,有多個規格值,則儲存多條資料。如規格組裡面有顏色,則顏色對應下面有紅色、黃色、藍色等顏色資訊 一般有資料id,規格組id,規格組對應值
goods_spec 商品規格值表,儲存商品的資訊與規格組值得資訊,一般都是一對多的關係,則一個關聯關係一行資料 有商品id,規格組值id,庫存,銷量,編碼,重量等資訊

單一個規格設計

什麼是單一規格,所謂的單一規格就是預設只有一種規格。當使用者選擇商品下單時,不需要去選擇什麼規格,直接預設一種商品屬性。例如下面的截圖示例:

1單一規格檔案使用者選擇介面

對應的邏輯關係如下圖:

Snipaste_2021-07-08_19-23-46

管理端截圖

2單一規格後臺設計介面

箭頭的執向,則為本表的id為對應表的外來鍵,顏色相同的則表示同一個鍵。

多種規格設計

什麼是多種規格,多種規格就是指不包含一種規格,例如一個商品中有顏色、重量、大小等等規格,這種不同的規格又有不同的值。

多種規格的表該如何設計呢?其實和上面的邏輯關係是一樣的,無非就是一種規格多種值時,新增多條記錄而已。

表設計總結

商品記錄表

CREATE TABLE goods (
  goods_id int(11) UNSIGNED NOT NULL COMMENT '商品id',
  goods_name varchar(255) NOT NULL DEFAULT '' COMMENT '商品名稱',
  selling_point varchar(500) NOT NULL DEFAULT '' COMMENT '商品賣點',
  category_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品分類id',
  deduct_stock_type tinyint(3) UNSIGNED NOT NULL DEFAULT '20' COMMENT '庫存計算方式(10下單減庫存 20付款減庫存)',
  content longtext NOT NULL COMMENT '商品詳情',
  sales_initial int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '初始銷量',
  sales_actual int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '實際銷量',
  goods_sort int(11) UNSIGNED NOT NULL DEFAULT '100' COMMENT '商品排序(數字越小越靠前)',
  goods_status tinyint(3) UNSIGNED NOT NULL DEFAULT '10' COMMENT '商品狀態(10上架 20下架)',
  is_delete tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否刪除',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '建立時間',
  update_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品記錄表';

商品分類表

CREATE TABLE `category` (
  `category_id` int(11) UNSIGNED NOT NULL COMMENT '商品分類id',
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '分類名稱',
  `parent_id` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '上級分類id',
  `image_id` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '分類圖片id',
  `sort` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '排序方式(數字越小越靠前)',
  `create_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '建立時間',
  `update_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分類表';

商品分類關聯表

CREATE TABLE `category` (
  `category_id` int(11) UNSIGNED NOT NULL COMMENT '商品分類id',
  `goods_id` int(11) NOT NULL DEFAULT 0 COMMENT '商品id',
  `create_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '建立時間',
  `update_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分類關聯表';

圖片表

CREATE TABLE upload_file (
  file_id int(11) UNSIGNED NOT NULL COMMENT '檔案id',
  storage varchar(20) NOT NULL DEFAULT '' COMMENT '儲存方式',
  file_url varchar(255) NOT NULL DEFAULT '' COMMENT '儲存域名',
  file_name varchar(255) NOT NULL DEFAULT '' COMMENT '檔案路徑',
  file_size int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '檔案大小(位元組)',
  file_type varchar(20) NOT NULL DEFAULT '' COMMENT '檔案型別',
  extension varchar(20) NOT NULL DEFAULT '' COMMENT '副檔名',
  is_user int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否為c端使用者上傳',
  is_recycle tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否已回收',
  is_delete tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '軟刪除',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '建立時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='圖片記錄表';

商品圖片表

CREATE TABLE goods_image (
  id int(11) UNSIGNED NOT NULL COMMENT '主鍵id',
  goods_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品id',
  image_id int(11) NOT NULL COMMENT '圖片id(關聯圖片記錄表)',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '建立時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品圖片記錄表';

規格組表

CREATE TABLE spec (
  spec_id int(11) UNSIGNED NOT NULL COMMENT '規格組id',
  spec_name varchar(255) NOT NULL DEFAULT '' COMMENT '規格組名稱',
  create_time int(11) NOT NULL COMMENT '建立時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品規格組記錄表';

規格組值表

CREATE TABLE spec_value (
  spec_value_id int(11) UNSIGNED NOT NULL COMMENT '規格值id',
  spec_value varchar(255) NOT NULL COMMENT '規格值',
  spec_id int(11) NOT NULL COMMENT '規格組id',
  create_time int(11) NOT NULL COMMENT '建立時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品規格值記錄表';

商品規格值關聯表

CREATE TABLE goods_sku (
  goods_sku_id int(11) UNSIGNED NOT NULL COMMENT '商品規格id',
  goods_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品id',
  spec_sku_id varchar(255) NOT NULL DEFAULT '0' COMMENT '商品sku記錄索引 (由規格id組成)',
  image_id int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '圖片id',
  goods_no varchar(100) NOT NULL DEFAULT '' COMMENT '商品編碼',
  goods_price decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '商品價格',
  line_price decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '商品劃線價',
  stock_num int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '當前庫存數量',
  goods_sales int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品銷量',
  goods_weight double UNSIGNED NOT NULL DEFAULT '0' COMMENT '商品重量(Kg)',
  create_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '建立時間',
  update_time int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新時間'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品規格表';
本作品採用《CC 協議》,轉載必須註明作者和本文連結
喜歡的,可以關注公眾號"卡二條的技術圈"。

相關文章