Database 매뉴얼 · Chapter 3
테이블 스키마 — order_history
샘플은 단일 테이블 order_history 로 모든 시연을 처리합니다. 도메인은 "조리 / 주문 작업
이력" — 음료 한 잔의 주문 시작 시각, 종료 시각, 무게(g), 결과("Done"·"NG"·"Pending") 를
한 줄로 기록합니다.
CREATE TABLE
샘플 프로젝트가 처음 실행될 때 SQLite 파일 XDatabase/LocalDB.db 가 자동 생성되며,
order_history 테이블은 미리 생성되어 있어야 합니다. DB Studio 또는 외부 SQLite
도구(DBeaver, sqlite3 CLI 등)에서 다음 DDL 을 한 번 실행해 두면 됩니다.
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
);컬럼 의미
| 컬럼 | 타입 | 의미 |
|---|---|---|
id | INTEGER PK | 자동 증가 식별자. UPDATE / DELETE 의 WHERE 키 |
order_no | TEXT | 주문번호 (O1001, O1002, …). Data::OrderSeq 가 자동 증가 |
menu_name | TEXT | 메뉴명. 샘플은 7종에서 순환 — Americano · Latte · Cappuccino · Espresso · Mocha · Green Tea · Lemonade |
start_time | TEXT | 주문 시작 시각. SYS.DateTimeString |
end_time | TEXT | 주문 종료 시각. Update 누르면 그 시점의 SYS.DateTimeString |
weight_g | REAL | 추출 무게(g). Update 시 시연용 고정값 250 |
result | TEXT | "Pending" → "Done" / "NG" |
is_error | INTEGER | 0/1 (false/true). 별도 컬럼으로 둔 이유는 결과와 에러 여부를 구분하기 위함 |
SQLite 는 동적 타입 시스템이라
INTEGER/TEXT/REAL정도만 정확히 지정해도 충분합니다. MSSQL 로 옮길 때는NVARCHAR,DATETIME2,DECIMAL(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_no | menu_name | weight_g | result | is_error |
|---|---|---|---|---|
| O1001 | Americano | 250 | Done | 0 |
| O1002 | Latte | 300 | Done | 0 |
| O1003 | Cappuccino | 280 | Done | 0 |
| O1004 | Espresso | 30 | NG | 1 |
| O1005 | Mocha | 320 | Done | 0 |
따라서 테이블만 만들어 두면 Open 한 번으로 시연 데이터까지 한 번에 준비됩니다.
테이블 변경 후 주의
- 컬럼을 추가/삭제하면
DB_Refresh의 SELECT 컬럼 목록(7장에서 다룸) 과 DataGrid 의 Columns 정의를 함께 갱신해야 합니다. WHERE id = ?패턴이 흩어져 있으므로 PK 이름은id로 유지하는 것이 가장 안전합니다.
다음 챕터로
스키마가 준비됐으면 DB Studio 에서 SQL · Data 탭 으로 직접 데이터를 확인 / 조작해 봅니다.