저는 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)
주름은 스스로 관찰 시간의 다른 종류를 가질 수 있다는 것입니다. ->State
->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
이 때문에 나누기 같은데요 : 내가 Observation
과 Time
사이에 일대 다 관계를 만들려고 할 때, 나는 순환 종속성 오류가 참조 바로 뒤로 최대 Observation
.
이 문제를 해결할 방법이 있습니까? 내 디자인이 엉망이 됐어? sqlalchemy에서 잘못된 것이 있습니까? 나는이 모든 것에 익숙하지 않으므로 위의 것들 중 하나 일 수 있습니다. 당신이 줄 수있는 도움은 대단히 감사하겠습니다.
P. 나는 여기에서 추천되었던 것을했다. Trying to avoid a circular reference 그러나 나는 그것을 잘못했다. 그렇지 않으면 나의 특별한 문제를 해결하지 못했다.
이것은 굉장합니다. 해당 소프트웨어를 만든 사람이 제공 한 소프트웨어 패키지에 대한 질문에 대한 자세한 개인화 된 답을 얻을 수있는 곳은 어디입니까? 감사합니다 마이크! – IanVS