-- 021_plan_network.sql -- 예정노선 2단계 노선 정본 — 손으로 그은 선 · 갈래 · 구역 마크 · 조각(구역 × 갈래) (요구 389 · 391 · PLAN 562-2) -- -- 추가만 함 — plan_route_years 는 조각에서 만든 연도 행으로 그대로 둠(아래 단계가 읽음). USE aislo_db; CREATE TABLE IF NOT EXISTS plan_networks ( project_id CHAR(36) NOT NULL PRIMARY KEY COMMENT 'projects.id (PLAN)', network_json JSON NOT NULL COMMENT '{epsg, lines, marks, pieces} — 길이 · 측점 · 높이는 저장 안 함', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT fk_plan_networks_project FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='예정노선 노선 정본'; CREATE TABLE IF NOT EXISTS plan_route_pieces ( project_id CHAR(36) NOT NULL COMMENT 'projects.id (PLAN)', piece_id VARCHAR(64) NOT NULL COMMENT '조각 id(network_json.pieces.id)', line_id VARCHAR(64) NOT NULL COMMENT '선 id(본선 · 갈래)', year INT NOT NULL, from_m DOUBLE NOT NULL COMMENT '선 위 시작 거리(선마다 No.0 부터)', to_m DOUBLE NOT NULL, length_m DOUBLE NOT NULL, epsg INT NOT NULL, route_json JSON NOT NULL COMMENT '{planned: [[x, y]…], stations: [m…]}', fingerprint CHAR(40) NOT NULL COMMENT '조각 내용 지문(sha1)', updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (project_id, piece_id), KEY idx_plan_route_pieces_year (project_id, year), CONSTRAINT fk_plan_route_pieces_project FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='예정노선 조각(구역 × 갈래)'; -- 업체 지정 = 조각 단위(요구 391) — NULL = 옛 연도 단위 지정 ALTER TABLE plan_route_assignees ADD COLUMN IF NOT EXISTS piece_id VARCHAR(64) NULL COMMENT 'plan_route_pieces.piece_id' AFTER year, ADD INDEX IF NOT EXISTS idx_plan_route_assignees_piece (project_id, piece_id);