节约数据库空间的一个小技巧

 

在网站、管理软件的开发中,经常会碰到多选框。例如:用户可以设置自己愿意接收的邮件类型 1:从不接收 2:接收自己follow的博客的更新信息 3:接收新闻 4:接收私人信息。

 

这时我们可以选择传统的方式。定义一些字符串常量,例如:

public static final String EMAIL_OPTION_NEVER = "NEVER";
public static final String EMAIL_OPTION_FOLLOWED = "FOLLOWED";
public static final String EMAIL_OPTION_NEWS = "NEWS";
public static final String EMAIL_OPTION_PERSONAL = "PERSONAL";

 

对应的JSF页面如下:

<h:selectManyCheckbox id="optionsCheckbox" value="#{consumerAccountAction.emailOptionList}" layout="pageDirection" οnclick="clickOptionCheckbox();">
				   <f:selectItem  itemLabel="#{messages['label_emailoption_never']}" itemValue="NEVER"/>
				     <f:selectItem  itemLabel="#{messages['label_emailoption_news']}" itemValue="NEWS" />
				      <f:selectItem  itemLabel="#{messages['label_emailoption_followed']}" itemValue="FOLLOWED" />
				       <f:selectItem  itemLabel="#{messages['label_emailoption_personal']}" itemValue="PERSONAL" />
 </h:selectManyCheckbox>

 

 

假设数据库中有一个表的字段名为email_options。这样当用户选择2,3的时候, email_options中存储的数据就可能是 “FOLLOWED,NEWS”。

 

而在实际要给用户发邮件的时候,就要判断这个字段中存在的值,例如:if(emailOption.indexOf(EMAIL_OPTION_NEVER)!=-1)

 

 

上述传统的解决方案没有问题,但是数据库中存储的数据还是占用空间过多。有一种办法可以极大的降低占用空间,业务逻辑上也不会复杂。

 

重新定义常量(常量按照2的次方递增):

public static final String EMAIL_OPTION_NEVER = "1";


public static final String EMAIL_OPTION_FOLLOWED = "2";


public static final String EMAIL_OPTION_NEWS = "4";


public static final String EMAIL_OPTION_PERSONAL = "8";

 

 

 

并让字段email_options中存储的值为FOLLOWED|NEWS, 而判断的时候可以用if((emailOption&EMAIL_OPTION_NEVER)!=0).

 

 

'|' 和'&' 是位运算符。具体大家可以去google. 这样数据库中存储的仅仅是一个数字,比一长串的字符串占得空间要少得多。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值