后端產品經理筆記之查詢數(shù)據庫

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

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

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

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

一、數(shù)據庫

1. 理解數(shù)據庫

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

2、早期比較流行的數(shù)據庫模型有三種:層次式數(shù)據庫、網絡式數(shù)據庫和關系型數(shù)據庫?,F(xiàn)今最常用的即關系型數(shù)據庫和非關系型數(shù)據庫。

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

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

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

6、非關系型數(shù)據庫(NoSQL):

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

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

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

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

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

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

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

2. 實戰(zhàn)注意

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

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

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

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

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

二、SQL語句

1. 基本函數(shù)

1、產品經理一般不去建表、改表,所以create table <表名> 、alter table <表名>、drop table <表名>知道就可以。

產品更多是查詢、統(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ù)據

select * from product limit 4 offset 9;

或?select * from product limit 9,4;

7、in 括號內為或的關系

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 語句進行組合。

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

10、前10條記錄

select top 10 * form table1 where

11、連表查詢用join

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

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

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

還有其他連表方式既然用網絡的圖片:

12、查表 f_oms中字段order_number值相同的且數(shù)據量大于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,一般這種混合的句子建議用()使關系清晰。

比如A>0 OR B<0 and c=0,相當于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ù)據導出因位數(shù)過長而使字符串變?yōu)榭茖W計數(shù)法,導出的文件格式選擇XLS格式的文檔。

4、數(shù)據備份。

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

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

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

7、導出的表頭換成漢字注釋的方式:

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

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

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

 

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

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

專欄作家
唧唧歪歪PM,公眾號:唧唧歪歪PM(ID:jjyypm),人人都是產品經理專欄作家,2019年年度作者。《后端產品經理寶典》作者,藥學碩士轉行互聯(lián)網產品多年;熟悉跨境電商業(yè)務,醫(yī)藥領域;擅長大型后臺體系,社交APP。

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

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

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

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

    來自浙江 回復
  2. 大佬,0基礎學mysql難嗎?
    文科學渣

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

    回復
    1. 看介紹 是學藥的

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

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

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

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

    回復
    1. 你在哪里干活的

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

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

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

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

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

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

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

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

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

      回復
    6. 你前期的設計決定了表結構設計,別先著急甩鍋,把事情辦下來才是你接下來應該考慮的事情。

      來自四川 回復
  8. 蠻詳細的,后端產品會用得多

    回復