數據庫設計開發規范


 數據庫命名約定

 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

 

 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.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

 參考資料:豆振海《數據庫設計開發規范》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM