-- Add migration script here -- 1️⃣ Source 表 CREATE TABLE source ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL, protocol TEXT NOT NULL, endpoint TEXT NOT NULL, security_policy TEXT, security_mode TEXT, username TEXT, password TEXT, enabled BOOLEAN NOT NULL DEFAULT TRUE, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), unique (endpoint) -- 唯一约束:endpoint 不重复 ); -- 2️⃣ Node 表 CREATE TABLE node ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), source_id UUID NOT NULL, external_id TEXT NOT NULL, -- 主查字段 namespace_uri TEXT, -- 防止index变化 namespace_index INTEGER, -- 仅作记录 identifier_type TEXT, -- 仅作记录 identifier TEXT, -- 仅作记录 browse_name TEXT NOT NULL, display_name TEXT, node_class TEXT NOT NULL, parent_id UUID, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), FOREIGN KEY (source_id) REFERENCES source(id), FOREIGN KEY (parent_id) REFERENCES node(id), UNIQUE(source_id, external_id) ); -- Node 常用索引 CREATE INDEX idx_node_source_id ON node(source_id); CREATE INDEX idx_node_parent_id ON node(parent_id); -- 3️⃣ Point 表 CREATE TABLE point ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), node_id UUID NOT NULL, name TEXT NOT NULL, description TEXT, unit TEXT, scan_interval_s INTEGER NOT NULL DEFAULT 1 CHECK (scan_interval_s > 0), created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), FOREIGN KEY (node_id) REFERENCES node(id), UNIQUE (node_id) ); -- Point 常用索引 CREATE INDEX idx_point_node_id ON point(node_id);