Assuming that the scores you're talking about are how well a student did on a particular concept, it seems like storing that score in either the student node or the concept node is inappropriate. You should store it in a relation between the two. Let's say you're quizzing a student on calculus limits. I'd probably do it like this:
(s:Student {name: "Joe"})-[:learned { score: 100 }]->(c:Concept {name: "limits"})
You probably wouldn't put the score in Student
or in Concept
.
Data modeling wise, think about the "nouns" in your domain (here they are things like student and concept). Then think about the relationships between them (students learn concepts). Don't over-cram the nodes, but use properties on relationships too to assert metadata about those relationships. How well did a student learn a concept? That's a score
attribute (or similar) on the relationship, not on the concept.
Also, I don't know how big your graph is going to be, but I probably wouldn't store a bunch of independent graphs. It's all just one huge graph, and then each student can have a "subgraph" which corresponds to a particular query. Splitting the data out into separate storage creates maintenance and refresh nightmares for you. I would only do that if you have really solid evidence that you can't make performance work as one big graph (I'm betting you can make it work). Imagine a database with a million students and a million concepts; you'll always be able to generate each student's subgraph on the fly:
MATCH (s:Student {name:"Joe"})-[l:learned]->(c:Concept)
RETURN s, l, c;
If you've ever used a relational database, you can think of this as a "view". The whole database is still the database, but using queries like this you can build customized views of the database that are tailored to individuals (in this case Joe). This buys you all of the advantages of centralizing the data administrations, modeling, storage, updates, and yet each user can see it however they like it, and can ignore 99% of the database if that's appropriate.
If you use appropriate labels and indexes, this should perform quite well; traversing relationships like this is in the dead center of the sweet spot of what neo4j is good at.