Я строю SQL таблицы (SQlalchemy и Postgres) отношений, и было интересно определить, есть ли лучший способ настроить мои таблицы.
Есть таблица Test
, которая может иметь много Subjects
и есть много Questions
в предметах. Я в основном хочу иметь возможность вводить много разных тестов (например, Test1, Test2) и добавлять темы (и вопросы). Когда тест завершен, я хочу иметь возможность обновить поле grade
в тесте и отобразить оценку.
Я создал таблицу ассоциации, чтобы помочь (TestSubjects). Это работает, но когда я хочу записать счет для теста, я должен напрямую обновить таблицу Questions
, которая не работает, когда я хочу добавить больше тестов.
Псевдокод выглядит следующим образом:
# Add Questions
a = Questions(name="Question1")
b = Questions(name="Question2")
# Add Subjects and add Questions to those
s1 = Subjects(name="Algebra",questions=a)
s2 = Subjects(name="History",questions=b)
# Add a group of Subjects to a Test
Test(name="test1",subjects=[s1,s2])
# Test gets sent out, completed and returned. Store the results.(And where Im struggling)
a = Questions(name="Question1",score=98)
b = Questions(name="Question2",score=76)
class Test
__tablename__ = "test"
id = Column(db.Integer, primary_key=True)
name = Column(db.String(255)
grade = Column(db.Integer)
subjects = relationship('Subjects', secondary='test_subjects',
backref=db.backref('test', lazy='dynamic'))
class Subjects
__tablename__ = "subject"
id = Column(db.Integer, primary_key=True)
name = Column(db.String(255)
questions = relationship('Questions', backref="subject",lazy="dynamic")
class Questions
__tablename__ = "questions"
id = Column(db.Integer, primary_key=True)
name = Column(db.String(255)
score = Column(db.Integer)
total = Column(db.Integer)
subject_id = Column(db.Integer, db.ForeignKey('subject.id'))
class TestSubjects
__tablename__ = 'test_subjects'
id = db.Column(db.Integer(), primary_key=True)
test_id = db.Column(db.Integer(), db.ForeignKey('test.id', ondelete='CASCADE'))
subject_id = db.Column(db.Integer(), db.ForeignKey('subject.id', ondelete='CASCADE'))
#question_id = Not sure if this would work?
Я обсуждал вопрос о добавлении третьей ассоциации или выделении score
из таблицы Questions
, но не уверен в наилучшем способе ,