数据库中动态列的几种设计思路

简介: 本文介绍数据库中动态列的几种设计思路

在需求开发的时候,可能会碰到一种场景,在需求中,涉及的某具体业务中,属性是动态的,在条件允许的情况下,可以使用穷举法对所有可能情况进行属性分析,然后进行分类,最终可以形成一套可以解决的方案。这通常是理想情况,Leader和客户通常不会给这个时间。下面简单说明一下,这种需求的一般解决方案。


一、使用数据库DDL进行动态创建。


优点, 1:使用简单,sql管理即可实现。


缺点,显而易见,


          1:不同情况都会动态增加字段,表容易爆炸


          2:在已存在数据的表中修改字段,容易锁表,影响性能。


二、使用数据库预留字段。


优点,1:与数据库无关性,对业务侵入小


缺点,1:扩展性差,超越了预留字段还有新字段,怎么处理?


         2:可读性差,一般预留的字段都是attr1,attr2等字段,影响了字段的可读性。


          3:性能低,为兼容绝大多数数据类型,一般预留字段会采用较长的文本数据类型进行存储,比较影响数据库性能。


三、使用数据库中的json数据类型


优点,1:使用简单,绝大多数编程语言都支持json操作,方便快捷。


         2:对于mysql或者pg数据库,已原生支持json字段,可以基于json进行扩展查询。


         3、json使用key:value形式存储数据,可避免字段可读性差的问题,通过规范命名提高可读性。


          4、扩展性高,增加或者删除某字段,实现简单,直接移除key即可,不涉及表性能。


缺点,1:json字段查询操作,与普通字段稍有差异,有一定复杂度。


       2:json字段的索引性能有待提高。


四、使用NOSQL


优点,1:采用mongoDb等json数据库,可以快速扩展。


         2:专业数据存储,查询等性能可针对优化,性能高


缺点,1:需要一定学习成本。



综上,第一种和第二种,无非必要,强烈不建议采用这种方案。第三种方案在中小项目中能应对绝大多数需求,如果存储的数据比较多,同时性能要求比较高,可以采用第四种或者三、四两种相结合。


您的项目中,会采用什么办法来解决这种需求呢?欢迎关注交流。


目录
相关文章
|
5月前
|
数据库 索引
评论功能里数据库的设计
【4月更文挑战第2天】本文探讨了评论系统的树形结构设计,提出了四种方法:邻接表、分段式path、Nested Set和Closure Table。针对评论业务功能,如加载评论页和查看回复,优先考虑邻接表和分段式path。采用邻接表思路,设计了评论表结构,包括Uid、Biz、BizID、RootID、PID、Content、索引和级联删除规则。同时提到了索引设计,如Uid、Biz+BizID、PID和Ctime/Utime,以优化查询性能。
114 3
|
5月前
|
算法 关系型数据库 数据库
关系型数据库表结构设计选择合适的主键
【5月更文挑战第13天】关系型数据库表结构设计选择合适的主键
66 3
|
5月前
|
存储 SQL 数据库
数据库库表结构设计:原理、实例与最佳实践
数据库库表结构设计:原理、实例与最佳实践
1742 0
|
数据库 索引
数据库 - 索引 设计与使用 原则
数据库 - 索引 设计与使用 原则
66 0
|
5月前
|
SQL 缓存 中间件
数据库为什么都设计为单表
数据库为什么都设计为单表
58 0
|
存储 数据库 索引
数据库视频第五章操作架构、视图和索引
数据库视频第五章操作架构、视图和索引
|
存储 数据库
数据库视频第四章 数据表管理
数据库视频第四章 数据表管理
|
存储 SQL 安全
数据库的视图与索引经典题
数据库的视图与索引经典题
238 0
|
SQL 缓存 NoSQL
数据库分库分表详细拆解
数据库分库分表详细拆解
272 0
数据库分库分表详细拆解
|
SQL 存储 Oracle
34. 谈谈为什么要拆分数据库?有哪些方法?
34. 谈谈为什么要拆分数据库?有哪些方法?
152 0
34. 谈谈为什么要拆分数据库?有哪些方法?
下一篇
无影云桌面