關(guān)于數(shù)據(jù)表結(jié)構(gòu)的學習

寫在前面:
我非常慶幸的事 在前公司接觸過一些表結(jié)構(gòu)的知識和簡單的SQL甚亭,后端產(chǎn)品經(jīng)理越想進階俭尖,數(shù)據(jù)結(jié)構(gòu)化的思維就越發(fā)重要(感覺大學概率與數(shù)理統(tǒng)計沒好好學真是不應(yīng)該)低散,今天和架構(gòu)師爭執(zhí)的流程诊县,唯一沒有diss成功的地方桨昙,就在于流程設(shè)計雖然更簡潔检号,卻無從取數(shù),所以今天跳出促銷蛙酪,補一補表結(jié)構(gòu)


提升產(chǎn)品經(jīng)理“技術(shù)思維”:學習數(shù)據(jù)表結(jié)構(gòu)知識

產(chǎn)品轉(zhuǎn)技術(shù)難度比較大齐苛,學習數(shù)據(jù)表結(jié)構(gòu)就門檻低很多,對產(chǎn)品設(shè)計的作用也很明顯桂塞。本文會簡單介紹一些產(chǎn)品設(shè)計中會用到的數(shù)據(jù)表結(jié)構(gòu)方面的思考凹蜂,希望對各位有所幫助。

image

程序是怎么運行的呢?

簡單來說玛痊,就是去指定的位置(表)取數(shù)據(jù)汰瘫,完成運算,放到指定的位置(表)存起來或展示出來卿啡。

那么吟吝,怎么保證取到的/存到的數(shù)據(jù)是按我們預想的方式來的呢?這就涉及到表結(jié)構(gòu)問題了颈娜。

數(shù)據(jù)表是由表名剑逃、表中字段、字段內(nèi)容組成官辽。本文主要圍繞字段劃分及字段定義兩個部分蛹磺,介紹在產(chǎn)品設(shè)計中需要用到的表結(jié)構(gòu)知識。

一同仆、字段分類

要完成一個流程(運算)萤捆,我們需要諸多數(shù)據(jù)(字段),這么多字段是一張表還是多張表呢俗批?

我們可以以商品上架為例俗或,簡單分析一下。

比方說岁忘,倉庫現(xiàn)在還有可口可樂50個辛慰,進價2.5元,售價3.5元干像。

1號貨架只剩5個可樂帅腌,小王在19/6/24日15:20:12向該貨架上架20個,預計放在貨架第4層麻汰;因為新貨架促銷速客,打折價3元。

首先五鲫,所有相關(guān)信息排列:

image

實際業(yè)務(wù)會比這個字段更多溺职,全在一張表里儲存雖然看上去清晰,但是缺點也很明顯——因為將主體相關(guān)的屬性臣镣、流水辅愿、維度等數(shù)據(jù)全部混在一起,勢必造成大量的數(shù)據(jù)冗余忆某。

我們按數(shù)據(jù)類型拆為屬性表和流水表点待。

其中屬性表分為商品SKU和貨架;流水表為上架操作過程弃舒。整理后如下:

image

首先癞埠,看一下商品表:

(1)商品屬性(類別状原,名稱等)跟商品流水(進貨、出貨)混在一起苗踪,可以進一步拆分颠区。

(2)“倉庫剩余個數(shù)”,可能進貨的要改通铲、上架的要改毕莱、盤點的要改,多個地方都會對這個字段作用颅夺。這種情況可以通過實時計算朋截,比寫入覆蓋的方式更為準確。

所以調(diào)整后會改為:

image

注:前臺展示的余量實時計算吧黄,不落表部服。

可以看到商品流通和之前的上架表非常類似,只相差一個貨架編號拗慨。

假設(shè)我們把倉庫看做一個大貨架廓八,設(shè)為0,兩表合并整理后:

image

再來看貨架表赵抢,“商品種類數(shù)”適用實時計算剧蹂,不落表。(類似前文倉庫余量計算)烦却。

還有一個問題非常突出——商品詳情這欄內(nèi)容特別多国夜。

非結(jié)構(gòu)化數(shù)據(jù),不便處理短绸,且與其他表內(nèi)容重復(比如商品名稱和售價)。同樣的字段最好只在一個地方維護筹裕,避免表之間的數(shù)據(jù)沖突醋闭。商品名稱很明顯放在商品屬性里。

那售價這個字段應(yīng)該放在商品還是貨架上的商品詳情朝卒?

這其實跟業(yè)務(wù)模式相關(guān)证逻,放在商品里方便全局管理,但是單個貨架不能實現(xiàn)差別化定價抗斤;相反囚企,放在貨架上,同一商品在不同貨架上可以設(shè)置不同售價瑞眼,缺點是修改調(diào)整比較困難龙宏。

根據(jù)我們的業(yè)務(wù)情況,售價主要是統(tǒng)一管理伤疙,放在了商品屬性银酗;折扣主要是單個貨架進行辆影,所以折扣價放在了貨架的商品詳情。

調(diào)整后如下:

image

數(shù)據(jù)結(jié)構(gòu)確認之后黍特,頁面內(nèi)容設(shè)計就比較清晰了:

【商品】

image

【貨架】

image

【貨架詳情】

image

【商品流轉(zhuǎn)】

image

注:在實際產(chǎn)品中蛙讥,頁面入口可能帶有一些參數(shù),比如上圖如果是點擊“進貨”按鈕的彈出框灭衷,就無需再手動選擇交易類型次慢。

二、字段類型

前面從大的范圍上介紹了字段的劃分翔曲,細節(jié)上單個字段的類型迫像、長度也需要加以關(guān)注。

一些常用的字段類型:

image
image
image

在字段類型上部默,我也遇到過一些坑侵蒙,舉兩個例子說明一下:

我在P2P公司上班,用戶會發(fā)布很多借款傅蹂,有個字段是表示借款類型纷闺,比如listingtype。

我們絕大多數(shù)的標都是普通標份蝴,穿插一點點其他類型犁功。總類型不超過5種婚夫,所以當時字段類型是tinyint浸卦,范圍0-255。

后來有段時間我司發(fā)展與合作機構(gòu)的合作標案糙,當時我做配置系統(tǒng)限嫌,設(shè)計成每個合作單位分配一個listingtype。

跑著跑著有一天时捌,研發(fā)反應(yīng)過來了怒医,說:總數(shù)就255,你再加就爆了奢讨。

后來的解決辦法是將合作標統(tǒng)一一個listingtype稚叹,然后同一類型下,每家單位再各自分配一個sublistingtype拿诸。

再舉一個例子扒袖,還是這個合作標的時候,上線之后亩码,利息計算錯誤季率。研發(fā)查了一圈,是建表的時候利率字段用了默認的DECIMAL(18,0)蟀伸,導致導入數(shù)據(jù)時被四舍五入蚀同。

三缅刽、總結(jié)

當然,你可以說:表結(jié)構(gòu)不是研發(fā)自定義的嗎蠢络?但這也不能全是研發(fā)的鍋衰猛,一是研發(fā)可能不清楚整個產(chǎn)品的規(guī)劃,或者說隨著業(yè)務(wù)變化刹孔,原本適合的字段類型變得不再適合啡省。

另一方面,并不是所有產(chǎn)品都是從零開始髓霞,有的可能是后來加入進行老產(chǎn)品的版本迭代卦睹。這種產(chǎn)品在設(shè)計之前,了解原先的表結(jié)構(gòu)及字段類型方库,就能避開很多坑结序。而且相比前端展示層,數(shù)據(jù)層上的坑纵潦,一般都是大坑徐鹤,改起來也困難更多。

大家都知道邀层,產(chǎn)品有技術(shù)背景會更方便溝通返敬。技術(shù)入門也許太難,表類知識入門就簡單多了寥院。

本文拋磚引玉劲赠,希望大家能往此方向去提煉一下自己,相信會給產(chǎn)品工作帶來較大助益秸谢。


重溫SQL知識

作為一枚數(shù)據(jù)產(chǎn)品經(jīng)理凛澎,需要掌握基本的SQL查詢語句技能,之后才能進一步了解與搭建數(shù)據(jù)倉庫估蹄、元數(shù)據(jù)预厌、指標字典體系。本文首先介紹MySQL基本知識元媚。

一、了解數(shù)據(jù)庫
模式:關(guān)于數(shù)據(jù)庫和表的布局及特性的信息苗沧;
行是表中的記錄刊棕,列是字段;
主鍵列中的值不能修改待逞,且不能重用甥角;
數(shù)據(jù)庫中包含表及其它相關(guān)sql結(jié)構(gòu)。
二识樱、檢索數(shù)據(jù)
2.1 select語句
檢索所有列:select * from products

2.2 排序檢索數(shù)據(jù)
order by:select prod_name from products order by prod_name嗤无。

注意:order by的子句必須是select語句的最后一個子句震束。

按多個列排序:select prod_id,prod_name,prod_price from products order by prod_price,prod_name。那么輸出結(jié)果先按prod_price排序当犯,然后再將排序后的結(jié)果按prod_name排序垢村。

按列位置排序:select prod_id,prod_name,prod_price from products order by 2,3。語句與上一句結(jié)果相同嚎卫。

降序排序(系統(tǒng)默認升序):order by prod_price DSC,prod_name嘉栓。則結(jié)果先按prod_price降序排序,再按price_name升序排序拓诸。

三侵佃、過濾數(shù)據(jù)
(1)使用where子句(在from之后)

范圍值檢查:between and:where prod_price between 5 and 10。
空值檢查:where prod_price is NULL奠支。語句返回沒有價格的所有產(chǎn)品(空字段馋辈,不是價格為0)
(2)使用組合where子句

AND操作符:where vend AND prod_price<=4 #檢索由供應(yīng)商DLL01制造且產(chǎn)品價格低于4美元的所有產(chǎn)品注意AND用在where子句中的關(guān)鍵字,用來指示檢索滿足所給定條件的行倍谜。
OR操作符:where OR OR用在where子句中的關(guān)鍵字迈螟,用來表示檢索匹配任一給定條件的行。
AND,OR相結(jié)合(AND優(yōu)先級比OR高):所以注意使用圓括號枢劝,where (vend or vend) and prod_price>=10井联。
IN操作符:where vend_id in(‘DLL01′,’BRS01’),其功能與where or相當您旁。
NOT:否定跟在它之后的任何條件(mysql不支持此操作符)烙常, where NOT vend #檢索除DLL01之外所有供應(yīng)商的產(chǎn)品(此句等價于where vend_id <> ‘DLL01’) #NOT一定要緊跟在where后。
(3)用通配符進行過濾(通配符:用來匹配值的一部分的特殊字符鹤盒,用于“字符串”)蚕脏,使用LIKE+通配符

百分號(%):where prod_name like ‘Fish%’ #檢索任意以Fish起頭的詞(匹配單個或多個字符)。
下劃線(_ ) : where prod_name like ‘Fish__’ #檢索出的字符必須為Fish+兩個字符 (與%能匹配0個字符不一樣侦锯,_必須匹配一個字符驼鞭,不能多也不能少)。
方括號([]):where contact like [JM]% #[JM]匹配任何以J,M開頭的人名尺碰,但它也只能匹配單個字符挣棕,為此在[]后加%,則可匹配多個字符亲桥。(若改為[^JM]洛心,則為檢索不以J,M起頭的任意聯(lián)系人名,等價于:where NOT contact like [JM]%)题篷。
四词身、創(chuàng)建計算字段
(1)拼接字段(將值聯(lián)結(jié)到一起構(gòu)成單個值)

concat函數(shù)(mysql用):select concat(vend_id,’ (‘,vend_country,’)’) #select語句聯(lián)結(jié)以上4個元素。
‘+’號(Access番枚,SQL Server,Sybase使用):select vend_id + ‘ (‘ + vend_country + ‘)’法严。
‘||’號(DB2,Oracle使用):select vend_id || ‘ (‘ || vend_country || ‘)’损敷。
TRIM函數(shù):RTRIM()去掉值右邊所有空格,LTRIM()去掉值左邊所有空格深啤,TRIM()去掉值兩邊所有空格拗馒。
AS關(guān)鍵字:給聯(lián)結(jié)字段取別名。
完整聯(lián)結(jié)字段語句: select RTRIM(vend_id) + ‘ (‘ + TRIRM(vend_country) + ‘)’ AS vendor_title FROM Vendors ORDER BY vend_name墓塌。
(2)執(zhí)行算數(shù)計算

五瘟忱、使用視圖
視圖是虛擬的表,視圖本身不包含數(shù)據(jù)苫幢,因此它們返回的數(shù)據(jù)是從其他表中檢索出來的访诱,在更改這些表中的數(shù)據(jù)時,視圖將返回改變過后的數(shù)據(jù)韩肝。

(1)視圖的規(guī)則和限制

視圖可以嵌套触菜;
禁止在視圖查詢時使用ORDER BY語句。
(2)創(chuàng)建視圖(creat view)

利用視圖簡化復雜的聯(lián)結(jié)哀峻;
用視圖重新格式化檢索出的數(shù)據(jù)涡相;
用視圖過濾不想要的數(shù)據(jù)(where子句);
使用視圖與計算字段剩蟀。
六催蝗、使用存儲過程
為以后的使用而存儲一條或多條SQL語句的集合。

七育特、管理事務(wù)處理
(1)什么是事務(wù)處理

事務(wù)管理用來管理必須成批執(zhí)行的SQL操作丙号,以保證數(shù)據(jù)庫不包含不完整的操作結(jié)果。利用事務(wù)處理缰冤,可以保證一組數(shù)據(jù)不會中途停止犬缨,它們或者作為整體執(zhí)行,或者完全不執(zhí)行(除非明確指示)棉浸。

如果沒有錯誤發(fā)生怀薛,則整組語句寫到數(shù)據(jù)庫表,如果發(fā)生錯誤迷郑,則進行回退(撤銷)以恢復數(shù)據(jù)庫到某個已知且安全的狀態(tài)枝恋。

(2)幾個術(shù)語

事務(wù)(transction):一組SQL語句;
回退(rollback):指撤銷指定SQL語句的過程嗡害;
提交(commit):指將未存儲的SQL語句結(jié)果寫入數(shù)據(jù)庫表鼓择;
保留點(savepoint):指事務(wù)處理中設(shè)置的臨時占位符,你可以對它發(fā)布回退(與回退整個事務(wù)處理不同)就漾。
(3)可以回退哪些語句

可管理INSERT,UPDATE念搬,DELETE語句抑堡,不能回退SELECT語句也不能回退CREATE摆出,DROP操作。事務(wù)處理中可以使用這些語句首妖,但回退時它們不被撤銷偎漫。

(4)控制事務(wù)處理

創(chuàng)建占位符:

mysql:savepoint delete1;
sql server:save trasaction delete1; #delete1為此占位符的名字有缆。
rollback:#撤銷整個事務(wù)處理

rollback to delete1;
rollback transaction delete1;#回退到保留點delete1;
八浸踩、使用游標(cursor)
游標不是一條select語句肘习,而是被該語句檢索出來的結(jié)果集,在存儲了游標之后,應(yīng)用程序可以根據(jù)需要滾動或瀏覽其中的數(shù)據(jù)边篮。游標主要用于交互式應(yīng)用,其中用戶需要滾動屏幕上的數(shù)據(jù)循头,并對數(shù)據(jù)進行瀏覽或更改略吨。

聲明:declare
打開:open cursor
檢索:fetch… into…
關(guān)閉:close
九、了解高級SQL特性
約束:管理如何插入或處理數(shù)據(jù)庫數(shù)據(jù)的規(guī)則

主鍵:一種特殊約束

外鍵:可幫助防止意外刪除曼验,唯一約束:與主鍵類似但區(qū)別于主鍵


希望讀完的你也有所收獲

原文:http://www.woshipm.com/pmd/2521501.html
http://www.woshipm.com/pmd/1161098.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泌射,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鬓照,更是在濱河造成了極大的恐慌熔酷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豺裆,死亡現(xiàn)場離奇詭異拒秘,居然都是意外死亡,警方通過查閱死者的電腦和手機留储,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門翼抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人获讳,你說我怎么就攤上這事阴颖。” “怎么了丐膝?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵量愧,是天一觀的道長。 經(jīng)常有香客問我帅矗,道長偎肃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任浑此,我火速辦了婚禮累颂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己紊馏,他們只是感情好料饥,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朱监,像睡著了一般岸啡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赫编,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天巡蘸,我揣著相機與錄音,去河邊找鬼擂送。 笑死悦荒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的团甲。 我是一名探鬼主播逾冬,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼躺苦!你這毒婦竟也來了身腻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤匹厘,失蹤者是張志新(化名)和其女友劉穎嘀趟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愈诚,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡她按,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炕柔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酌泰。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匕累,靈堂內(nèi)的尸體忽然破棺而出陵刹,到底是詐尸還是另有隱情,我是刑警寧澤欢嘿,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布衰琐,位于F島的核電站,受9級特大地震影響炼蹦,放射性物質(zhì)發(fā)生泄漏羡宙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一掐隐、第九天 我趴在偏房一處隱蔽的房頂上張望狗热。 院中可真熱鬧,春花似錦、人聲如沸匿刮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僻焚。三九已至,卻和暖如春膝擂,著一層夾襖步出監(jiān)牢的瞬間虑啤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工架馋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狞山,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓叉寂,卻偏偏與公主長得像萍启,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屏鳍,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349