2
4

More than 5 years have passed since last update.

【設計時の見落とし】抽出処理系の考慮ついて

Last updated at Posted at 2018-12-23

はじめに

これは設計時の見落とし 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

仕様を決めておかないと、抽出範囲が異なる場合があります。
1. 0001111 ~ 9994444 の範囲内の郵便番号
2. 下4桁が、1111~4444 の範囲内の郵便番号

その他

  • 検索結果は、件数制限しても困らないのではないか (そもそも10000件も抽出されて全部見るのか、見ないよね)
  • ワイルドカード文字のみの検出可能とするのか
  • Trim処理をかけるのかどうか
  • 論理削除したのも表示可能(背景色を変えるなどする)とするのか
  • ○件単位でページ単位で一覧表示させるのか

抽出条件で一覧表示後に抽出条件項目の値を変えると、その抽出条件項目の値を参照して起動などのパラメータとして渡している場合には一覧表示とデータが不整合となる。
対応として、一覧表示後に抽出条件項目を編集不可とするか、抽出条件を保持してパラメータ引渡し時にチェックするようにする。

最新データの取得

仕様書に「最新のみをチェックオンの場合、最新のデータを取得する」とだけ書かれたものがありました。

抽出条件に日付範囲があるので、この範囲内で最新データを取得するまではいいのですが、問題は他の抽出条件を組み入れた場合です。

下記の2パターンが考えられます。
1. 複数項目の条件を抽出してから、日付範囲内の最新日を抽出する
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 該当なし

雑感

このように「最新のみ」といっても取得するデータが違ってきてしまいます。
なかなか気が付きにくい部分なので、ある程度データを入れて検証して設計していくといいでしょう。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4