Neo4j Graph For Student and Marks

I need to model Student and their Marks obtained in specific test. The marks are obtained in 3 different subjects and based on their total marks student get Rank.

Will the graph model with following structure is correct ?
Node

  • Student
  • Mark
  • Rank

Relations

  • HAS_MARK with properties [TestName, Subject ]
  • RECEIVED_RANK with properties [TestName]

With this model , one query by keeping filter on TestName and/or Subject

- get marks for test and/or subject for individual or all students
- get average marks in test and/or subject for all students etc

There are couple of ways you could do this, I would create these 3 nodes instead:
- student
- test
- subject

Then I would add a TOOK relationship between students and tests, with properties for when they took the test and the mark received (I would actually create 2 relationships, one for when the student took the test, and another for the mark received, but you get the idea). Simple example arrows.app file here:

The rank could be calculated at query time or after every test is taken to set a rank property on the student node. Comments to this other thread discuss ways of implementing scoring that might be insightful.