匿名
未登录
登录
Leon Wiki
搜索
导航
导航
首页
最近更改
随机页面
帮助
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志
查看“数据库规约”的源代码
名字空间
页面
讨论
页面选项
查看
查看源代码
历史
更多
←
数据库规约
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 建表规约 == * 表或视图名中不能有字母或下划线"_"外的其他非法字符。 * 表名长度不要超过20个字符。 * 表名含义要鲜明。 命名规则: <code>大模块名简写 + _ + 小模块名</code> 如:电子竞价大模块下的拍卖会小模块命名为:<code>AC_AUCTION</code> 如果小模块有其他分支模块,则命名规则为: <code>大模块名简写 + _ + 小模块名 + _ + 分支模块名</code> 如电子竞价大模块下的标的详情中的车辆信息表命名为:<code>AC_DETAIL_CAR</code> 主细表的命名规则也遵循上述规则。如电子竞价下的报名模块: 报名主表:<code>AC_APPLY_INFO</code> 报名字表:<code>AC_APPLY_DETAIL</code> === 表类型(不断补充) === 即表的后缀,针对不同业务的表应使用恰当的后缀增加表的辨识度,后缀可以使用通用的简写。 下表总结了一些通用的后缀,做设计时请遵守,欢迎大家随时进行补充: {| class="wikitable" |- ! 后缀名 !! 全名 !! 说明 !! 示例 |- | 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字段例外,需在前添加表名的简写,如:<code>SPI_ID; SPI_CODE; SPI_NAME; SPI_TYPE</code>(原因:ID字段可能会作为其他表的外键引用。CODE和NAME字段可能会在其他表中做冗余字段) * 每个表必备3个字段: <syntaxhighlight lang="sql"> ID CHAR(36); ADT_TIME TIMESTAMP(3); OPT_TIME TIMESTAMP(3) </syntaxhighlight> === 表名简写规则 === 表名简写规则:大模块名简写取首位+小模块名每个单词取首位+分支模块名首位,如<code>SC_PRO_INFO</code>表的简写为<code>SPI</code> === Oracle允许使用的字段类型和长度 === {| class="wikitable" |- ! 字段 !! 长度 !! 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 | 存储精确到<span style="color:red">日</span>或<span style="color:red">秒</span>的时间字段 |- | TIMESTAMP(3) | 3 | java.util.Date | 存储精确到<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(3) | * 3 | java.util.Date | *datetime 存储时间字段精确到秒 *datetime (3)存储时间字段精确到毫秒 |- | timestamp | | java.util.Date | 用于存储数据时间戳字段 |} === 常用字段 === {| class="wikitable" |- ! 字段名 !! 类型 !! 说明 |- | 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,则表名使用缩写,如:<code>FK_EB_BID_INVITE_COMPANY_EBI_ID</code>缩写为<code>FK_EB_EBIC_EBI_ID</code>。''' == SQL语句规约 == === 全部大写 === SQL语句需全部大写,如: <syntaxhighlight lang="sql"> SELECT DEMO_NAME FROM AP_DEMO WHERE DEMO_CODE = ? </syntaxhighlight> === 使用别名 === 语句中尽量使用短别名,在oracle下短别名会提高查询速度,如: <syntaxhighlight lang="sql"> SELECT D.DEMO_NAME FROM AP_DEMO D WHERE D.DEMO_CODE = ? </syntaxhighlight> === 谨慎使用隐式连接 === 3张表以上的连接<span style="color:red">必须</span>使用JOIN,如: <syntaxhighlight lang="sql"> 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 = ? </syntaxhighlight> <span style="color:red">禁止使用隐式连接</span>,如: <syntaxhighlight lang="sql"> 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 = ? </syntaxhighlight>
返回至
数据库规约
。