158 lines
5.9 KiB
Python
158 lines
5.9 KiB
Python
"""
|
||
数据库模型定义
|
||
使用SQLAlchemy ORM(可选)
|
||
"""
|
||
from sqlalchemy import (
|
||
Column, Integer, String, Float, DateTime, ForeignKey, Table, Text
|
||
)
|
||
from sqlalchemy.ext.declarative import declarative_base
|
||
from sqlalchemy.orm import relationship
|
||
from datetime import datetime
|
||
|
||
Base = declarative_base()
|
||
|
||
|
||
class FieldModel(Base):
|
||
"""字段数据库模型"""
|
||
__tablename__ = 'fields'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
full_name = Column(String(255), unique=True, nullable=False)
|
||
domain = Column(String(100), nullable=False, index=True)
|
||
sub_domains = Column(String(255))
|
||
name = Column(String(100), nullable=False, index=True)
|
||
type = Column(String(50), nullable=False, index=True)
|
||
range_min = Column(String(100))
|
||
range_max = Column(String(100))
|
||
default_value = Column(String(255))
|
||
unit = Column(String(50))
|
||
description = Column(Text)
|
||
created_time = Column(DateTime, default=datetime.now)
|
||
updated_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||
|
||
# 关系
|
||
messages = relationship('MessageFieldAssociation', back_populates='field')
|
||
|
||
def __repr__(self):
|
||
return f"<FieldModel(id={self.id}, full_name='{self.full_name}')>"
|
||
|
||
|
||
class MessageModel(Base):
|
||
"""消息数据库模型"""
|
||
__tablename__ = 'messages'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
full_name = Column(String(255), unique=True, nullable=False)
|
||
system_name = Column(String(100), nullable=False, index=True)
|
||
message_type = Column(String(100), nullable=False, index=True)
|
||
version = Column(String(50), nullable=False, index=True)
|
||
description = Column(Text)
|
||
protocol = Column(String(50), nullable=False)
|
||
serialization = Column(String(50), nullable=False)
|
||
created_time = Column(DateTime, default=datetime.now)
|
||
updated_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||
|
||
# 关系
|
||
fields = relationship('MessageFieldAssociation', back_populates='message')
|
||
|
||
def __repr__(self):
|
||
return f"<MessageModel(id={self.id}, full_name='{self.full_name}')>"
|
||
|
||
|
||
class MessageFieldAssociation(Base):
|
||
"""消息-字段关联表"""
|
||
__tablename__ = 'message_fields'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
message_id = Column(Integer, ForeignKey('messages.id', ondelete='CASCADE'), nullable=False)
|
||
field_id = Column(Integer, ForeignKey('fields.id', ondelete='CASCADE'), nullable=False)
|
||
field_order = Column(Integer, nullable=False)
|
||
|
||
# 关系
|
||
message = relationship('MessageModel', back_populates='fields')
|
||
field = relationship('FieldModel', back_populates='messages')
|
||
|
||
def __repr__(self):
|
||
return f"<MessageFieldAssociation(message_id={self.message_id}, field_id={self.field_id})>"
|
||
|
||
|
||
class MappingModel(Base):
|
||
"""映射模型数据库模型"""
|
||
__tablename__ = 'mapping_models'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(255), unique=True, nullable=False)
|
||
mapping_type = Column(String(50), nullable=False, index=True)
|
||
source_field_ids = Column(Text, nullable=False) # JSON格式存储
|
||
target_field_id = Column(Integer, ForeignKey('fields.id', ondelete='CASCADE'), nullable=False)
|
||
operator = Column(String(50))
|
||
operand = Column(String(255))
|
||
language = Column(String(50))
|
||
code = Column(Text)
|
||
description = Column(Text)
|
||
created_time = Column(DateTime, default=datetime.now)
|
||
updated_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||
|
||
def __repr__(self):
|
||
return f"<MappingModel(id={self.id}, name='{self.name}')>"
|
||
|
||
|
||
class GraphNodeModel(Base):
|
||
"""映射图节点模型"""
|
||
__tablename__ = 'mapping_graph_nodes'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
field_id = Column(Integer, ForeignKey('fields.id', ondelete='CASCADE'), unique=True, nullable=False)
|
||
x_position = Column(Float, default=0.0)
|
||
y_position = Column(Float, default=0.0)
|
||
|
||
def __repr__(self):
|
||
return f"<GraphNodeModel(id={self.id}, field_id={self.field_id})>"
|
||
|
||
|
||
class GraphEdgeModel(Base):
|
||
"""映射图边模型"""
|
||
__tablename__ = 'mapping_graph_edges'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
source_field_id = Column(Integer, ForeignKey('fields.id', ondelete='CASCADE'), nullable=False)
|
||
target_field_id = Column(Integer, ForeignKey('fields.id', ondelete='CASCADE'), nullable=False)
|
||
mapping_id = Column(Integer, ForeignKey('mapping_models.id', ondelete='CASCADE'), nullable=False)
|
||
weight = Column(Float, default=1.0)
|
||
|
||
def __repr__(self):
|
||
return f"<GraphEdgeModel(id={self.id}, {self.source_field_id}->{self.target_field_id})>"
|
||
|
||
|
||
class CompositeMappingModel(Base):
|
||
"""复合映射模型"""
|
||
__tablename__ = 'composite_mappings'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
name = Column(String(255), unique=True, nullable=False)
|
||
description = Column(Text)
|
||
created_time = Column(DateTime, default=datetime.now)
|
||
updated_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||
|
||
# 关系
|
||
items = relationship('CompositeMappingItemModel', back_populates='composite')
|
||
|
||
def __repr__(self):
|
||
return f"<CompositeMappingModel(id={self.id}, name='{self.name}')>"
|
||
|
||
|
||
class CompositeMappingItemModel(Base):
|
||
"""复合映射项模型"""
|
||
__tablename__ = 'composite_mapping_items'
|
||
|
||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||
composite_id = Column(Integer, ForeignKey('composite_mappings.id', ondelete='CASCADE'), nullable=False)
|
||
mapping_id = Column(Integer, ForeignKey('mapping_models.id', ondelete='CASCADE'), nullable=False)
|
||
item_order = Column(Integer, nullable=False)
|
||
|
||
# 关系
|
||
composite = relationship('CompositeMappingModel', back_populates='items')
|
||
|
||
def __repr__(self):
|
||
return f"<CompositeMappingItemModel(composite_id={self.composite_id}, mapping_id={self.mapping_id})>"
|