日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

规格参数表结构

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 规格参数表结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

商品規格數據結構

樂優商城是一個全品類的電商網站,因此商品的種類繁多,每一件商品,其屬性又有差別。為了更準確描述商品及細分差別,抽象出兩個概念:SPU和SKU,了解一下:

SPU和SKU

SPU:Standard Product Unit (標準產品單位) ,一組具有共同屬性的商品集

SKU:Stock Keeping Unit(庫存量單位),SPU商品集因具體特性不同而細分的每個商品

以圖為例來看:

  • 本頁的 華為Mate10 就是一個商品集(SPU)

  • 因為顏色、內存等不同,而細分出不同的Mate10,如亮黑色128G版。(SKU)

可以看出:

  • SPU是一個抽象的商品集概念,為了方便后臺的管理。

  • SKU才是具體要銷售的商品,每一個SKU的價格、庫存可能會不一樣,用戶購買的是SKU而不是SPU

數據庫設計分析

思考并發現問題

弄清楚了SPU和SKU的概念區分,接下來我們一起思考一下該如何設計數據庫表。

首先來看SPU,大家一起思考下SPU應該有哪些字段來描述?

id:主鍵 title:標題 description:描述 specification:規格 packaging_list:包裝 after_service:售后服務 comment:評價 category_id:商品分類 brand_id:品牌

似乎并不復雜,但是大家仔細思考一下,商品的規格字段你如何填寫?

不同商品的規格不一定相同,數據庫中要如何保存?

?

再看下SKU,大家覺得應該有什么字段?

id:主鍵 spu_id:關聯的spu price:價格 images:圖片 stock:庫存 顏色? 內存? 硬盤?

碰到難題了,不同的商品分類,可能屬性是不一樣的,比如手機有內存,衣服有尺碼,我們是全品類的電商網站,這些不同的商品的不同屬性,如何設計到一張表中?

其實顏色、內存、硬盤屬性都是規格參數中的字段。所以,要解決這個問題,首先要能清楚規格參數。

分析規格參數

仔細查看每一種商品的規格你會發現:

雖然商品規格千變萬化,但是同一類商品(如手機)的規格是統一的,有圖為證:

華為的規格:

三星的規格:

SKU的特有屬性

SPU中會有一些特殊屬性,用來區分不同的SKU,我們稱為SKU特有屬性。如華為META10的顏色、內存屬性。

不同種類的商品,一個手機,一個衣服,其SKU屬性不相同。

同一種類的商品,比如都是衣服,SKU屬性基本是一樣的,都是顏色、尺碼等。

這樣說起來,似乎SKU的特有屬性也是與分類相關的?事實上,仔細觀察你會發現,SKU的特有屬性是商品規格參數的一部分

也就是說,我們沒必要單獨對SKU的特有屬性進行設計,它可以看做是規格參數中的一部分。這樣規格參數中的屬性可以標記成兩部分:

  • spu下所有sku共享的規格屬性(稱為全局屬性)

  • 每個sku不同的規格屬性(稱為特有屬性)

搜索屬性

打開一個搜索頁,我們來看看過濾的條件:

你會發現,過濾條件中的屏幕尺寸、運行內存、網路、機身內存、電池容量、CPU核數等,在規格參數中都能找到:

也就是說,規格參數中的數據,將來會有一部分作為搜索條件來使用。我們可以在設計時,將這部分屬性標記出來,將來做搜索的時候,作為過濾條件。要注意的是,無論是SPU的全局屬性,還是SKU的特有屬性,都有可能作為搜索過濾條件的,并不沖突,而是有一個交集:

規格參數表

表結構

我們看下規格參數的格式:

可以看到規格參數是分組的,每一組都有多個參數鍵值對。不過對于規格參數的模板而言,其值現在是不確定的,不同的商品值肯定不同,模板中只要保存組信息、組內參數信息即可。

因此我們設計了兩張表:

  • tb_spec_group:組,與商品分類關聯

  • tb_spec_param:參數名,與組關聯,一對多

規格組

規格參數分組表:tb_spec_group

CREATE TABLE `tb_spec_group` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',`cid` bigint(20) NOT NULL COMMENT '商品分類id,一個分類下有多個規格組',`name` varchar(50) NOT NULL COMMENT '規格組的名稱',PRIMARY KEY (`id`),KEY `key_category` (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='規格參數的分組表,每個商品分類下有多個規格參數組';

規格組有3個字段:

  • id:主鍵

  • cid:商品分類id,一個分類下有多個模板

  • name:該規格組的名稱。

規格參數

規格參數表:tb_spec_param

CREATE TABLE `tb_spec_param` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',`cid` bigint(20) NOT NULL COMMENT '商品分類id',`group_id` bigint(20) NOT NULL,`name` varchar(255) NOT NULL COMMENT '參數名',`numeric` tinyint(1) NOT NULL COMMENT '是否是數字類型參數,true或false',`unit` varchar(255) DEFAULT '' COMMENT '數字類型參數的單位,非數字類型可以為空',`generic` tinyint(1) NOT NULL COMMENT '是否是sku通用屬性,true或false',`searching` tinyint(1) NOT NULL COMMENT '是否用于搜索過濾,true或false',`segments` varchar(1000) DEFAULT '' COMMENT '數值類型參數,如果需要搜索,則添加分段間隔值,如CPU頻率間隔:0.5-1.0',PRIMARY KEY (`id`),KEY `key_group` (`group_id`),KEY `key_category` (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='規格參數組下的參數名';

按道理來說,我們的規格參數就只需要記錄參數名、組id、商品分類id即可。但是這里卻多出了很多字段,為什么?

還記得我們之前的分析吧,規格參數中有一部分是 SKU的通用屬性,一部分是SKU的特有屬性,而且其中會有一些將來用作搜索過濾,這些信息都需要標記出來。

通用屬性

用一個布爾類型字段來標記是否為通用:

  • generic來標記是否為通用屬性:

    • true:代表通用屬性

    • false:代表sku特有屬性

搜索過濾

與搜索相關的有兩個字段:

  • searching:標記是否用作過濾

    • true:用于過濾搜索

    • false:不用于過濾

  • segments:某些數值類型的參數,在搜索時需要按區間劃分,這里提前確定好劃分區間

    • 比如電池容量,0~2000mAh,2000mAh~3000mAh,3000mAh~4000mAh

數值類型

某些規格參數可能為數值類型,這樣的數據才需要劃分區間,我們有兩個字段來描述:

  • numberic:是否為數值類型

    • true:數值類型

    • false:不是數值類型

  • unit:參數的單位

總結

以上是生活随笔為你收集整理的规格参数表结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。