在需求开发的时候,可能会碰到一种场景,在需求中,涉及的某具体业务中,属性是动态的,在条件允许的情况下,可以使用穷举法对所有可能情况进行属性分析,然后进行分类,最终可以形成一套可以解决的方案。这通常是理想情况,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:需要一定学习成本。
综上,第一种和第二种,无非必要,强烈不建议采用这种方案。第三种方案在中小项目中能应对绝大多数需求,如果存储的数据比较多,同时性能要求比较高,可以采用第四种或者三、四两种相结合。
您的项目中,会采用什么办法来解决这种需求呢?欢迎关注交流。