Oracle資料庫使用及命名規則的詳解

來源:互聯網
上載者:User

Ekw719

公司已建立的或待建立的網站,如:中文站(CHINA),國際站(ALIBABA),華商站(CHINESE)等。

OLPS

Online process
system,線上處理系統,即我們的會員可以瀏覽的網站所串連的資料庫,也是我們所說的前台。

BOPS

Back Office process system,幕後處理系統,即我們的網站的發布系統。

BZO

Business Object(?),公司網站低層JAVA對象,主要負責與資料庫打交道。

一、 命名規範

 1. 是指資料庫、資料庫物件如TABLE、SEQUENCE、PROCEDURE、COLUMN等的命名規範;
 2. 命名富有意義英文詞彙,除個別通用的(見列表),要避免使用縮寫),多個單片語成的,中間以底線分割;
 3. 除資料庫名稱長度為1-8個字元,其餘為1-30個字元,Database link名稱也不要超過30個字元;
 4. 命名只能使用英文字母,數字和底線; 'Ekw719'>
 5. 避免使用Oracle的保留字如level、關鍵字如type(見列表);
 6. 名表之間相關列名盡量同名;
 7.
資料庫的命名:網上資料庫命名為“OLPS”+表示網站(SITE,以下同)的2-4個字元,後台資料庫命名為“BOPS”+表示網站的2-4個字元。測
試資料庫命名為“OLPS|BOPS”+“TEST”, 開發資料庫命名為“OLPS|BOPS”+“TEST”,用模式(SCHEMA/USER)的不
同來區分不同的網站。

 8. INDEX命名:table_name+column_name+index_type(1
byte)+idx,各部分以底線(_)分割。多單片語成的column name,取前幾個單詞首字母,加末單片語成column_name。
如:sample表member_id上的index:
sample_mid_idx   news表title上的unique index:news_titile_uidx;
 9. SEQUENCE命名:seq_+table_name;

二、 注釋說明

 1. 本注釋說明主要用於PL/SQL程式及其它SQL檔案,其它可作參考;
 2. SQLPLUS接受的注釋有三種:
  ―― 這兒是注釋
  /* 這兒是注釋 */
  REM 這兒是注釋
 3. 開始注釋,類似JAVAK中的開始注釋,主要列出檔案名稱,編寫日期,著作權說明,程式功能以及修改記錄:
  REM
  REM $Header: filename, version, created date,auther
  REM
  REM Copyright
  REM
  REM FUNCTION
  REM function explanation
  REM
  REM NOTES
  REM
  REM MODIFIED (yy/mm/dd)
  REM who when - for what, recently goes first
 4. 塊注釋,如表注釋,PROCEDURE注釋等,同JAVA:
  /*
  * This table is for TrustPass
  * mainly store the information
  * of TrustPass members
  */
 5. 單行注釋,如列注釋:
  login_id VARCHAR2(32) NOT NULL, -- 會員標識

三、 縮排

低層級語句在進階別語句後的,一般縮排4個空格:
  DECLARE
  v_MemberId VARCHAR2(32),
  BEGIN
  SELECT admin_member_id INTO v_MemberId
  FROM company
  WHERE id = 10;
  DBMS_OUTPUT.PUT_LINE(v_MemberId);
  END;
  
 同一語句不同部分的縮排,如果為sub
statement,則通常為2個空格,如果與上一句某部分有密切聯絡的,則縮至與其對齊:

  BEGIN
  FOR v_TmpRec IN
  (SELECT login_id,
  gmt_created, -- here indented as column above
  satus
  FROM member -- sub statement
  WHERE site = 'china'
  AND country='cn' )
  LOOP
  NULL;
  END LOOP;
  END;

四、 斷行

  • 一行最長不能超過80字元
  • 同一語句不同字句之間
  • 逗號以後空格
  • 其他分割符前空格

 SELECT offer_name
  ||','
  ||offer_count as offer_category,
  id
  FROM category
  WHERE super_category_id_1 = 0;

五、 大小寫

屬於ORACLE的關鍵字大小,表名、列名等小寫。

六、 列類型的選擇

  • 用CHAR(1)代替布爾值;
  • 應盡量使用VARCHAR2代替CHAR類型;
  • VARCHAR(2)最多4000字元;
  • DATE精確到微秒,而非天; 'Ekw719'>
  • 使用CLOB代替LONG,BLOB代替LONG RAW;
  • ORACLE只有NUMBER一種資料類型,使用時請給定長度;

七、 主鍵選擇

選擇有意義的,不太長且能唯一標識記錄行的列做主鍵,沒有這種列時,才考慮使用SEQUENCE做主健。

八、 列長度的選擇

應當根據實際需要選擇列長度。有對應web 頁面的,與頁面上對應列長度一致。

對資料的驗證除資料庫端實現外還要儘可能在表現層控制。

九、 使用SQL語句的約定

 1. 盡量避免在迴圈中使用SQL語句。
 2. 避免在WHERE字句中對列施以函數:
  SELECT * 
  FROM service_promotion
  WHERE TO_CHAR(gmt_modified,’yyyy-mm-dd’)
  = ‘20001-09-01’;
  而應使用:
  SELECT *
  FROM service_promotion
  WHERE gmt_modified
  >= TO_DATE(‘2001-9-01’,’yyyy-mm-dd’)
  AND gmt_modified
  < TO_DATE(‘2001-9-02’,’yyyy-mm-dd’);
  
 3. 避免使用資料庫的類型自動轉換功能:
  SELECT * FROM category
  WHERE id = ‘123’; -- id’s type is number
 4. 避免無效的串連:
  SELECT count(*)
  FROM offer a, count_by_email b
  WHERE a.email(+) = b.email;
 5. 串連(join)時要使用別名:
  SELECT a.*,b.offer_count(*)
  FROM offer a, count_by_email b
  WHERE a.email(+) = b.email;
 6. 取TABLE 的META資訊:
  SELECT *
  FROM table_name
  WHERE rowid is null (or rownum = 1 or pk =
impossible_value);
  可考慮使用:
  SELECT *
  FROM table_name
  WHERE 1 = 0 ;

十、 關於ALIBABA表的約定

如果使用ALIBABA BZO,設表至少有如下欄位:
  site VARCHAR2(32)
  gmt_create DATE
  gmt_modified DATE

 如果從IdBizObject繼承,則還有一個NUMBER型的列,通常是主鍵,並與某一個SEQUENCECF 對應;如果從
StrIdBizObject繼承,則還有一個VARCHAR2型的列。

十一、 列值約定

 1. 有固定值列表的列,如status, action, site, 其值取小寫;
 2. 應儘可能選擇數字來代表固定值列表中的值,相應的列定義為NUMBER型;
 3. 用CHAR(1)表示布爾值的取大寫:“Y”,“N”。

十二、 關於表重複屬性的定義

不能有多擇一的重複屬性列;
  

 對於能多選的重複屬性列,如果不做查詢列並且重複次數較多,應使用ID_VARRAY代替,如要用作查詢列,重複次數多的,應另建一表,次數少的且列值
為二擇一時,應使用NUMBER類型,加位操作。

十三、 資料修改約定

發現Production環境中資料有誤,需要改正的,應在RA TERMINAL上提交資料更新表單,由資料庫操作員在
當日17時前修改完畢。

  
 資料庫更程式更新的結構變動及資料更新,類似處理。
  

 提交SQTT測試需要準備資料或更新結構的,暫時先寫入測試請求中,由SQTT同志MAIL(註明測試請求表單連結即可)通過資料庫操作員修改資料庫。
待內部網TEAM增加新的表單後,測試請求分開提交。

十四、 資料庫設計流程

在新項目設計階段會議,應有DBA參加。在SCHEMA確定以後方可開始編碼。
  
 縮寫字列表:
  payment pymt
  my trade activity mta
  
 特殊字列表:
  ACCESS DECIMAL INITIAL ON START
  ADD NOT INSERT ONLINE SUCCESSFUL
  ALL DEFAULT INTEGER OPTION SYNONYM
  ALTER DELETE INTERSECT OR SYSDATE
  AND DESC INTO ORDER TABLE
  ANY DISTINCT IS PCTFREE THEN
  AS DROP LEVEL PRIOR TO
  ASC ELSE LIKE PRIVILEGES TRIGGER
  AUDIT EXCLUSIVE LOCK PUBLIC UID
  BETWEEN EXISTS LONG RAW UNION
  BY FILE MAXEXTENTS RENAME UNIQUE
  FROM FLOAT MINUS RESOURCE UPDATE
  CHAR FOR MLSLABEL REVOKE USER
  CHECK SHARE MODE ROW VALIDATE
  CLUSTER GRANT MODIFY ROWID VALUES
  COLUMN GROUP NOAUDIT ROWNUM VARCHAR
  COMMENT HAVING NOCOMPRESS ROWS VARCHAR2
  COMPRESS IDENTIFIED NOWAIT SELECT VIEW
  CONNECT IMMEDIATE NULL SESSION WHENEVER
  CREATE IN NUMBER SET WHERE
  CURRENT INCREMENT OF SIZE WITH
  DATE INDEX OFFLINE SMALLINT
  
  CHAR VARHCAR VARCHAR2 NUMBER DATE LONG
  CLOB BLOB BFILE
  INTEGER DECIMAL
  SUM COUNT GROUPING AVERAGE
  TYPE

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.