后端產(chǎn)品經(jīng)理筆記之查詢數(shù)據(jù)庫

20 評論 21485 瀏覽 216 收藏 10 分鐘

本文從實際工作中梳理出7個方面的總結(jié):數(shù)據(jù)庫、常用sql語句、數(shù)據(jù)傳輸、文檔語法、邏輯規(guī)則、交互方案、擴展技能。

隨著數(shù)據(jù)量增大,業(yè)務(wù)擴展,服務(wù)器吃緊,加上開發(fā)跑路比較頻繁,常常導(dǎo)致后端網(wǎng)站很‘爛’,這可能是你一段時間內(nèi)不得不面對的常態(tài)。

這就決定了后端產(chǎn)品思維更要接近技術(shù),繞不開百萬級數(shù)據(jù)、業(yè)務(wù)邏輯、數(shù)據(jù)規(guī)則。在工作中無法像前端產(chǎn)品那樣做甩手掌柜:反正我要的告訴你了,怎么實現(xiàn)我不管。而事實上往往還要產(chǎn)品給開發(fā)一兩個建議方案,并告訴他要避免哪些坑,盡管這些都是前任的鍋。

一、數(shù)據(jù)庫

1. 理解數(shù)據(jù)庫

1、前端看到的內(nèi)容,如果不是代碼寫死的,那么就是從數(shù)據(jù)庫讀取的(本地緩存的數(shù)據(jù)也算)。

2、早期比較流行的數(shù)據(jù)庫模型有三種:層次式數(shù)據(jù)庫、網(wǎng)絡(luò)式數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫。現(xiàn)今最常用的即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。

3、關(guān)系型數(shù)據(jù)庫:MYsql為典范,以二位報表的形式展示,因此MYSQL和PHP的組合是比較完美(報表多)。

4、比MYsql強大的關(guān)系型數(shù)據(jù)庫還有ORACLE。比如1000W條數(shù)據(jù)以上級別的數(shù)據(jù),一般用的比較多的是ORACLE。

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

6、非關(guān)系型數(shù)據(jù)庫(NoSQL):

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

主要是數(shù)據(jù)庫Mongodb。數(shù)據(jù)是散漫的,以鍵值對的形式存儲。

7、分布式賬本數(shù)據(jù)庫:區(qū)塊連的數(shù)據(jù)存儲方式。也有叫時間軸數(shù)據(jù)庫的。略知即可。

8、圖片的存儲比較特別:

一種是:直接把圖片轉(zhuǎn)換成二進(jìn)制文件存儲在數(shù)據(jù)庫中。適合存儲量少且重要的圖片信息。

另一種是:存儲圖片的路徑到數(shù)據(jù)庫,用的時候直接調(diào)用路徑給image等圖像控件即可。適合存儲量大但不是太重要的圖片。

第二種方法常用,簡單,實用。

2. 實戰(zhàn)注意

1、建表的時候一般會增加冗余字段,比如unique_code,用于存儲備用字段來去重。

2、建表的時候可以增加預(yù)留字段:當(dāng)數(shù)據(jù)量大的時候很難再加新字段,所以預(yù)估到數(shù)據(jù)增張較快的,一定要預(yù)留幾個字段空位。便于日后數(shù)據(jù)表擴展。

3、當(dāng)一個表無法再加字段的時候可以增加擴展表 ,后綴_ext ,與原表通過id關(guān)聯(lián)起來。

4、新增表字段:要考慮,到數(shù)據(jù)初始化比如歷史數(shù)據(jù)全部為空或刷為某一個值。

5、統(tǒng)一規(guī)范表名前綴,比如可以定義t_前綴標(biāo)示類型, f_? 前綴表示從其他系統(tǒng)獲取的。

二、SQL語句

1. 基本函數(shù)

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

產(chǎn)品更多是查詢、統(tǒng)計,或者寫出更新/插入/刪除語句讓開發(fā)執(zhí)行。

2、 select語句是使用最多的,配合函數(shù):

count():統(tǒng)計記錄數(shù)

avg():計算字段值的平均值

sum():計算字段值的總和

max():查詢字段的最大值

min():查詢字段的最大值

比如:select count(id) from p_product;

3、排序:order by 字段 desc/ASC

select * from finance_order order by update_time desc limit 3;

4、不包含某個字符

select * from table where ziduan not in(select ziduan from table where name = ‘C’)

5、包含某個字符

select * from table where 列名 like ‘a%’??利用模糊查詢

6、查詢表p_product中的第10、11、12、13行數(shù)據(jù)

select * from product limit 4 offset 9;

或?select * from product limit 9,4;

7、in 括號內(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%’);

8、去重搜索:

SELECT distinct(goods) FROM

9、 GROUP BY 語句進(jìn)行組合。

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Custome

10、前10條記錄

select top 10 * form table1 where

11、連表查詢用join

Inner Join最常見,叫做內(nèi)聯(lián)接,可以縮寫成Join,找的是兩張表共同擁有的字段。

Left Join叫做左聯(lián)接,以左表(join符號前的那張表)為主,返回所有的行。如果右表有共同字段,則一并返回,如果沒有,則為空。

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

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

12、查表 f_oms中字段order_number值相同的且數(shù)據(jù)量大于1個的

select order_number,count(*) from f_oms group by order_number having count(*)>1

13、從 “Persons” 表中選取居住的城市不以?“A” 或 “L” 或 “N” 開頭的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%’

2. 技巧

1、and優(yōu)先級高于or,一般這種混合的句子建議用()使關(guān)系清晰。

比如A>0 OR B<0 and c=0,相當(dāng)于A>0 OR( B<0 and c=0)

2、點擊‘美化SQL’按鈕,可以將語句斷層使層次清晰。比如where goods_sn in(‘A’,’B’,’C),美化后會變成:

where ? goods_sn in (

'A',

'B',

'C

)

就可以用截取工具截取ABC,還原到excel表格的樣式。

3、為防止數(shù)據(jù)導(dǎo)出因位數(shù)過長而使字符串變?yōu)榭茖W(xué)計數(shù)法,導(dǎo)出的文件格式選擇XLS格式的文檔。

4、數(shù)據(jù)備份。

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

5、提升查詢速度,SQL語句快于MYSQL自帶的篩選選項,并且自帶的只顯示前一千條。所以優(yōu)先使用語句查詢。

6、多個獨立的查詢語句之間可以用;隔開,同時執(zhí)行,會分別輸出。

7、導(dǎo)出的表頭換成漢字注釋的方式:

SELECT a.ds_sn as ‘編碼’,a.pdt_name as ‘名稱’ FROM p_pro

8、is和=有時是不同的,比如寫作is null ,而不寫=null

比<>!=規(guī)范。有時候不兼容。

 

本文由 @環(huán)滁皆山也 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

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

專欄作家
唧唧歪歪PM,公眾號:唧唧歪歪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)域;擅長大型后臺體系,社交APP。

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

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

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

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 問個問題,如果要從數(shù)據(jù)庫拿數(shù)據(jù),后臺配置需要配置哪些字段才能連接數(shù)據(jù)庫?

    來自浙江 回復(fù)
  2. 大佬,0基礎(chǔ)學(xué)mysql難嗎?
    文科學(xué)渣

    來自北京 回復(fù)
  3. 大佬,研發(fā)出身?

    回復(fù)
    1. 看介紹 是學(xué)藥的

      來自湖南 回復(fù)
  4. 這不就是很簡單的數(shù)據(jù)庫基礎(chǔ)么…

    來自北京 回復(fù)
    1. 我要是跟你聊本專業(yè)最基礎(chǔ)的GC-MS、NMR 不知道你覺得簡單嗎

      來自湖南 回復(fù)
    2. 術(shù)業(yè)有專攻,你這篇文章是我的專業(yè)基礎(chǔ),所以我才覺得簡單。如果專業(yè)不同,你要聊你的專業(yè),可能我就所知甚少了??墒钦f什么就說什么,扯別的有什么意思呢,討論對象不同,結(jié)論自然不同啊。 ??

      來自北京 回復(fù)
  5. 就這點東西也難理解嗎?作為一個數(shù)據(jù)庫的產(chǎn)品經(jīng)理表示 需要懂mysql oracle mycat的底層架構(gòu) 包括ssd san rac 單實例以及中間件等 還有資源池 物理集群的概念
    更別說其他 搭建實例,新增應(yīng)用集群,分片擴容,資源的動態(tài)平衡了

    回復(fù)
    1. 你在哪里干活的

      回復(fù)
    2. 只有自己作為祖師爺原創(chuàng)的才難理解 已經(jīng)存在等著他人去學(xué)習(xí)的東西 都不稀缺。如果你梳理一下 就像執(zhí)業(yè)藥師考試題一樣做個總結(jié) 也有價值 藥學(xué)綜述論文 我老師也發(fā)了9.多影響因子的文字

      來自湖南 回復(fù)
    3. 總是有人需要的嘛 開始什么都不知道

      來自湖南 回復(fù)
  6. 作為一個做了4年后臺業(yè)務(wù)的產(chǎn)品,表示這些的東西依然很有價值。大多數(shù)初級產(chǎn)品對后臺的涉獵僅流于形式,更深入了解一些技術(shù)知識會對個人成長很有幫助。希望看!到作者的更多精彩內(nèi)容

    來自北京 回復(fù)
  7. 寫了兩年JAVA后臺轉(zhuǎn)的產(chǎn)品,不是很確定這位仁兄“后臺產(chǎn)品經(jīng)理”和“前端產(chǎn)品經(jīng)理”的定義是什么。通篇都是研發(fā)該干的活兒啊~盡管每個公司的組織架構(gòu)和職能或許不同,但是我還是認(rèn)為這里描述的內(nèi)容已經(jīng)完全超過了產(chǎn)品經(jīng)理的崗位職能。

    來自湖北 回復(fù)
    1. 本質(zhì)上都是產(chǎn)品,做的東西都包含前端頁面展示及后端的數(shù)據(jù)邏輯處理等;
      不同點:
      面向的用戶群不同,前端產(chǎn)品面向的用戶是互聯(lián)網(wǎng)群體,后端面向的用戶是企業(yè)內(nèi)部人員,運營、銷售等;
      側(cè)重點不同,前后端都涉及用戶體驗和邏輯關(guān)系,但是相對而言,前端更注重用戶體驗等,后端注重數(shù)據(jù)處理、邏輯關(guān)系。
      相關(guān)的sql查詢什么的,看具體工作內(nèi)容了,部分后臺產(chǎn)品,理清數(shù)據(jù)間的邏輯就行,不需要寫sql,不過要懂接口這些。

      來自北京 回復(fù)
    2. 目前做到是后端服務(wù)系統(tǒng),就是公司內(nèi)部員工使用的各種管理系統(tǒng)。
      個人覺得邏輯層次復(fù)雜,數(shù)據(jù)量大的時候,后臺服務(wù)系統(tǒng)或是C端應(yīng)用,對產(chǎn)品來說都不能像油花飄在水面那樣輕飄了。
      因為這時候開發(fā)看其他開發(fā)的代碼也蒙B,需要產(chǎn)品給梳理和指引。開發(fā)的很忙,常常以產(chǎn)品的時間換開發(fā)的時間。比如產(chǎn)品給寫好sql開發(fā)執(zhí)行。以前做app的時候也是不關(guān)心這些的,現(xiàn)在要引導(dǎo)開發(fā)。

      來自廣東 回復(fù)
    3. 小弟才疏學(xué)淺,但是據(jù)我工作的環(huán)境的語境來看,我們通常意義上定義的“前端”和“后端”可能更多的指的是前端頁面展示的程序員和后端的數(shù)據(jù)邏輯處理程序員。只能說樓主好人,表設(shè)計和整理的工作都扛下來了,你們可能缺一個叫開發(fā)組長的角色……

      來自湖北 回復(fù)
    4. 也是技術(shù)轉(zhuǎn)的產(chǎn)品,一樣覺得本篇文章的東西超出產(chǎn)品經(jīng)理的范圍了,更應(yīng)該是開發(fā)該干的事情 ,

      來自福建 回復(fù)
    5. 但是有次我在前端設(shè)計了關(guān)于訂單之類的數(shù)據(jù)展示列表,但是技術(shù)說什么實現(xiàn)不了,后臺查詢不到。某一列的數(shù)據(jù)就是給我顯示的空,但是從我前端設(shè)計來說這些字段都在數(shù)據(jù)庫中有,但是開發(fā)就說關(guān)聯(lián)不到這個字段,讓我改設(shè)計。但我覺得這在關(guān)系數(shù)據(jù)庫中都可以根據(jù)訂單id之類的關(guān)聯(lián)到這個字段。然后還爭論了半天我也沒有理解為什么關(guān)聯(lián)不到,還說讓我比如怎么設(shè)計就可以關(guān)聯(lián)到。我覺得這是開發(fā)的問題而不是產(chǎn)品設(shè)計的問題,但開發(fā)就說是產(chǎn)品設(shè)計的問題。就是關(guān)聯(lián)不到

      回復(fù)
    6. 你前期的設(shè)計決定了表結(jié)構(gòu)設(shè)計,別先著急甩鍋,把事情辦下來才是你接下來應(yīng)該考慮的事情。

      來自四川 回復(fù)
  8. 蠻詳細(xì)的,后端產(chǎn)品會用得多

    回復(fù)