SIT/database/schema.sql

144 lines
4.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 字段表
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;