Ping!? :) On Tue, Mar 10, 2009 at 12:11 AM, Omer Shakil <omer.sha...@gmail.com> wrote:
> Trying to move away from the standard thinking of relational databases, I > looked around but couldn't find a solid document to get up to speed so I > chose to pick up a fairly complicated scenario and brainstorm about it: > > Quick Overview: Trying to model: Students get group Assignments in a Class. > Student can be enrolled in multiple classes. A class can have multiple group > assignments and one student can take part in multiple assignments. > > There are quite a few ways you could model this (as mentioned in the docs) > - I chose: > > We make an Entity Group: Class being the parent - Assignment, Enrollment, > AssignmentSplit can be its children. Assignment keeps a reference to > Class(One to many relationship), > AssignmentSplit keeps a reference to Assignment and Enrollment (Many to > many relationship). Enrollment keeps a reference to both Student and > Class(Many to many relationship) - it can keep attributes about the student's > performance. > > 1. Easily retrieve classes enrolled by student.enrollment_set[*].class. How > efficient is this? Is it better to maintain a list of Class keys in > Student? In general, having a ReferenceProperty is how good/bad compared > to managing List of Keys? > 2. Retrieve all assignments: > student.enrollment_set[*].assignmentsplit_set[*].assignment. Is this better > or > student.enrollment_set[*].class.assignment_set[*].assignmentsplit[*].filter(enrollment)? > Most probably the former, but just wanted to throw this out there too. > 3. What advantages/disadvantages do i get of putting all of this in one > entity group under Class. > > http://code.google.com/appengine/articles/modeling.html says I need to be > extra careful with Enrollment and AssignmentSplit as it will generate more > calls to the data store. What alternatives do I have? Whats the most > efficient way to do this? > > Advanced twist: What if students can also sign up for assignments outside a > class. In this way, I cant make a concrete Entity Group. Assignment and > AssignmentSplit > still stay as is, but there is no Enrollment. Maybe AssignmentSplit keeps > a reference to Assignment and Student (Many to many relationship). How do > I retrieve these 'open' assignments for a given student? > student.assignmentsplit_set[*]? Will that be really inefficient? Is it > better to keep a List of Assignments or AssignmentSplits in Student? What > if I want to keep some attributes about these open assignments, where would > I keep them, in Student? do I create a special OpenEnrollment? but in > either case, I would have to update it when I update AssignmentSplit in a > transaction meaning they have to be in the same Entity Group. But if I put > Student in there, sooner or later, this entity group would include a lot > of Students and then spoil performance ... Ideas/Thoughts? > > > Just wanted to throw something out there which has enough One to many / > Many to many issues and also touches on Entity Groups - let me know what you > guys think of this problem, would help me better understand the data store. > > Thanks a lot in advance for your time, > Omer > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---