1 數據庫命名約定
1.1 規則
(1) 命名富有意義英文詞匯,多個單詞組成的,中間以下划線分割。
(2) 除數據庫名稱長度為1-8個字符,其余為1-30個字符,dblink名稱也不要超過30個字符。
(3)命名只能使用英文字母,數字和下划線,字母全部小寫
(4)避免使用Oracle的保留字如level、關鍵字如type。
1. 2系統模塊
| 編號 |
名稱 |
英文 |
縮寫 |
| 1 |
系統管理 |
system |
sys |
| 2 |
配置管理 |
dictionary |
dic |
| 3 |
設備系統 |
equipment |
equ |
| 4 |
通訊系統 |
BaiZE |
bai |
| 5 |
能耗系統 |
energy consumption |
egy |
| 6 |
調度系統 |
dispatch |
dph |
| 7 |
數據分析系統 |
Auto Data Make Data |
amk |
| 8 |
Data to UI |
dui |
|
| 9 |
stmart |
smt |
|
| 10 |
營收系統 |
revenue |
rev |
| 11 |
客服系統 |
custom service |
cus |
| 12 |
遠程抄表系統 |
remote reading |
rea |
| 13 |
報裝系統 |
Expanding |
exp |
| 14 |
移動互聯系統 |
mobile |
mob |
| 15 |
管網監測系統 |
Pipe Supervision |
pip |
| 16 |
自備井監測 |
Self-supply wells |
ssw |
| 17 |
協同辦公 |
cooperative OA |
coa |
| 18 |
水廠監測 |
Water Factory Monitoring |
wfm |
| 19 |
二次供水系統 |
secondary water-supply |
sws |
| 20 |
GIS系統 |
gis |
gis |
| 21 |
水力模型系統 |
Water Model system |
mod |
| 22 |
管理系統 |
Manage system |
man |
| 23 |
仿真決策分析系統 |
decision-making system |
dms |
| 24 |
BIM系統 |
Building Information Modeling |
bim |
1. 3業務功能
| 編號 |
名稱 |
英文 |
縮寫 |
| 1 |
小區 |
area |
area |
| 2 |
壓力 |
pressure |
pressure |
| 3 |
流量 |
flow |
flow |
| 4 |
客服 |
custom service |
service |
| 5 |
移動應用 |
mobile apps |
app |
| 6 |
水廠 |
water works |
water |
| 7 |
客戶 |
customer |
customer |
| 8 |
大客戶 |
big customer |
bcustomer |
| 9 |
二次供水 |
secondary water supply |
second |
| 10 |
飲水機 |
water fountain |
fountain |
| 11 |
自備井 |
Self-supply wells |
wells |
| 12 |
水質 |
water quality |
quality |
| 13 |
診斷 |
diagnoses |
diagnoses |
| 14 |
水源 |
waterhead |
waterhead |
| 15 |
收費 |
charge |
charge |
| 16 |
檔案 |
file |
file |
| 17 |
抄表 |
reading |
reading |
| 18 |
發票 |
invoice |
invoice |
| 19 |
報表 |
report |
report |
| 20 |
工單 |
job |
job |
| 21 |
流程 |
process |
processs |
1. 4數據庫對象
| 編號 |
名稱 |
縮寫 |
其它 |
| 1 |
表空間 |
tbs |
|
| 2 |
表 |
tb |
|
| 3 |
視圖 |
vw |
|
| 4 |
過程 |
sp |
|
| 5 |
函數 |
fn |
|
| 6 |
序列 |
seq |
seq_表名 |
| 7 |
觸發器 |
tr |
tr_表名 |
| 8 |
包 |
pk |
|
| 9 |
索引 |
idx |
seq_表名 |
| 10 |
約束 |
ck |
ck_表名_字段名 |
| 11 |
主鍵 |
pk |
pk_表名_字段名 |
| 12 |
外鍵 |
fk |
fk_主表名_從表名 |
| 13 |
用戶自定義類型 |
udt |
|
2 SQL書寫方式
2.1 注釋
(1)注釋以中文為主。
(2)注釋盡可能詳細、全面,並且將注釋放在實現代碼的前面,不要集中放在對象的開始。
(3)每一數據對象的前面,應具體描述該對象的功能和用途。傳入參數的含義應該有所說明。如果取值范 圍確定,也應該一並說明。取值有特定含義的變量(如boolean類型變量和枚舉型變量),應給出每個值的含義。
(4)注釋語法包含兩種情況:單行注釋、多行注釋
(5)注釋簡潔,同時應描述清晰。
注釋舉例:編寫函數、觸發器、存儲過程以及其他數據對象時,必須為每個對象增加適當注釋。該注釋以多行注釋為主,主要結構如下(作者可以適當增減):

2.1 排版
(1) 程序塊要采用縮進風格編寫,縮進的空格可根據實際情況進行調整,總的原則是使代碼清晰可讀。 示例:
(2)相對獨立的程序塊之間、變量說明之后必須加空行。
(3)較長的語句(>80字符)要分成多行書寫,長表達式要在低優先級操作符處划分新行,操作符或關鍵字放在新行之首,划分出的新行要進行適當的縮進,使排版整齊,語句可讀。 示例:
(4) 循環、判斷等語句中若有較長的表達式或語句,則要進行適應的划分,長表達式要在低優先級操作符處划分新行,操作符或關鍵字放在新行之首。 示例:
(5)若函數或過程中的參數較長,則要進行適當的划分。 示例:
(6)只使用空格鍵,不要使用TAB鍵。
說明:以免用不同的編輯器閱讀程序時,因TAB鍵所設置的空格數目不同而造成程序布局不整齊。例如:
2. 3事務處理
(1)事務是SQL語句的一個序列,對事務的改變通過COMMIT語句成為永久的變化,部分或全部事務可以由ROLLBACK語句撤消。任何一個事務在運行過程中都要消耗一定的系統資源,如內存、回滾空間、磁盤空間等。在開發數據庫應用軟件的過程中,要注意正確估算相關事務的大小,對過大的事務操作采取必要的措施。
(2)明確事務的時間長短,要求事務在該時間內完成。
(3) 明確對事務的要求高低:如果對事務要求較高,對commit語句要判斷執行是否正確,發現commit語句執行不正確,進行提示或記錄。如果對事務要求較底,對commit語句不要判斷執行是否正確,因為執行不正確也沒有解決方法。對roolback都不用判斷。
(4) 明確事務書寫的規則:事務和存儲過程的關系:存儲過程中包含事務,還是事務中包含存儲過程。同樣要明確:事務和中間件的關系、事務和函數的關系。
(5)明確是否使用事務嵌套:有的數據庫支持事務嵌套,有的數據庫不支持事務嵌套。在設計是要明確整個系統是否使用事務嵌套。
(6)某些復雜的事務提交需要同涉及文件系統的某過程同時提交,此時,需要分析事務與過程的關系,決定提交的次序和錯誤恢復的策略。
2.4 安全性設計
(1) 數據庫用戶一定要通過操作系統,網絡服務,或數據庫進行身份確認。
(2)如果用戶是通過數據庫進行用戶身份的確認,那么建議使用密碼加密的方式與數據庫進行連接。
(3)數據庫開發者不能將數據庫登陸密碼直接寫在其開發源代碼中。
2.5 優化設計
下面的情況針對的是大數據量的情況下。在數據量小的時候,下面的約定沒有必要,例如,小表掃描比使用索引消耗的資源還小些。 為了SQL語句執行的速度,減少阻塞和死鎖,提高請求的響應時間,請遵照如下約定:
2.5.1 索引的使用
在SQL的寫法中,所有在大范圍數據里搜索記錄,必須有合適的索引來配匹,否則引起長時間的表掃描鎖定。這是所有系統性能低下的最基本的根源。請為每一個SQL語句設計合適的索引,當系統開始設計時沒有索引時請向項目經理申請增加。
(1)對於取值不能重復的、經常作為查詢條件的字段,應該建立唯一索引:unique index
示例: create unique index my_unique_idx on myTable (id);
(2)對於經常作為查詢條件的字段,其值可以不是唯一,則應該建立可重復索引:
index 示例: create index my_dup_idx on myTable(name);
(3)盡量避免以索引的一部分作為查詢的條件:
示例:某表的建立SQL為: create table myTable(id int,name char(8),age int, primary key(id, name)) 即表myExample是以 id 和 name 共同組成 Primary Key。
則下面方式的查詢語句效率很好: select ... from myTable where id= .... and name =....
而如果僅僅以 primary key 的一部分作為條件,則沒有起到key 的作用。
如下面兩條SQL查詢效率很低: select ... from myTable where id=.... select ... from myTable where name=...
以上兩條SQL,數據庫系統將會使用順序掃描,從而導致效率低下。
(4)組合索引要盡量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。
(5)經常同時存取多列,且每列都含有重復值可考慮建立組合索引;
(6)有大量重復值、且經常有范圍查詢 (between, >,< ,>=,< =)和order by 、group by發生的列,可考慮建立群集索引;
2.5.2 嚴禁使用的SQL
在大范圍的數據情況下,下面的用法,堅決杜絕使用。
1、游標:大數據范圍的循環,Oracle不能很好的支持。會造成系統性能嚴重下降。
2、函數:函數同光標一樣一行行的執行,效率也非常低。
3、"!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE",like %aaa%‟等比較運算。他們都不會做索引。堅決反對使用。
4、不得建沒有作用的事物:事物的啟動需要一定的資源,請不要亂用例如產生報表時。 5、Select Into創建表:請使用顯示定義Create table 。
特別的是不要在事物里創建表和臨時表。
6、在Where字句中,Oracle的函數和字段一定的分離。堅決不得使用如下的寫法: where Convert(varchar(10),fdate,112) = „2003-09-06‟ 或者 where Substring(PNO,4,3) = „001‟ 他們都是表完全掃描。
2.5.3 需要慎重使用的SQL
下面這些語句容易對服務器造成額外的負擔,例如Order by 消耗了大量的CPU資源。所以要避免采用它,當然不是說不用他們。有時需要將結果集排序顯示就一定要用到Order by,但不要用多余的Order by.
Order By:消耗了內存和CPU,在Temp中完成操作。
(1)Group By:同Order BY
(2) Having:同Order BY
(3) Distinct:同Order BY
(4)Union (盡量用Union All) :同Order BY
(5) in :沒有Between快。
(6)視圖:盡量少用。
(7)SELECT COUNT(*) :用Exists更好
2.5.4 大量裝載數據的注意事項:
(1)大批量裝載數據的時候,如果有可能,盡量把數據庫設置為非日志方式。裝載數據完成以后,再把數據庫恢復成原先的方式。
(2) 大批量裝載數據的時候,盡量把內存參數、數據同步的參數設大。
(3)大批量裝載數據的時候,避免使用insert語句,而應該使用數據庫提供的裝載工具或者采用游標insert方式來實現。
2.5.5 盡量減少多表連接的操作
說明:多表連接的操作一般效率較差,在聯機事務處理(OLTP)的應用中,應該盡量避免多表連接的操作,盡量避免建立多表的關系。
2.5.6 SQL語句優化
說明:SQL語句編寫的好壞,直接影響到系統性能及增加數據庫的負荷。SQL優化的實質就是在結果正確的前提下,用優化器可以識別的語句,充份利用索引,減少表掃描的I/O次數,盡量避免表搜索的發生。
(1)任何對列的操作都將導致表掃描,它包括數據庫函數、計算表達式等等,查詢時要盡可能將操作移至等號右邊。
(2)in、or子句常會使用工作表,使索引失效;如果不產生大量重復值,可以考慮把子句拆開;拆開的子句中應該包含索引。
(3) 多條件查詢時候,根據最優化原則,指定要應用的索引,屏蔽非索引字段。
2.5.7 建表、索引及關鍵字時參數的使用
新建表、索引及關鍵字時,應帶相關參數:
create table DF_CSDFYB ( QH VARCHAR2(2), SH VARCHAR2(4), YF VARCHAR2(6), CSHS NUMBER(14)) PCTFREE 20 INITRANS 2 MAXTRANS 255 TABLESPACE TBS1 STORAGE(INITIAL 1M NEXT 5M MINEXTENTS 1 MAXEXTENTS 2048 PCTINCREASE 0 BUFFER_POOL DEFAULT) LOGGING
1、 建議PCTINCREASE參數設置為0,可使碎片最小化,使每一個Extent都相同(等於NEXT值)。
2、 如果一個表無頻繁刪除,修改操作,建議PCTFREE參數適當設低,如有頻繁刪除,修改操 作可適當調高,如以上格式。
3、 根據表數據量的大小及將來的擴充 將STORAGE 中 INITIAL 、NEXT 合理設置,保證該表數據 盡量保持在同一塊區,保證查詢速度,減少I/O資源損耗。
4、 建立索引和關鍵字時候,指定特定專用的表空間,這樣在處理數據時就可以充分利用磁盤I/O,使 數據和索引在不同的I/O上進行,以提高訪問速度。
2 附錄
2.1 ORACLE關鍵字列表
access,add,all,alter,and,any,as,asc,audit,between,bfile,blob,by,char,char,check,clob,cluster,column,comment,compress,connect,count,create,current date,date,decimal,decimal,default,delete,desc,distinct,drop else,exclusive,exists file,float,for,from grant,group,grouping,having,identified,immediate,in,increment,index,initial,insert,integer,integer,intersect,into,is,level,like,lock,long,maxextents,minus,mlslabel,mode,modify,noaudit,nocompress,not,nowait,null,number,number,of,offline,on,online,option,or,order,pctfree,prior,privileges,public,raw,rename,resource,revoke,row,rowid,rownum,rows,select,session,set,share,size,smallint,start,successful,sum,synonym,sysdate,table,then,to,trigger,type,uid,union,unique,update,user,validate,values,varchar,varchar2,varchar2,varchar,view,whenever,where,with
2.2 SQL Server關鍵字列表
add,EXTERNAL,PROCEDURE,ALL,FETCH,PUBLIC,ALTER,FILE,RAISERROR,AND,FILLFACTOR,READ,ANY,FOR,READTEXT,AS,FOREIGN,RECONFIGURE,ASC,FREETEXT,REFERENCES,AUTHORIZATION,FREETEXTTABLE,REPLICATION,BACKUP,RESTORE,BEGIN,FULL,RESTRICT,BETWEEN,FUNCTION,RETURN,BREAK,GOTO,REVERT,BROWSE,GRANT,REVOKE,BULK,GROUP,RIGHT,BY,HAVING,ROLLBACK,CASCADE,HOLDLOCK,ROWCOUNT,CASE,IDENTITY,ROWGUIDCOL,CHECK,IDENTITY_INSERT,RULE,CHECKPOINT,IDENTITYCOL,SAVE,CLOSE,IF,SCHEMA,CLUSTERED,IN,SECURITYAUDIT,COALESCE,INDEX,SELECT,COLLATE,INNER,SEMANTICKEYPHRASETABLE,COLUMN,INSERT,SEMANTICSIMILARITYDETAILSTABLE,COMMIT,INTERSECT,SEMANTICSIMILARITYTABLE,COMPUTE,INTO,SESSION_USER,CONSTRAINT,is,SET,CONTAINS,JOIN,SETUSER,CONTAINSTABLE,KEY,SHUTDOWN,CONTINUE,KILL,SOME,CONVERT,LEFT,STATISTICS,CREATE,LIKE,SYSTEM_USER,CROSS,LINENO,TABLE,CURRENT,LOAD,TABLESAMPLE,CURRENT_DATE,MERGE,TEXTSIZE,CURRENT_TIME,NATIONAL,THEN,CURRENT_TIMESTAMP,NOCHECK,CURRENT_USER,NONCLUSTERED,TOP,CURSOR,NOT,TRAN,DATABASE,NULL,TRANSACTION,DBCC,NULLIF,Trigger,DEALLOCATE,OF,TRUNCATE,DECLARE,OFF,TRY_CONVERT,DEFAULT,OFFSETS,TSEQUAL,DELETE,ON,UNION,DENY,OPEN,UNIQUE,DESC,OPENDATASOURCE,UNPIVOT,DISK,OPENQUERY,UPDATE,DISTINCT,OPENROWSET,UPDATETEXT,DISTRIBUTED,OPENXML,USE,DOUBLE,OPTION,USER,DROP,OR,VALUES,DUMP,ORDER,VARYING,ELSE,OUTER,View,END,OVER,WAITFOR,ERRLVL,PERCENT,WHEN,ESCAPE,PIVOT,WHERE,EXCEPT,PLAN,WHILE,EXEC,PRECISION,WITH,EXECUTE,PRIMARY,WITHIN GROUP,EXISTS,PRINT,WRITETEXT,EXIT,PROC
參考資料:豆振海《數據庫設計開發規范》

