“数据库规约”的版本间的差异
(创建页面,内容为“== 建表规约 == * 表或视图名中不能有字母或下划线"_"外的其他非法字符。 * 表名长度不要超过20个字符。 * 表名含义要鲜明。…”) |
|||
| 第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 || String || 用于UUID型主键或存放UUID字符串 | ||
| + | |- | ||
| + | | varchar(*) | ||
| + | | | ||
| + | * 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) | ||
| + | |- | ||
| + | | longtext | ||
| + | | | ||
| + | | String | ||
| + | | 大文本 | ||
| + | |- | ||
| + | | bigint | ||
| + | | | ||
| + | | Long | ||
| + | | 主键用bigint类型 | ||
| + | |- | ||
| + | | tinyint | ||
| + | | | ||
| + | | Short | ||
| + | | 一般用作状态字段 | ||
| + | |- | ||
| + | | int | ||
| + | | | ||
| + | | int | ||
| + | | | ||
| + | |- | ||
| + | | numeric(#, #) | ||
| + | | | ||
| + | * 18,2 | ||
| + | * 18,4 | ||
| + | | BigDecimal | ||
| + | | | ||
| + | * 金额:numeric(18, 2) | ||
| + | * 比例:numeric(18, 4) | ||
| + | |- | ||
| + | | date | ||
| + | | | ||
| + | | java.util.Date | ||
| + | | 存储精确到<span style="color:red">日</span>或<span style="color:red">秒</span>的时间字段 | ||
| + | |- | ||
| + | | datetime(3) | ||
| + | | | ||
| + | * 3 | ||
| + | | java.util.Date | ||
| + | | | ||
| + | *datetime 存储时间字段精确到秒 | ||
| + | *datetime (3)存储时间字段精确到毫秒 | ||
| + | |- | ||
| + | | timestamp | ||
| + | | | ||
| + | | java.util.Date | ||
| + | | 用于存储数据时间戳字段 | ||
|} | |} | ||
2019年4月29日 (一) 11:35的版本
目录
建表规约
- 表或视图名中不能有字母或下划线"_"外的其他非法字符。
- 表名长度不要超过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 | String | 用于UUID型主键或存放UUID字符串 |
| varchar(*) |
|
String |
|
| longtext | String | 大文本 | |
| bigint | Long | 主键用bigint类型 | |
| tinyint | Short | 一般用作状态字段 | |
| int | int | ||
| numeric(#, #) |
|
BigDecimal |
|
| date | java.util.Date | 存储精确到日或秒的时间字段 | |
| datetime(3) |
|
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 = ?