用于保存对象boolean属性的两种数据设计方案

需求很简单:
  • 1:一个对象,它对应数据库中的一条记录。
  • 2:这个对象可能有很多boolean属性,例如isXX1, isXX2, isXX3,isXX4(但是有限,未来还可能增加)。
  • 3:这个对象的这些属性在应用中可能被频繁的更新。
设计方案
方案1:
  • 对象主表,用于保存对象常规属性,例如,id,name等等。
  • 对象boolean属性表,跟对象主表外键关联。
方案2:
  • 对象主表中多一个字段bool_status
  • 用二进制的byte来表示对象的boolean属性
  • 例如:isXX1 = 1, isXX2 = 2, isXX3=4, isXX4=8, isXX5=16
  • 然后bool_status存放所有boolean属性之和。
  • 例如对象A拥有issXX1=true, isXX2=true,那么这个对象在数据库中bool_status的值就是3
  • 例如对象b拥有issXX1=true, isXX5=true,那么这个对象在数据库中bool_status的值就是17

简单分析利弊:
对于一个对象查询:
  • 方案1:需要2条sql才能查出一个对象
  • 方案2:一条sql就可以查出一个对象
对于一个对象插入:
  • 方案1:一定是1+cont(boolan_attr=true)条insert sql
  • 方案2:一条update sql
对于一个对象boolean属性的更新:
  • 方案1:1条delete+cont(boolan_attr)条insert sql
  • 方案2:一条sql就可以更新
对于一个对象的删除,都暂不考虑记录历史
  • 方案1:1条delete主表+1条delete bool属性表
  • 方案2:1条delete主表
对于空间占用:
  • 明显方案2占的数据库空间比方案1少。

通过上面的分析好像天平已经很明显倒向了方案2.但是方案2也有一些弊端
  • 1:对于统计不是很友好,例如针对统计对象的没个属性进行统计,某些属性的组合进行统计,那么对于方案2就不得不对表中所有的bool_status进行&计算,这个不利于数据库运用索引。
  • 2:如果一个对象的boolean属性有很多是true那么bool_status这个值望望会令人不知所云,一定要应用程序decode才能看出来这个对象到底那些boolean属性是true。
我更倾向于方案1,因为它更清晰,插入和更新的效率虽然不如方案2,但是我更看重程序设计的清晰性,不知道大家有什么见解?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值