메신저는 거대한 형태를 채우기 위해 사용되는 응용 프로그램을 개발합니다. 양식이 속할 수있는 몇 가지 프로젝트가 있습니다. 또한 양식에는 목표 및 활동과 같이 여러 번 채울 수있는 두 개의 섹션이 있으므로 양식에 많은 목표와 활동을 정의 할 수 있습니다.ZODB 다중 객체 참조
나는 프로젝트를 대표하는 학급이 있으며, 다른 하나는 형식을 표현하고 두 개의 간단한 수업은 목적과 활동을 나타냅니다. 프로젝트에는 양식 목록이 있으며 양식에는 활동 및 목표 목록이 있습니다.
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()
내가 프로젝트를 저장할 때, 형태의 목록뿐만 아니라 지속됩니다 것을 알고, 해당 목록 양식의 목표와 활동도
하지만 다른 OOBTrees, 'forms', 'activities'및 'objectives'의 경우 어떻게됩니까? 이 작업은 개인 양식/목표/활동을 쉽게 트래버스하거나 찾기 위해 수행됩니다. 하지만 ZODB가 이러한 개체를 캐시하고 프로젝트를 저장할 때 한 번만 유지하고 해당 개체에 대한 참조를 유지하는지 확신 할 수 없습니다. 따라서 이들 중 하나가 수정되면 모든 참조가 업데이트됩니다. 수행 할 때 db [ 'forms'] [ 'formID'] = 양식 OOBTree는 OOBTree 프로젝트와 동일한 개체를 가리키고 동일한 개체를 두 번 유지하지 않습니다. 그것이 작동하는 방식입니까? 중복 된 지속 객체를 얻고 모두 독립적 인 인스턴스가 될 것인가?
나는 색인 생성과 물건들을 처리하기 위해 카탈로그를 재구성한다는 것을 알고 있지만, 그다지 필요하지 않다. 단지 프로젝트를 반복하지 않고도 양식에 접근 할 수 있어야한다.
감사합니다.