一、现有数据库表无法满足需求
1、我们自己设计的表
1.1、硬编码
这个就麻烦了,如果需求困难的话你就痛苦了。
1.2、补充字段
这个好说,需求明确的话我们直接往表中插入一个字段就OK。记得把相应的添加字段的sql记录下来,别浪费时间。
1.3、建立新的表
这个一般都比较少见,但是也有经历过。
2、框架自带的表
面对这种情况,毫无疑问我们是不能更改的,除非你可以改变框架源码,不过时间成本也不允许你这样做。那满足不了需求,这可该如何是好?扩展吧,那又该如何扩展呢?建立关联关系,把关键要素放到一个或多个新建的表中。问题又来了,那什么是关键要素?就是主键外键的关联关系,通俗点就是id与id之间的关系,这些元素是最主要最根本的。那要怎么样建立表呢?这又回到了建表的问题上了。怎么样建表,首先要考虑它们之间的关系,究竟是一对一还是一对多,同时还要考虑到三大范式。
举个例子:Activiti的任务表act_ru_task,也就是框架表。在需求需要跟踪任务的各个状态,并且展示给前端界面时,这时的act_ru_task就满足不了需求了。那就建立表吧,那关键元素是什么?答案第一个肯定是任务id,想着id与id之间的关系,于是另一个就是自己建立表的主键id,还有就是需求的状态status了。任务对任务,没有存在父子关系,没有其它复杂成分,单纯的一对一关系。当然自定义的任务表还有其它元素,具体需要根据自己实际情景而定。另外值得注意的是,对于多种状态,要么选择枚举维护,要么选择常量类去维护。
二、基类保留扩展字段
这种情况也还是比较常用的解决方案,因为类的属性明确的你可以直接为类封装,但是存在不明确可能会增加等的情况,我们就要考虑到该类的扩展性。但是这个不明确中又存在明确性,那么我们可以在基类上添加一个扩展字段。那么是什么样子的呢?你想一下类的属性,一般都是getXXX与setXXX,与之类似的就是map的put与get了。那么扩展字段的类型常见的就是Map<String, Object>,List<对象>等等。