SIT/database/schema.sql

144 lines
4.9 KiB
MySQL
Raw Permalink Normal View History

2026-01-29 09:08:31 +00:00
-- 字段表
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;