`
fengzhizi2
  • 浏览: 14111 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle数据库使用及命名规则的详解 (转)

阅读更多
公司已建立的或待建立的网站,如:中文站(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. 命名只能使用英文字母,数字和下划线;
  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接受的注释有三种:
 
Sql代码 
     ―― 这儿是注释  
  /* 这儿是注释 */  
  REM 这儿是注释  

     ―― 这儿是注释
  /* 这儿是注释 */
  REM 这儿是注释     3. 开始注释,类似JAVAK中的开始注释,主要列出文件名,编写日期,版权说明,程序功能以及修改记录:
  
Sql代码 
      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  

      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:
  
Sql代码 
     /*  
  * This table is for TrustPass  
  * mainly store the information  
  * of TrustPass members  
  */  

     /*
  * This table is for TrustPass
  * mainly store the information
  * of TrustPass members
  */     5. 单行注释,如列注释:
  
Sql代码 
login_id VARCHAR2(32) NOT NULL, -- 会员标识  

login_id VARCHAR2(32) NOT NULL, -- 会员标识     
  三、 缩进
  低级别语句在高级别语句后的,一般缩进4个空格:
 
Sql代码 
    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;  

    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个空格,如果与上一句某部分有密切联系的,则缩至与其对齐:
  
Sql代码 
      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;  

      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字符
  • 同一语句不同字句之间
  • 逗号以后空格
  • 其他分割符前空格
  
Sql代码 
      SELECT offer_name  
  ||',' 
  ||offer_count as offer_category,  
  id  
  FROM category  
  WHERE super_category_id_1 = 0;  

      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精确到微秒,而非天;
  • 使用CLOB代替LONG,BLOB代替LONG RAW;
  • ORACLE只有NUMBER一种数据类型,使用时请给定长度;
  七、 主键选择
  选择有意义的,不太长且能唯一标识记录行的列做主键,没有这种列时,才考虑使用SEQUENCE做主健。
  八、 列长度的选择
  应当根据实际需要选择列长度。有对应web 页面的,与页面上对应列长度一致。
  
  对数据的验证除数据库端实现外还要尽可能在表现层控制。
  九、 使用SQL语句的约定
  1. 尽量避免在循环中使用SQL语句。
  2. 避免在WHERE字句中对列施以函数:
  
Sql代码 
      SELECT *   
  FROM service_promotion  
  WHERE TO_CHAR(gmt_modified,’yyyy-mm-dd’)  
  = ‘20001-09-01’;  

      SELECT * 
  FROM service_promotion
  WHERE TO_CHAR(gmt_modified,’yyyy-mm-dd’)
  = ‘20001-09-01’;       而应使用:
  
Sql代码 
      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’);  

      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. 避免使用数据库的类型自动转换功能:
  
Sql代码 
SELECT * FROM category  
E id = ‘123’; -- id’s type is number  

      SELECT * FROM category
  WHERE id = ‘123’; -- id’s type is number     4. 避免无效的连接:
  
Sql代码 
      SELECT count(*)  
  FROM offer a, count_by_email b  
  WHERE a.email( ) = b.email;  

      SELECT count(*)
  FROM offer a, count_by_email b
  WHERE a.email( ) = b.email;     5. 连接(join)时要使用别名:
  
Sql代码 
      SELECT a.*,b.offer_count(*)  
  FROM offer a, count_by_email b  
  WHERE a.email( ) = b.email;  

      SELECT a.*,b.offer_count(*)
  FROM offer a, count_by_email b
  WHERE a.email( ) = b.email;     6. 取TABLE 的META信息:
  
Sql代码 
      SELECT *  
  FROM table_name  
  WHERE rowid is null (or rownum = 1 or pk = impossible_value);  

      SELECT *
  FROM table_name
  WHERE rowid is null (or rownum = 1 or pk = impossible_value);     可考虑使用:
  
Sql代码 
      SELECT *  
  FROM table_name  
  WHERE 1 = 0 ;  

      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确定以后方可开始编码。
  
  缩写字列表:
  
Sql代码 
payment pymt  
rade activity mta  

      payment pymt
  my trade activity mta     
  特殊字列表:
Sql代码 
      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 
分享到:
评论

相关推荐

    Oracle数据库使用及命名规则的详解

    本文仔细介绍了Oracle数据库使用及命名规则,及Oracle中的缩写含义。

    Oracle约束详解.pdf

    1 1 、 e oracle 数据库有 5 5 种约束: :y primary n key,foreign key,unique,check,not null 2 2 、 如果某个约束只作用单独的字段,即可以在列级定义约束;也可以在表 级定义约束。但是如果某个约束作用于多...

    Linux 自动备份oracle数据库详解

    曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然说oracle可以有方法还原,但并不是彻底的。 所以,在工作中,不管是开发还是维护,备份数据库是非常有...

    oracle中imp、exp命令详解

    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成... 利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。

    Oracle中命名块之存储过程的详解及使用方法

    ◆命名块:具有名称的PL/SQL块,这些命名块被存储在Oracle中,编译一次,以后只可调用就可多次执行。如:存储过程、存储函数、包、触发器等、  存储过程:无返回值;  存储函数:有返回值;  包:可容纳多个过程或...

    2021 云和恩墨大讲堂PPT汇总(50份).zip

    经典知识库:Oracle数据库索引分裂详解 经典知识库:PostgreSQL中的锁 经典知识库:SQL条件等价改写秘笈 如何实现海量数据迁移及落地实践 如何通过APEX 实现标准化运维 如何通过APEX实现标准化运维sql 深入解析:...

    oracle net manager 数据传输安全步骤详解

    所谓监听程序就是一个Oracle服务器上进程,负责监听/响应客户端对Oracle服务的请求。之前我们在安装数据库实例时,同时已经安装了一个监听程序,这点我们知道就行。 本篇重点给大家介绍oracle net manager 数据传输...

    精通SQL 结构化查询语言详解

    1.6.4 SQL环境中对象的命名规则  第2章 主要的关系数据库与SQL  2.1 SQL Server  2.1.1 SQL Server的结构  2.1.2 数据库访问标准化接口-ODBC  2.1.3 使用查询分析器执行SQL语句  2.2 Transact-SQL  ...

    精通SQL--结构化查询语言详解

    1.6.4 sql环境中对象的命名规则 18 第2章 主要的关系数据库与sql 21 2.1 sql server 21 2.1.1 sql server的结构 21 2.1.2 数据库访问标准化接口—odbc 22 2.1.3 使用查询分析器执行sql语句 22 2.2 transact-...

    Oracle创建Database Link的两种方式详解

    创建一个dblink,命名为dblink_name,从A数据库连到B数据库,B数据库的IP为192.168.1.73,端口为1521,实例名为oracle,登录名为tast,密码为test。  一菜单方式:  打开plsql,点击【File】-【New】-【Database ...

    Oracle数据泵的导入与导出实例详解

    开始之前王子先介绍一下自己的环境,这里使用的是比较常用的WIN10系统,Oracle数据库也是安装在本机上的,环境比较简单。 数据泵的导入 导入的数据文件可能是别人导出给你的,也可能是你自己导出的,王子这里就是...

    Java开发详解.zip

    031714_【第17章:Java数据库编程】_使用JDBC连接Oracle笔记.pdf 031801_【第18章:图形界面】_AWT、Swing简介笔记.pdf 031802_【第18章:图形界面】_基本容器:JFrame笔记.pdf 031803_【第18章:图形界面】_标签...

    asp.net知识库

    Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能...

    RMAN备份脚本(详细)

    实际生产数据库中可以使用的rman备份脚本。写得很不错,dba可以下来学习研究

    MySQL详解

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,...

    疯狂JAVA讲义

    1.6.2 Java源文件的命名规则 17 1.6.3 初学者容易犯的错误 18 1.7 垃圾回收机制 20 1.8 何时开始使用IDE工具 21 学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本...

    SQL开窗函数的具体实现详解

    目前在 MSSQLServer、Oracle、DB2 等主流数据库中都提供了对开窗函数的支持,不过非常遗憾的是 MYSQL 暂时还未对开窗函数给予支持。 开窗函数简介:与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像...

    亮剑.NET深入体验与实战精要2

    5.2 数据库操作类的封装详解 217 5.2.1 执行命令方法的封装 217 5.2.2 查询数据方法的封装 220 5.2.3 数据统计方法的封装 221 5.2.4 实现SqlParameter方式 222 5.2.5 实现多数据库的访问 223 5.3 常用经典SQL语句 ...

Global site tag (gtag.js) - Google Analytics