282 lines
11 KiB
SQL
282 lines
11 KiB
SQL
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;
|