命名規范
對(dui)象名(如庫(ku)、表、索(suo)引(yin)等)長(chang)度應(ying)小于等于63字節(jie)(jie),注意某些字符可能占用多個字節(jie)(jie)。
對(dui)象名(ming)不要(yao)使(shi)用數(shu)據(ju)庫(ku)保(bao)留關鍵字,也不要(yao)以(yi)pg和(he)數(shu)字開(kai)頭。
數(shu)據(ju)庫(ku)(ku)名(ming)稱長度可在1~63個(ge)字(zi)(zi)(zi)符之間,由(you)字(zi)(zi)(zi)母、數(shu)字(zi)(zi)(zi)、或下劃線組成,不(bu)(bu)能包(bao)含其他(ta)特殊字(zi)(zi)(zi)符,不(bu)(bu)能以“pg”和(he)數(shu)字(zi)(zi)(zi)開(kai)頭,且不(bu)(bu)能和(he)RDS for PostgreSQL系統庫(ku)(ku)重名(ming)。RDS for PostgreSQL系統庫(ku)(ku)包(bao)括postgres、template0、template1,系統庫(ku)(ku)不(bu)(bu)支持修改。
表設計規范
表結構(gou)應當提(ti)前設計,避免經常(chang)變更表結構(gou),如添(tian)加字(zi)段,修(xiu)改數據類型等。
單表(biao)字段數(shu)量不(bu)應太多,建議不(bu)超過(guo)64。
需要(yao)定期清理(li)數據(ju)的表(biao),建(jian)議創建(jian)分(fen)區(qu)表(biao),比(bi)如按時間(jian)分(fen)區(qu),通過DROP或TRUNCATE對應的分(fen)區(qu)子表(biao)清理(li)數據(ju)。
表字段應使(shi)用(yong)合適的數據類(lei)型,如不要使(shi)用(yong)字符類(lei)型存儲數值或者日期數據。
使用數(shu)值(zhi)類型(xing)時應注意精度和范圍,使用時不要超過類型(xing)的限制。
索引設計規范
使用邏輯復制時,對需要進行邏輯復制的表設計主鍵(jian)或(huo)者唯一鍵(jian)。
使用外鍵時,一(yi)定要設(she)置外鍵被刪除(chu)或更(geng)新的動(dong)作,例如ON DELETE CASCADE。
在使用頻繁(如查詢、排序(xu))的字段上創建索引。
對于固定條件的查(cha)詢(xun),建議創建并使用部分索引。
對于經常使(shi)用(yong)表達式作(zuo)為查詢(xun)(xun)條件的查詢(xun)(xun),建議創建并使(shi)用(yong)表達式索(suo)引。
索(suo)引也(ye)會占用存儲,單表(biao)索(suo)引數量不宜太多,比(bi)如單列索(suo)引個數小于5,復合(he)索(suo)引個數小于3。
SQL設計
查詢時指定返回需要的字段,不(bu)要返回用不(bu)到的字段。
查詢(xun)或比較字段是否為NULL時,只(zhi)能(neng)使用(yong)IS NULL或IS NOT NULL條件。
查詢條件(jian)中,盡量使用NOT EXISTS替代NOT IN。
聚合數據時(shi),盡量使用UNION ALL代替UNION。
刪除數(shu)據時,盡量使(shi)用TRUNCATE代替全表DELETE。
分批提交(jiao)大事務中對(dui)數據的修改(gai),防(fang)止事務提交(jiao)或(huo)回(hui)滾(gun)時壓(ya)力集中。
創建函數時,應(ying)該(gai)定義函數易變性分類為對它們合法的(de)分類中最嚴(yan)格的(de)種類,而不是選擇默(mo)認的(de)VOLATILE。VOLATILE類函數調用并發過高可能導(dao)致新(xin)連接無法接入。
安全
禁止將(jiang)應用數據庫對(dui)象所(suo)有者賦(fu)予“public”,必須賦(fu)予某個(ge)特(te)定角色。
數據庫密碼(ma)應具備一定復雜度,禁止使用簡單密碼(ma)。
應該為每個業(ye)務分配不同(tong)的(de)數據庫(ku)賬號(hao),禁止多個業(ye)務共用一(yi)個數據庫(ku)帳號(hao)。
訪問對象時,顯式(shi)指定對象所在的模式(shi),避免誤訪問到其(qi)他模式(shi)下的同名對象。