nidus-sync/db/migrations/00069_arcgis_layer.sql

75 lines
2.8 KiB
SQL

-- +goose Up
CREATE TABLE arcgis.feature_service (
extent box2d NOT NULL,
item_id TEXT NOT NULL,
spatial_reference INTEGER NOT NULL,
url TEXT NOT NULL,
PRIMARY KEY(item_id)
);
CREATE TABLE arcgis.layer (
extent box2d NOT NULL,
feature_service_item_id TEXT NOT NULL REFERENCES arcgis.feature_service(item_id),
index_ INTEGER NOT NULL,
PRIMARY KEY(feature_service_item_id, index_)
);
CREATE TYPE arcgis.FieldType AS ENUM (
'esriFieldTypeSmallInteger', -- 16-bit Integer.
'esriFieldTypeInteger', -- 32-bit Integer.
'esriFieldTypeSingle', -- Single-precision floating-point number.
'esriFieldTypeDouble', -- Double-precision floating-point number.
'esriFieldTypeString', -- Character string.
'esriFieldTypeDate', -- Date.
'esriFieldTypeOID', -- Integer representing an object identifier. 32-bit OID has a length of 4 bytes, and 64-bit OID has a length of 8 bytes.
'esriFieldTypeGeometry', -- Geometry.
'esriFieldTypeBlob', -- Binary Large Object.
'esriFieldTypeRaster', -- Raster.
'esriFieldTypeGUID', -- Globally Unique Identifier.
'esriFieldTypeGlobalID', -- Esri Global ID.
'esriFieldTypeXML', -- XML Document.
'esriFieldTypeBigInteger' -- 64-bit Integer.
);
CREATE TABLE arcgis.layer_field (
layer_feature_service_item_id TEXT NOT NULL,
layer_index INTEGER NOT NULL,
name TEXT NOT NULL,
type_ arcgis.FieldType NOT NULL,
FOREIGN KEY(layer_feature_service_item_id, layer_index) REFERENCES arcgis.layer(feature_service_item_id, index_),
PRIMARY KEY(layer_feature_service_item_id, layer_index, name)
);
CREATE TYPE arcgis.MappingDestinationParcel AS ENUM (
'apn',
'description'
);
CREATE TABLE arcgis.parcel_mapping (
destination arcgis.MappingDestinationParcel NOT NULL,
layer_feature_service_item_id TEXT NOT NULL,
layer_index INTEGER NOT NULL,
layer_field_name TEXT NOT NULL,
organization_id INTEGER NOT NULL REFERENCES organization(id),
FOREIGN KEY(layer_feature_service_item_id, layer_index, layer_field_name) REFERENCES arcgis.layer_field(layer_feature_service_item_id, layer_index, name),
PRIMARY KEY(organization_id, destination)
);
CREATE TYPE arcgis.MappingDestinationAddress AS ENUM (
'country',
'locality',
'postal_code',
'street',
'unit'
);
CREATE TABLE arcgis.address_mapping (
destination arcgis.MappingDestinationAddress NOT NULL,
layer_feature_service_item_id TEXT NOT NULL,
layer_index INTEGER NOT NULL,
layer_field_name TEXT NOT NULL,
organization_id INTEGER NOT NULL REFERENCES organization(id),
FOREIGN KEY(layer_feature_service_item_id, layer_index, layer_field_name) REFERENCES arcgis.layer_field(layer_feature_service_item_id, layer_index, name),
PRIMARY KEY(organization_id, destination)
);
CREATE TABLE parcel (
apn TEXT NOT NULL,
description TEXT NOT NULL,
id SERIAL NOT NULL,
geometry geometry(Polygon, 4326) NOT NULL,
PRIMARY KEY(id)
);