【轉】電商商品屬性(標簽)功能數(shù)據(jù)庫設計

前言

文章通俗明了暮的,故摘抄于此!

正文

角色:產品汪小T笙以,程序員小C

小T:小C,有活干了冻辩。我們想做個在線題庫系統(tǒng)猖腕,老師可以搜索題目來備課。

小C看著簡易的需求稿恨闪,心想倘感,我一分鐘幾百萬上下,竟然找我做這么簡單的需求凛剥。建個題目表不就完事了。

小C:題目數(shù)據(jù)從哪里來轻姿,包含什么屬性犁珠?

小T:我們第一期題目數(shù)據(jù)是從A公司那里買過來的,題目包含正文互亮,選項犁享,答案,題型豹休,難度炊昆。

小C:嗯,也就是我要建一張question表威根,包括這五個屬性凤巨。那題型和難度有哪些呢?

小T:題型有五種洛搀,單選敢茁,多選,判斷留美,填空彰檬,解答伸刃。難度有3種,簡單逢倍,一般捧颅,困難。用戶可以根據(jù)題型或者難度來篩選较雕。

小C拿著筆畫了一下:OK碉哑,表設計出來了

t_question表
字段 屬性 描述
uid char(32) 唯一標示
body TEXT 正文
options JSON 題目選項
answer TEXT 答案
type int(11) 題目類型,1單選郎笆、2多選谭梗、3判斷、4填空宛蚓、5解答
difficult int(11) 題目難度激捏,1簡單、2一般凄吏、3困難

小C:搜索根據(jù)body, options模糊匹配远舅,然后篩選讓前端傳入type = 1或者difficult = 3 進行題型和難度的篩選

小T:哇,果然靠譜痕钢,那我們上線吧图柏。

小T:小C,我們的題庫系統(tǒng)發(fā)到市場上有很多用戶反饋說題目量不太夠任连,最近我們找到了B公司合作蚤吹,希望能把B公司的題庫也整合到我們的系統(tǒng),數(shù)據(jù)的結構和A公司的很相似随抠,你看下要弄多久裁着。

小C心想,敢情這產品汪不生產題目拱她,只是題目的搬運工啊二驰。

小C:導一下數(shù)據(jù)就完事了。把接口文檔發(fā)我對接一下就好了秉沼。

小T:好桶雀,待會文檔發(fā)你。

拿到B公司的題目接口唬复,題目整體結構不變矗积,可是題型和難度的分類都比A公司多一點。題型有單選題敞咧,多選題漠魏,分析題,一般分解題妄均,APP分解題柱锹。題型有簡單哪自,一般,困難禁熏,極難壤巷。

小C心想:我去,我要以哪個公司的題目分類作為標準瞧毙。于是找到了小T

小C:數(shù)據(jù)如果做整合的話胧华,可不可以將B公司的分析題,一般分解題宙彪,APP分解題變成我們的解答題矩动,極難不要,都變成困難释漆。因為現(xiàn)在沒有定義一個標準悲没,我不太好整合數(shù)據(jù)。

小T:那好吧男图,先按你說的去做示姿。

自那以后,小T又找了兩家公司合作逊笆,讓小C整合數(shù)據(jù)栈戳。并且小T認為其中一家公司的方法(配方法,消元法难裆,排除法)和能力(推理能力子檀,分析能力,計算能力)數(shù)據(jù)也是很重要的維度乃戈,希望能做補充褂痰。

小C崩潰了,我一分鐘幾百萬上下偏化,竟然找我來導數(shù)據(jù)脐恩。每次還要去看數(shù)據(jù)的分類值應該怎么做整合镐侯。還經常要加字段≌焯郑現(xiàn)在因為要接入那兩家公司的題庫數(shù)據(jù),要將表修改成

t_question表
字段 屬性 描述
uid char(32) 唯一標示
body TEXT 正文
options JSON 題目選項
answer TEXT 答案
type int(11) 題目類型苟翻,1單選韵卤、2多選、3判斷崇猫、4填空沈条、5解答
difficult int(11) 題目難度,1簡單诅炉、2一般蜡歹、3困難
ability int(11) 能力屬性屋厘,1推理能力,2分析能力 月而。汗洒。。父款。
method int(11) 方法屬性溢谤,1配方法,2消元法憨攒,3排除法世杀。。肝集。

現(xiàn)在題庫有300W數(shù)據(jù)瞻坝,未來還會不斷地增加,如果頻繁改表的話包晰,線上會直接鎖表

如果每個分類我還要去看哪些值應該映射為我們定義的哪些值湿镀,后面肯定會吃不消的,因為我們沒有一套統(tǒng)一的標準伐憾。勉痴。。

小C意識到自己跳到了一個大坑中树肃,原來這東西并沒有一開始想的這么簡單蒸矛。

經過仔細的思考,小C得出結論:

行業(yè)內根本就沒有一套標準胸嘴,必須針對變化點做擴展

不同的公司題目的維度數(shù)據(jù)不一樣(如某公司多了能力與方法兩個維度)

不同的公司同一維度的數(shù)據(jù)值不一樣(如B公司的題型和A公司不一樣)

專門針對標簽建立表
一個標簽分類下有多個標簽值

一道習題有多個標簽屬性

t_tag表
字段 屬性 描述
uid char(32) 唯一標示
tag_name varchar(64) 標簽分類
tag_key varchar(64) 標簽key
t_tag_value表
字段 屬性 描述
uid char(32) 唯一標示
tag_id char(32) 標簽分類id
value_name varchar(64) 標簽值名
value_code varchar(64) 標簽值編碼
t_question_tag表
字段 屬性 描述
id char(32) 唯一標示
tag_value_id char(32) 標簽值id
question_id char(32) 題目id

當一次查詢時雏掠,先將查詢到的題目id到t_question_tag表中查出tag_value_id集合。

標簽進行GROUP BY tag_id聚合后得到以下json

[{
  "分類名":"難度",
  "分類key": "difficult",
  "值列表":[{
    "值名":"簡單",
    "值編碼": 1
  },{
    "值名":"一般",
    "值編碼": 2
  },{
    "值名":"困難",
    "值編碼": 3
  }
]}

通過返回標簽聚合劣像,可以在前端展示

  • 難度:簡單乡话,一般,困難
  • 題型:選擇題耳奕,判斷題绑青,作文,完形填空屋群。闸婴。。
  • 方法:配方法芍躏,消元法邪乍。。。庇楞。

篩選時榜配,傳入標簽key (difficult),標簽value (1)得到tag_value_id

然后可以篩選出跟標簽綁定的題目。

拓展總結:

當某張數(shù)據(jù)表未來可能數(shù)據(jù)量會很龐大的吕晌,不能因為需求變更頻繁地增加表的字段芥牌,考慮增加中間表的方式來進行拓展

一般實體數(shù)據(jù)信息不確定的時候,也可以考慮使用NOSQL檢索聂使,如設計成以下的文檔壁拉,就可以利用NOSQL的數(shù)組查詢功能檢索標簽對應的實體。

{
    "uid":"",
    "description":"",
    "tag_ids":["標簽1","標簽2","標簽3"]
}

該設計也能應用于電商中柏靶,如商品的分類篩選

  • 顏色:黃色弃理,藍色,綠色
  • 尺碼:M屎蜓,L痘昌,XL,XXL
  • 風格:休閑炬转,商務

標簽只適合用于有限個數(shù)的分類辆苔,如文件大小,價格這些不固定的屬性是不能做成標簽的扼劈。

標簽字段是不會有排序需求的驻啤,如按照某個分類進行order by。因為標簽定位是有限分類荐吵,排序沒有任何的意義骑冗,標簽只能用來做篩選。如果一定要排序先煎,建議另外計算標簽和其他屬性計算出一個分數(shù)字段贼涩。

問題點:
為什么標簽值要分成標簽uid和標簽code呢
標簽code屬于多變的,可以自定義薯蝎,如讓簡單定義為1遥倦,困難定義為2。如果直接讓題目綁定1占锯,很可能和其他的分類沖突袒哥。如題型的1為單選題。

為什么要前端傳入key和value不直接傳標簽uid
會有一些場景需要業(yè)務自定義標簽烟央,如省市區(qū)统诺,用戶使用時更想用101100這種全國通用的地區(qū)編碼來做標簽篩選歪脏。

做到這里疑俭,小C稍微松了一口氣,之后你來一個公司的數(shù)據(jù)婿失,如果有新的分類钞艇,就可以加標簽類別再加標簽值啄寡。如果同一分類下來新的值,先看一下分類的中文名是不是對應的上哩照,對應不上新建標簽挺物,然后讓產品去做標簽的整合或者就當成兩個不同的標簽來算。再也不怕整合數(shù)據(jù)了飘弧。

————————————————
版權聲明:本文為CSDN博主「雪糕的爸爸」的原創(chuàng)文章识藤,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明次伶。
原文鏈接:https://blog.csdn.net/YaoLang1995/article/details/89173978

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末痴昧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冠王,更是在濱河造成了極大的恐慌赶撰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柱彻,死亡現(xiàn)場離奇詭異豪娜,居然都是意外死亡,警方通過查閱死者的電腦和手機哟楷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門瘤载,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卖擅,你說我怎么就攤上這事惕虑。” “怎么了磨镶?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵溃蔫,是天一觀的道長。 經常有香客問我琳猫,道長伟叛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任脐嫂,我火速辦了婚禮统刮,結果婚禮上,老公的妹妹穿的比我還像新娘账千。我一直安慰自己侥蒙,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布匀奏。 她就那樣靜靜地躺著鞭衩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上论衍,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天瑞佩,我揣著相機與錄音,去河邊找鬼坯台。 笑死炬丸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蜒蕾。 我是一名探鬼主播稠炬,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咪啡!你這毒婦竟也來了酸纲?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瑟匆,失蹤者是張志新(化名)和其女友劉穎闽坡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愁溜,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡疾嗅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冕象。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片代承。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渐扮,靈堂內的尸體忽然破棺而出论悴,到底是詐尸還是另有隱情,我是刑警寧澤墓律,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布膀估,位于F島的核電站,受9級特大地震影響耻讽,放射性物質發(fā)生泄漏察纯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一针肥、第九天 我趴在偏房一處隱蔽的房頂上張望饼记。 院中可真熱鬧,春花似錦慰枕、人聲如沸具则。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽博肋。三九已至低斋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間束昵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工葛峻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锹雏,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓术奖,卻偏偏與公主長得像礁遵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子采记,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348