“数据库规约”的版本间的差异

(创建页面,内容为“== 建表规约 == * 表或视图名中不能有字母或下划线"_"外的其他非法字符。 * 表名长度不要超过20个字符。 * 表名含义要鲜明。…”)
 
常用字段
 
(未显示同一用户的3个中间版本)
第82行: 第82行:
 
表名简写规则:大模块名简写取首位+小模块名每个单词取首位+分支模块名首位,如<code>SC_PRO_INFO</code>表的简写为<code>SPI</code>
 
表名简写规则:大模块名简写取首位+小模块名每个单词取首位+分支模块名首位,如<code>SC_PRO_INFO</code>表的简写为<code>SPI</code>
  
=== 允许使用的字段类型和长度 ===
+
=== Oracle允许使用的字段类型和长度 ===
  
 
{| class="wikitable"
 
{| class="wikitable"
第149行: 第149行:
 
| java.util.Date
 
| java.util.Date
 
| 存储精确到<span style="color:red">毫秒</span>的时间字段
 
| 存储精确到<span style="color:red">毫秒</span>的时间字段
 +
|}
 +
=== Mysql允许使用的字段类型和长度 ===
 +
 +
{| class="wikitable"
 +
|-
 +
! 字段 !! 长度 !! java中映射类型 !! 说明
 +
|-
 +
| char(#) || 36 || java.lang.String || 用于UUID型主键或存放UUID字符串
 +
|-
 +
| varchar(*)
 +
|
 +
* 20
 +
* 50
 +
* 100
 +
* 200
 +
* 255
 +
* 500
 +
* 1000
 +
| java.lang.String
 +
|
 +
* CODE, NAME, NO字段,建议:VARCHAR(50),特殊长度可考虑使用VARCHAR(100), VARCHAR(200)
 +
* 联系地址等:VARCHAR(100)
 +
* URL型数据:VARCHAR(255)
 +
* REMARK, SUMMARY, RESION, DESCRIPTION等,建议:VARCHAR(500),内容较多可以考虑使用VARCHAR(1000)
 +
|-
 +
| longtext
 +
|
 +
| java.lang.String
 +
| 大文本
 +
|-
 +
| bigint
 +
|
 +
| java.lang.Long
 +
| 主键都用bigint类型
 +
|-
 +
| tinyint
 +
|
 +
| java.lang.Integer
 +
| 一般用作状态字段(最多3位整数)
 +
|-
 +
| int
 +
|
 +
| java.lang.Integer
 +
| 一般用作存储中等长度的整数(最多10位整数)
 +
|-
 +
| numeric(#, #)
 +
|
 +
* 18,2
 +
* 18,4
 +
| java.math.BigDecimal
 +
|
 +
* 金额:numeric(18, 2)
 +
* 比例:numeric(18, 4)
 +
|-
 +
| date
 +
|
 +
| java.util.Date
 +
| 存储精确到<span style="color:red">日</span>或<span style="color:red">秒</span>的时间字段
 +
|-
 +
| datetime
 +
|
 +
| java.util.Date
 +
|
 +
*datetime 存储时间字段精确到秒
 +
*datetime (3)存储时间字段精确到毫秒
 +
|-
 +
| timestamp
 +
|
 +
| java.util.Date
 +
| 用于存储数据时间戳字段
 
|}
 
|}
  
第157行: 第227行:
 
! 字段名 !! 类型 !! 说明
 
! 字段名 !! 类型 !! 说明
 
|-
 
|-
| ADT_ID || CHAR(36) || 创建人ID
+
| CREATOR_ID || CHAR(36) || 创建人ID
 
|-
 
|-
| ADT_CO_ID || CHAR(36) || 创建人企业ID
+
| CREATOR_CO_ID || CHAR(36) || 创建人企业ID
 
|-
 
|-
| ADT_TIME || TIMESTAMP(3) || 创建时间
+
| CREATOR_TIME || TIMESTAMP(3) || 创建时间
 
|-
 
|-
| OPT_ID || CHAR(36) || 操作人ID
+
| MODIFY_ID || CHAR(36) || 操作人ID
 
|-
 
|-
| OPT_CO_ID || CHAR(36) || 操作人企业ID
+
| MODIFY_CO_ID || CHAR(36) || 操作人企业ID
 
|-
 
|-
| OPT_TIME || TIMESTAMP(3) || 操作时间
+
| MODIFY_TIME || TIMESTAMP(3) || 操作时间
 
|-
 
|-
 
| STATE || NUMBER(2) || 状态
 
| STATE || NUMBER(2) || 状态

2020年5月7日 (四) 08:41的最新版本

建表规约

  • 表或视图名中不能有字母或下划线"_"外的其他非法字符。
  • 表名长度不要超过20个字符。
  • 表名含义要鲜明。

命名规则:

大模块名简写 + _ + 小模块名

如:电子竞价大模块下的拍卖会小模块命名为:AC_AUCTION

如果小模块有其他分支模块,则命名规则为:

大模块名简写 + _ + 小模块名 + _ + 分支模块名

如电子竞价大模块下的标的详情中的车辆信息表命名为:AC_DETAIL_CAR

主细表的命名规则也遵循上述规则。如电子竞价下的报名模块:

报名主表:AC_APPLY_INFO

报名字表:AC_APPLY_DETAIL

表类型(不断补充)

即表的后缀,针对不同业务的表应使用恰当的后缀增加表的辨识度,后缀可以使用通用的简写。

下表总结了一些通用的后缀,做设计时请遵守,欢迎大家随时进行补充:

后缀名 全名 说明 示例
ACCT ACCOUNT 账户表 AP_DEMO_ACCT
APL APPLY 申请表 AP_DEMO_APL
APR APPROVE 审批表 AP_DEMO_APR
BIZ BUSINESS 业务表 AP_DEMO_BIZ
CHG CHANGE 变更记录表 AP_DEMO_CHG
CLS CLASS 类别表 AP_DEMO_CLS
DEL DELETE 删除记录表 AP_DEMO_DEL
DTL DETAIL 明细表 AP_DEMO_DTL
FLW FLOW 流程表 AP_DEMO_FLW
HIS HISTORY 历史记录表 AP_DEMO_HIS
INF INFO 信息表 AP_DEMO_INF
LOG LOG 日志表 AP_DEMO_LOG
STATE STATE 状态表 AP_DEMO_STATE
TMP TEMPORARY 临时表 AP_DEMO_TMP
TYPE TYPE 类型表 AP_DEMO_TYPE
VCH VOUCH 单据表 AP_DEMO_VCH

字段规约

  • 字段名长度不要超过20个字符
  • 字段名称前无需添加表名或表名的简写,但表的ID、CODE,NAME,TYPE字段例外,需在前添加表名的简写,如:SPI_ID; SPI_CODE; SPI_NAME; SPI_TYPE(原因:ID字段可能会作为其他表的外键引用。CODE和NAME字段可能会在其他表中做冗余字段)
  • 每个表必备3个字段:
ID CHAR(36);
ADT_TIME TIMESTAMP(3);
OPT_TIME TIMESTAMP(3)

表名简写规则

表名简写规则:大模块名简写取首位+小模块名每个单词取首位+分支模块名首位,如SC_PRO_INFO表的简写为SPI

Oracle允许使用的字段类型和长度

字段 长度 java中映射类型 说明
CHAR(#) 36 String 用于UUID型主键或存放UUID字符串
VARCHAR2(#)
  • 50
  • 100
  • 200
  • 255
  • 500
  • 1000
String
  • CODE, NAME, NO字段,建议:VARCHAR(50),特殊长度可考虑使用VARCHAR(100), VARCHAR(200)
  • 联系地址等:VARCHAR(100)
  • URL型数据:VARCHAR(255)
  • REMARK, SUMMARY, RESION, DESCRIPTION等,建议:VARCHAR(500),内容较多可以考虑使用VARCHAR(1000)
CLOB String 大文本字段
NUMBER(#)
  • 1
  • 2
  • 4
  • 9
  • 18
  • N(N > 18)
  • NUMBER(1) - NUMBER(9) :Integer
  • NUMBER(10) - NUMBER(18):Long
  • NUMBER(N):BigInteger
  • 布尔值:NUMBER(1)
  • 标志位:NUMBER(2),NUMBER(4):建议10,20,30...这样标记,各数值中间留空,方便今后的扩展
  • 整数:NUMBER(9),NUMBER(18), NUMBER(N)

注意:实际业务中数值确实太大导致NUMBER(18)无法存储,方可使用NUMBER(N)

NUMBER(#, #)
  • 18,2
  • 18,4
  • 18,6
BigDecimal
  • 金额:NUMBER(18, 2)
  • 比例:NUMBER(18, 4)
  • 利率:NUMBER(18, 6)
DATE java.util.Date 存储精确到的时间字段
TIMESTAMP(3) 3 java.util.Date 存储精确到毫秒的时间字段

Mysql允许使用的字段类型和长度

字段 长度 java中映射类型 说明
char(#) 36 java.lang.String 用于UUID型主键或存放UUID字符串
varchar(*)
  • 20
  • 50
  • 100
  • 200
  • 255
  • 500
  • 1000
java.lang.String
  • CODE, NAME, NO字段,建议:VARCHAR(50),特殊长度可考虑使用VARCHAR(100), VARCHAR(200)
  • 联系地址等:VARCHAR(100)
  • URL型数据:VARCHAR(255)
  • REMARK, SUMMARY, RESION, DESCRIPTION等,建议:VARCHAR(500),内容较多可以考虑使用VARCHAR(1000)
longtext java.lang.String 大文本
bigint java.lang.Long 主键都用bigint类型
tinyint java.lang.Integer 一般用作状态字段(最多3位整数)
int java.lang.Integer 一般用作存储中等长度的整数(最多10位整数)
numeric(#, #)
  • 18,2
  • 18,4
java.math.BigDecimal
  • 金额:numeric(18, 2)
  • 比例:numeric(18, 4)
date java.util.Date 存储精确到的时间字段
datetime java.util.Date
  • datetime 存储时间字段精确到秒
  • datetime (3)存储时间字段精确到毫秒
timestamp java.util.Date 用于存储数据时间戳字段

常用字段

字段名 类型 说明
CREATOR_ID CHAR(36) 创建人ID
CREATOR_CO_ID CHAR(36) 创建人企业ID
CREATOR_TIME TIMESTAMP(3) 创建时间
MODIFY_ID CHAR(36) 操作人ID
MODIFY_CO_ID CHAR(36) 操作人企业ID
MODIFY_TIME TIMESTAMP(3) 操作时间
STATE NUMBER(2) 状态
REMARK VARCHAR(500) 备注
DEL_FLAG NUMBER(2) 删除标记,1,未删除;-1,已删除;

约束及索引规约

主键规约

主键名称一律为:"PK_" + 表名,如:PK_AP_DEMO

唯一键规约

唯一键名称一律为:"UK_" + 表名 + 字段名,如:UK_AP_DEMO_DEMO_CODE

外键规约

外键名称一律为:"FK_" + 表名 + 字段名,如:FK_AP_DEMO_ORGAN_ID

索引规约

普通索引名称一律为:"IX_" + 表名 + 字段名,如:IX_AP_DEMO_ORGAN_ID

唯一索引名称一律为:"UX_" + 表名 + 字段名,如:UX_AP_DEMO_DEMO_NAME


   注意:由于Oracle对各命名长度的限制为30个字符,以上按照规约若命名长度大于30,则表名使用缩写,如:FK_EB_BID_INVITE_COMPANY_EBI_ID缩写为FK_EB_EBIC_EBI_ID

SQL语句规约

全部大写

SQL语句需全部大写,如:

SELECT DEMO_NAME FROM AP_DEMO WHERE DEMO_CODE = ?

使用别名

语句中尽量使用短别名,在oracle下短别名会提高查询速度,如:

SELECT D.DEMO_NAME FROM AP_DEMO D WHERE D.DEMO_CODE = ?

谨慎使用隐式连接

3张表以上的连接必须使用JOIN,如:

SELECT
	U.REAL_NAME,
	R.ROLE_NAME,
	O.ORGAN_NAME
FROM
	AP_USER U
JOIN AP_ORGAN O ON U.ORGAN_ID = O.ORGAN_ID
JOIN AP_ROLE R ON U.ROLE_ID = R.ROLE_ID
WHERE
	U.USER_NAME = ?

禁止使用隐式连接,如:

SELECT
	U.REAL_NAME,
	R.ROLE_NAME,
	O.ORGAN_NAME
FROM
	AP_USER U,
	AP_ORGAN O,
	AP_ROLE R
WHERE
	U.ORGAN_ID = O.ORGAN_ID
AND U.ROLE_ID = R.ROLE_ID
AND U.USER_NAME = ?