今年に入って月一回ペースで実施しているローコード開発コミュニティWagby分科会の座長をつとめる贄です。今回は実践データモデリング編ということで、商品単価について深堀りしてみることにしました。
元ネタはこちら。羽生さんの本、いまもって増刷かかるとのこと、良書と思います。
1時間を目処に、次の内容を実際に Wagby (EE) でつくるとどうなるか、という具体的アプリケーションで語ります。
- 最初の設計
- 標準単価と販売単価
- 値引き前合計と値引き後合計
- 顧客別契約単価
- 期間別商品単価
- 顧客別期間別契約単価
- 顧客別期間別契約単価 - 期間の重複
最初の設計
もっともシンプルなパターンから。特にツッコミどころもなく、ここから話をはじめていきます。
明細はWagby EEの標準機能「繰り返し」を使います。商品IDや顧客IDは直接キー入力(サジェスト)も有効にしておきます。
標準単価と販売単価
商品ごとに単価があるのは当然ですが、実際にはメーカー希望小売価格と、実売価格は異なっていることが多いでしょう。そこで標準単価を参考値として表示し、注文時に実売価格を入力できるようにしました。未入力時は、標準単価がそのまま使われる、とします。
値引き前合計と値引き後合計
明細の小計から合計が導かれるわけですが、ここで「出精値引(しゅっせいねびき)」なる概念もあることを思い出したとします。合計金額から引けるようにしておきます。あ、ちなみに今回は税金については考慮外としました。
顧客別契約単価
だんだんと深みにはまっていきます。実は標準単価とは別に、お得様だけに用意した契約単価というものがありまして... という要件を盛り込んでみましょう。
このテーブル構成は Wagby で外部キー(親子モデル)となり、親子モデル用の UI も含めてアプリケーションがつくられます。
期間別商品単価
別の概念として、期間によって単価が変わるような商品もありまして... という要件を盛り込んでみましょう。
適用開始日と終了日の範囲にある価格をどう扱うか。Wagbyでは項目の値を条件によって絞り込む機能があります。SQLやプログラムなしで、設定だけでこの要件を実現する方法を説明します。
顧客別期間別契約単価
悪魔的合体です。これが読めて、Wagbyで実装できるようになれば、実業務案件もこなせるようになるはず。
上の例はわかりやすいように1テーブルにまとめましたが、分割した場合はこのようになります。
この場合、WagbyではSQLをかくか、Wagbyが提供する「スクリプト」で直接、DBから適切な値を取得するという方法を使います。多少のコードは書くので「ローコード」ですが、ここに至る前まではコードは書いていませんでした。ちなみに私はSQLは使わず、スクリプトで書く派です。
期間の重複
期間別商品単価は通常、期間の重複は排除された形でデータが事前に登録されることでしょう。しかし例えば「6月の価格」というものは登録済みの状態で、さらに「この週末だけ特別プライス」というものを急に設定したくなったら、どうしましょうか。最後に紹介するのは、有効日数という概念を導入した設計例です。複数の価格候補が見つかった場合、有効日数の短いものを優先的に選択するというアプローチを紹介します。
まとめ
Wagbyの目的は、このような業務系アプリケーションを素早く実装し、運用できること、です。当日参加するみなさまには、具体的なアプリケーションの設計情報(Wagby EE が読み込める「リポジトリ」)もお渡ししますので、どうぞ参考にしてください。