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)
しわは、観察自体が異なる種類の時間を持っている可能性があるということです。との間に1対多の関係を作成しようとする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で何か間違ったことをしていますか?私はこれらすべてに不慣れなので、上記のいずれかである可能性があります。あなたが与えることができるどんな助けでも非常にありがたいです。
PSここで推奨されていることを実行しようとしました:循環参照を回避しようとしましたが、間違って実行したか、特定の問題が解決しませんでした。