144 lines
4.9 KiB
MySQL
144 lines
4.9 KiB
MySQL
|
|
-- 字段表
|
|||
|
|
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;
|