CM93 MySQL importer validated baseline
This commit is contained in:
281
sql/001_schema_mysql57.sql
Normal file
281
sql/001_schema_mysql57.sql
Normal file
@@ -0,0 +1,281 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_dataset (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
source_type VARCHAR(16) NOT NULL DEFAULT 'CM93',
|
||||
name VARCHAR(255) NOT NULL,
|
||||
source_root TEXT NOT NULL,
|
||||
source_fingerprint CHAR(64) NULL,
|
||||
parser_version VARCHAR(32) NOT NULL,
|
||||
normalized_srid INT UNSIGNED NOT NULL DEFAULT 4326,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_dataset_source_type (source_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_dictionary_object (
|
||||
dataset_id BIGINT UNSIGNED NOT NULL,
|
||||
object_class_id SMALLINT UNSIGNED NOT NULL,
|
||||
object_class VARCHAR(16) NOT NULL,
|
||||
geometry_code VARCHAR(8) NULL,
|
||||
display_code VARCHAR(8) NULL,
|
||||
description VARCHAR(255) NULL,
|
||||
raw_line TEXT NOT NULL,
|
||||
PRIMARY KEY (dataset_id, object_class_id),
|
||||
KEY idx_dict_object_class (object_class),
|
||||
CONSTRAINT fk_dict_object_dataset FOREIGN KEY (dataset_id)
|
||||
REFERENCES chart_dataset(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_dictionary_attribute (
|
||||
dataset_id BIGINT UNSIGNED NOT NULL,
|
||||
attribute_id SMALLINT UNSIGNED NOT NULL,
|
||||
attribute_name VARCHAR(16) NOT NULL,
|
||||
source_type_name VARCHAR(32) NOT NULL,
|
||||
decoder_type CHAR(1) NOT NULL,
|
||||
min_value DOUBLE NULL,
|
||||
max_value DOUBLE NULL,
|
||||
raw_line TEXT NOT NULL,
|
||||
PRIMARY KEY (dataset_id, attribute_id),
|
||||
KEY idx_dict_attribute_name (attribute_name),
|
||||
CONSTRAINT fk_dict_attr_dataset FOREIGN KEY (dataset_id)
|
||||
REFERENCES chart_dataset(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_cell (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
dataset_id BIGINT UNSIGNED NOT NULL,
|
||||
source_relative_path VARCHAR(1024) NOT NULL,
|
||||
source_file_name VARCHAR(255) NOT NULL,
|
||||
source_size BIGINT UNSIGNED NOT NULL,
|
||||
source_sha256 CHAR(64) NULL,
|
||||
scale_code CHAR(1) NOT NULL,
|
||||
native_scale INT UNSIGNED NOT NULL,
|
||||
cell_name VARCHAR(64) NOT NULL,
|
||||
|
||||
prolog_word0 INT UNSIGNED NULL,
|
||||
table1_length BIGINT UNSIGNED NULL,
|
||||
table2_length BIGINT UNSIGNED NULL,
|
||||
|
||||
easting_min DOUBLE NULL,
|
||||
northing_min DOUBLE NULL,
|
||||
easting_max DOUBLE NULL,
|
||||
northing_max DOUBLE NULL,
|
||||
|
||||
bbox_min_lon DOUBLE NULL,
|
||||
bbox_min_lat DOUBLE NULL,
|
||||
bbox_max_lon DOUBLE NULL,
|
||||
bbox_max_lat DOUBLE NULL,
|
||||
|
||||
vector_record_count INT UNSIGNED NULL,
|
||||
vector_point_count BIGINT UNSIGNED NULL,
|
||||
point2d_count INT UNSIGNED NULL,
|
||||
point3d_count INT UNSIGNED NULL,
|
||||
feature_count INT UNSIGNED NULL,
|
||||
attribute_count BIGINT UNSIGNED NULL,
|
||||
|
||||
import_status ENUM('DISCOVERED','IMPORTING','DONE','FAILED') NOT NULL DEFAULT 'DISCOVERED',
|
||||
error_message TEXT NULL,
|
||||
imported_at DATETIME NULL,
|
||||
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_cell_dataset_path (dataset_id, source_relative_path(255)),
|
||||
KEY idx_cell_scale (dataset_id, scale_code),
|
||||
KEY idx_cell_status (dataset_id, import_status),
|
||||
CONSTRAINT fk_cell_dataset FOREIGN KEY (dataset_id)
|
||||
REFERENCES chart_dataset(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_coverage (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
dataset_id BIGINT UNSIGNED NOT NULL,
|
||||
cell_id BIGINT UNSIGNED NOT NULL,
|
||||
source_record_index INT UNSIGNED NOT NULL,
|
||||
object_class_id SMALLINT UNSIGNED NOT NULL,
|
||||
compilation_scale INT UNSIGNED NULL,
|
||||
horizontal_datum INT NULL,
|
||||
vertical_datum INT NULL,
|
||||
wgsox DOUBLE NULL,
|
||||
wgsoy DOUBLE NULL,
|
||||
attributes_json JSON NULL,
|
||||
geom GEOMETRY NOT NULL,
|
||||
geometry_repaired TINYINT(1) NOT NULL DEFAULT 0,
|
||||
geometry_issue VARCHAR(255) NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_cov_cell_record (cell_id, source_record_index),
|
||||
KEY idx_cov_cell (cell_id),
|
||||
SPATIAL KEY spx_cov_geom (geom),
|
||||
CONSTRAINT fk_cov_dataset FOREIGN KEY (dataset_id)
|
||||
REFERENCES chart_dataset(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_cov_cell FOREIGN KEY (cell_id)
|
||||
REFERENCES chart_cell(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_feature (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
dataset_id BIGINT UNSIGNED NOT NULL,
|
||||
cell_id BIGINT UNSIGNED NOT NULL,
|
||||
coverage_id BIGINT UNSIGNED NULL,
|
||||
source_record_index INT UNSIGNED NOT NULL,
|
||||
|
||||
object_class_id SMALLINT UNSIGNED NULL,
|
||||
object_class VARCHAR(16) NOT NULL,
|
||||
geometry_type ENUM('POINT','LINE','AREA','SOUNDING','META','UNKNOWN') NOT NULL,
|
||||
|
||||
scale_code CHAR(1) NOT NULL,
|
||||
native_scale INT UNSIGNED NOT NULL,
|
||||
|
||||
raw_geotype SMALLINT UNSIGNED NULL,
|
||||
normalized_srid INT UNSIGNED NOT NULL DEFAULT 4326,
|
||||
|
||||
bbox_min_lon DOUBLE NULL,
|
||||
bbox_min_lat DOUBLE NULL,
|
||||
bbox_max_lon DOUBLE NULL,
|
||||
bbox_max_lat DOUBLE NULL,
|
||||
|
||||
attributes_json JSON NULL,
|
||||
raw_feature_blob MEDIUMBLOB NULL,
|
||||
raw_attribute_blob MEDIUMBLOB NULL,
|
||||
|
||||
geometry_repaired TINYINT(1) NOT NULL DEFAULT 0,
|
||||
geometry_issue VARCHAR(255) NULL,
|
||||
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_feature_cell_record (cell_id, source_record_index),
|
||||
KEY idx_feature_class (dataset_id, object_class),
|
||||
KEY idx_feature_scale (dataset_id, native_scale),
|
||||
KEY idx_feature_cell (cell_id),
|
||||
KEY idx_feature_coverage (coverage_id),
|
||||
CONSTRAINT fk_feature_dataset FOREIGN KEY (dataset_id)
|
||||
REFERENCES chart_dataset(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_feature_cell FOREIGN KEY (cell_id)
|
||||
REFERENCES chart_cell(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_feature_coverage FOREIGN KEY (coverage_id)
|
||||
REFERENCES chart_coverage(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_feature_attribute (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
feature_id BIGINT UNSIGNED NOT NULL,
|
||||
ordinal_no SMALLINT UNSIGNED NOT NULL,
|
||||
attribute_id SMALLINT UNSIGNED NOT NULL,
|
||||
attribute_name VARCHAR(16) NOT NULL,
|
||||
value_type ENUM('BYTE','INT','LONG','REAL','WORD10','STRING','LIST','COMPLEX','UNKNOWN') NOT NULL,
|
||||
value_int BIGINT NULL,
|
||||
value_real DOUBLE NULL,
|
||||
value_text TEXT NULL,
|
||||
value_json JSON NULL,
|
||||
raw_value_blob BLOB NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_feature_attr_ordinal (feature_id, ordinal_no),
|
||||
KEY idx_feature_attr_name (attribute_name),
|
||||
KEY idx_feature_attr_id (attribute_id),
|
||||
CONSTRAINT fk_feature_attr_feature FOREIGN KEY (feature_id)
|
||||
REFERENCES chart_feature(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_point_geometry (
|
||||
feature_id BIGINT UNSIGNED NOT NULL,
|
||||
geom POINT NOT NULL,
|
||||
PRIMARY KEY (feature_id),
|
||||
SPATIAL KEY spx_point_geom (geom),
|
||||
CONSTRAINT fk_point_feature FOREIGN KEY (feature_id)
|
||||
REFERENCES chart_feature(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_line_geometry (
|
||||
feature_id BIGINT UNSIGNED NOT NULL,
|
||||
geom GEOMETRY NOT NULL,
|
||||
PRIMARY KEY (feature_id),
|
||||
SPATIAL KEY spx_line_geom (geom),
|
||||
CONSTRAINT fk_line_feature FOREIGN KEY (feature_id)
|
||||
REFERENCES chart_feature(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_area_geometry (
|
||||
feature_id BIGINT UNSIGNED NOT NULL,
|
||||
geom GEOMETRY NOT NULL,
|
||||
PRIMARY KEY (feature_id),
|
||||
SPATIAL KEY spx_area_geom (geom),
|
||||
CONSTRAINT fk_area_feature FOREIGN KEY (feature_id)
|
||||
REFERENCES chart_feature(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_sounding_point (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
feature_id BIGINT UNSIGNED NOT NULL,
|
||||
point_index INT UNSIGNED NOT NULL,
|
||||
raw_x INT UNSIGNED NOT NULL,
|
||||
raw_y INT UNSIGNED NOT NULL,
|
||||
raw_z INT UNSIGNED NOT NULL,
|
||||
depth DOUBLE NOT NULL,
|
||||
geom POINT NOT NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_sounding_feature_point (feature_id, point_index),
|
||||
KEY idx_sounding_depth (depth),
|
||||
SPATIAL KEY spx_sounding_geom (geom),
|
||||
CONSTRAINT fk_sounding_feature FOREIGN KEY (feature_id)
|
||||
REFERENCES chart_feature(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_raw_record (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
cell_id BIGINT UNSIGNED NOT NULL,
|
||||
record_kind ENUM('HEADER','VECTOR','POINT2D','POINT3D','FEATURE','ATTRIBUTE','OTHER') NOT NULL,
|
||||
source_record_index INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
raw_blob MEDIUMBLOB NOT NULL,
|
||||
raw_metadata_json JSON NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_raw_cell_kind (cell_id, record_kind, source_record_index),
|
||||
CONSTRAINT fk_raw_cell FOREIGN KEY (cell_id)
|
||||
REFERENCES chart_cell(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_import_job (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
dataset_id BIGINT UNSIGNED NOT NULL,
|
||||
status ENUM('RUNNING','DONE','FAILED','CANCELLED') NOT NULL DEFAULT 'RUNNING',
|
||||
started_at DATETIME NOT NULL,
|
||||
finished_at DATETIME NULL,
|
||||
cells_discovered INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
cells_done INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
cells_failed INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
features_source BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
features_imported BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
attributes_source BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
attributes_imported BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
unknown_object_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
unknown_attribute_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
geometry_invalid_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
geometry_repaired_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
summary_json JSON NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_job_dataset (dataset_id, started_at),
|
||||
CONSTRAINT fk_job_dataset FOREIGN KEY (dataset_id)
|
||||
REFERENCES chart_dataset(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS chart_import_event (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
job_id BIGINT UNSIGNED NULL,
|
||||
cell_id BIGINT UNSIGNED NULL,
|
||||
level ENUM('DEBUG','INFO','WARNING','ERROR') NOT NULL,
|
||||
event_code VARCHAR(64) NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
details_json JSON NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_event_job (job_id, id),
|
||||
KEY idx_event_cell (cell_id, id),
|
||||
KEY idx_event_code (event_code),
|
||||
CONSTRAINT fk_event_job FOREIGN KEY (job_id)
|
||||
REFERENCES chart_import_job(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_event_cell FOREIGN KEY (cell_id)
|
||||
REFERENCES chart_cell(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
Reference in New Issue
Block a user