• データベース
#22

宅配弁当を例にとってDBを考える

弁当宅配サービスを例にとる

考える事項

  • 賞味期限
    • ロットナンバー(製造番号)で管理
    • 基本的にリードタイムおよび賞味期限が短いものから先に出荷する
    • 何らかの理由で賞味期限が前後したものが納品される可能性を考慮する
    • 在庫のロス(廃棄)や納品物の不良があるので、賞味期限以外の在庫が減る理由が存在する ​

DBの目的

  • ロットナンバーで追跡したい
  • 製造者責任 ​

  • 廃棄マスタは必要か?
    • きれいにやるならあってもよいが、工数を考えて注文テーブルの届け先カラムに「廃棄」、備考に廃棄理由を書いて対応するのも一手 ​

注文テーブル

id注文日届け日商品id数量届け先ロットNo.区分備考
120031420031614hoge200301注文-
2200315200316122-廃棄不良
1200316200317110fuga200301,200305注文-
在庫数量の関係で、使用する在庫数によってはロットNoが複数またく可能性あり

入庫テーブル

id注文idロットNo.
1120030110
2120030120
3120030510
412003015​
ロットNo(賞味期限)が前後して入荷する可能性がある
および、賞味期限が短い方から出荷する必要がある

商品マスタ

id品名カロリー材料
1惣菜200きゅうり、にんじん
2コロッケ430じゃがいも​

処理速度を考えなかったら

  1. まずロットナンバー順に納品される
  2. 注文データを見て出荷する
  3. 在庫が増減する ​ ​

  • 商品マスタ
id品名
1ハンバーグ
2カレー
3ラーメン

  • 入庫データ(工場から倉庫)
日付商品idロット
03141A0314100
03142B0314100
03143C0314100

  • 出庫データ(注文データ)
日付商品id届け先届け日
0314110-0316
0314210-0316

DBについての考え方

検索、並べ替えのときに使う情報を保存する

SQLに色々とやらせる宗派と、SQLは極力シンプルにしてプログラムに色々とやらせる宗派があるが、

後者の方が良いのではないかと考えている


課題

グーグルカレンダーをベースにどんなテーブル構造なのか想像してみる

作成したモデル

Dateマスタ

  • id
  • Year
  • Month
  • Date
  • 曜日
  • timezone
  • time

スケジュールマスタ

  • id
  • start_date
  • end_date
  • f_終日
  • f_loop
  • loop_genre
  • location
  • f_video
  • f_alert1~5
  • alert_timing1~5
  • user
  • marker
  • schedule_genre
  • pub_setting
  • memo
  • created_at
  • updated_at
  • deleted_at
  • f_guest
  • guest_id
  • guest_permission
  • permission_setting

カレンダーマスタ

  • id
  • name
  • description
  • time_zone
  • created_at
  • updated_at
  • deleted_at

ユーザマスタ

  • id
  • user_name
  • email
  • created_at
  • deleted_at

ユーザ設定マスタ

  • id
  • display_space
  • color
  • theme ...

スケジュールジャンルマスタ

  • id
  • genre_name
  • created_at
  • updated_at
  • deleted_at

マーカーマスタ

  • id
  • marker_name
  • color
  • creadted_at
  • updated_at
  • deleted_at
*

last update: 2023/10/21