五、 大小写
属于Oracle的关键字大小,表名、列名等小写。
六、 列类型的选择
• 用CHAR(1)代替布尔值;
• 应尽量使用VARCHAR2代替CHAR类型;
• VARCHAR(2)最多4000字符;
• DATE精确到微秒,而非天;
• 使用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 ; |