SQL の Where 句のデータベース設計に取り組んでいます。私のアプリケーションは、エンド ユーザーが SQL の where 句を指定できるようにするワークフロー エンジンです。現在、私のアプリケーションは次のように where 句の作成をサポートしています。
<input type="text" name="clause-name" placeholder="condition name here" />
<br/>
<br/>
<input type="radio" name="where">Complex</input>
<br/>
<div style="display:inline-block">
<select>
<option value="1">ch4 ≥ 1.5</option>
<option value="2">locality = chino</option>
<option value="3">postal_code like [0-9]{5}</option>
<option value="4">date ≤ 2015-12-31</option>
<option value="5">chino and ch4</option>
<option value="6">postalcode and date</option>
<option value="7">chino or postalcode</option>
</select>
<select>
<option>AND</option>
<option>OR</option>
</select>
<select>
<option value="1">ch4 ≥ 1.5</option>
<option value="2">locality = chino</option>
<option value="3">postal_code like [0-9]{5}</option>
<option value="4">date ≤ 2015-12-31</option>
<option value="5">chino and ch4</option>
<option value="6">postalcode and date</option>
<option value="7">chino or postalcode</option>
</select>
</div>
<br/>
<input type="radio" name="where">Simple</input>
<br/>
<div style="display:inline-block">
<select>
<option>ch4</option>
<option>locality</option>
<option>postal_code</option>
<option>date</option>
</select>
<select>
<option>≤</option>
<option><</option>
<option>≥</option>
<option>></option>
<option>≠</option>
<option>=</option>
<option>like</option>
</select>
<input type="text" placeholder="value here" />
</div>
<br/>
<br/>
<button>Create Condition</button>
他のページには、作成した句を選択する選択ドロップダウンがあります。問題は、このシナリオ用に設計したデータベース テーブルです。現在は以下のとおりです。
WhereTable(id, name, feature, op, value, condition1, jointype, condition2)
それid
は主キーでありcondition1, condition2
、自分自身の外部キーです。条件のサンプル テーブルは(ch4 >= 1.5 and locality = chino) or (postal_code like [0-9]{5} and date <= 2015-12-31)
次のようになります。
table, th, td{
border: 1px solid black;
}
<table>
<tr>
<th>id</th>
<th>name</th>
<th>feature</th>
<th>op</th>
<th>value</th>
<th>condition1</th>
<th>jointype</th>
<th>condition2</th>
</tr>
<tr>
<td>1</td>
<td>ch4≥1.5</td>
<td>ch4</td>
<td>>=</td>
<td>1.5</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>2</td>
<td>locality=chino</td>
<td>locality</td>
<td>=</td>
<td>chino</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>3</td>
<td>postal_code like [0-9]{5}</td>
<td>postal_code</td>
<td>like</td>
<td>[0-9]{5}</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>4</td>
<td>date≤2015-12-31</td>
<td>date</td>
<td><=</td>
<td>2015-12-31</td>
<td>null</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>5</td>
<td>chino and ch4</td>
<td>null</td>
<td>null</td>
<td>null</td>
<td>1</td>
<td>and</td>
<td>2</td>
</tr>
<tr>
<td>6</td>
<td>postalcode and date</td>
<td>null</td>
<td>null</td>
<td>null</td>
<td>3</td>
<td>and</td>
<td>4</td>
</tr>
<tr>
<td>7</td>
<td>chino or postalcode</td>
<td>null</td>
<td>null</td>
<td>null</td>
<td>5</td>
<td>or</td>
<td>6</td>
</tr>
</table>
このテーブル設計を最適化して null 値を減らす方法はありますか? データベース サーバーとして MySQL を使用しています。