我正在设计一个数据库来存放科学测试数据,使用sqlalchemy。我遇到了一个我似乎无法解决的问题。避免三个表之间的循环依赖关系
在我的测试数据中,每个Observation
具有State
(位置,速度,加速度),并且State
具有关联的Time
(该状态适用的时间)。到现在为止还挺好。我为Times
制作了一个单独的表格,因为我处理不同类型的时间,并且我想使用参考表来指示每次是什么样的时间(状态时间,观察时间等)。我处理的时间类型可能会发生变化,所以我认为通过这种方式进行规范化将会让我在未来增加新的时间,因为它们只是参考表中的行。
到目前为止,这部分工作(使用声明样式):
class Observation(Base):
__tablename__ = 'tbl_observations'
id = Column(Integer, primary_key=True)
state_id = Column(Integer, ForeignKey('tbl_states.id'))
state = relationship('State', uselist=False)
class State(Base):
__tablename__ = 'tbl_states'
id = Column(Integer, primary_key=True)
time_id = Column(Integer, ForeignKey('tbl_times.id'))
time = relationship('Time', uselist=False)
class Time(Base):
__tablename__ = 'tbl_times'
id = Column(Integer, primary_key=True)
time_type_id = Column(Integer, ForeignKey('ref_tbl_time_types.id'))
time_type = relationship('TimeType', uselist=False)
time_value = Column(Float)
class TimeType(Base):
__tablename__ = 'ref_tbl_time_types'
id = Column(Integer, primary_key=True)
desc = Column(String)
皱纹是观察自己可以有各种不同的时代。当我尝试创建Observation
和Time
之间的一个一对多的关系,我得到一个循环依赖错误:
class Observation(Base):
__tablename__ = 'tbl_observations'
id = Column(Integer, primary_key=True)
state_id = Column(Integer, ForeignKey('tbl_states.id'))
state = relationship('State', uselist=False)
# Added this line:
times = relationship('Time')
class Time(Base):
__tablename__ = 'tbl_times'
id = Column(Integer, primary_key=True)
time_type_id = Column(Integer, ForeignKey('ref_tbl_time_types.id'))
time_type = relationship('TimeType', uselist=False)
time_value = Column(Float)
# Added this line:
observation_id = Column(Integer, ForeignKey('tbl_observations.id'))
我猜这打破了,因为原来的Observation
- >State
- >Time
链有参考权限回到Observation
。
有什么办法解决这个问题吗?我把我的设计搞砸了吗?我在sqlalchemy中做错了什么?我对这一切都很陌生,所以它可能是上述任何一种。任何帮助你可以给予非常感激。
P.S.我试着做这里推荐的东西:Trying to avoid a circular reference但是我做错了,或者它没有解决我的特殊问题。
这太棒了。还有哪些地方可以从该软件的创建者那里获得关于软件包问题的详细的个性化答案?谢谢迈克! – IanVS