Files
FT546-WCS/sql/wcs/V002__wcs_topology_and_traffic.sql

298 lines
12 KiB
SQL

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;