第41回Wagby分科会 実践データモデリング - 単価の設計

今年に入って月一回ペースで実施しているローコード開発コミュニティWagby分科会の座長をつとめる贄です。今回は実践データモデリング編ということで、商品単価について深堀りしてみることにしました。

wagby.com

元ネタはこちら。羽生さんの本、いまもって増刷かかるとのこと、良書と思います。

www.amazon.co.jp

1時間を目処に、次の内容を実際に Wagby (EE) でつくるとどうなるか、という具体的アプリケーションで語ります。

  • 最初の設計
  • 標準単価と販売単価
  • 値引き前合計と値引き後合計
  • 顧客別契約単価
  • 期間別商品単価
  • 顧客別期間別契約単価
  • 顧客別期間別契約単価 - 期間の重複

最初の設計

もっともシンプルなパターンから。特にツッコミどころもなく、ここから話をはじめていきます。

f:id:ynie:20210628084842j:plain
最初の設計

明細はWagby EEの標準機能「繰り返し」を使います。商品IDや顧客IDは直接キー入力(サジェスト)も有効にしておきます。

標準単価と販売単価

商品ごとに単価があるのは当然ですが、実際にはメーカー希望小売価格と、実売価格は異なっていることが多いでしょう。そこで標準単価を参考値として表示し、注文時に実売価格を入力できるようにしました。未入力時は、標準単価がそのまま使われる、とします。

f:id:ynie:20210628085219j:plain
標準単価と販売単価

値引き前合計と値引き後合計

明細の小計から合計が導かれるわけですが、ここで「出精値引(しゅっせいねびき)」なる概念もあることを思い出したとします。合計金額から引けるようにしておきます。あ、ちなみに今回は税金については考慮外としました。

f:id:ynie:20210628085505j:plain
値引き前合計と値引き後合計

顧客別契約単価

だんだんと深みにはまっていきます。実は標準単価とは別に、お得様だけに用意した契約単価というものがありまして... という要件を盛り込んでみましょう。

f:id:ynie:20210628085621j:plain
顧客別契約単価

このテーブル構成は Wagby で外部キー(親子モデル)となり、親子モデル用の UI も含めてアプリケーションがつくられます。

期間別商品単価

別の概念として、期間によって単価が変わるような商品もありまして... という要件を盛り込んでみましょう。

f:id:ynie:20210628085755j:plain
期間別商品単価

適用開始日と終了日の範囲にある価格をどう扱うか。Wagbyでは項目の値を条件によって絞り込む機能があります。SQLやプログラムなしで、設定だけでこの要件を実現する方法を説明します。

顧客別期間別契約単価

悪魔的合体です。これが読めて、Wagbyで実装できるようになれば、実業務案件もこなせるようになるはず。

f:id:ynie:20210628090018j:plain
顧客別期間別契約単価

上の例はわかりやすいように1テーブルにまとめましたが、分割した場合はこのようになります。

f:id:ynie:20210628090931j:plain
期間別商品単価と顧客別契約単価

この場合、WagbyではSQLをかくか、Wagbyが提供する「スクリプト」で直接、DBから適切な値を取得するという方法を使います。多少のコードは書くので「ローコード」ですが、ここに至る前まではコードは書いていませんでした。ちなみに私はSQLは使わず、スクリプトで書く派です。

期間の重複

期間別商品単価は通常、期間の重複は排除された形でデータが事前に登録されることでしょう。しかし例えば「6月の価格」というものは登録済みの状態で、さらに「この週末だけ特別プライス」というものを急に設定したくなったら、どうしましょうか。最後に紹介するのは、有効日数という概念を導入した設計例です。複数の価格候補が見つかった場合、有効日数の短いものを優先的に選択するというアプローチを紹介します。

f:id:ynie:20210628091310j:plain
期間の重複

まとめ

Wagbyの目的は、このような業務系アプリケーションを素早く実装し、運用できること、です。当日参加するみなさまには、具体的なアプリケーションの設計情報(Wagby EE が読み込める「リポジトリ」)もお渡ししますので、どうぞ参考にしてください。

Wagby Developer Day 2021