数据库设计有感——1

今天设计数据库时了解到 硬编码软编码,按我自己的话理解如下。

  • 硬编码
    • 业务逻辑写死在程序中,要改动就要改代码。
  • 软编码
    • 业务逻辑灵活,改动可能只需修改数据库中的某个字段,无需修改代码。

业务逻辑介绍

  1. 每个公司对应三种证照模式:模式1、模式2、模式3。(后续可能会扩展)
  2. 每种模式包含对应固定类型的几种证照。
  3. 每种证照都对应一个保管人。
  4. 用户对证照的更新操作只限于增量修改。
    业务图片展示

原本设计

将表中的一行作为数据库中的一行每个字段都一一对应。
有下列劣势:

  • 不同类型的证照模式所包含的证照的维护需要依靠代码逻辑实现。
  • 数据库字段太过冗长,证照、保管人可以单独抽象出来。
  • 扩展性不好,要再次添加新的证照3需要重新加字段改代码,很烦。
改进后

不知道怎么回事,灵光乍现(之前确实没这方面的设计经验,有点菜),可以用关联表实现不同模式的证件控制。

  • 将是否有证件、保管人抽象出来作为副表,添加type字段区分证件1、证件2等。
  • 在主键中添加model字段作为模式1、模式2等的区分。
  • 添加关联表,字段为model、type,并为联合主键。用于关联不同模式所持有的不同证照。
  • 副表持有主表的主键作为关联。

通过这种设计,解决了原本设计中存在的问题,扩展性也得到了很好的提升。更重要的是,通过关联表实现了 软编码 ,对于证照的增量操作不在需要通过代码维护特定的关系。


总结

改进后的设计比原先的设计好太多了(个人觉得),这是我自己想出来的,感觉很有成就感。扩展性这么好,结构又这么清晰,想想就觉得很爽(虽然本身就不是多么复杂的数据结构)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值