專注於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,庫存,銷量,編碼,重量等資訊 |
單一個規格設計
什麼是單一規格,所謂的單一規格就是預設只有一種規格。當使用者選擇商品下單時,不需要去選擇什麼規格,直接預設一種商品屬性。例如下面的截圖示例:
對應的邏輯關係如下圖:
管理端截圖
箭頭的執向,則為本表的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 協議》,轉載必須註明作者和本文連結