いくつかの巨大なフォームに入力するために使用されるアプリケーションを開発しています。フォームが所属できるプロジェクトがいくつかあります。また、フォームには目的や活動など、何度も入力できる 2 つのセクションがあるため、フォームには多くの目的や活動を定義できます。
プロジェクトを表すクラス、フォーム用のクラス、目的と活動を表す 2 つの単純なクラスがあります。プロジェクトにはフォームのリストがあり、フォームには活動と目的のリストがあります。
class Project(persistent.Persistent):
forms = PersistentList()
...
class Form(persistent.Persistent):
objectives = PersistentList()
activities = PersistentList()
...
私の質問は、このデータを次のように ZODB に保存することを計画していることです。
db['projects'] = OOBTree()
db['forms'] = OOBTree()
db['activities'] = OOBTree()
db['objectives'] = OOBTree()
project = Project(...)//fill data with some parameters
form = Form(...)//fill data with some parameters
objective1 = Objective(...)
objective2 = Objective(...)
activity1 = Activitiy(...)
activity2 = Activitiy(...)
form.addObjective(objective1)
form.addObjective(objective2)
form.addActivity(activity1)
form.addActivity(activity2)
project.addForm(form)
db['projects']['projectID'] = project
db['forms']['formID'] = form
db['activities']['activityID'] = activity1
db['activities']['activityID'] = activity2
db['objectives']['objectiveID'] = objective1
db['objectives']['objectiveID'] = ojective2
transaction.commit()
プロジェクトを保存すると、フォームのリストも保存され、フォームからの目的と活動の対応するリストも保存されることを私は知っています。
しかし、他の OOBTree、「フォーム」、「アクティビティ」、「目的」の場合はどうなるでしょうか? 個々のフォーム/目的/アクティビティを簡単にトラバースまたは検索できるようにするために、これを行っています。しかし、ZODB がこれらのオブジェクトをキャッシュし、プロジェクトを保存してそのオブジェクトへの参照を保持するときに一度だけ永続化するかどうかはわかりません。したがって、それらのいずれかが変更されると、すべての参照が更新されます。つまり、db['forms']['formID'] = form を実行すると、OOBTree はプロジェクトの OOBTree と同じオブジェクトを指すため、同じオブジェクトが 2 回保持されることはありません。それはそれが機能する方法ですか?または、永続化されたオブジェクトが複製され、すべてが独立したインスタンスになりますか?
インデックス作成などを処理するためにカタログを再配置することは知っていますが、それほど多くは必要ありません。プロジェクトを反復処理することなくフォームにアクセスできるだけです。
ありがとう!