""" 数据库模型定义 使用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"" 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"" 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"" 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"" 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"" 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"{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"" 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""