SET XACT_ABORT ON; BEGIN TRANSACTION; IF OBJECT_ID('dbo.wcs_warehouse', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_warehouse ( warehouse_code varchar(64) NOT NULL PRIMARY KEY, warehouse_name nvarchar(128) NOT NULL, active_configuration_version bigint NULL, state_version bigint NOT NULL CONSTRAINT df_wcs_warehouse_state_version DEFAULT (0) ); END; IF OBJECT_ID('dbo.wcs_floor', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_floor ( floor_id varchar(64) NOT NULL PRIMARY KEY, warehouse_code varchar(64) NOT NULL, floor_code varchar(64) NOT NULL, floor_level int NOT NULL, CONSTRAINT fk_wcs_floor_warehouse FOREIGN KEY (warehouse_code) REFERENCES dbo.wcs_warehouse(warehouse_code), CONSTRAINT uk_wcs_floor_code UNIQUE (warehouse_code, floor_code), CONSTRAINT uk_wcs_floor_level UNIQUE (warehouse_code, floor_level) ); END; IF OBJECT_ID('dbo.wcs_topology_version', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_topology_version ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, publication_state varchar(32) NOT NULL, published_time datetime2(3) NULL, snapshot_version bigint NOT NULL CONSTRAINT df_wcs_topology_snapshot_version DEFAULT (0), CONSTRAINT pk_wcs_topology_version PRIMARY KEY ( warehouse_code, topology_version), CONSTRAINT fk_wcs_topology_version_warehouse FOREIGN KEY (warehouse_code) REFERENCES dbo.wcs_warehouse(warehouse_code) ); END; IF OBJECT_ID('dbo.wcs_topology_node', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_topology_node ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, node_id varchar(128) NOT NULL, floor_id varchar(64) NOT NULL, coordinate_x int NOT NULL, coordinate_y int NOT NULL, capacity int NOT NULL, safe_wait_flag bit NOT NULL CONSTRAINT df_wcs_node_safe_wait DEFAULT (0), safe_yield_flag bit NOT NULL CONSTRAINT df_wcs_node_safe_yield DEFAULT (0), CONSTRAINT pk_wcs_topology_node PRIMARY KEY ( warehouse_code, topology_version, node_id), CONSTRAINT fk_wcs_topology_node_version FOREIGN KEY ( warehouse_code, topology_version) REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version), CONSTRAINT fk_wcs_topology_node_floor FOREIGN KEY (floor_id) REFERENCES dbo.wcs_floor(floor_id), CONSTRAINT ck_wcs_topology_node_capacity CHECK (capacity > 0), CONSTRAINT uk_wcs_topology_node_coordinate UNIQUE ( warehouse_code, topology_version, floor_id, coordinate_x, coordinate_y) ); END; IF OBJECT_ID('dbo.wcs_topology_edge', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_topology_edge ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, resource_key varchar(320) NOT NULL, source_node_id varchar(128) NOT NULL, target_node_id varchar(128) NOT NULL, distance_cost int NOT NULL, capacity int NOT NULL, CONSTRAINT pk_wcs_topology_edge PRIMARY KEY ( warehouse_code, topology_version, resource_key), CONSTRAINT fk_wcs_topology_edge_version FOREIGN KEY ( warehouse_code, topology_version) REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version), CONSTRAINT ck_wcs_topology_edge_distance CHECK (distance_cost >= 0), CONSTRAINT ck_wcs_topology_edge_capacity CHECK (capacity > 0), CONSTRAINT ck_wcs_topology_edge_direction CHECK ( source_node_id <> target_node_id) ); END; IF OBJECT_ID('dbo.wcs_traffic_zone', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_traffic_zone ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, zone_id varchar(128) NOT NULL, zone_name nvarchar(128) NOT NULL, coordination_mode varchar(32) NOT NULL, CONSTRAINT pk_wcs_traffic_zone PRIMARY KEY ( warehouse_code, topology_version, zone_id), CONSTRAINT fk_wcs_traffic_zone_version FOREIGN KEY ( warehouse_code, topology_version) REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version) ); END; IF OBJECT_ID('dbo.wcs_resource_definition', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_resource_definition ( resource_key varchar(320) NOT NULL, warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, resource_type varchar(32) NOT NULL, capacity int NOT NULL, zone_id varchar(128) NULL, CONSTRAINT pk_wcs_resource_definition PRIMARY KEY ( warehouse_code, topology_version, resource_key), CONSTRAINT fk_wcs_resource_definition_version FOREIGN KEY ( warehouse_code, topology_version) REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version), CONSTRAINT ck_wcs_resource_definition_capacity CHECK (capacity > 0) ); END; IF OBJECT_ID('dbo.wcs_device', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_device ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, device_id varchar(64) NOT NULL, device_type varchar(32) NOT NULL, floor_id varchar(64) NULL, enabled_flag bit NOT NULL CONSTRAINT df_wcs_device_enabled DEFAULT (1), CONSTRAINT pk_wcs_device PRIMARY KEY ( warehouse_code, topology_version, device_id), CONSTRAINT fk_wcs_device_version FOREIGN KEY ( warehouse_code, topology_version) REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version), CONSTRAINT fk_wcs_device_floor FOREIGN KEY (floor_id) REFERENCES dbo.wcs_floor(floor_id) ); END; IF OBJECT_ID('dbo.wcs_device_capability', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_device_capability ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, device_id varchar(64) NOT NULL, capability_code varchar(64) NOT NULL, CONSTRAINT pk_wcs_device_capability PRIMARY KEY ( warehouse_code, topology_version, device_id, capability_code), CONSTRAINT fk_wcs_device_capability_device FOREIGN KEY ( warehouse_code, topology_version, device_id) REFERENCES dbo.wcs_device(warehouse_code, topology_version, device_id) ); END; IF OBJECT_ID('dbo.wcs_device_port', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_device_port ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, port_id varchar(64) NOT NULL, device_id varchar(64) NOT NULL, node_id varchar(128) NOT NULL, port_role varchar(32) NOT NULL, CONSTRAINT pk_wcs_device_port PRIMARY KEY ( warehouse_code, topology_version, port_id), CONSTRAINT fk_wcs_device_port_device FOREIGN KEY ( warehouse_code, topology_version, device_id) REFERENCES dbo.wcs_device(warehouse_code, topology_version, device_id) ); END; IF OBJECT_ID('dbo.wcs_charger', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_charger ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, charger_id varchar(64) NOT NULL, node_id varchar(128) NOT NULL, enabled_flag bit NOT NULL CONSTRAINT df_wcs_charger_enabled DEFAULT (1), CONSTRAINT pk_wcs_charger PRIMARY KEY ( warehouse_code, topology_version, charger_id), CONSTRAINT fk_wcs_charger_version FOREIGN KEY ( warehouse_code, topology_version) REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version) ); END; IF OBJECT_ID('dbo.wcs_vehicle_assignment', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_vehicle_assignment ( assignment_id varchar(128) NOT NULL PRIMARY KEY, warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, snapshot_version bigint NOT NULL, order_id varchar(64) NOT NULL, step_id varchar(128) NOT NULL, vehicle_id varchar(64) NOT NULL, fencing_token bigint NOT NULL, assignment_state varchar(32) NOT NULL, created_time datetime2(3) NOT NULL, CONSTRAINT uk_wcs_vehicle_assignment_step UNIQUE (step_id), CONSTRAINT ck_wcs_vehicle_assignment_fencing CHECK (fencing_token > 0) ); END; IF OBJECT_ID('dbo.wcs_route_plan', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_route_plan ( route_plan_id varchar(128) NOT NULL PRIMARY KEY, assignment_id varchar(128) NOT NULL, warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, node_path_json nvarchar(max) NOT NULL, resource_path_json nvarchar(max) NOT NULL, distance_cost int NOT NULL, turn_count int NOT NULL, route_state varchar(32) NOT NULL, created_time datetime2(3) NOT NULL, CONSTRAINT fk_wcs_route_plan_assignment FOREIGN KEY (assignment_id) REFERENCES dbo.wcs_vehicle_assignment(assignment_id), CONSTRAINT uk_wcs_route_plan_assignment UNIQUE (assignment_id), CONSTRAINT ck_wcs_route_plan_distance CHECK (distance_cost >= 0), CONSTRAINT ck_wcs_route_plan_turns CHECK (turn_count >= 0) ); END; IF OBJECT_ID('dbo.wcs_resource_state', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_resource_state ( warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, resource_key varchar(320) NOT NULL, capacity int NOT NULL, reserved_count int NOT NULL, occupied_count int NOT NULL, fencing_token bigint NOT NULL, state_version bigint NOT NULL, CONSTRAINT pk_wcs_resource_state PRIMARY KEY ( warehouse_code, topology_version, resource_key), CONSTRAINT fk_wcs_resource_state_definition FOREIGN KEY ( warehouse_code, topology_version, resource_key) REFERENCES dbo.wcs_resource_definition( warehouse_code, topology_version, resource_key), CONSTRAINT ck_wcs_resource_state_counts CHECK ( capacity > 0 AND reserved_count >= 0 AND occupied_count >= 0 AND reserved_count + occupied_count <= capacity), CONSTRAINT ck_wcs_resource_state_fencing CHECK (fencing_token >= 0), CONSTRAINT ck_wcs_resource_state_version CHECK (state_version >= 0) ); END; IF OBJECT_ID('dbo.wcs_resource_reservation', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_resource_reservation ( reservation_id varchar(128) NOT NULL, warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, resource_key varchar(320) NOT NULL, order_id varchar(64) NOT NULL, step_id varchar(128) NOT NULL, vehicle_id varchar(64) NOT NULL, reservation_state varchar(32) NOT NULL, fencing_token bigint NOT NULL, release_evidence_id varchar(128) NULL, created_time datetime2(3) NOT NULL, updated_time datetime2(3) NOT NULL, CONSTRAINT pk_wcs_resource_reservation PRIMARY KEY ( reservation_id, resource_key), CONSTRAINT fk_wcs_resource_reservation_state FOREIGN KEY ( warehouse_code, topology_version, resource_key) REFERENCES dbo.wcs_resource_state( warehouse_code, topology_version, resource_key), CONSTRAINT ck_wcs_resource_reservation_fencing CHECK (fencing_token > 0) ); END; IF OBJECT_ID('dbo.wcs_traffic_decision_event', 'U') IS NULL BEGIN CREATE TABLE dbo.wcs_traffic_decision_event ( event_id varchar(128) NOT NULL PRIMARY KEY, warehouse_code varchar(64) NOT NULL, topology_version bigint NOT NULL, snapshot_version bigint NOT NULL, order_id varchar(64) NOT NULL, step_id varchar(128) NOT NULL, vehicle_id varchar(64) NULL, decision_type varchar(16) NOT NULL, reason_code varchar(128) NOT NULL, occurred_time datetime2(3) NOT NULL ); END; COMMIT TRANSACTION;