產(chǎn)品經(jīng)理對(duì)數(shù)據(jù)庫(kù)不必懂太多,這篇總結(jié)就夠了!

4 評(píng)論 18138 瀏覽 168 收藏 20 分鐘

編輯導(dǎo)語(yǔ):中臺(tái)和后臺(tái)產(chǎn)品經(jīng)理對(duì)于數(shù)據(jù)庫(kù)一定不陌生,本篇文章中,作者對(duì)數(shù)據(jù)庫(kù)進(jìn)行了詳細(xì)地總結(jié),幫助你更好的理解和應(yīng)用數(shù)據(jù)庫(kù),同時(shí)了解一些注意事項(xiàng)。

先把數(shù)據(jù)結(jié)構(gòu)搞清楚,程序的其余部分自現(xiàn)?!?David Jones

對(duì)于中、后臺(tái)產(chǎn)品經(jīng)理而言,了解數(shù)據(jù)庫(kù)不是為了做斜杠青年,而是因?yàn)槟憔驮诿鎸?duì)數(shù)據(jù)庫(kù)。

本文目錄:

  1. 產(chǎn)品經(jīng)理對(duì)數(shù)據(jù)庫(kù)掌握兩點(diǎn)
  2. 理解數(shù)據(jù)庫(kù)
  3. 注意事項(xiàng)和規(guī)范
  4. 應(yīng)用數(shù)據(jù)庫(kù)
  5. 常用查詢語(yǔ)句

一、產(chǎn)品經(jīng)理對(duì)數(shù)據(jù)庫(kù)掌握兩點(diǎn)

隨著業(yè)務(wù)橫向擴(kuò)展,數(shù)據(jù)維度在擴(kuò)大。隨著業(yè)務(wù)縱深發(fā)展,數(shù)據(jù)量在倍增。隨之而來(lái)的,是數(shù)據(jù)結(jié)構(gòu)的不兼容、數(shù)據(jù)存儲(chǔ)不夠用,數(shù)據(jù)服務(wù)性能見拙,一切當(dāng)初未考慮到的,都成了滋生障礙的伏筆。

產(chǎn)品不了解數(shù)據(jù)庫(kù)原理的話,常常會(huì)與技術(shù)方案之間信息割裂。近期表現(xiàn)為互相扯皮,長(zhǎng)遠(yuǎn)會(huì)引入“技術(shù)債”,并一度陷入插不上手、插不上嘴的懵逼狀態(tài)。

舉例兩個(gè)場(chǎng)景:

第一:當(dāng)你發(fā)現(xiàn)數(shù)據(jù)異常,或者你要調(diào)研一個(gè)功能的時(shí)候,需要拉一批數(shù)據(jù)做驗(yàn)證。

如果開發(fā)資源不夠,你就要一直等著。而多數(shù)大而老的ERP系統(tǒng)確實(shí)慘不忍睹,整個(gè)團(tuán)隊(duì)很累很忙,這可能是你一段時(shí)間內(nèi)不得不面對(duì)的常態(tài)?!阅阋粤Ω?。

第二:當(dāng)你寫需求的時(shí)候,在頁(yè)面截圖字段后畫個(gè)圈丟過(guò)去,看著沒(méi)毛病。但是一些值,根本不在頁(yè)面。

如果你能給出一點(diǎn)線索,就可以讓他效率高點(diǎn)。

所以,后端產(chǎn)品在工作中無(wú)法像C端產(chǎn)品那樣做甩手掌柜:事實(shí)上往往還要產(chǎn)品給開發(fā)一兩個(gè)建議方案,并告訴他要避免哪些坑,因?yàn)楫a(chǎn)品比開發(fā)多掌握了業(yè)務(wù)信息。

所以避不開數(shù)據(jù)庫(kù)、數(shù)據(jù)表、字段這些接近技術(shù)的問(wèn)題,那么作為產(chǎn)品要了解數(shù)據(jù)庫(kù)到什么程度呢?

達(dá)到兩點(diǎn)即可:

  1. 理解數(shù)據(jù)庫(kù)作用原理,使你能更好與開發(fā)互相溝通,更好輸出方案;
  2. 會(huì)用簡(jiǎn)單常用的SQL查詢?nèi)粘?wèn)題,實(shí)現(xiàn)基本的數(shù)據(jù)庫(kù)應(yīng)用價(jià)值。

二、理解數(shù)據(jù)庫(kù)

1. 你在互聯(lián)網(wǎng)看到一切皆“下載”

下載的就是服務(wù)器上的數(shù)據(jù),廣義地說(shuō),凡是存儲(chǔ)數(shù)據(jù)的,都算是數(shù)據(jù)庫(kù),包括瀏覽器的緩存。

前端界面看到的內(nèi)容,如果不是代碼寫死的,那么就是從數(shù)據(jù)庫(kù)調(diào)取的。這就是為什么你看到頁(yè)面會(huì)常常出現(xiàn)圖片滯后,因?yàn)閳D片調(diào)用比較慢。

數(shù)據(jù)庫(kù)就好像是一個(gè)倉(cāng)庫(kù),開發(fā)用代碼實(shí)現(xiàn)對(duì)其中數(shù)據(jù)的取值,最終給到頁(yè)面呈現(xiàn)出來(lái)。

2. 數(shù)據(jù)庫(kù)管理三個(gè)階段

20世紀(jì)50年代中期以前,人工管理;20世紀(jì)50年代后到60年代中,文件系統(tǒng)階段,數(shù)據(jù)共享性差。20世紀(jì)60年代后期以來(lái),出現(xiàn)了統(tǒng)一管理數(shù)據(jù)的專門軟件系統(tǒng)——DBMS。

3. 數(shù)據(jù)庫(kù)模型主要三種

層次式數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)式數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù),現(xiàn)今最常用的即關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)。

4. 關(guān)系型數(shù)據(jù)庫(kù)

MYsql為典范,以二位報(bào)表的形式展示,因此MYSQL和PHP的組合是比較完美(報(bào)表多)。比MYsql強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)還有ORACLE,比如1000W條數(shù)據(jù)以上級(jí)別的數(shù)據(jù),一般用的比較多的是ORACLE。

MYsql每張表只能有一個(gè)主鍵,但開發(fā)會(huì)創(chuàng)建多個(gè)字段的索引,目的是為了提高查詢速度,至少提升上百倍查詢速度。

5. 非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)

NoSQL是作為傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)有效補(bǔ)充,處理對(duì)存儲(chǔ)要求高,且并發(fā)處理較高的場(chǎng)合。

主要是數(shù)據(jù)庫(kù)Mongodb,數(shù)據(jù)是散漫的,以鍵值對(duì)的形式存儲(chǔ),{?“key1”:”valude1”?,“key2”:” valude2 ”?,“key3”:” valude3”}。

6. 分布式賬本數(shù)據(jù)庫(kù)

區(qū)塊連的數(shù)據(jù)存儲(chǔ)方式,也有叫時(shí)間軸數(shù)據(jù)庫(kù)的,一種分布式的、集體維護(hù)的、按照時(shí)間順序?qū)⑹录?shù)據(jù)排列的“時(shí)間軸數(shù)據(jù)庫(kù)”,目前還不是主流的商業(yè)價(jià)值方案。

7. 圖片的存儲(chǔ)比較特別

一種是直接把圖片轉(zhuǎn)換成二進(jìn)制文件存儲(chǔ)在數(shù)據(jù)庫(kù)中,適合存儲(chǔ)量少且重要的圖片信息;另一種是存儲(chǔ)圖片的路徑到數(shù)據(jù)庫(kù),用的時(shí)候直接調(diào)用路徑給image等圖像控件即可,適合存儲(chǔ)量大但不是太重要的圖片。

第二種方法常用、簡(jiǎn)單、實(shí)用。

三、注意事項(xiàng)和規(guī)范

1. 注意事項(xiàng)

  • 建表的時(shí)候一般會(huì)增加冗余字段,比如 unique_code,用于存儲(chǔ)備用字段來(lái)標(biāo)定唯一性;
  • 建表的時(shí)候可以增加預(yù)留字段:當(dāng)數(shù)據(jù)量大的時(shí)候很難再加新字段,所以預(yù)估到數(shù)據(jù)增張較快的,一定要預(yù)留幾個(gè)字段空位。便于日后數(shù)據(jù)表擴(kuò)展;
  • 當(dāng)一個(gè)表無(wú)法再加字段的時(shí)候可以增加擴(kuò)展表 ,后綴_ext ,與原表通過(guò)id關(guān)聯(lián)起來(lái);
  • 新增表字段:要考慮,到歷史數(shù)據(jù)初始化。比如歷史數(shù)據(jù)全部為空或刷為某一個(gè)值;
  • 統(tǒng)一規(guī)范表名前綴,比如可以定義t_前綴標(biāo)示類型, f_前綴表示從其他系統(tǒng)獲取的。

2. 命名規(guī)范

命名規(guī)范總的原則是可讀性強(qiáng),容易維護(hù),具體的規(guī)范如下:

  • 庫(kù)名,表名,字段名,索引名統(tǒng)一使用小寫字母,數(shù)字,以下劃線分割;
  • 庫(kù)名,表名,字段名不要超過(guò)30個(gè)字符長(zhǎng)度;
  • 庫(kù)名,表名,字段名不能單獨(dú)使用DB的關(guān)鍵字,像lock,time,date,return,user等;
  • 數(shù)據(jù)庫(kù)的名稱為:業(yè)務(wù)名稱_[業(yè)務(wù)模塊]_db,eg:oms_db,oms_history_db;
  • 非唯一索引按照“idx_字段名稱[_字段名稱]”,唯一索引按照“uk_字段名稱[_字段名稱]”進(jìn)行命名;
  • 業(yè)務(wù)系統(tǒng)使用數(shù)據(jù)庫(kù)賬號(hào)命名為:業(yè)務(wù)名稱_[r|w]。

3. 表名前綴

  • 統(tǒng)計(jì)類數(shù)據(jù)表前綴:s
  • 基礎(chǔ)數(shù)據(jù)表前綴:b
  • 基礎(chǔ)類型維護(hù)數(shù)據(jù)表前綴:t
  • 原始數(shù)據(jù)表前綴:in
  • 訂單數(shù)據(jù)表前綴:o
  • 同步隊(duì)列數(shù)據(jù)類型表前綴:iq
  • 財(cái)務(wù)數(shù)據(jù)表前綴:f

4. 索引設(shè)計(jì)規(guī)范

  • 單表索引個(gè)數(shù)不能超過(guò)30個(gè);
  • 關(guān)聯(lián)字段,業(yè)務(wù)外鍵,create_time 字段必須建索引;
  • 在選擇性高的字段創(chuàng)建索引,注意組合索引的順序,利用索引的最左原則;
  • 使用復(fù)合索引,而不是添加新的索引;
  • 避免冗余索引。

idx_a_b_c(a,b,c)

idx_a(a)

idx_a_b(a,b)

四、應(yīng)用數(shù)據(jù)庫(kù)

1. 安裝數(shù)據(jù)管理系統(tǒng)

以下介紹最常用的MYSQL,首先要在PC端安裝MYSQL數(shù)據(jù)庫(kù)服務(wù)器,然后通過(guò)公司的數(shù)據(jù)庫(kù)地址、密碼連接上數(shù)據(jù)庫(kù)(具體可以找開發(fā)協(xié)助完成)。

這樣你就可以進(jìn)入到數(shù)據(jù)庫(kù)的各個(gè)表里看數(shù)據(jù),一個(gè)公司若有多個(gè)系統(tǒng),每個(gè)系統(tǒng)有至少一個(gè)屬于自己的數(shù)據(jù)庫(kù),也有一個(gè)系統(tǒng)的數(shù)據(jù)分庫(kù)存放的。

2. 熟悉數(shù)據(jù)庫(kù)管理系統(tǒng)

數(shù)據(jù)庫(kù)的表可以創(chuàng)建很多個(gè),每個(gè)表描述一種實(shí)體與屬性關(guān)系,每個(gè)屬性就是一個(gè)字段。同一個(gè)數(shù)據(jù)庫(kù)的表可以連表查詢,不同數(shù)據(jù)庫(kù)的表不能連表,因此在業(yè)務(wù)發(fā)展過(guò)程中會(huì)出現(xiàn)拆遷庫(kù)、拆表的行為。

1)數(shù)據(jù)組成

一個(gè)基本的數(shù)據(jù)由數(shù)據(jù)類型、字段(也叫變量或者參數(shù))、字段值組成:

CREATE TABLE `s_rule` (?`rule_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵ID’,?`rule_name` varchar(255) NOT NULL DEFAULT ” COMMENT ‘規(guī)則名稱’,?`rule_type_id` int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘規(guī)則類型id,對(duì)應(yīng)t_oms_rule_type表的自增id’,`solution_desc` varchar(255) NOT NULL DEFAULT ” COMMENT ‘處理方式描述’。

這里的表名是s_rule,4個(gè)字段都不允許為空。

2)字段類型

這里的字段類型是對(duì)字段值的約束,約束的根本原因是代碼在執(zhí)行調(diào)用取值的時(shí)候,與數(shù)據(jù)庫(kù)一個(gè)約定,約定后就不會(huì)有不符合規(guī)制的數(shù)據(jù)進(jìn)入,避免代碼識(shí)別障礙導(dǎo)致報(bào)錯(cuò),比如整形、字符串等。

3)主鍵

MYSQL每張表只能有一個(gè)主鍵,主鍵即為主關(guān)鍵字(primary key),可以由一個(gè)或多個(gè)字段組成,并且主關(guān)鍵字的列不能包含空值。

主鍵意義主要是用于其他表的外鍵關(guān)聯(lián),以及本記錄的修改與刪除。當(dāng)兩個(gè)表需要關(guān)聯(lián)時(shí),主關(guān)鍵字用來(lái)在一個(gè)表中引用來(lái)自于另一個(gè)表中的特定記錄,一般用該表id做主鍵。

4) 索引

索引是由開發(fā)在設(shè)計(jì)表之后,再具體創(chuàng)建的,對(duì)數(shù)據(jù)庫(kù)表中一或多個(gè)字段值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。

數(shù)據(jù)庫(kù)索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫(kù)的查詢速度。例如:這樣一個(gè)查詢:select * from table1 where id=44。

如果沒(méi)有索引,必須遍歷整個(gè)表,直到ID等于44的這一行被找到為止;有了索引之后(必須是在ID這一列上建立的索引),直接在索引里面找44(也就是在ID這一列找),就可以得知這一行的位置,也就是找到了這一行。

可見,索引是用來(lái)定位的。索引分為聚簇索引和非聚簇索引兩種,了解即可。主鍵唯一,但是表的索引可以有多個(gè)。

增加索引也有許多不利的方面 :

  1. 創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加;
  2. 索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大;
  3. 當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。

五、常用查詢語(yǔ)句

1. 數(shù)據(jù)查詢介紹

操作數(shù)據(jù)庫(kù)的話,全世界的程序員都是統(tǒng)一的,都是用SQL語(yǔ)句來(lái)操作數(shù)據(jù)庫(kù)。

產(chǎn)品經(jīng)理一般不去建表、改表,所以create table <表名> 、alter table <表名>、drop table <表名>知道就可以。

產(chǎn)品更多是查詢、統(tǒng)計(jì),或者寫出更新/插入/刪除語(yǔ)句,讓開發(fā)執(zhí)行。查詢語(yǔ)句中你可以使用一個(gè)或者多個(gè)表,表之間使用逗號(hào)(,)分割,并使用WHERE語(yǔ)句來(lái)設(shè)定查詢條件。

SELECT 命令可以讀取一條或者多條記錄:

  • 可以使用星號(hào)*來(lái)代替全部字段,SELECT語(yǔ)句會(huì)返回表的所有字段數(shù)據(jù);
  • 可以使用 WHERE 語(yǔ)句來(lái)包含任何條件;
  • 可以使用 LIMIT 屬性來(lái)設(shè)定返回的記錄數(shù);
  • 可以通過(guò)OFFSET指定SELECT語(yǔ)句開始查詢的數(shù)據(jù)偏移量等等。

2. SQL語(yǔ)句技巧簡(jiǎn)介

1)where和having區(qū)別:

  • where在分組前過(guò)濾,having在分組后過(guò)濾;
  • having 字段必須是查詢出來(lái)的,where 字段必須是數(shù)據(jù)表存在的;
  • where 不可以使用字段的別名,having 可以。因?yàn)閳?zhí)行WHERE代碼時(shí),可能尚未確定列值;
  • where 不可以使用合計(jì)函數(shù)。一般需用聚合函數(shù)才會(huì)用 having。

2)and優(yōu)先級(jí)高于or,一般這種混合的句子建議用()使關(guān)系清晰,比如A>0 OR B<0 and c=0,相當(dāng)于A>0 OR( B<0 and c=0)。

3)點(diǎn)擊‘美化SQL’按鈕,可以將語(yǔ)句斷層使層次清晰,比如where name in(‘A’,’B’,’C),美化后:where goods_sn in(‘A’,’B’,’C)。

4)導(dǎo)出的表頭換成漢字注釋的方式:SELECT a.ds_sn as編碼 ,a.pdt_name as ?名稱 ?FROM p_pro。

5)?is和=有時(shí)是不同的,比如寫作is null ,而不寫=null。

6)MySQL中,null是未知的,且占用空間的??罩?”)是不占用空間的,注意空值的”之間是沒(méi)有空格。

在進(jìn)行count()統(tǒng)計(jì)某列的記錄數(shù)的時(shí)候,如果采用的 NULL 值,會(huì)被系統(tǒng)自動(dòng)忽略掉,但是空值是會(huì)進(jìn)行統(tǒng)計(jì)到其中的。判斷null使用is null或者is not null,但判斷空字符使用? =”或者? <>”來(lái)進(jìn)行處理。

7)?配合函數(shù)

  • count():統(tǒng)計(jì)記錄數(shù)
  • avg():計(jì)算字段值的平均值
  • sum():計(jì)算字段值的總和
  • max():查詢字段的最大值
  • min():查詢字段的最大值

比如:select count(id) from p_product。

8)排序:order by 字段 desc/ASC,select * from finance_order order by update_time desc limit 3。

9)?包含某個(gè)字符:select * from table where 列名 like ‘a(chǎn)%’(利用模糊查詢)。

10)? 查詢表p_product中的第10、11、12、13行數(shù)據(jù):select * from product limit 4 offset 9;或?select * from product limit 9,4。

11)?去重搜索:SELECT distinct(goods) FROM。

12) GROUP BY 語(yǔ)句進(jìn)行組合:SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Custome。

13)查詢?nèi)齻€(gè)字段維度 重復(fù)的數(shù)據(jù)

  • select account,platform_sku,goods_sn, count(1) from t_oms_sku_map
  • where id <1000000
  • group by account,platform_sku,goods_sn
  • having( count(1) > 1)
  • limit 100

14)字段拼接

select concat(‘123′,’456’),mysql中的concat則可以拼接多個(gè)字符串。

將一個(gè)訂單對(duì)應(yīng)的多個(gè)產(chǎn)品輸入在一起,select ?order_sn ,group concat (goods_sn)from 訂單商品表。

15) in 括號(hào)內(nèi)為或的關(guān)系

select name from product where ? goods in (‘103702505′,’103702805’) and (shelf_time >? ‘2014-09-15 16:53:21’ or title like ‘_tylish%’)。

16)連表查詢用join

Inner Join最常見,叫做內(nèi)聯(lián)接,可以縮寫成Join,找的是兩張表共同擁有的字段。Left Join叫做左聯(lián)接,以左表(join符號(hào)前的那張表)為主,返回所有的行。如果右表有共同字段,則一并返回,如果沒(méi)有,則為空。

A Full Join B = A Left Join B + A Right Join B – A Inner Join B

還有其他連表方式既然用網(wǎng)絡(luò)的圖片:

17)數(shù)據(jù)備份

選中數(shù)據(jù),右鍵點(diǎn)擊復(fù)制為insert/update,可以直接將篩選的字段備份為更新或插入語(yǔ)句,一旦需要還原的時(shí)候可以直接執(zhí)行這幾個(gè)語(yǔ)句。

18)多個(gè)獨(dú)立的查詢語(yǔ)句之間可以用;隔開,同時(shí)執(zhí)行,會(huì)分別輸出。

#專欄作家#

唧唧歪歪PM,公眾號(hào):唧唧歪歪PM(ID:jjyypm),人人都是產(chǎn)品經(jīng)理專欄作家,2019年年度作者?!逗蠖水a(chǎn)品經(jīng)理寶典》作者,藥學(xué)碩士轉(zhuǎn)行互聯(lián)網(wǎng)產(chǎn)品多年;熟悉跨境電商業(yè)務(wù),醫(yī)藥領(lǐng)域;擅長(zhǎng)大型后臺(tái)體系,社交APP。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來(lái)自Unsplash,基于CC0協(xié)議

專欄作家
唧唧歪歪PM,公眾號(hào):唧唧歪歪PM(ID:jjyypm),人人都是產(chǎn)品經(jīng)理專欄作家,2019年年度作者?!逗蠖水a(chǎn)品經(jīng)理寶典》作者,藥學(xué)碩士轉(zhuǎn)行互聯(lián)網(wǎng)產(chǎn)品多年;熟悉跨境電商業(yè)務(wù),醫(yī)藥領(lǐng)域;擅長(zhǎng)大型后臺(tái)體系,社交APP。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來(lái)自Unsplash,基于CC0協(xié)議。

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 后胎昨的我頭大。。

    回復(fù)
  2. 這些對(duì)于產(chǎn)品來(lái)說(shuō)根本沒(méi)有什么卵用,真正有水的是那些技術(shù)轉(zhuǎn)型過(guò)去的產(chǎn)品經(jīng)理,其他通過(guò)UI轉(zhuǎn)過(guò)去的基本不懂技術(shù),在技術(shù)面前基本不敢插話!總之知識(shí)面廣對(duì)于一個(gè)產(chǎn)品來(lái)說(shuō)非常重要!產(chǎn)品+技術(shù)+設(shè)計(jì)=NB

    來(lái)自廣東 回復(fù)
    1. 開發(fā)出身做產(chǎn)品,后面UI缺人,兼職搞了一下UI,小企業(yè)的產(chǎn)品才牛逼

      來(lái)自廣東 回復(fù)
    2. 小企業(yè)的產(chǎn)品最后基本都被逼到全棧了。

      來(lái)自山西 回復(fù)