SET XACT_ABORT ON; BEGIN TRANSACTION; IF OBJECT_ID('dbo.project_device_endpoint', 'U') IS NULL BEGIN CREATE TABLE dbo.project_device_endpoint ( device_id varchar(64) NOT NULL PRIMARY KEY, device_type varchar(32) NOT NULL, adapter_type varchar(64) NOT NULL, endpoint_ip varchar(128) NOT NULL, endpoint_port int NOT NULL, protocol_station int NULL, enabled_flag bit NOT NULL CONSTRAINT df_project_device_endpoint_enabled DEFAULT (0), state_version bigint NOT NULL, updated_time datetime2(3) NOT NULL, CONSTRAINT ck_project_device_endpoint_port CHECK ( endpoint_port > 0 AND endpoint_port <= 65535), CONSTRAINT ck_project_device_endpoint_station CHECK ( protocol_station IS NULL OR protocol_station >= 0), CONSTRAINT ck_project_device_endpoint_version CHECK (state_version >= 0) ); END; IF OBJECT_ID('dbo.project_protocol_profile', 'U') IS NULL BEGIN CREATE TABLE dbo.project_protocol_profile ( device_id varchar(64) NOT NULL, profile_version bigint NOT NULL, device_type varchar(32) NOT NULL, adapter_type varchar(64) NOT NULL, corpus_manifest_hash varchar(128) NOT NULL, profile_json nvarchar(max) NOT NULL, active_flag bit NOT NULL CONSTRAINT df_project_protocol_profile_active DEFAULT (0), created_time datetime2(3) NOT NULL, activated_time datetime2(3) NULL, CONSTRAINT pk_project_protocol_profile PRIMARY KEY ( device_id, profile_version), CONSTRAINT fk_project_protocol_profile_endpoint FOREIGN KEY (device_id) REFERENCES dbo.project_device_endpoint(device_id), CONSTRAINT ck_project_protocol_profile_version CHECK ( profile_version > 0) ); END; IF NOT EXISTS ( SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.project_protocol_profile') AND name = 'uk_project_protocol_profile_active') BEGIN CREATE UNIQUE INDEX uk_project_protocol_profile_active ON dbo.project_protocol_profile(device_id) WHERE active_flag = 1; END; IF OBJECT_ID('dbo.project_plc_address', 'U') IS NULL BEGIN CREATE TABLE dbo.project_plc_address ( device_id varchar(64) NOT NULL, profile_version bigint NOT NULL, register_name varchar(64) NOT NULL, plc_address varchar(64) NOT NULL, value_type varchar(32) NOT NULL, semantic_code varchar(128) NOT NULL, write_order int NULL, CONSTRAINT pk_project_plc_address PRIMARY KEY ( device_id, profile_version, register_name), CONSTRAINT fk_project_plc_address_profile FOREIGN KEY ( device_id, profile_version) REFERENCES dbo.project_protocol_profile( device_id, profile_version), CONSTRAINT uk_project_plc_address_owner UNIQUE ( device_id, profile_version, plc_address), CONSTRAINT ck_project_plc_address_order CHECK ( write_order IS NULL OR write_order > 0) ); END; IF OBJECT_ID('dbo.project_protocol_capability_evidence', 'U') IS NULL BEGIN CREATE TABLE dbo.project_protocol_capability_evidence ( evidence_id varchar(128) NOT NULL PRIMARY KEY, device_id varchar(64) NOT NULL, profile_version bigint NOT NULL, capability_code varchar(64) NOT NULL, corpus_manifest_hash varchar(128) NOT NULL, passing_test_run_id varchar(128) NOT NULL, git_commit varchar(128) NOT NULL, regression_passed_flag bit NOT NULL, approved_by varchar(128) NOT NULL, approved_time datetime2(3) NOT NULL, expires_time datetime2(3) NOT NULL, created_time datetime2(3) NOT NULL, CONSTRAINT fk_project_capability_evidence_profile FOREIGN KEY ( device_id, profile_version) REFERENCES dbo.project_protocol_profile( device_id, profile_version), CONSTRAINT uk_project_capability_evidence_binding UNIQUE ( device_id, profile_version, capability_code, corpus_manifest_hash, passing_test_run_id), CONSTRAINT ck_project_capability_evidence_expiry CHECK ( expires_time > approved_time) ); END; IF OBJECT_ID('dbo.project_wms_mapping', 'U') IS NULL BEGIN CREATE TABLE dbo.project_wms_mapping ( mapping_id varchar(128) NOT NULL PRIMARY KEY, external_operation varchar(64) NOT NULL, external_order_type varchar(64) NULL, canonical_order_type varchar(32) NOT NULL, source_field varchar(128) NOT NULL, destination_field varchar(128) NOT NULL, callback_url_config_key varchar(128) NULL, active_flag bit NOT NULL CONSTRAINT df_project_wms_mapping_active DEFAULT (0), state_version bigint NOT NULL, updated_time datetime2(3) NOT NULL, CONSTRAINT uk_project_wms_mapping_operation UNIQUE ( external_operation, external_order_type), CONSTRAINT ck_project_wms_mapping_version CHECK (state_version >= 0) ); END; COMMIT TRANSACTION;