今天设计数据库时了解到 硬编码 和 软编码,按我自己的话理解如下。
- 硬编码
- 业务逻辑写死在程序中,要改动就要改代码。
- 软编码
- 业务逻辑灵活,改动可能只需修改数据库中的某个字段,无需修改代码。
业务逻辑介绍
- 每个公司对应三种证照模式:模式1、模式2、模式3。(后续可能会扩展)
- 每种模式包含对应固定类型的几种证照。
- 每种证照都对应一个保管人。
- 用户对证照的更新操作只限于增量修改。
原本设计
将表中的一行作为数据库中的一行每个字段都一一对应。
有下列劣势:
- 不同类型的证照模式所包含的证照的维护需要依靠代码逻辑实现。
- 数据库字段太过冗长,证照、保管人可以单独抽象出来。
- 扩展性不好,要再次添加新的证照3需要重新加字段改代码,很烦。
改进后
不知道怎么回事,灵光乍现(之前确实没这方面的设计经验,有点菜),可以用关联表实现不同模式的证件控制。
- 将是否有证件、保管人抽象出来作为副表,添加type字段区分证件1、证件2等。
- 在主键中添加model字段作为模式1、模式2等的区分。
- 添加关联表,字段为model、type,并为联合主键。用于关联不同模式所持有的不同证照。
- 副表持有主表的主键作为关联。
通过这种设计,解决了原本设计中存在的问题,扩展性也得到了很好的提升。更重要的是,通过关联表实现了 软编码 ,对于证照的增量操作不在需要通过代码维护特定的关系。
总结
改进后的设计比原先的设计好太多了(个人觉得),这是我自己想出来的,感觉很有成就感。扩展性这么好,结构又这么清晰,想想就觉得很爽(虽然本身就不是多么复杂的数据结构)。