编写版本:v3.5.8
适用版本: 所有
数据库创建表规范
主键和外键
- 主键: 所有数据库类型的主键必须都是
字符串
; - 外键: 设计表结构只需要声明哪个字段是外键即可,不需要在数据库构建外键关联;
- 主键和外键存储关系,单表调用平台领域层的save方法进行统一处理, 主子表由领域层的saveCascade方法进行统一处理.
//主表和子表的保存方法范例 public void saveCascade(TestParentTablePo testParentTablePo){ autoId(testParentTablePo); if(BeanUtils.isNotEmpty(testParentTablePo.getTestSubTablePoList())){ for(TestSubTablePo testSubTablePo:testParentTablePo.getTestSubTablePoList()){ //设置外键 testSubTablePo.setParentId(testParentTablePo.getId()); } } save(testParentTablePo); }
表名建议
平台名+模块名+功能模块【可选】+功能
中间以下划线(_)划分
例如:
IFORM_BPM_DEF 【流程定义表】
IFORM_PARTY_EMPLOYEE【员工表】
IFORM_FORM_DEF_HIS【表单定义历史表】
字段类型
域(Domains) | 描述 | mysql | sqlServer | oracle | postgres | dm |
---|---|---|---|---|---|---|
PK Or FK | varchar(64) | varchar(64) | VARCHAR2(64) | VARCHAR(64) | VARCHAR2(64) | |
业务主键(别名) | varchar(64) | varchar(64) | VARCHAR2(64) | VARCHAR(64) | VARCHAR2(64) | |
内容 | varchar(1024) | varchar(1024) | VARCHAR2(1024) | VARCHAR(1024) | VARCHAR2(1024) | |
内容(中) | varchar(512) | varchar(512) | VARCHAR2(512) | VARCHAR(512) | VARCHAR2(512) | |
内容(短) | varchar(255) | varchar(255) | VARCHAR2(255) | VARCHAR(255) | VARCHAR2(255) | |
内容(长) | varchar(4000) | varchar(4000) | VARCHAR2(4000) | VARCHAR(4000) | VARCHAR2(4000) | |
名称 | varchar(64) | varchar(64) | VARCHAR2(64) | VARCHAR(64) | VARCHAR2(64) | |
名称(中) | varchar(40) | varchar(40) | VARCHAR2(40) | VARCHAR(40) | VARCHAR2(40) | |
名称(短) | varchar(20) | varchar(20) | VARCHAR2(20) | VARCHAR(20) | VARCHAR2(20) | |
名称(长) | varchar(128) | varchar(128) | VARCHAR2(128) | VARCHAR(128) | VARCHAR2(128) | |
大文本 | text | text | CLOB | TEXT | CLOB | |
大文本(长) | longblob | varbinary(MAX) | BLOB | BYTEA | BLOB | |
整数 | int | int | INTEGER | INT4 | INTEGER | |
整数(短) | smallint | smallint | SMALLINT | INT2 | SMALLINT | |
整数(长) | bigint | bigint | NUMBER(64) | INT8 | NUMBER(64) | |
时间 | datetime | datetime | DATE | DATE | DATE | |
时间(短) | datetime | datetime | DATE | DATE | DATE | |
是否 | 是 Y ;否 N | char(1) | char(1) | CHAR(1) | CHAR(1) | CHAR(1) |
浮点(低精度) | numeric(20,2) | numeric(20,2) | NUMBER(20,2) | NUMERIC(20,2) | NUMBER(20,2) | |
浮点(高精度)/ 金额 | numeric(20,4) | numeric(20,4) | NUMBER(20,4) | NUMERIC(20,4) | NUMBER(20,4) | |
类型或状态(字符) | varchar(40) | varchar(40) | VARCHAR2(40) | VARCHAR(40) | VARCHAR2(40) | |
类型或状态(整型) | smallint | smallint | SMALLINT | INT2 | SMALLINT |
说明:以上目前常见的区别字段类型清单,不同数据库PowerDesigner 里面域(Domains)进行查看
表建议必备字段:
字段 | 描述 | 域 | 建议必备 |
---|---|---|---|
ID_ | 主键 | PK Or FK | 是 |
CREATE_BY_ | 创建人 | PK Or FK | 是 |
CREATE_TIME_ | 创建时间 | 时间 | 是 |
UPDATE_BY_ | 更新人 | PK Or FK | 是 |
UPDATE_TIME_ | 更新时间 | 时间 | 是 |
SQL
在xml的文件,编写sql语句不能编写只针对一个数据库类型有效,比如:
* update t_consumable c inner join( select consumable_code_
* ,consumable_name_,effective_date_ from t_stock where effective_date_>now() GROUP BY consumable_code_)
* s on c.code_ = s.consumable_code_ set c.expire_warning_ = '2';
上述SQL只能在mysql进行使用,切换达梦等数据库执行该sql会报异常.
若在性能调优时必须使用数据库的特性,则需要在xml编写增加sql的代码,然后在仓库层根据获取当前数据库类型进行调用对应的dao层方法,如下代码所示:
import com.ak.iform.base.datasource.constants.DbConstant;
import com.ak.iform.base.datasource.util.DbUtil;
//获取数据库类型
String dbType = DbUtil.getCurDBtype();
if(DbConstant.DB_MYSQL.equalsIgnoreCase(dbType)){
skeletonQueryDao.findByKey("mysql的sql的id信息");
}else if(DbConstant.DB_DM.equalsIgnoreCase(dbType)){
skeletonQueryDao.findByKey("dm的sql的id信息");
}
}
作者:黄春艳 创建时间:2024-11-21 19:15
最后编辑:hugh 更新时间:2024-11-25 19:17
最后编辑:hugh 更新时间:2024-11-25 19:17