144 lines
4.9 KiB
SQL
144 lines
4.9 KiB
SQL
-- 字段表
|
||
CREATE TABLE IF NOT EXISTS fields (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
full_name TEXT NOT NULL UNIQUE,
|
||
domain TEXT NOT NULL,
|
||
sub_domains TEXT,
|
||
name TEXT NOT NULL,
|
||
type TEXT NOT NULL,
|
||
range_min TEXT,
|
||
range_max TEXT,
|
||
default_value TEXT,
|
||
unit TEXT,
|
||
description TEXT,
|
||
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 字段索引
|
||
CREATE INDEX IF NOT EXISTS idx_fields_domain ON fields(domain);
|
||
CREATE INDEX IF NOT EXISTS idx_fields_name ON fields(name);
|
||
CREATE INDEX IF NOT EXISTS idx_fields_type ON fields(type);
|
||
CREATE INDEX IF NOT EXISTS idx_fields_full_name ON fields(full_name);
|
||
|
||
-- 消息表
|
||
CREATE TABLE IF NOT EXISTS messages (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
full_name TEXT NOT NULL UNIQUE,
|
||
system_name TEXT NOT NULL,
|
||
message_type TEXT NOT NULL,
|
||
version TEXT NOT NULL,
|
||
description TEXT,
|
||
protocol TEXT NOT NULL,
|
||
serialization TEXT NOT NULL,
|
||
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 消息索引
|
||
CREATE INDEX IF NOT EXISTS idx_messages_system_name ON messages(system_name);
|
||
CREATE INDEX IF NOT EXISTS idx_messages_type ON messages(message_type);
|
||
CREATE INDEX IF NOT EXISTS idx_messages_version ON messages(version);
|
||
|
||
-- 消息字段关联表
|
||
CREATE TABLE IF NOT EXISTS message_fields (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
message_id INTEGER NOT NULL,
|
||
field_id INTEGER NOT NULL,
|
||
field_order INTEGER NOT NULL,
|
||
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (field_id) REFERENCES fields(id) ON DELETE CASCADE,
|
||
UNIQUE(message_id, field_id)
|
||
);
|
||
|
||
-- 消息字段关联索引
|
||
CREATE INDEX IF NOT EXISTS idx_message_fields_message ON message_fields(message_id);
|
||
CREATE INDEX IF NOT EXISTS idx_message_fields_field ON message_fields(field_id);
|
||
|
||
-- 映射模型表
|
||
CREATE TABLE IF NOT EXISTS mapping_models (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
name TEXT NOT NULL UNIQUE,
|
||
mapping_type TEXT NOT NULL,
|
||
source_field_ids TEXT NOT NULL,
|
||
target_field_id INTEGER NOT NULL,
|
||
operator TEXT,
|
||
operand TEXT,
|
||
language TEXT,
|
||
code TEXT,
|
||
description TEXT,
|
||
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (target_field_id) REFERENCES fields(id) ON DELETE CASCADE
|
||
);
|
||
|
||
-- 映射模型索引
|
||
CREATE INDEX IF NOT EXISTS idx_mapping_models_type ON mapping_models(mapping_type);
|
||
CREATE INDEX IF NOT EXISTS idx_mapping_models_target ON mapping_models(target_field_id);
|
||
|
||
-- 映射图节点表
|
||
CREATE TABLE IF NOT EXISTS mapping_graph_nodes (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
field_id INTEGER NOT NULL UNIQUE,
|
||
x_position REAL DEFAULT 0,
|
||
y_position REAL DEFAULT 0,
|
||
FOREIGN KEY (field_id) REFERENCES fields(id) ON DELETE CASCADE
|
||
);
|
||
|
||
-- 映射图边表
|
||
CREATE TABLE IF NOT EXISTS mapping_graph_edges (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
source_field_id INTEGER NOT NULL,
|
||
target_field_id INTEGER NOT NULL,
|
||
mapping_id INTEGER NOT NULL,
|
||
weight REAL DEFAULT 1.0,
|
||
FOREIGN KEY (source_field_id) REFERENCES fields(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (target_field_id) REFERENCES fields(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (mapping_id) REFERENCES mapping_models(id) ON DELETE CASCADE,
|
||
UNIQUE(source_field_id, target_field_id, mapping_id)
|
||
);
|
||
|
||
-- 映射图边索引
|
||
CREATE INDEX IF NOT EXISTS idx_graph_edges_source ON mapping_graph_edges(source_field_id);
|
||
CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON mapping_graph_edges(target_field_id);
|
||
|
||
-- 复合映射表
|
||
CREATE TABLE IF NOT EXISTS composite_mappings (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
name TEXT NOT NULL UNIQUE,
|
||
description TEXT,
|
||
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 复合映射关联表
|
||
CREATE TABLE IF NOT EXISTS composite_mapping_items (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
composite_id INTEGER NOT NULL,
|
||
mapping_id INTEGER NOT NULL,
|
||
item_order INTEGER NOT NULL,
|
||
FOREIGN KEY (composite_id) REFERENCES composite_mappings(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (mapping_id) REFERENCES mapping_models(id) ON DELETE CASCADE
|
||
);
|
||
|
||
-- 触发器:更新字段的updated_time
|
||
CREATE TRIGGER IF NOT EXISTS update_fields_timestamp
|
||
AFTER UPDATE ON fields
|
||
BEGIN
|
||
UPDATE fields SET updated_time = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
||
END;
|
||
|
||
-- 触发器:更新消息的updated_time
|
||
CREATE TRIGGER IF NOT EXISTS update_messages_timestamp
|
||
AFTER UPDATE ON messages
|
||
BEGIN
|
||
UPDATE messages SET updated_time = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
||
END;
|
||
|
||
-- 触发器:更新映射模型的updated_time
|
||
CREATE TRIGGER IF NOT EXISTS update_mapping_models_timestamp
|
||
AFTER UPDATE ON mapping_models
|
||
BEGIN
|
||
UPDATE mapping_models SET updated_time = CURRENT_TIMESTAMP WHERE id = NEW.id;
|
||
END;
|