“数据库规约”的版本间的差异
(→Mysql允许使用的字段类型和长度) |
(→Mysql允许使用的字段类型和长度) |
||
| 第182行: | 第182行: | ||
| | | | ||
| java.lang.Long | | java.lang.Long | ||
| − | | | + | | 主键都用bigint类型 |
|- | |- | ||
| tinyint | | tinyint | ||
| 第208行: | 第208行: | ||
| 存储精确到<span style="color:red">日</span>或<span style="color:red">秒</span>的时间字段 | | 存储精确到<span style="color:red">日</span>或<span style="color:red">秒</span>的时间字段 | ||
|- | |- | ||
| − | | datetime | + | | datetime |
| | | | ||
| − | |||
| java.util.Date | | java.util.Date | ||
| | | | ||
2019年4月30日 (二) 16:32的版本
目录
建表规约
- 表或视图名中不能有字母或下划线"_"外的其他非法字符。
- 表名长度不要超过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(#) |
|
String |
|
| CLOB | String | 大文本字段 | |
| NUMBER(#) |
|
|
注意:实际业务中数值确实太大导致NUMBER(18)无法存储,方可使用NUMBER(N) |
| NUMBER(#, #) |
|
BigDecimal |
|
| DATE | java.util.Date | 存储精确到日或秒的时间字段 | |
| TIMESTAMP(3) | 3 | java.util.Date | 存储精确到毫秒的时间字段 |
Mysql允许使用的字段类型和长度
| 字段 | 长度 | java中映射类型 | 说明 |
|---|---|---|---|
| char(#) | 36 | java.lang.String | 用于UUID型主键或存放UUID字符串 |
| varchar(*) |
|
java.lang.String |
|
| longtext | java.lang.String | 大文本 | |
| bigint | java.lang.Long | 主键都用bigint类型 | |
| tinyint | java.lang.Integer | 一般用作状态字段(最多3位整数) | |
| int | java.lang.Integer | 一般用作存储中等长度的整数(最多10位整数) | |
| numeric(#, #) |
|
java.math.BigDecimal |
|
| date | java.util.Date | 存储精确到日或秒的时间字段 | |
| datetime | java.util.Date |
| |
| timestamp | java.util.Date | 用于存储数据时间戳字段 |
常用字段
| 字段名 | 类型 | 说明 |
|---|---|---|
| ADT_ID | CHAR(36) | 创建人ID |
| ADT_CO_ID | CHAR(36) | 创建人企业ID |
| ADT_TIME | TIMESTAMP(3) | 创建时间 |
| OPT_ID | CHAR(36) | 操作人ID |
| OPT_CO_ID | CHAR(36) | 操作人企业ID |
| OPT_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 = ?