低代码-数据库设计
常用数据库设计思路
常见的设计的思路
- 传统关系型数据库
- no-sql实现
传统关系型数据库
首选 毫无疑问 mysql。别问,问就是用了很多年了
mysql有2种方案
- 横向设计法 (目前采用这一种)
- 列式设计法
横向设计法
用户在界面上拖拉拽出一个表单,则后台对应建一张表。
好处:
- 方便查询
- 方便后续统计导出
- join
坏处: - 表字段增减会有性能问题
纵向设计法
纵向设计法分为2种
- a、同样在页面上一个表单对应一张表,但是真实建表 建200列,当做扩展字段
- b、整个系统只有X张不同数据表(日期,数值,文本类型表)
好处: - 列式的存储概念
- 容易应付数据量不大的场景
坏处: - 客户的表不是隔离的,如果备份是个大问题
- join操作很难解决,很难解决查询的问题
非关系型数据库
mongdb
个人感觉也是一个门槛,但是也是一个解决方案
或者使用其他 大数据类数据库
采用的实际办法
传统关系型数据库, 横向设计法
好处是显而易见,坏处也是一目了然。但是这种设计是符合一个程序员的正向思路,并且是类似于正常做需求的一个习惯性建表。但是怎么解决 坏处呢?
苦思冥想 有了一个不成熟的答案
解决办法:
1、产品定位上 不允许 跨类型修改字段。数值就是数值,文本就是文本,日期就是日期。抓住几个大类数据类型。
2、在建表生成的时候,根据类型 建立一个比较大的类型。
3、除了增加新的列,真实增加。其他的操作都是逻辑操作
产品定位类型问题
1、不能随意更换字段类型, 可以增加 前缀后缀 和 长度,但是不能变更为其他类型
2、增加不同类型的基础类型
建表的解决办法
1、建表语句
<if test="dto.list!=null and dto.list.size()>0">
<foreach collection="dto.list" item="list" separator=",">
`${list.columnName}` ${list.type}(${list.length})
<if test="list.isNull ==1"> DEFAULT NULL </if>
<if test="list.isNull ==0"> NOT NULL DEFAULT ${list.defaultValue} </if>
COMMENT '${list.columnDesc}'
</foreach>
</if>
2、建表的字段
定义的不同类型,对应长一点
VARCHAR("500"),
TEXT(""),
// LONGTEXT(""),
// TINYINT("4"),
INT("11"),
BIGINT("20"),
DECIMAL("50,4"),
DATE(""),
DATETIME(""),
;
3、增加表的元数据表
- 元素表
- 元素表列名
application_table
`db_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '库名',
`table_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '表名称',
`table_desc` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '表描述'
application_table_column
`table_id` bigint NOT NULL DEFAULT '0' COMMENT '表id',
`column_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '列名',
`column_desc` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '列描述',
`length` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '长度',
`is_null` tinyint NOT NULL DEFAULT '0' COMMENT '是否为空(0:否 1:是)',
`category_type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '页面类型',
`type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '类型',
`default_value` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '默认值'