我有许多表可用作源数据,每个科学区域一个(BioData,GeolData,GravData,MagnData等)。 还有另一个表,主要名称为Product,它存储每个产品的信息,如id,项目关联等。每个产品也由一组数据组成。这些数据记录存储在那些纪律表中。
例如,为了存储BioData的产品和数据记录之间的关系,我所做的就是创建一个名为Dataset_Data的多对多表。这个声明是使用sqlacodegen生成的,它是一个'SQLAlchemy的自动模型代码生成器'。
t_Dataset_Data = Table(
'Dataset_Data', metadata,
Column('dataset_id', ForeignKey(u'Product.product_id'), primary_key=True, nullable=False),
Column('data_id', ForeignKey(u'BioData.id'), primary_key=True, nullable=False),
schema='public'
)
class Product(Base):
__tablename__ = 'Product'
__table_args__ = {u'schema': 'public'}
project_id = Column(ForeignKey(u'Projects.p_id'), nullable=False)
dataTable_id = Column(ForeignKey(u'DataTables.id'), nullable=False)
product_id = Column(Integer, primary_key=True)
project = relationship(u'Projects')
datatablename = relationship(u'DataTables')
data = relationship(u'BioData', secondary=t_Dataset_Data)
使用sqlAlchemy,当我访问某个Product对象时,使用prod.data,我将可以访问与我的产品相关的所有BioData记录。 到目前为止一切都很好。
我现在需要的是允许Product与所有其他数据表的关系,即不使用BioData,而是使用另一个数据表,例如GeolData。请注意,一个产品始终只与一个规则表相关联,即根据产品的dataTable_id使产品来自同一数据表的数据记录。 所以我需要的是在t_Dataset_Data上声明外键可能是另一个表(而不仅仅是Biodata),因此Product的'data'属性可能是另一个来源。
简而言之,我需要知道是否可以在Dataset_Data的'data_id'列中使用不同的FK,即,如何使用此列指向不同的表。 如果不可能,这可能是实现我需要的最佳方法吗?