はじめに
これは設計時の見落とし Advent Calendar 2018の22日目の記事となります。
業務アプリケーションの設計をするときに、見落としがちなところに焦点をあてて紹介します。
下流工程からの手戻りを少なくして 双方の負担を減らしましょう。
今回は抽出処理系の考慮についてに2点挙げてみます。
条件指定の考慮点
検索時のFrom-To指定時のパターン 両方必須、片方のみ等
- 片方が未入力の場合、どうするのか
- From が入力されたら To に同値をセットするのか
- From が未入力なら最小値、To が未入力なら最大値をセットするのか
※ちなみに日付の最大値を入力した場合に、OSの日付型上 9998/12/31 が最大となるため、9999/99/99 には出来ません。
複数チェックボックスがあった場合、何も未チェックなら 全てと扱うのか
未入力はSQLのWHERE句から外すとした場合、ゴミデータが混在する場合があります。
運用上ゴミデータはありえないとさせるか、SQLにてWHERE句でIN句などで指定する必要があります。
検索時のFrom-To指定時のパターン2 キーを分離時
例として郵便番号を挙げますが、値として1つに格納している場合、下4桁を入力した検索をした場合は注意が必要です。
Fm1 | - | Fm2 | ~ | To1 | - | To2 |
---|---|---|---|---|---|---|
- | 1111 | ~ | - | 4444 |
仕様を決めておかないと、抽出範囲が異なる場合があります。
- 0001111 ~ 9994444 の範囲内の郵便番号
- 下4桁が、1111~4444 の範囲内の郵便番号
その他
- 検索結果は、件数制限しても困らないのではないか (そもそも10000件も抽出されて全部見るのか、見ないよね)
- ワイルドカード文字のみの検出可能とするのか
- Trim処理をかけるのかどうか
- 論理削除したのも表示可能(背景色を変えるなどする)とするのか
- ○件単位でページ単位で一覧表示させるのか
抽出条件で一覧表示後に抽出条件項目の値を変えると、その抽出条件項目の値を参照して起動などのパラメータとして渡している場合には一覧表示とデータが不整合となる。
対応として、一覧表示後に抽出条件項目を編集不可とするか、抽出条件を保持してパラメータ引渡し時にチェックするようにする。
最新データの取得
仕様書に「最新のみをチェックオンの場合、最新のデータを取得する」とだけ書かれたものがありました。
抽出条件に日付範囲があるので、この範囲内で最新データを取得するまではいいのですが、問題は他の抽出条件を組み入れた場合です。
下記の2パターンが考えられます。
- 複数項目の条件を抽出してから、日付範囲内の最新日を抽出する
- 日付範囲内の最新日を抽出してから、複数項目の条件を抽出する
データ例
顧客No | 日付 | 区分1 | 区分2 |
---|---|---|---|
1 | 2018/12/03 | 3 | A |
1 | 2018/12/04 | 3 | B |
1 | 2018/12/05 | 1 | C |
2 | 2018/12/03 | 3 | D |
2 | 2018/12/04 | 2 | E |
2 | 2018/12/05 | 3 | F |
3 | 2018/12/03 | 5 | G |
3 | 2018/12/05 | 2 | H |
3 | 2018/12/06 | 4 | I |
抽出項目 | 抽出条件 |
---|---|
顧客番号 | 1 ~ 3 |
日付範囲 | 2018/12/03 ~ 2018/12/05 |
区分1 | 3~5 |
区分2 | A~Z |
1. 複数項目の条件を抽出してから、日付範囲内の最新日を抽出する
顧客No | 日付 | 区分1 | 区分2 |
---|---|---|---|
1 | 2018/12/04 | 3 | B |
2 | 2018/12/05 | 3 | F |
3 | 2018/12/03 | 5 | G |
2. 日付範囲内の最新日を抽出してから、複数項目の条件を抽出する
顧客No | 日付 | 区分1 | 区分2 |
---|---|---|---|
1 | 該当なし | ||
2 | 2018/12/05 | 3 | F |
3 | 該当なし |
雑感
このように「最新のみ」といっても取得するデータが違ってきてしまいます。
なかなか気が付きにくい部分なので、ある程度データを入れて検証して設計していくといいでしょう。