Database マニュアル · Chapter 3

テーブルスキーマ — order_history

サンプルは 単一テーブル order_history でデモをすべて処理します。ドメインは「調理 / オーダー作業履歴」 — 一杯の飲料のオーダー開始時刻、終了時刻、重量(g)、結果(「Done」・「NG」・「Pending」)を 1 行で記録します。

CREATE TABLE

サンプルプロジェクトを初回実行すると SQLite ファイル XDatabase/LocalDB.db が自動生成されますが、order_history テーブルは事前に作っておく必要があります。DB Studio または外部の SQLite ツール(DBeaver、sqlite3 CLI 等)で次の DDL を 1 回実行しておけば OK です。

CREATE TABLE IF NOT EXISTS order_history (
  id          INTEGER PRIMARY KEY AUTOINCREMENT,
  order_no    TEXT    NOT NULL,
  menu_name   TEXT    NOT NULL,
  start_time  TEXT,
  end_time    TEXT,
  weight_g    REAL    DEFAULT 0,
  result      TEXT    DEFAULT 'Pending',
  is_error    INTEGER DEFAULT 0
);

カラム意味

カラム意味
idINTEGER PK自動採番識別子。UPDATE / DELETE の WHERE キー
order_noTEXTオーダー番号(O1001O1002、…)。Data::OrderSeq が自動加算
menu_nameTEXTメニュー名。サンプルは 7 種でローテーション — Americano · Latte · Cappuccino · Espresso · Mocha · Green Tea · Lemonade
start_timeTEXTオーダー開始時刻。SYS.DateTimeString
end_timeTEXTオーダー終了時刻。Update 押下時の SYS.DateTimeString
weight_gREAL抽出重量(g)。Update 時はデモ用固定値 250
resultTEXT"Pending""Done" / "NG"
is_errorINTEGER0/1(false/true)。結果とエラー有無を区別するためカラムを分離

SQLite は動的型システムなので INTEGER / TEXT / REAL 程度の指定で十分。MSSQL に移すときは NVARCHARDATETIME2DECIMAL(10,3) 等の厳格な型に再定義してください。

空テーブルなら 5 行を自動投入

Data::DB_Open() は接続直後に行数を確認し、0 なら DB_InsertInitialSamples() を呼んで学習用の 5 行をトランザクションで一括 INSERT します。

// Data.xms 抜粋
int rowCnt = DB["local"].RunSqlScalarInt("SELECT COUNT(*) FROM order_history");
if( rowCnt == 0 )
{
   Log($"order_history is empty, insert initial 5 samples");
   DB_InsertInitialSamples();
}

DB_InsertInitialSamples のプール(pool)データ:

order_nomenu_nameweight_gresultis_error
O1001Americano250Done0
O1002Latte300Done0
O1003Cappuccino280Done0
O1004Espresso30NG1
O1005Mocha320Done0

したがって テーブルさえ作っておけば、Open 1 回でデモデータまで準備が整います。

テーブル変更時の注意

  • カラム追加 / 削除をしたら、DB_Refresh の SELECT カラムリスト(第 7 章)と DataGrid の Columns 定義も合わせて更新してください。
  • WHERE id = ? パターンが各所に散らばっているため、主キー名は id のまま維持するのが最も安全です。

次の章へ

スキーマができたら、DB Studio の SQL · Data タブ でデータを直接確認 / 操作してみます。