Showing results for 
Search instead for 
Did you mean: 

Head's Up! Site migration is underway. Pause, resolving how to handle anonymous content

Use Neo4j for sheet music library for concert band



I'm the librarian for our concert band (40 musicians), and currently use a spreadsheet to record the band's sheet music (comprising printed + digital, approx. 1,000 pieces, each holding approx. 60 parts, and multiple copies for most parts), including which sheet music is currently in use, i.e. which parts are in the rehearsal pads for the different band members, and more. I'm using Excel as it's easy to use and accessible, and have avoided going down the route of setting up a relational DB - as I can see the latter approach would very quickly end up with me spending all my time "developing" the database (and I'm just a librarian, not a DBA!) I was wondering whether this kind of use case would perhaps be more suited to Neo4j, and if so, where do I start?! One really handy feature of the spreadsheet approach is that I can easily generate nicely formatted printable reports via pivot tables.

Each row in my spreadsheet is for a specific part (e.g. "alto saxophone 2") for a specific piece of music (e.g. "Satchmo!, Louis Armstrong, arr. Ted Ricketts, pub. Hal Leonard, no. 04001911"), and holds details about the location of the sheet music, both as hard copy as well as digitally, when performed/due to be performed, purchase details (where & when bought, cost), etc. There is a lot of data duplication because in each row I'm repeating all the information for the piece.

In my spreadsheet each row holds the following details:

  • ID
  • Title, subtitle, sections
  • Composer, arranger, transcriber,
  • Category, keywords
  • Publisher, publisher's reference
  • Purchase details (where, when, owner)
  • Storage location (box no., digital location, whether from scan)
  • Part (band section - brass/woodwind/percussion/etc., instrument name, instrument instance, clef - bass/treble/other, etc.)
  • Rehearsal pad (no. of the rehearsal pad in which the part has been placed, for current use)

Many thanks for any pointers / help!

Kind regards,



Graph Steward

Hello Stefan,

Welcome to the community.
Although I did not get much about your requirement because I do not have any domain knowledge, however if you provide more details on the requirement and example spreadsheet I can try my best to help you.

Many thanks. I'll produce a sanitised version and try to post that.

Node Clone

With all the different instrument parts, I'd say this is a good use case for graph. I'd start with a schema along these lines:

Your two main labels would be 'Music piece' and 'Instrument Part' (I trust you can come up with something more appropriate, these seem kinda wordy). The 'Music piece' nodes would have all the information about the song itself. Then the 'Instrument Part' would hold information about a specific instrument/part. All of the parts would then be connected to the song they belong to.

You could have a secondary label on whether the song is in use. Or which parts are currently active. I'm not quite clear on your needs for what's active/in use. The labels would make those nodes searchable for the tables you generate.

You can replicate the pivot table information, but you'll need to learn Cypher to pull the data you're interested in. It's very similar to SQL if you're familiar with that. I found the Cypher Manual the most helpful reference for learning Cypher and the small gotchas (like how rows are counted when grouping).

Nodes 2022
NODES 2022, Neo4j Online Education Summit

All the sessions of the conference are now available online