データベーススペースを節約するための小さなテクニック

2324 ワード


Webサイトや管理ソフトウェアの開発では、多くの選択肢に遭遇することが多い.例えば、ユーザは、自分が受信したいメールタイプを設定することができる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" onclick="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に行ってもいいです.このように、データベースに格納されているのは1つの数字だけで、長い文字列よりもスペースが少なくなります.